UVC红外(IR)摄像头实例分析
+ -

UVC红外相机的枚举过程及BOS数据包解析

2023-03-02 354 3

UVC红外相机和普通的相机在枚举过程中其实并特别的区别。可能惟一的区别就是一般的普通彩色相机并没有获取到BOS描述符,而红外相机必定含有BOS描述符,并且由于BOS描述符的引入,使得基于UVC规范的基础上实现了红外相机。
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

设备端通过IN事务返回的数据如下:

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   

0 篇笔记 写笔记

USB3.2超高速 平台描述符
平台描述符用于标识平台或操作系统定义的128位UUID值,使用该值可以标识特定平台或操作系统的唯一设备功能。平台描述符可以包含与该功能特性能力相关联的一个或多个字节的数据。平台描述符的定义如下:struct _PLATFORM_DESCRIPTOR{ BYTE bLength; ......
USB3.2超高速 BOS描述符
USB3.2规范新增加了一个灵活且可扩展的框架,用于描述设备级功能特性。BOS(Binary Device Object Store)是与配置描述符类似的一个根描述符。使用该描述符,可以访问一系列相关描述符的基本描述符。和配置描述符一样,主机通过读取BOS描述符的wTotalLength字段中获......
使用微软系统描述符2.0制作免驱动自定义USB设备
本文作者XTOOLBOX,本站得到了作者本人的转载授权。前言在《使用微软系统描述符1.0制作免驱动自定义USB设备》一文中,介绍了如何使用1.0版本的系统描述符来制作免驱动设备,这里将介绍如何使用2.0版本的系统描述符来制作免驱动设备。无论是1.0还是2.0,都是为了让系统给设备安装WinUS......
UVC红外相机的枚举过程及BOS数据包解析
UVC红外相机和普通的相机在枚举过程中其实并特别的区别。可能惟一的区别就是一般的普通彩色相机并没有获取到BOS描述符,而红外相机必定含有BOS描述符,并且由于BOS描述符的引入,使得基于UVC规范的基础上实现了红外相机。通过上图可以看到,除过BOS之外,其它的和普通的UVC彩色相机的枚举过程是一致的......
UVC红外相机MS OS 2.0平台描述符
前一节在获取了BOS描述符之后,从其解析出平台描述符,故需要对主机发起厂商控制请求来获取 MS OS 2.0 描述符。MS OS 2.0 描述符集我括的内容如下:设置标头配置子集标头颜色相机函数子集标头传感器组 ID 的注册表值功能描述符传感器组名称的注册表值功能描述符用于启用静止映像捕获的注册......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!