LINUX&UVC视频控制描述符拓扑结构类型映射
2024-03-27
53
0
LINUX&UVC驱动在解析UVC设备配置描述符中的UVC控制接口描述符中的各个拓扑结构时,对找到的每一种拓扑结构,都会使用uvc_alloc_entity函数申请一个对象,然后使用函数list_add_tail挂入链表中。
list_add_tail(&term->list, &dev->entities);
这些拓扑结构涉及到的类型有:
- 扩展单元UVC_VC_EXTENSION_UNIT
- 输入终端UVC_VC_INPUT_TERMINAL,子类型为相机终端UVC_ITT_CAMERA或媒体传输输入UVC_ITT_MEDIA_TRANSPORT_INPUT
- 输出终端UVC_VC_OUTPUT_TERMINAL
- 选择单元UVC_VC_SELECTOR_UNIT
- 处理单元UVC_VC_PROCESSING_UNIT
当然这些类型的定义如下:
/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */
#define UVC_VC_DESCRIPTOR_UNDEFINED 0x00
#define UVC_VC_HEADER 0x01
#define UVC_VC_INPUT_TERMINAL 0x02
#define UVC_VC_OUTPUT_TERMINAL 0x03
#define UVC_VC_SELECTOR_UNIT 0x04
#define UVC_VC_PROCESSING_UNIT 0x05
#define UVC_VC_EXTENSION_UNIT 0x06
/* B.2. Input Terminal Types */
#define UVC_ITT_VENDOR_SPECIFIC 0x0200
#define UVC_ITT_CAMERA 0x0201
#define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202
但LINUX&UVC驱动时,对以上的和拓扑结构做了扩展。
#define UVC_TERM_INPUT 0x0000
#define UVC_TERM_OUTPUT 0x8000
扩展后的类型如下:
名称 | 原始 | 扩展之后 |
---|---|---|
扩展单元 | UVC_VC_EXTENSION_UNIT | UVC_VC_EXTENSION_UNIT |
相机终端 | UVC_ITT_CAMERA | UVC_ITT_CAMERA| UVC_TERM_INPUT |
媒体传输输出 | UVC_ITT_MEDIA_TRANSPORT_INPUT | UVC_ITT_MEDIA_TRANSPORT_INPUT | UVC_TERM_INPUT |
输出终端 | UVC_VC_OUTPUT_TERMINAL | UVC_VC_OUTPUT_TERMINAL| UVC_TERM_OUTPUT |
选择单元 | UVC_VC_SELECTOR_UNIT | UVC_VC_SELECTOR_UNIT |
处理单元 | UVC_VC_PROCESSING_UNIT | UVC_VC_PROCESSING_UNIT |
可以看到,只对输入和输出终端加了标识,使用最高bit15来标识是输入类型还是输出类型。
写完后,发现没啥用~