qt 中添加libusb库
libusb 设计了一系列的外部API 为应用程序所调用,通过这些API应用程序可以操作硬件,从libusb的源代码可以看出,这些API 调用了内核的底层接口,和kernel driver中所用到的函数所实现的功能差不多,只是libusb更加接近USB 规范。使得libusb的使用也比开发内核驱动相对容易的多。
**前期准备:**
1:qt creater 5.0软件
2:usblib源码文件libusb-win32-bin-1.2.6.0.rar
这里不赘述qt的使用,我就当你会了。
第一步:在qt工程中添加文件路径:
libusb.a文件是用于gcc编译器的函数链接,在源码文件下include/gcc中
第二步:
把lusb0_usb.h 这个头文件从源码目录中拷贝到工程目录下,然后在添加已有文件,编译在工程中目录。
使用libusb库的函数进行开发,所以我们得先熟悉常用API.下面就列举一些常用的函数进行解析:
-
void usb_init(void);
参数:无
函数功能:libusb初始化
返回值:无 -
int usb_find_busses(void);
参数:无
函数功能:查找计算机中的bus总线
返回值:查找到的总线数 -
int usb_find_devices(void);
参数:无
函数功能:查找计算机中的设备数量
返回值:查找到的设备数量 -
int usb_set_configuration(usb_dev_handle *dev, int configuration);
参数:参数1 usb设备的句柄;参数2 配置的参数(需要跟底层硬件配置bConfigurationValue一样)
函数功能:配置这个设备信息
返回值:返回0成功,返回负数失败 -
int usb_claim_interface(usb_dev_handle *dev, int interface);
参数:参数1 usb设备的句柄;参数2 配置的参数(需要跟底层硬件配置bInterfaceNumber一样)
函数功能:注册设备接口
返回值:返回0成功,返回负数失败 -
int usb_control_msg(usb_dev_handle *dev, int requesttype, int
request, int value, int index, char *bytes, int size, int timeout);
参数:具体参数对应usb协议
函数功能:已控制的方式进行读写数据
返回值:返回实际读写的字节数,返回负数则失败 -
int usb_clear_halt(usb_dev_handle *dev, unsigned int ep);
参数:参数1 usb设备的句柄;参数2 端点地址
函数功能:复位指定的endpoint,参数ep 是指bEndpointAddress。这个函数用来替代usb_resetep函数。
返回值:返回0表示成功 -
usb_dev_handle *usb_open(struct usb_device *dev);
参数: usb设备描述符
函数功能:打开usb设备
返回值:返回usb设备句柄,之后的所有对usb’的操作都是通过该句柄执行 -
int usb_close(usb_dev_handle *dev);
参数: usb设备的句柄
函数功能:关闭usb设备
返回值:返回0 成功 -
int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int
size, int timeout);
参数: 参数1 usb设备句柄,参数2,传入指定的端点号,参数3位待发送的数据地址,参数4 位数据长度,参数5超时时间
函数功能:向usb设备批量传输数据,
返回值:返回写入的设备的字节数,返回负数为失败 -
int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int
size, int timeout);
参数: 参数1 usb设备句柄,参数2,传入指定的端点号,参数3位接收的数据地址,参数4 位数据长度,参数5超时时间
函数功能:读取usb设备批量传输回来的数据,
返回值:返回读取回来的字节数,返回负数为失败 -
int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes,
int size, int timeout);
参数: 参数1 usb设备句柄,参数2,传入指定的端点号,参数3位接收的数据地址,参数4 位数据长度,参数5超时时间
函数功能:以中断的方式向usb设备中写入数据
返回值:回写入的设备的字节数,返回负数为失败 -
int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int
size, int timeout);
参数: 参数1 usb设备句柄,参数2,传入指定的端点号,参数3位接收的数据地址,参数4 位数据长度,参数5超时时间
函数功能:以中断的方式向usb设备中读取数据
返回值:返回读取回来的字节数,返回负数为失败
usb接口函数的相关参数设置
libusb中接口函数的一些参数是根据实际硬件信息来决定的。比如配置模式,接口地址,接口参数,还有pid,vid等等,需要根据自身的硬件来填写。可能有人会问 我怎么知道这个usb的vid和pid是多少,每一款usb芯片都是需要购买vid的,所以这个就得需要向厂商询问这个id是多少。这样多多少少会很麻烦,推荐一个更好的方式,使用usbtreeview这个软件,可以清晰的获取usb的硬件信息、如下图:
想查看更多的函数,可上http://libusb.sourceforge.net/api-1.0/api.html