Qt下libusb-win32的使用方法
之前一直找不到适合WIN7下的Tiny6410的USB下载软件,正好这几天开始学习USB,所以打算自己写一个专门用于Tiny6410的WIN7下的USB下载软件。
发现了libusb这个库可以用作无驱USB开发,就是说根本不需要了解Window驱动开发的知识就可以开发USB设备驱动,只需要了解一下USB的相关协议即可。Windows下我几乎不用VS来写程序,或者说我不懂MFC吧,呵呵,所示我用Qt来做界面。好了,进入正题。
首先下载libusb-win32,下载地址:http://sourceforge.net/projects/libusb-win32/files/,注意选择下载的文件是libusb-win32-bin-1.2.6.0.zip,这不是源码,而是一些已经编译好的库。解压之,里面有这么一些文件(夹):
下面简单介绍一下里面的东西是怎么用的。
(1)bin文件夹。里面最重要的是inf-wizard.exe这个程序,当你的USB设备插到电脑上而没有找到驱动程序时就可以通过这个程序来安装通用的USB驱动。双击它,下一步,在里面找到你的USB设备,选中后下一步,最后会弹出一个对话框让你保存它生成驱动程序。这样就有了驱动程序,但还没有安装,可以通过设备管理器来安装,安装成功后就可以通过libusb来编写程序来访问你的USB设备了。
(2)examples文件夹。里面有两个例程,一个简单的,一个复杂的,参考里面的bulk.c例程就好了。
(3)include文件夹。编写程序时需要用到,一般放在你的工程目录下。
(4)lib文件夹。里面是一些已经编译好的库,有borland版本的,有VC++版本的,有x64位版本的,最重要的是还有gcc版本,这里用到的就是gcc版本的,该版本可以在Qt上使用。
下面开始介绍怎么在Qt下使用该库。
1. 新建一个Qt工程
2. 把gcc版本的库文件libusb.a复制到工程目录下(可以放在其他目录),在.pro文件中追加如下一行(路径根据自己的情况修改):
LIBS+="F:/Qt/pratise/libusb-test/libusb/libusb.a"
这样就可以在链接时找到所需的函数。
3. 把上面所说的include文件夹下lusb0_usb.h文件复制到工程目录下。
4. 编写一个测试文件,我这里写的比较简单,程序的功能是只列出我的USB设备,如下:
1 #include "testlibusb.h" 2 #include "lusb0_usb.h" 3 4 USB::USB() 5 { 6 //usb_set_debug(250); 7 usb_init(); /* initialize the library */ 8 usb_find_busses(); /* find all busses */ 9 usb_find_devices(); /* find all connected devices */ 10 11 my_usb_get_device_list(); 12 13 resize(320, 240); 14 } 15 16 17 void USB::my_usb_get_device_list(void) 18 { 19 struct usb_bus *bus; 20 struct usb_device *dev; 21 22 for (bus = usb_get_busses(); bus; bus = bus->next) { 23 for (dev = bus->devices; dev; dev = dev->next) { 24 /* for specified device 25 if (dev->descriptor.idVendor == MY_VID 26 && dev->descriptor.idProduct == MY_PID) 27 { 28 return usb_open(dev); 29 } 30 */ 31 32 qDebug("VID:VID = %x:%x\n", dev->descriptor.idVendor, dev->descriptor.idProduct); 33 34 } 35 } 36 37 }
好了,运行程序,效果:
最后一行打印出来的正是Tiny6410的USB设备号。
注意:
这只能列出安装了inf-wizard.exe生成的驱动程序的USB设备。一开始的时候我没接上Tiny6410,程序没输出,插上一个U盘,还是没输出,以为是程序或者这个库有问题,纠结了一会,后来灵光一闪,插上开发板试试吧,果然成功了,程序运行结果就如上面所示。
继续学习USB,过2天USB开发板到了就开始实战。