Hi, Muthu M <muthu.lnx@xxxxxxxxx> writes: > Hi Felipe, > > Thanks for your inputs. > I have incorporated your comments and added few more validation. okay, thanks. Just avoid top-posting [1] [1] http://elinux.org/Netiquette > On Sat, Oct 10, 2015 at 9:11 PM, Felipe Balbi <balbi@xxxxxx> wrote: >> >> Hi, >> >> Muthu M <muthu.lnx@xxxxxxxxx> writes: >>> Added support for Billboard Capability descriptor as per Universal >>> Serial Bus Device Class Definition for Billboard Devices Revision 1.1 >>> >>> Signed-off-by: Muthu M <muthu.lnx@xxxxxxxxx> >> >> I didn't confirm with the billboard class to make sure all details are >> correct (will do that on Monday, hopefully), but great work :-) A few >> minor nits below >> >>> --- >>> lsusb.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 82 insertions(+) >>> >>> diff --git a/lsusb.c b/lsusb.c >>> index 774caed..dae7c6c 100644 >>> --- a/lsusb.c >>> +++ b/lsusb.c >>> @@ -70,6 +70,7 @@ >>> #define USB_DC_SUPERSPEED 0x03 >>> #define USB_DC_CONTAINER_ID 0x04 >>> #define USB_DC_SUPERSPEEDPLUS 0x0a >>> +#define USB_DC_BILLBOARD 0x0d >>> >>> /* Conventional codes for class-specific descriptors. The convention is >>> * defined in the USB "Common Class" Spec (3.11). Individual class specs >>> @@ -118,6 +119,22 @@ static const char * const encryption_type[] = { >>> "RSA_1", >>> "RESERVED" >>> }; >> >> add a blank line here >> >>> +static const char * const vconn_power[] = { >>> + "1W", >>> + "1.5W", >>> + "2W", >>> + "3W", >>> + "4W", >>> + "5W", >>> + "6W", >>> + "reserved" >>> +}; >> >> and here >> >>> +static const char * const alt_mode_state[] = { >>> + "Unspecified Error", >>> + "Alternate Mode configuration not attempted", >>> + "Alternate Mode configuration attempted but unsuccessful", >>> + "Alternate Mode configuration successful" >>> +}; >>> >>> static void dump_interface(libusb_device_handle *dev, const struct libusb_interface *interface); >>> static void dump_endpoint(libusb_device_handle *dev, const struct libusb_interface_descriptor *interface, const struct libusb_endpoint_descriptor *endpoint); >>> @@ -3771,6 +3788,68 @@ static void dump_container_id_device_capability_desc(unsigned char *buf) >>> get_guid(&buf[4])); >>> } >>> >>> +static void dump_billboard_device_capability_desc(libusb_device_handle *dev, unsigned char *buf) >> >> most other dump functions define a prototype above, you might wanna do >> the same to keep consistency. >> >>> +{ >>> + char *url, *alt_mode_str; >>> + int w_vconn_power, alt_mode, i, svid, state; >>> + const char *vconn; >>> + unsigned char *bmConfigured; >>> + >>> + if (buf[0] < 40) { >>> + printf(" Bad Billboard Capability descriptor.\n"); >> >> this should probably be printed to stderr. >> >>> + return; >>> + } >> >> another blank line here >> >>> + url = get_dev_string(dev, buf[3]); >>> + w_vconn_power = buf[6] | (buf[7] << 8); >>> + vconn = (w_vconn_power & (1 << 15)) ? "VCONN power not required" : vconn_power[w_vconn_power & 0x7]; >>> + printf(" Billboard Capability:\n" >>> + " bLength %5u\n" >>> + " bDescriptorType %5u\n" >>> + " bDevCapabilityType %5u\n" >>> + " iAddtionalInfoURL %5u %s\n" >>> + " bNumberOfAlternateModes %5u\n" >>> + " bPreferredAlternateMode %5u\n" >>> + " VCONN Power %5u %s\n", >>> + buf[0], buf[1], buf[2], >>> + buf[3], url, >>> + buf[4], buf[5], >>> + w_vconn_power, vconn); >> >> add a blank line here >> >>> + bmConfigured = &buf[8]; >> >> and here >> >>> + printf( >>> + " bmConfigured " >>> + ); >> >> and here >> >>> + dump_bytes(bmConfigured, 32); >> >> and here >> >>> + printf( >>> + " bcdVersion %2x.%02x\n" >>> + " bAdditionalFailureInfo %5u\n" >>> + " bReserved %5u\n", >>> + (buf[41] == 0) ? 1 : buf[41], buf[40], >>> + buf[42], buf[43]); >>> + >>> + printf( >>> + " Alternate Modes supported by Device Container:\n" >>> + ); >>> + i = 44; /* Alternate mode 0 starts at index 44 */ >>> + for (alt_mode = 0; alt_mode < buf[4]; alt_mode++) { >>> + svid = buf[i] | (buf[i+1] << 8); >>> + alt_mode_str = get_dev_string(dev, buf[i+3]); >>> + state = ((bmConfigured[alt_mode >> 2]) >> ((alt_mode & 0x3) << 1)) & 0x3; >>> + printf( >>> + " Alternate Mode %d : %s\n" >>> + " wSVID[%d] 0x%04X\n" >>> + " bAlternateMode[%d] %5u\n" >>> + " iAlternateModeString[%d] %5u %s\n", >>> + alt_mode, alt_mode_state[state], >>> + alt_mode, svid, >>> + alt_mode, buf[i+2], >>> + alt_mode, buf[i+3], alt_mode_str); >>> + free(alt_mode_str); >>> + i += 4; >>> + } >>> + >>> + free (url); >>> +} >>> + >>> static void dump_bos_descriptor(libusb_device_handle *fd) >>> { >>> /* Total length of BOS descriptors varies. >>> @@ -3849,6 +3928,9 @@ static void dump_bos_descriptor(libusb_device_handle *fd) >>> case USB_DC_CONTAINER_ID: >>> dump_container_id_device_capability_desc(buf); >>> break; >>> + case USB_DC_BILLBOARD: >>> + dump_billboard_device_capability_desc(fd, buf); >>> + break; >>> default: >>> printf(" ** UNRECOGNIZED: "); >>> dump_bytes(buf, buf[0]); >>> -- >>> 1.8.3.2 >>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-usb" in >>> the body of a message to majordomo@xxxxxxxxxxxxxxx >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >> -- >> balbi -- balbi
Attachment:
signature.asc
Description: PGP signature