USB里的端点
USB通信最基本的形式是通过端点(endpoint),USB端点只能往一个方向发送数据,从主机到设备称为输出端点,从设备到主机称为输入端点。端点可以看作是单向的通道。
内核中使用struct usb_host_endpoint 结构体来描述USB端点。而真正的端点信息则在struct usb_endpoint_descriptor的结构体中存储
1.struct usb_endpoint_descriptor {
2. __u8 bLength;
3. __u8 bDescriptorType;
4.
5. __u8 bEndpointAddress;
6. __u8 bmAttributes;
7. __le16 wMaxPacketSize;
8. __u8 bInterval;
9.
10. /* NOTE: these two are _only_ in audio endpoints. */
11. /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
12. __u8 bRefresh;
13. __u8 bSynchAddress;
14.}
bEndpointAddress:这个8位的值表示了特定端点的USB地址。它可以结合位掩码USB_DIR_OUT和USB_DIR_IN来表示数据的传送方向,表示该端点的数据是传向设备还是主机。
bmAttributes:这该是端点的类型。它可以结合位掩码USB_ENDPOINT_XFERTYPE_MASK来使用,以确定该端点的类型是USB_ENDPOINT_XFER_ISOC(等时端点)、USB_ENDPOINT_XFER_BULK(批量端点)还是USB_ENDPOINT_XFER_INT(中断端点)。
wMaxPacketSize