UVC摄像头怎么实现搭载私有协议?
UVC规范定义了很多特定类请求,这些特定类请求分别对应不同的UVC单元的操作,如对相机终端的PTZ操作,对处理单元的亮度,颜色,饱和度,色调,对比度关于图像显示的操作。
但是,有的时候我们需要对UVC摄像头的通讯协议进行扩展,通过上位机和UVC摄像头本身走我们专用的协议。
这个是需要用到UVC的扩展单元描述符和UVC的扩展单元的特定类的。
UVC 扩展单元描述符:扩展单元描述符允许硬件设计者定义任意一组控制接口,使类驱动程序可以在设备与供应商提供的主机软件之间进行通讯控制。
- 使用本站的UVC扩展单元调试工具进行调试:http://www.usbzh.com/article/detail-516.html
- 关于UVC的扩展单元详见:http://www.usbzh.com/article/detail-36.html
- 关于UVC的扩展单元的特定类请求可详见:http://www.usbzh.com/article/detail-87.html
- UVC摄像头扩单元功能的开发步骤是什么? http://www.usbzh.com/article/detail-270.html
在UVC规范中,其中有一个很大的部分就是UVC的特定类请求,这些请求都是发给指定的拓扑结构的,如相机终端描述符,处理单元。发给这些拓扑结构的会随身携带一些参数,如特定类请求的类型,如SET_CUR,GET_CUR等,还有用于描述功能的选择子,当然由于不同的选择子有不同的参数格式,这些对于特定的拓扑对构,特定的特定类请求,选择子都是UVC协议定好的,不可能变的。
虽然UVC规范已经定制了很完美很全的特定类请求了,但是总是不能满足所有人的请求。所以这时为了让用户走自己定义的特定类请求,可以通过一个叫做扩展单元的拓扑结构来实现。这样发向扩展单元的所有请求都被当作用户私有的,自定义的请求。所以为了实现UVC扩展单元的请求,这里有几个关键点必段要做到:
- UVC摄像头的描述符视频控制接口描述符中必须含有扩展单元描述符,扩展单元的描述符定义的结构是固定的,用户只需要按要求定义即可。
- UVC摄像头的固件中必须支持扩展单元的特定类请求。这个选择子一般从1到N.
- 在应用层通过扩展单元定义的GUID可以建立与扩展单元的链路通道,这样可以实现应用层与固件的通讯。
UINT8 bNumControls;
UINT8 bControlSize;
UINT8 bmControls[bControlSize];
UVC扩展单元里有以上几个参数,其中bNumControls代表支持多少个选择子,如我们设为10,那么选择子就有10个,选择子的ID是通过bControlSize和bmControls确定的。
bControlSize 表示选择子的位掩码的字个数。
bmControls中那位为1表示那个位的选择子有效。