UVC 红外相机初始化流程
概述
本文档基于原始数据分析Windows Hello红外相机的UVC初始化流程。
原始数据
intf: 0 unit: 8 cs: 9 req: "85" data: "0400"
intf: 0 unit: 8 cs: 9 req: "86" data: "03"
intf: 0 unit: 8 cs: 9 req: "82" data: "00000000"
intf: 0 unit: 8 cs: 9 req: "83" data: "01000000"
intf: 0 unit: 8 cs: 9 req: "87" data: "00000000"
intf: 0 unit: 8 cs: 9 req: "84" data: "01000000"
intf: 0 unit: 8 cs: 9 req: "1" data: "00000000"
intf: 2 unit: 14 cs: 6 req: "85" data: "0900"
intf: 2 unit: 14 cs: 6 req: "86" data: "03"
intf: 2 unit: 14 cs: 6 req: "82" data: "00"
intf: 2 unit: 14 cs: 6 req: "83" data: "010303000000000000"
intf: 2 unit: 14 cs: 6 req: "87" data: "010301000000000000"
intf: 2 unit: 14 cs: 6 req: "84" data: "00"
intf: 2 unit: 14 cs: 6 req: "1" data: "010301000000000000"
intf: 2 unit: 14 cs: 9 req: "85" data: "0400"
intf: 2 unit: 14 cs: 9 req: "86" data: "03"
intf: 2 unit: 14 cs: 9 req: "82" data: "00000000"
intf: 2 unit: 14 cs: 9 req: "83" data: "01000000"
intf: 2 unit: 14 cs: 9 req: "87" data: "00000000"
intf: 2 unit: 14 cs: 9 req: "84" data: "01000000"
intf: 2 unit: 14 cs: 9 req: "1" data: "00000000"
intf: 2 unit: 14 cs: 6 req: "81" data: "010301000000000000"
数据重新分析
正确的请求类型映射
- req: "1" = SET_CUR (设置当前值)
- req: "81" = GET_CUR (获取当前值)
- req: "82" = GET_MIN (获取最小值)
- req: "83" = GET_MAX (获取最大值)
- req: "84" = GET_RES (获取分辨率)
- req: "85" = GET_LEN (获取数据长度)
- req: "86" = GET_INFO (获取控制信息)
- req: "87" = GET_DEF (获取默认值)
初始化流程详细分析
阶段1: 颜色相机MSXU_CONTROL_METADATA初始化 (intf:0, unit:8, cs:9)
| 步骤 | 请求类型 | 数据 | 说明 |
|---|---|---|---|
| 1 | GET_LEN (85) | "0400" | 获取数据长度(4字节) |
| 2 | GET_INFO (86) | "03" | 获取控制信息(可读写) |
| 3 | GET_MIN (82) | "00000000" | 获取最小值(0) |
| 4 | GET_MAX (83) | "01000000" | 获取最大值(1) |
| 5 | GET_DEF (87) | "00000000" | 获取默认值(0) |
| 6 | GET_RES (84) | "01000000" | 获取分辨率(1) |
| 7 | SET_CUR (1) | "00000000" | 设置当前值为0 |
阶段2: 红外相机MSXU_CONTROL_FACE_AUTHENTICATION初始化 (intf:2, unit:14, cs:6)
| 步骤 | 请求类型 | 数据 | 说明 |
|---|---|---|---|
| 8 | GET_LEN (85) | "0900" | 获取数据长度(9字节) |
| 9 | GET_INFO (86) | "03" | 获取控制信息(可读写) |
| 10 | GET_MIN (82) | "00" | 获取最小值(0) |
| 11 | GET_MAX (83) | "010303000000000000" | 获取最大值{1,3,3} |
| 12 | GET_DEF (87) | "010301000000000000" | 获取默认值{1,3,1} |
| 13 | GET_RES (84) | "00" | 获取分辨率(0) |
| 14 | SET_CUR (1) | "010301000000000000" | 设置当前值为{1,3,1} |
阶段3: 红外相机MSXU_CONTROL_METADATA初始化 (intf:2, unit:14, cs:9)
| 步骤 | 请求类型 | 数据 | 说明 |
|---|---|---|---|
| 15 | GET_LEN (85) | "0400" | 获取数据长度(4字节) |
| 16 | GET_INFO (86) | "03" | 获取控制信息(可读写) |
| 17 | GET_MIN (82) | "00000000" | 获取最小值(0) |
| 18 | GET_MAX (83) | "01000000" | 获取最大值(1) |
| 19 | GET_DEF (87) | "00000000" | 获取默认值(0) |
| 20 | GET_RES (84) | "01000000" | 获取分辨率(1) |
| 21 | SET_CUR (1) | "00000000" | 设置当前值为0 |
阶段4: 获取人脸认证当前状态 (intf:2, unit:14, cs:6)
| 步骤 | 请求类型 | 数据 | 说明 |
|---|---|---|---|
| 22 | GET_CUR (81) | "010301000000000000" | 获取当前值{1,3,1} |