在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次方。
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
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 : 时间间隔
高速设备
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