UVC红外相机的枚举过程及BOS数据包解析
2023-03-02
354
3
UVC红外相机和普通的相机在枚举过程中其实并特别的区别。可能惟一的区别就是一般的普通彩色相机并没有获取到BOS描述符,而红外相机必定含有BOS描述符,并且由于BOS描述符的引入,使得基于UVC规范的基础上实现了红外相机。
通过上图可以看到,除过BOS之外,其它的和普通的UVC彩色相机的枚举过程是一致的。https://www.usbzh.com/article/detail-559.html
获取BOS描述符
BOS描述符的描述符类型为0x0f,使用GetDescriptor标准请求。
80 06 00 0f 00 00 ff 00
数据分析如下:
0x80, // bmRequestType: Dir: D2H, Type: Standard, Recipient: Device
0x06, // bRequest (Get Descriptor)
0x00, // wValue[0:7] Desc Index: 0
0x0F, // wValue[8:15] Desc Type: (Unknown)
0x00, 0x00, // wIndex Language ID: 0x00
0xFF, 0x00, // wLength = 255
05 // Descriptor size
0F // Device descriptor type BOS
21 00 // Length 0x21 (33) this and all sub descriptors
01 // Number of device capability descriptors
1C // 28 bytes bLength
10 // DEVICE CAPABILITY(0x10)
05 // bDevCapabilityType PLATFORM
00 // bReserved
DF 60 DD D8 89 45 C7 4C 9C D2 65 9D 9E 64 8A 9F //GUID
00 00 00 0A // dwWindowsVersion for Windows 10 and later
A0 03 // wLength
5F // bMS_VendorCode
00 // bAltEnumCmd 0
这是在微软提供的一个示例上修改的数据,其原始内容如下:
#include <usbspec.h>
const BYTE USBVideoBOSDescriptor[0x21] =
{
/* BOS Descriptor */
0x05, // Descriptor size
USB_BOS_DESCRIPTOR_TYPE, // Device descriptor type BOS
0x21, 0x00, // Length 0x21 (33) this and all sub descriptors
0x01, // Number of device capability descriptors
/* Platform Device Capability Descriptor */
0x1C, // 28 bytes bLength
USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE, // Platform Descriptor type
USB_DEVICE_CAPABILITY_PLATFORM, // bDevCapabilityType PLATFORM
0, // bReserved
0xDF, 0x60, 0xDD, 0xD8, // PlatformCapabilityUUID
0x89, 0x45, // MS OS2.0 Descriptor
0xC7, 0x4C, // D8DD60DF-4589-4CC7-9CD2-659D9E648A9F
0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F,
// CapabilityData
0x00, 0x00, 0x00, 0x0A, // dwWindowsVersion for Windows 10 and later
0xC8, 0x02, // wLength 0x2C8 (712)
0x01, // bMS_VendorCode - any value. e.g. 0x01
0x00 // bAltEnumCmd 0
};
当主机获取取BOS描述符并解析出其平台描述符,平台描述符中的GUID分类为:
0xDF, 0x60, 0xDD, 0xD8, // PlatformCapabilityUUID
0x89, 0x45, // MS OS2.0 Descriptor
0xC7, 0x4C, // D8DD60DF-4589-4CC7-9CD2-659D9E648A9F
0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F,
// CapabilityData
故识别为Windows平台,所以主机发起厂商控制请求来检索 MS OS 2.0 描述符,其命令如下:
bmRequestType | BRequest | wValue | WIndex | wLength | 数据 |
---|---|---|---|---|---|
0x0c | bMS_VendorCode | 0x00 | 0x07 | Length | MS OS 2.0 描述符集 |
0xC0, // bmRequestType: Dir: D2H, Type: Vendor, Recipient: Device
0x5F, // bRequest
0x00, 0x00, // wValue[0:15] = 0x00
0x07, 0x00, // wIndex = 0x07
0xA0, 0x03, // wLength = 928
// 8 bytes
注意这里的bMS_VendorCode=0x5f,BOS描述符中的平台描述符中的bMS_VendorCode字段指定。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936