UVC 处理单元特定类请求示例
2020-10-29
2412
1
笔者手中有一UVC摄像头,其处理单元描述符bUnitID为2,其处理单元描述符内容如下:
-------- Video Control Processing Unit Descriptor -----------------------
bLength : 0x0D (13 bytes)
bDescriptorType : 0x24 (Video Control Interface)
bDescriptorSubtype : 0x05 (Processing Unit)
bUnitID : 0x02
bSourceID : 0x01
wMaxMultiplier : 0x4000 (163.84x Zoom)
bControlSize : 0x03
bmControls : 0x0F, 0x00, 0x00
D0 : 1 yes - Brightness
D1 : 1 yes - Contrast
D2 : 1 yes - Hue
D3 : 1 yes - Saturation
D4 : 0 no - Sharpness
D5 : 0 no - Gamma
D6 : 0 no - White Balance Temperature
D7 : 0 no - White Balance Component
D8 : 0 no - Backlight Compensation
D9 : 0 no - Gain
D10 : 0 no - Power Line Frequency
D11 : 0 no - Hue, Auto
D12 : 0 no - White Balance Temperature, Auto
D13 : 0 no - White Balance Component, Auto
D14 : 0 no - Digital Multiplier
D15 : 0 no - Digital Multiplier Limit
D16 : 0 no - Analog Video Standard
D17 : 0 no - Analog Video Lock Status
D18 : 0 no - Contrast, Auto
D19 : 0 no - Reserved
D20 : 0 no - Reserved
D21 : 0 no - Reserved
D22 : 0 no - Reserved
D23 : 0 no - Reserved
iProcessing : 0x00
bmVideoStandards : 0x00
D0 : 0 no - None
D1 : 0 no - NTSC - 525/60
D2 : 0 no - PAL - 625/50
D3 : 0 no - SECAM - 625/50
D4 : 0 no - NTSC - 625/50
D5 : 0 no - PAL - 525/60
D6 : 0 no - Reserved
D7 : 0 no - Reserved
Data (HexDump) : 0D 24 05 02 01 00 40 03 0F 00 00 00 00 .$....@......
可以看到,其支持的控制。
- D0:亮度
- D1:对比度
- D2:色调
- D3:饱和
通过BusHound抓包在摄像头初始化后,总线做了以下特定类请求。
对照处理单元控制请求一节,这里我们按选择子进行分类,分别为:
- 0x02 : PU_BRIGHTNESS_CONTROL 亮度控制
- 0x03 : PU_CONTRAST_CONTROL 对比度控制
- 0x06 : PU_HUE_CONTROL 色调控制
- 0x07 : PU_SATURATION_CONTROL 饱和度控制
可以看到,产生的特定类请求与处理单元描述符请求中所支持的控制一致。
说明:
通过特定类请求一节可知:
//0x02 : PU_BRIGHTNESS_CONTROL 亮度控制
34.0 CTL a1 86 00 02 00 02 01 00 GET INFO
34.0 IN 03 .
34.0 CTL a1 82 00 02 00 02 02 00 GET MIN
34.0 IN 9c ff ..
34.0 CTL a1 83 00 02 00 02 02 00 GET MAX
34.0 IN 64 00 d.
34.0 CTL a1 84 00 02 00 02 02 00 GET RES
34.0 IN 01 00 ..
34.0 CTL a1 87 00 02 00 02 02 00 GET DEF
34.0 IN 00 00 ..
//0x03 :PU_CONTRAST_CONTROL 对比度控制
34.0 CTL a1 86 00 03 00 02 01 00 GET INFO
34.0 IN 03 .
34.0 CTL a1 82 00 03 00 02 02 00 GET MIN
34.0 IN 32 00 2.
34.0 CTL a1 83 00 03 00 02 02 00 GET MAX
34.0 IN c8 00 ..
34.0 CTL a1 84 00 03 00 02 02 00 GET RES
34.0 IN 01 00 ..
34.0 CTL a1 87 00 03 00 02 02 00 GET DEF
34.0 IN 64 00 d.
//0x06 : PU_HUE_CONTROL 色调控制
34.0 CTL a1 86 00 06 00 02 01 00 GET INFO
34.0 IN 03 .
34.0 CTL a1 82 00 06 00 02 02 00 GET MIN
34.0 IN a6 ff ..
34.0 CTL a1 83 00 06 00 02 02 00 GET MAX
34.0 IN 5a 00 Z.
34.0 CTL a1 84 00 06 00 02 02 00 GET RES
34.0 IN 01 00 ..
34.0 CTL a1 87 00 06 00 02 02 00 GET DEF
34.0 IN 00 00 ..
//0x07 : PU_SATURATION_CONTROL 饱和度控制
34.0 CTL a1 86 00 07 00 02 01 00 GET INFO
34.0 IN 03 .
34.0 CTL a1 82 00 07 00 02 02 00 GET MIN
34.0 IN 00 00 ..
34.0 CTL a1 83 00 07 00 02 02 00 GET MAX
34.0 IN c8 00 ..
34.0 CTL a1 84 00 07 00 02 02 00 GET RES
34.0 IN 01 00 ..
34.0 CTL a1 87 00 07 00 02 02 00 GET DEF
34.0 IN 64 00 d.
通过特定类请求一节可知,当bmRequestType=0xa1时,表示为获取数据,其目标为实体ID(高字节)或接口(低字节)。
GET_INFO 请求
对于处理单元的4种选择子,其第一个操作为GET_INFO请求,其数据度度为1字节,返回的值为0x03。
对照GET_INFO一节,其D0=1,D1=1,其余位为0,所以其支持Supports GET value request和Supports SET value requests,即GET_CUR和SET_CUR请求。
亮度控制
- 最小值为:9c ff,-100
- 最大值为:64 00,+100
- 分辨率为:01 00,为0
- 默认值为:00 00 为0
对比度控制
- 最小值为:32 00,为50
- 最大值为:c8 00,为-56
- 分辨率为: 01 00 ,为1
- 默认值为:64 00,为100
色调控制
- 最小值为:a6 ff:,为-90
- 最大值为:5a 00 :为90
- 分辨率为: 01 00 ,为1
- 默认值为:00 00,为0
饱和度控制
- 最小值为:00 00 ,为0
- 最大值为:c8 00,为200
- 分辨率为:00 ,为0
- 默认值为:64 00,为100
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936