UVC 基础学习(6):端点描述符介绍

简介: 今天带大家认识一下UVC端点描述符信息。

在USB规范中,端点描述符用于描述设备的端点信息。


UVC 端点描述符 分为两大类:


  • VideoControl Endpoint Descriptor:视频控制接口端点描述符。


  • VideoStream Endpoint Descriptor:视频流接口端点描述符。


VC Endpoint Descriptor


视频控制接口(VC)的端点描述符可以存在,也可以不存。默认使用端点0进行控制传输

如果存在,必须是中断类型的,且必须为输入端点。


Standard VC Interrupt Enpoint Descriptor


  • bLength : 描述符大小.固定为0x07.


  • bDescriptorType : 接口描述符类型.固定为0x05.


  • bEndpointType : USB设备的端点地址.Bit7为方向位,必须为1,用于标识为输入端点;BIT4-6为0,BIT0-3表示端点ID


  • bmAttributes : 端点属性.BIT0-1必须为11,标识为中断端点;BIT2-3对于同步/等时传输有效,这里必须为00;


  • wMaxPacketSize:本端点接收或发送的最大信息包大小.


  • bInterval : 时间间隔,对于全速为1ms为单位;对于高速为2的N次方。


image.png


static struct usb_endpoint_descriptor uvc_control_ep = {
 .bLength  = USB_DT_ENDPOINT_SIZE,
 .bDescriptorType = USB_DT_ENDPOINT,
 .bEndpointAddress = USB_DIR_IN,
 .bmAttributes  = USB_ENDPOINT_XFER_INT,
 .wMaxPacketSize  = cpu_to_le16(UVC_STATUS_MAX_PACKET_SIZE),
 .bInterval  = 8,
};


Class-Specific Standard VC Interrupt Enpoint Descriptor


  • bLength : 描述符大小.固定为0x05.


  • bDescriptorType : 描述符类型.固定为USB_DT_CS_ENDPOINT


  • bDescriptorSubType : 描述符子类。固定为UVC_EP_INTERRUPT


  • wMaxTransferSize:最大传输size


image.png


static struct uvc_control_endpoint_descriptor uvc_control_cs_ep = {
 .bLength  = UVC_DT_CONTROL_ENDPOINT_SIZE,
 .bDescriptorType = USB_DT_CS_ENDPOINT,
 .bDescriptorSubType = UVC_EP_INTERRUPT,
 .wMaxTransferSize = cpu_to_le16(UVC_STATUS_MAX_PACKET_SIZE),
};


VS Endpoint Descriptor


VS 中的端点描述符用于传输视频数据。VS Data Endpoint 可以是同步传输(iso)或者批量传输(bulk)


Standard VS Isochronous Video Data Endpoint Descriptor


  • bLength : 描述符大小.固定为0x07.


  • bDescriptorType : 接口描述符类型.固定为0x05.


  • bEndpointType : USB设备的端点地址.Bit7为方向位,必须为1,用于标识为输入端点;BIT4-6为0,BIT0-3表示端点ID


  • bmAttributes : 端点属性.BIT0-1必须为01,标识为等时传输;BIT2-3:


  • 00:无同步


  • 01:异步(UVC规范上设置为异步)


  • 10:适配


  • 11:同步


  • wMaxPacketSize:本端点接收或发送的最大信息包大小.


  • bInterval : 时间间隔


image.png


高速设备


static struct usb_endpoint_descriptor uvc_hs_streaming_ep = {
 .bLength  = USB_DT_ENDPOINT_SIZE,
 .bDescriptorType = USB_DT_ENDPOINT,
 .bEndpointAddress = USB_DIR_IN,
 .bmAttributes  = USB_ENDPOINT_SYNC_ASYNC
    | USB_ENDPOINT_XFER_ISOC,
 /* The wMaxPacketSize and bInterval values will be initialized from
  * module parameters.
  */
};


Standard VS Bulk Video Data Endpoint Descriptor


当为批量传输时,和普通的批量端点描述符一致。这里需要注意bmAttributes设置


参考


《UVC 1.5 Class specification.pdf》


《USB_Video_Example 1.5.pdf》


 www.usbzh.com

相关文章
|
Ubuntu Linux 编译器
字符驱动设备原理及其相关函数(一)
字符驱动设备原理及其相关函数(一)
114 0
|
4月前
|
Linux
【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析
【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析
|
5月前
|
算法 数据处理 C++
Franca IDL与CommonAPI C++ D-Bus实战教程:方法、信号和属性传递详解
Franca IDL与CommonAPI C++ D-Bus实战教程:方法、信号和属性传递详解
136 0
|
内存技术
USB摄像头描述符参数获取和来源分析(下)
USB摄像头描述符参数获取和来源分析(下)
67 0
|
10月前
|
存储 Windows
4.6 Windows驱动开发:内核遍历进程VAD结构体
在上一篇文章`《内核中实现Dump进程转储》`中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍`VAD`结构,该结构的全程是`Virtual Address Descriptor`即`虚拟地址描述符`,VAD是一个`AVL`自`平衡二叉树`,树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个`VAD`节点,由一个`MMVAD`结构完整描述。
111 0
4.6 Windows驱动开发:内核遍历进程VAD结构体
|
10月前
|
Java
类型描述符
类型描述符
56 1
|
监控 Linux
uvc摄像头驱动uvc设备的注册分析
uvc摄像头驱动uvc设备的注册分析
370 0
|
编解码
USB摄像头描述符参数获取和来源分析(上)
USB摄像头描述符参数获取和来源分析
123 0
|
Linux
字符驱动设备原理及其相关函数(二)
字符驱动设备原理及其相关函数(二)
57 0
|
索引
UVC 基础学习(3):基础描述符介绍
UVC 基础学习(3):基础描述符介绍
547 0