usb urb接口
来源:互联网 发布:小孩衣服淘宝网 编辑:程序博客网 时间:2024/06/06 13:09
一. 简介
struct urb {
struct kref kref;
void *hcpriv;
atomic_t use_count;
atomic_t reject;
int unlinked;
struct list_head urb_list;
struct list_head anchor_list;
* the URB may beanchored */ struct usb_anchor *anchor;
struct usb_device *dev;
struct usb_host_endpoint *ep;
unsigned int pipe;
unsigned int stream_id;
int status;
unsigned int transfer_flags;
void *transfer_buffer;
dma_addr_t transfer_dma ;
struct scatterlist *sg;
int num_sgs;
u32 transfer_buffer_length;
u32 actual_length;
unsigned char *setup_packet;
dma_addr_t setup_dma;
int start_frame;
int number_of_packets;
int interval;
int error_count;
void *context;
usb_complete_t complete;
struct usb_iso_packet_descriptor iso_frame_desc[0];
};
二. urb操作接口函数
usb 用urb发送数据时分三个步骤:申请urb, 填充urb,向usb控制器提交urb.
1.申请和释放urb
struct urb *usb_alloc_urb(int
void usb_free_urb(struct urb *urb)
{
if (urb)
kref_put(&urb->kref, urb_destroy)
}
2. 填充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_fn,void *context)
void usb_fill_bulk_urb(struct urb *urb, struct usb_device *dev,
void usb_fill_int_urb(struct urb*urb, struct usb_device *dev,unsinged int pipe, void *transfer_buffer, int buffer_length,usb_complete_t complete_fn ,void *context, int interval)
3.urb递交给主机控制器
int usb_submit_urb(struct urb*urb, gfp_t mem_flags)
Memory Flags:
*
* The general rules for how to decide which mem_flags to use
* are the same as for kmalloc. There are four
* different possible values; GFP_KERNEL, GFP_NOFS, GFP_NOIO and
* GFP_ATOMIC.
*
* GFP_NOFS is not ever used, as it has not been implemented yet.
*
* GFP_ATOMIC is used when
* (a) you are inside a completion handler, an interrupt, bottom half,
* tasklet or timer, or
* (b) you are holding a spinlock or rwlock (does not apply to
* semaphores), or
* (c) current->state != TASK_RUNNING, this is the case only after
* you've changed it.
*
* GFP_NOIO is used in the block io path and error handling of storage
* devices.
*
* All other situations use GFP_KERNEL.
4. urb的取消
int usb_unlink_urb(struct urb *urb);
5. urb其它接口
int usb_control_msg(structusb_device *dev, unsigned int pipe, u8 request, u8 requesttype, u16value, u16 index, void *data, u16 size, inttimeout)
usb_control_msg用于发送control类数据,对于control类型,除发送正常数据外,还要发送一个setuptransaction, request,requesttype指定请求包的类型和属性,data为要发送的数据,size为发送数据长度,timeout为发送超时时间。
int usb_interrupt_msg(structusb_device *usb_dev, unsigned int pipe, void *data, int len, int*actual_length, int timeout)
int usb_bulk_msg(structusb_device *usb_dev, unsigned int pipe, void *data, int len, int*actual_length, int timeout)
void usb_kill_urb(struct urb*urb)
- usb urb接口
- usb中urb相关接口函数
- usb中urb相关接口函数
- USB URB
- USB URB
- USB URB
- USB urb
- USB请求块(URB)
- USB 的 Urb
- /Documentation/usb/URB.txt
- usb子系统浅析--urb
- URB(USB request block)
- USB设备---URB请求快
- Linux USB驱动中URB的使用
- linux usb驱动中的urb详解
- urb
- urb
- urb
- PHP程序无法上传文件
- 游戏服务器优化
- spring aop拦截controller层失效
- [Ext JS 6 By Example 翻译] 第8章 - 主题和响应式设计
- ViewPager页面滑动Fragment销毁问题
- usb urb接口
- jenkins使用教程之管理节点
- Gulp 使用指南
- Android开发之网络编程(一)
- Vim命令合集
- Android 主要的热修复方案原理分析
- 你与阿米巴经营之间只差了一个“中国式” 胡八一
- android app 启动时间过长或者recycleview scrollview滑动卡顿的原因
- SQL 存储过程