1. 在usb_fill_bulk_urb,usb_fill_int_urb,usb_fill_control_urb都需要指定回调函数,当此URB请求完成时,usb core回调用此函数。

注意:urb 回调函数是在中断上下文运行, 因此它不应做任何内存分配, 持有任何信号量, 或任何可导致进程休眠的事情. 如果从回调中提交 urb 并需要分配新内存块, 需使用 GFP_ATOMIC 标志来告知 USB 核心不要休眠.

2. urb封装函数:

1) int usb_bulk_msg(struct usb_device *usb_dev,unsigned int pipe,void*data, int len, int*actual_length,int timeout)


功能:创建批量 urb 并发送到指定的设备, 接着在返回之前等待完成.

参数:
  struct usb_device *usb_dev :目标 USB 设备指针
  unsigned int pipe :目标 USB 设备的特定端点. 必须使用特定的宏创建.
  void *data :如果是 OUT 端点, 指向要发送到设备的数据的指针. 如果是 IN 端点, 这是从设备读取的数据的缓冲区指针.
  int len : data 参数指向的缓冲的长度
  int *actual_length :指向函数放置真实字节数的指针,根据端点方向,这些字节要么是被发送到设备的,要么是从设备中读取的.
  int timeout :时钟嘀哒数, 应等待的时间. 如果为 0, 函数永远等待操作完成.


返回值:成功返回0,actual_length 参数包含被传送或从设备中读取的字节数.否则返回负的错误值.


2)int usb_control_msg(struct usb_device*dev, unsigned int pipe, __u8 request,__u8 requesttype, __u16 value, __u16 index,void *data, __u16 size,int timeout)


功能:创建控制 urb 并发送到指定的设备, 接着在返回之前等待完成.

参数:
  struct usb_device *usb_dev :目标 USB 设备指针
  unsigned int pipe :目标 USB 设备的特定端点. 必须使用特定的宏创建.
  __u8 request :控制消息的 USB 请求值.
  __u8 requesttype :控制消息的 USB 请求类型.
  __u16 value :控制消息的 USB 消息值.
  __u16 index :控制消息的 USB 消息索引值.
  void *data :如果是 OUT 端点, 指向要发送到设备的数据的指针. 如果是 IN 端点, 这是从设备读取的数据的缓冲区指针.
  __u16 size : data 参数指向的缓冲的长度
  int timeout :时钟嘀哒数, 应等待的时间. 如果为 0, 函数永远等待操作完成.


返回值:成功返回被传送到或从设备读取的字节数.否则返回负的错误值.


3)int usb_interrupt_msg(struct usb_device*usb_dev, unsigned int pipe,void *data,int len, int *actual_length,int timeout)
功能:创建中断 urb 并发送到指定的设备, 接着在返回之前等待完成.其实就是usb_bulk_msg的包装,所有参数和usb_bulk_msg一样使用

 

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐