c->bFunctionSubClass,
84 assoc_desc->bFunctionProtocol,
85 assoc_desc->iFunction);
86
87 for (j = 0; j < intf->num_altsetting; j++)
88 {
89 interface = &intf->altsetting[j].desc; //第j个设置的描述符 接口描述符
90 printk(" Interface Descriptor altsetting %d:\n"
91 " bLength %5u\n"
92 " bDescriptorType %5u\n"
93 " bInterfaceNumber %5u\n"
94 " bAlternateSetting %5u\n"
95 " bNumEndpoints %5u\n"
96 " bInterfaceClass %5u\n"
97 " bInterfaceSubClass %5u\n"
98 " bInterfaceProtocol %5u\n"
99 " iInterface %5u\n",
100 j,
101 interface->bLength, interface->bDescriptorType, interface->bInterfaceNumber,
102 interface->bAlternateSetting, interface->bNumEndpoints, interface->bInterfaceClass,
103 interface->bInterfaceSubClass, interface->bInterfaceProtocol,
104 interface->iInterface);
105 /* 打印端点描述符 */
106 for (m = 0; m < interface->bNumEndpoints; m++)
107 {
108 endpoint = &intf->altsetting[j].endpoint[m].desc;
109 dump_endpoint(endpoint);
110 }
111
112 }
113 /*自定义描述符*/ 114 buffer = intf->cur_altsetting->extra;
115 buflen = intf->cur_altsetting->extralen;
116 printk("extra buffer of interface %d:\n", cnt-1);
117 k = 0;
118 desc_cnt = 0;
119 while (k < buflen)
120 {
121 desc_len = buffer[k];
122 printk("extra desc %d: ", desc_cnt);
123 for (l = 0; l < desc_len; l++, k++)
124 {
125 printk("%02x ", buffer[k]);
126 }
127 desc_cnt++;
128 printk("\n");
129 }
130 //模拟lsusb打印内核usb摄像头信息
131 interface = &intf->cur_altsetting->desc;
132 if ((buffer[1] == USB_DT_CS_INTERFACE) && (interface->bInterfaceSubClass == 1))
133 {
134 parse_videocontrol_interface(intf, buffer, buflen);
135 }
136 if ((buffer[1] == USB_DT_CS_INTERFACE) && (interface->bInterfaceSubClass == 2))
137 {
138 parse_videostreaming_interface(intf, buffer, buflen);
139 }
140
141 }
142
143
144 return 0;
145 }
分析:
1. VideoControl Interface的自定义描述符:
[318044.582155] extra buffer of interface 0:
[318044.582156] extra desc 0: 0d 24 01 00 01 4d 00 80 c3 c9 01 01 01
[318044.582161] extra desc 1: 12 24 02 01 01 02 00 00 00 00 00 00 00 00 03 0e 00 00
[318044.582166] extra desc 2: 09 24 03 02 01 01 00 04 00
[318044.582170] extra desc 3: 0b 24 05 03 01 00 00 02 7f 14 00
[318044.582174] extra desc 4: 1a 24 06 04 ad cc b1 c2 f6 ab b8 48 8e 37 32 d4 f3 a3 fe ec 08 01 03 01 3f 00
解析:
extra buffer of interface 0:
extra desc 0: 0d 24
01 00 01 4d 00 80 c3 c9 01 01 01
VC_HEADER
extra desc 1: 12 24
02 01 01 02 00 00 00 00 00 00 00 00 03 0e 00 00
VC_INPUT_TERMINAL ID
extra desc 2: 09 24
03 02 01 01 00 0 |