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

相关文章
|
11月前
|
Ubuntu Linux 编译器
字符驱动设备原理及其相关函数(一)
字符驱动设备原理及其相关函数(一)
83 0
|
11月前
|
内存技术
USB摄像头描述符参数获取和来源分析(下)
USB摄像头描述符参数获取和来源分析(下)
54 0
|
6月前
|
存储 Windows
4.6 Windows驱动开发:内核遍历进程VAD结构体
在上一篇文章`《内核中实现Dump进程转储》`中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍`VAD`结构,该结构的全程是`Virtual Address Descriptor`即`虚拟地址描述符`,VAD是一个`AVL`自`平衡二叉树`,树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个`VAD`节点,由一个`MMVAD`结构完整描述。
64 0
4.6 Windows驱动开发:内核遍历进程VAD结构体
|
11月前
|
Linux
字符驱动设备原理及其相关函数(二)
字符驱动设备原理及其相关函数(二)
41 0
|
11月前
|
编解码
USB摄像头描述符参数获取和来源分析(上)
USB摄像头描述符参数获取和来源分析
88 0
|
索引
UVC 基础学习(3):基础描述符介绍
UVC 基础学习(3):基础描述符介绍
452 0
|
索引
UVC 基础学习(4):VideoContrl Interface 及其描述符介绍
所有信息整理来源于UVC 官方spec 翻译理解及内核源码做参考
531 0
|
编解码 C++ 索引
UVC 基础学习(5):VideoStream Interface 描述符介绍
今天我们继续学习UVC的接口描述符:VideoStream 。 VideoStream 接口描述符是整个UVC设备最重要的组成之一,和VideoControl一样,其也包含标准接口和特殊类接口。
585 0
|
Python
x64dbg 实现插件Socket反向通信
编写一个带有socket通信功能的插件,x64dbg运行后,用户点击链接按钮可直接连接到外部的python中,python作为服务端,当x64dbg内部出现某个事件后,自动将消息推送到外部python脚本上,实现反向传参的目的。
148 0
x64dbg 实现插件Socket反向通信
【UCIe】FDI & RDI 接口信号释义
【UCIe】FDI & RDI 接口信号释义
941 0
【UCIe】FDI & RDI 接口信号释义