usb_endpoint_is_int_in():判断端点是否为中断in类型
函数原型:
- static inline int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd)
- {
- return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));
- }
- static inline int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd)
- {
- return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==USB_ENDPOINT_XFER_INT);
- }
端点描述符中bmAttributes的低两位用于标示端点传输类型,分为四种:
#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
#define USB_ENDPOINT_XFER_CONTROL 0 --控制传输
#define USB_ENDPOINT_XFER_ISOC 1 --等时传输
#define USB_ENDPOINT_XFER_BULK 2 --块传输
#define USB_ENDPOINT_XFER_INT 3 --中断传输
- static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
- {
- return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
- }
对于bEndpointAddress的最高位用于标示传输方向,以host定位,in只device to host ,而out指host to device。而低四位用于标示设备地址。所以每一个hub上最多
挂31个器件。
同时对于其他端点类型的检测类似,如检测端点是否为块in类型:usb_endpoint_is_bulk_in。
阅读(2388) | 评论(0) | 转发(0) |