创建URB结构体:
struct urb *usb_alloc_urb(int iso_packets, int mem_flags);
void usb_free_urb(struct urb *urb);
parameter
成功返回urb结构体指针。
urb必须动态创建。
填充URB
• 中断urb
void usb_fill_int_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context, int interval);
• 批量urb
void usb_fill_bulk_urb(struct urb *urb, struct usb_device *dev,unsigned int pipe, void *transfer_buffer,int buffer_length, usb_complete_t complete,void *context);
• 控制urb
void usb_fill_control_urb(struct urb *urb, struct usb_device *dev,unsigned int pipe, unsigned char *setup_packet,void *transfer_buffer, int buffer_length,usb_complete_t complete, void *context);
• 同步urb
特殊处理
parameter
Pipe:
Int : usb_sndintpipe()、usb_rcvintpipt()
Bulk : usb_sndbulkpipe()、usb_rcvbulkpipe()
control:usb_sndctrlpipe() 、usb_rcvictrlpipe()
iso:usb_sndisocpipe()、usb_rcvisocpipe()
提交URB
int usb_submit_urb(struct urb *urb, int mem_flags);
usb_submit_urb()调用成功返回0,否则返回错误号;
调用成功:urb控制权移交到USB core
parameter mem_flags:
处理URB
urb处理3种情况,callback调用:
处理状态
Urb->status:
取消urb
int usb_unlink_urb(struct urb *urb);
本文地址:https://blog.csdn.net/Ali_DZT/article/details/107214287
如对本文有疑问, 点击进行留言回复!!
开发者们,鸿蒙HMS全球应用创新大赛喊你来拿100万美元大奖!
网友评论