Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26357
  • 博文数量: 9
  • 博客积分: 185
  • 博客等级: 入伍新兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-08 19:14
文章分类
文章存档

2013年(10)

我的朋友

分类: LINUX

2013-01-08 20:32:28

usb_endpoint_is_int_in():判断端点是否为中断in类型

函数原型:


 

  1. static inline int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd)
  2. {
  3. return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));
  4. }
  5. static inline int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd)
  6. {
  7. return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==USB_ENDPOINT_XFER_INT);
  8. }

端点描述符中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     --中断传输  


  1. static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
  2. {
  3. return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
  4. }

对于bEndpointAddress的最高位用于标示传输方向,以host定位,in只device to host ,而out指host to device。而低四位用于标示设备地址。所以每一个hub上最多
挂31个器件。
同时对于其他端点类型的检测类似,如检测端点是否为块in类型:usb_endpoint_is_bulk_in。

阅读(2388) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~