UVC 再议特定类请求
通过特定请求的支持 GET_INFO可以获取设备支持的特定类请求。
当然在UVC规范中,有些特定类请求是可选择的,有些是必须的,这种情况因特定类请求的使用环境不同而定。
我们知道,特定类请求一般包括:
名称 | 值 | 说明 |
---|---|---|
RC_UNDEFINED | 0x00 | 未定义 |
SET_CUR | 0x01 | 设置属性 |
GET_CUR | 0x81 | 获取当前属性 |
GET_MIN | 0x82 | 获取最小设置属性 |
GET_MAX | 0x83 | 获取最大设置属性 |
GET_RES | 0x84 | 获取分辨率属性 |
GET_LEN | 0x85 | 获取数据长度属性 |
GET_INF | 0x86 | 获取设备支持的特定类请求属性 |
GET_DEF | 0x87 | 获取默认属性 |
这些特定类请求,应首选关注的是这个类。这个类说明的是一类的请求,而不是特定的某种具体的请求。
特定类请求其实是UVC规范为了实现对各个TermId,UnityId、接口或端点的控制,将其操作抽像为一类操作,这类操作就是特定类请求,如获取处理单元关于视频参数的信息时,可以通过GET_CUR,而设置其最大值是通过SET_CUR.所以这些特定类请求的产生就有了目标,这个目标就是wIndex指定的ID,通过bmRequestType的D4~D0位标识是发给那类目标的(因为不同类型的ID可能相同),而这个操作到达某个目标内部时,有可能区分多个操作,那么这些操作就是通过wValue来区分的。所以后续我们可以看到,发向不同的目标,其具有不同的请求选择子CS。
在使用和学习UVC特定类请求时,除了关注UVC特定类请求最基本的概念外,应着重学习和查看各个实例,终端或者接口提供相关的选择子CS,其不同的选择子代表了UVC操作的相关功能,应着重学习。
特定类请求在UVC规范中占据很大份量,可关乎者至少摄像头枚举成功后的相关操作,如打开摄像头,设置参数,抓图等相关的操作。如果说USB协议是帮助对UVC的开发奠定了最基本的基础,UVC的设备描述符是帮助我们实现了UVC摄像头的枚举,那么特定类请求如何使用UVC摄像头的操作。
一个UVC摄像头的功能丰富是由其所支持的特定类请求决定的,当然这里特定类请求的受体又是由其视频控制接口VC和视频流接口VS中的接口、端口,Unity,Termial等UVC拓扑结构的决定的。