某libusb介绍了libusb设计了一系列可以操作硬件的外部API并调用到APP应用程序中。 从libusb的源代码中可以看出,这些API调用内核的底层接口,与kernel driver中使用的函数实现的功能几乎相同,但libusb与USB规范相近。 libusb的使用也比开发内核驱动相对容易。
二libusb的外部接口2.1核心初始化函数
1) usb_init
函数定义: voidUSB_init(void );
函数功能: libusb初始化,这一步必须首先执行。
2)usb_find_busses
函数定义: intUSB_find_busses(void );
找到系统上的usb总线。 所有usb设备都通过usb总线与计算机总线进行通信。 此函数返回总线数,失败返回负值。
3) usb_find_devices
函数定义: intUSB_find_devices(void );
找到总线上的usb设备。 必须在调用usb_find_busses ()之后使用此函数。 此函数将正常返回设备数量,失败将返回负值。
4)usb_get_busses
函数定义: struct USB _ bus * USB _ get _ busses (void );
函数:返回全局变量usb_busses,用于检查总线链接列表以查找总线usb设备。 失败返回空值。
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
函数定义: intusb _ close (USB _ dev _ handle * dev );
函数:支持usb_open,关闭设备,必须调用,返回0成功,0失败。
7) usb_set_configuration
函数定义: intusb _ set _ configuration (USB _ dev _ handle * dev,int configuration );
功能:设置当前设备使用的配置模式。 参数configuration是要使用的configurtation descriptoes的bConfigurationValue (函数成功0,失败0 ) )一个设备包含多个bConfigurationValue
8) usb_claim_interface
函数定义: intusb _ claim _ interface (USB _ dev _ handle * dev,int interface );
功能:注册与操作系统通信的接口。 这个函数必须被调用。 因为只有注册了接口,才能进行适当的操作(例如发送接收数据)。
界面是指bInterfaceNumber . (以下说明的usb_release_interface与此相对应,也是必须调用的函数。 )
9) usb_release_interface
函数定义: intusb _ release _ interface (USB _ dev _ handle * dev,int interface );
功能:注销在usb_claim_interface函数中调用的接口,释放资源,与usb_claim_interface相对应使用。 请记住,在程序结束时,一定要注销界面。 否则,下次注册接口时可能会报告错误。
10) usb_set_altinterface
函数定义: intusb _ set _ alt interface (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