在Windows下用Qt写UI程序,该程序与下位机通过USB进行通信。Qt类库没有自带的USB类,所以采用第三方库来进行USB通信。
对于第三方库的选择,总共有如下几种:
一、如果是在Windows下,那么采用Windows 的API函数去读取USB设备。
二、使用开源库libusb,官方网站是http://www.libusb.org/,在http://sourceforge.net/projects/libusb/和http://libusb.info/这上面也有详细的使用说明。从官网上下载源代码,压缩包中的INSTALL文件有安装提示。
三、libusb有针对Windows平台下一个开源库http://sourceforge.net/projects/libusb-win32/和http://sourceforge.net/p/libusb-win32/wiki/Home/。这个方案有尝试过,从官网上下载压缩包libusb-win32-bin-1.2.6.0,里面有一个inf-wizard.exe可执行程序,可把指定的USB设备识别成libusb-win32的设备,我们可以直接对那个设备进行读写。但是使用这种方式如果换另外一台电脑,那么还得重新为那个设备安装libusb-win32的驱动,不太方便。
第1步:此处我选择我的鼠标设备;
第2步:配置选中设备的信息;
第3步:libusb-win32为我们刚才选中的设备创建了一个Windiow下的驱动程序,之后我们安装他。
第4步:点击Install now之后,提示驱动安装成功,之后我的鼠标就不能用了。主要是驱动被换了。我们看看安装前和安装后设备管理器的内容。多出来的一个设备我们就可以通过libusb-win32的api去读写了。如果想回去继续用鼠标,把那个驱动卸载掉就行了。
四、使用第三方库hidapi,http://www.signal11.us/oss/hidapi/和https://github.com/signal11/hidapi。这个方案是最简单的,代码量少,可移植。不过,正如名字所说,这个只适合hid的USB类。刚好下位机之前已配置成hid设备,那么决定采用这种方案。
上述除第一个方案剩下的三个方案,如果在windows下使用,都需要把相应的dll文件放到相应的目录下且指定lib文件的路径,类似这样。这样在程序中对设备的操作才不会报错。