usb_submit_urb
时间: 2023-07-08 10:47:42 浏览: 95
usb_submit_urb() 函数是 Linux USB 核心中的一部分,它用于将 USB URB (USB Request Block) 提交到 USB 设备上进行异步传输。在 USB 通信过程中,主机和设备之间的数据传输是通过 URB 进行的。函数原型如下:
```
int usb_submit_urb(struct urb *urb, int mem_flags);
```
其中,`urb` 参数是要提交的 USB URB 结构体指针,`mem_flags` 参数指定了 URB 内存的分配方式。
该函数的返回值为 0 表示提交成功,否则表示提交失败。在提交 URB 之前,需要先初始化 URB 结构体并设置相应的回调函数以处理传输完成时的事件。
相关问题
usb_fill_control_urb
`usb_fill_control_urb()`是一个函数,用于填充一个URB结构体,以便进行control类型的USB传输操作。函数原型如下:
```c
int usb_fill_control_urb(struct urb *urb, struct usb_device *udev,
unsigned int pipe, unsigned char *setup_packet,
void *transfer_buffer, int buffer_length,
usb_complete_t complete_fn, void *context);
```
各参数含义如下:
- `urb`:指向要填充的URB结构体的指针。
- `udev`:USB设备结构体指针。
- `pipe`:表示USB传输的目标端点,可以通过`usb_sndctrlpipe()`或`usb_rcvctrlpipe()`函数来获取。
- `setup_packet`:指向8字节的控制请求包的指针,包含了USB传输的控制信息。
- `transfer_buffer`:指向数据缓冲区的指针,用于存储控制传输的数据。
- `buffer_length`:表示数据缓冲区的大小。
- `complete_fn`:指向一个回调函数,用于在URB完成后通知应用程序。
- `context`:回调函数的传入参数。
`usb_fill_control_urb()`函数会根据函数传入的参数,填充一个URB结构体,以便进行control类型的USB传输操作。填充完成后,应用程序可以通过`usb_submit_urb()`函数将URB提交给USB驱动程序,由驱动程序将URB转换为USB传输命令,发送给USB总线。在传输完成后,驱动程序会调用应用程序指定的回调函数,通知应用程序传输结果。
usb_alloc_urb
"usb_alloc_urb" 是 Linux USB 核心中的一个函数,用于分配一个 USB 数据包传输请求结构体(URB)。URB 是 USB 设备和主机之间进行数据传输的一种机制,用于描述数据传输的参数和状态。"usb_alloc_urb" 函数通过动态分配内存来创建一个 URB 结构体,并将其初始化为默认值。在使用 URB 进行数据传输前,还需要使用其他函数来设置 URB 的各种参数。该函数是 USB 驱动程序的重要组成部分。