Linux libusb USB开发(三)—— libusb函数库及接口函数介绍

一 libusb 介绍

libusb 设计了一系列的外部API 为应用程序所调用,通过这些API应用程序可以操作硬件,从libusb的源代码可以看出,这些API 调用了内核的底层接口,和kernel driver中所用到的函数所实现的功能差不多,只是libusb更加接近USB 规范。使得libusb的使用也比开发内核驱动相对容易的多。

二 libusb 的外部接口

2.1 核心初始化函数

1) usb_init

函数定义: void usb_init(void);

函数功能:libusb 初始化,这一步必须首先执行。

2) usb_find_busses

函数定义: int usb_find_busses(void);

寻找系统上的usb总线,任何usb设备都通过usb总线和计算机总线通信。此函数返回总线数,失败返回负值。

3) usb_find_devices

函数定义: int usb_find_devices(void);

寻找总线上的usb设备,这个函数必要在调用usb_find_busses()后使用。此函数成功返回设备数目,失败返回负值。

4) usb_get_busses

函数定义: struct usb_bus *usb_get_busses(void);

函数功能:返回全局变量 usb_busses,用于遍历总线链表,查找总线 usb 设备。失败返回 NULL。

2.2 设备操作函数

5)usb_open

函数定义: usb_dev_handle *usb_open(struct *usb_device dev);

函数功能:打开 usb 设备,引用的 usb_dev_handle 以及 usb_device 结构体分别为usb设备操作句柄和usb设备描述符,具体定义可见头文件。函数返回 usb 设备的操作句柄,之后的对该 usb 设备的操作都通过该句柄进行。

6) usb_close

函数定义: int usb_close(usb_dev_handle *dev);

函数功能:与usb_open相对应,关闭设备,是必须调用的, 返回0成功,<0 失败。

7) usb_set_configuration

函数定义: int usb_set_configuration(usb_dev_handle *dev, int configuration);

函数功能:设置当前设备使用的configuration(配置模式),参数configuration 是你要使用的configurtation descriptoes中bConfigurationValue, 函数返回0成功,<0失败( 一个设备可能包含多个configuration,比如同时支持高速和低速的设备就有对应的两个configuration,详细可查看usb标准和具体的usb设备)

8) usb_claim_interface

函数定义: int usb_claim_interface(usb_dev_handle *dev, int interface);

函数功能:注册与操作系统通信的接口,这个函数必须被调用,因为只有注册接口,才能做相应的操作(比如收发数据)。

Interface 指 bInterfaceNumber. (下面介绍的usb_release_interface 与之相对应,也是必须调用的函数)

9) usb_release_interface

函数定义: int usb_release_interface(usb_dev_handle *dev, int interface);

函数功能:注销被usb_claim_interface函数调用后的接口,释放资源,和usb_claim_interface对应使用。程序结束时记得一定要注销接口,否则,下次注册接口时可能会报错。

10) usb_set_altinterface

函数定义: int usb_set_altinterface(usb_dev_handle *dev, int alternate);

函数功能:设定当前接口中的活跃(起作用的)设置,即激活当前接口,alternate 为接口描述符中 bAlternateSetting 字段。成功返回0,失败返回负值。

11) usb_clear_halt

函数定义: int usb_clear_halt (usb_dev_handle *dev, unsigned int ep);

函数功能:复位指定的endpoint,参数ep 是指bEndpointAddress。这个函数用来替代usb_resetep函数。

注:libusb四种传输方式详细介绍可见http://blog.chinaunix.net/uid-25314474-id-3040231.html

2.3 数据通讯

12) usb_bulk_write

函数定义:int usb_bulk_write(usb_dev_handle *dev, int ep, const char *bytes, int size, int timeout);

函数功能:向usb设备批量写数据,*dev为设备操作句柄,ep为传入指定的端点号,*bytes为发送的数据地址,size为发送的数据长度,timeout 为超时时间(ms)。成功返回实际写入设备的字节数,失败返回负值。

13) usb_bulk_read

函数定义:int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

函数功能:批量读usb设备传过来的数据,*dev为设备操作句柄,ep为传入指定的端点号,*bytes为接收的数据地址,size为预计接收的数据长度,timeout 为超时时间(ms)。成功返回实际写入设备的字节数,失败返回负值。

14) usb_interrupt_write

函数定义:int usb_interrupt_write(usb_dev_handle *dev, int ep, const char *bytes, int size, int timeout);

函数功能:以中断的方式向usb设备写数据,*dev为设备操作句柄,ep为传入指定的端点号,*bytes为发送的数据地址,size为发送的数据长度,timeout 为超时时间(ms)。成功返回实际写入设备的字节数,失败返回负值。

15) usb_interrupt_read

函数定义:int usb_interrupt_write(usb_dev_handle *dev, int ep, const char *bytes, int size, int timeout);

函数功能:以中断的方式usb设备传过来的数据,*dev为设备操作句柄,ep为传入指定的端点号,*bytes为接收的数据地址,size为预计接收的数据长度,timeout 为超时时间(ms)。成功返回实际写入设备的字节数,失败返回负值。

16) usb_control_msg

函数定义:int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout);

函数功能:以控制请求的方式读写数据,从默认的管道发送和接受控制数据传入参数与 usb 协议保持一致。成功返回实际读写的字节数,失败返回负值。

17) usb_get_string

函数定义:int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf, size_t buflen);

函数功能:获取设备的字符串描述,通过index和langid索引。返回Unicode字符串到buf中。返回实际写入buf的字节数,负数失败。

18) usb_get_string_simple

函数定义:int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, size_t buflen);

函数功能:包装了 usb_get_string() 函数,返回指定index索引的字符串描述,并转换到C风格的ASCII。返回写入buf字节数,负数失败。

19) usb_get_descriptor

函数定义:int usb_get_descriptor(usb_dev_handle *dev, unsigned char type, unsigned char index, void *buf, int size);

函数功能:获取设备缺省控制管道的描述符,通过type和index索引。返回实际写入buf的字节数,负数失败。

20) usb_get_descriptor_by_endpoint

函数定义:int usb_get_descriptor(usb_dev_handle *dev, unsigned char type, unsigned char index, void *buf, int size);

函数功能:从设备获取描述符,以type和index索引,以ep标志的控制管道。返回读取字节数,负数失败。

2.3 辅助函数

21) usb_strerror

函数定义:char *usb_strerror(void);

函数功能:根据错误返回值 errno,返回错误码码对应的字符串。

22) usb_set_debug

函数定义:void usb_set_debug(int level);

函数功能:设置 libusb 的调试级别,libusb 支持打印调试信息,level 值为指定的调试级别。

23) usb_device

函数定义struct usb_device *usb_device(usb_dev_handle *dev);

函数功能:根据操作句柄返回对应的 usb_device。

三 libusb 的接口函数相关参数设置

libusb 的接口函数相关参数是依据usb设备本身的硬件参数(如配置模式、接口地址等)所决定的,而查询这些参数的方式有很多,如调用libusb本身的查询函数,但我推荐一个更好的方法,用“USB查看器usbtreeviewV3.1.0软件”可以清晰的获取usb本身的硬件设备。

本文第二部分所列举的函数只是libusb的一部分常用函数,想查看更多的函数,可上

http://libusb.sourceforge.net/api-1.0/api.html


转载于:https://blog.csdn.net/jiguangfan/article/details/86546958

猜你喜欢

转载自blog.csdn.net/qq_31094099/article/details/90229561
今日推荐