usb_control_msg函数用法
来源:互联网 发布:管家婆数据库修复工具 编辑:程序博客网 时间:2024/05/15 23:48
usb_control_msg函数用法
分类:Linux驱动开发2010-08-25 08:58 785人阅读 评论(0) 收藏 举报
usb_control_msg是没有用到urb的在USB中简单进行发送和接收的一种机制,用于少量的数据通信。原型为:
程序代码
linux+v2.6.35/drivers/usb/core/message.c
104
132int usb_control_msg(struct usb_device *dev, unsigned int pipe,__u8 request,
133 __u8requesttype, __u16 value, __u16 index, void *data,
134 __u16size, int timeout)
135{
136 structusb_ctrlrequest *dr;
137 intret;
138
139 dr= kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
140 if(!dr)
141 return-ENOMEM;
142
143 dr->bRequestType= requesttype;
144 dr->bRequest= request;
145 dr->wValue= cpu_to_le16(value);
146 dr->wIndex= cpu_to_le16(index);
147 dr->wLength= cpu_to_le16(size);
148
149
150
151 ret= usb_internal_control_msg(dev, pipe, dr, data, size,timeout);
152
153 kfree(dr);
154
155 returnret;
156}
157EXPORT_SYMBOL_GPL(usb_control_msg);
104
132int usb_control_msg(struct usb_device *dev, unsigned int pipe,__u8 request,
133
134
135{
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156}
157EXPORT_SYMBOL_GPL(usb_control_msg);
一 般对于 struct usb_device *dev, unsigned int pipe, __u8request,这前三个参数和void *data,__u16 size, inttimeout后三个参数没有什么疑问,主要是中间几个__u8 requesttype, __u16 value, __u16index,
requesttype
requesttype有三部分组成,见以前日志:requesttype 。在内核中为这个三部分分别作了宏定义,分别对应这个字段的三部分:
程序代码
linux+v2.6.35/include/linux/usb/ch9.h
41
42
48#defineUSB_DIR_OUT 0
49#defineUSB_DIR_IN 0x80
50
51
54#defineUSB_TYPE_MASK (0x03 << 5)
55#defineUSB_TYPE_STANDARD (0x00 << 5)
56#defineUSB_TYPE_CLASS (0x01<< 5)
57#defineUSB_TYPE_VENDOR (0x02 << 5)
58#defineUSB_TYPE_RESERVED (0x03 << 5)
59
60
63#defineUSB_RECIP_MASK 0x1f
64#defineUSB_RECIP_DEVICE 0x00
65#defineUSB_RECIP_INTERFACE 0x01
66#defineUSB_RECIP_ENDPOINT 0x02
67#defineUSB_RECIP_OTHER