Qt USB通信--hidapi的使用

  1. 前面提到过Qt USB通信四种方案,这里详细介绍我使用的hidapi第三方库。  
[html] view plaincopy
  1. 从官网上下载到最新的压缩包hidapi-0.7.0.zip,解压后查看README.txt,里面介绍了三种Windows、Linux、MacOS三种平台下的编译方式:  
[html] view plaincopy
  1. ------  
  2. It can be downloaded from github  
  3.     git clone git://github.com/signal11/hidapi.git  
  4.   
  5. Build Instructions  
  6. -------------------  
  7. To build the console test program:  
  8.   Windows:  
  9.     Build the .sln file in the windows/ directory.  
  10.   Linux:  
  11.     cd to the linux/ directory and run make.  
  12.   Mac OS X:  
  13.     cd to the mac/ directory and run make.  

1、使用Visual Studio打开hidapi.vcproj,然后编译之。注:因为我使用的是VS2005,由于版本不对应,无法转换hidapi.vcproj到我当前的版本,此时用编辑器打开文件hidapi.vcproj将原本的:

[html] view plaincopy
  1. Version="9.00"  

改成8.00.之后就可以打开工程。

2、编译完成之后,在该目录下会生成一个Debug目录,里面有很多文件,其中我们主要用到hidapi.dll和hidapi.lib两个文件。将hidapi.dll拷贝到C:\Windows\system下(至于拷贝到哪个目录,要根据系统是32位还是64位选择不同的路径。)

之后将hidapi.lib文件拷贝到你的工程目录下,这里我当然是拷贝到我的Qt 工程目录下。当然,也要把hidapi.h文件拷贝到Qt工程目录下,因为hidapi.h包含hidapi这个库中所有函数接口的声明,这样在Qt项目中对设备进行操作才不会调试说找不到hid_xxx()某某个函数。

3、在Qt工程中要指定lib文件和header文件。修改Qt的工程文件.pro如下:

[html] view plaincopy
  1. HEADERS += hidapi.h  

[html] view plaincopy
  1. LIBS += -L$$_PRO_FILE_PWD_/LIB/ \  
  2.             -lhidapi  
-L指定当前的路径;_PRO_FILE_PWD_指当前.pro文件所在的目录;-l指定.dll文件,这里是指定名字为hidapi的dll文件。

上述配置完成之后就可以对USB设备进行操作。具体如何操作可以参见README里面的用例以及hidapi.h的函数说明。

[html] view plaincopy
  1. README里的用例:  
  2. #include <windows.h>  
  3. #include <stdio.h>  
  4. #include <stdlib.h>  
  5. #include "hidapi.h"  
  6.   
  7. #define MAX_STR 255  
  8.   
  9. int main(int argc, char* argv[])  
  10. {  
  11.     int res;  
  12.     unsigned char buf[65];  
  13.     wchar_t wstr[MAX_STR];  
  14.     hid_device *handle;  
  15.     int i;  
  16.   
  17.     // Open the device using the VID, PID,  
  18.     // and optionally the Serial number.  
  19.     handle = hid_open(0x4d8, 0x3f, NULL);  
  20.   
  21.     // Read the Manufacturer String  
  22.     res = hid_get_manufacturer_string(handle, wstr, MAX_STR);  
  23.     wprintf(L"Manufacturer String: %s\n", wstr);  
  24.   
  25.     // Read the Product String  
  26.     res = hid_get_product_string(handle, wstr, MAX_STR);  
  27.     wprintf(L"Product String: %s\n", wstr);  
  28.   
  29.     // Read the Serial Number String  
  30.     res = hid_get_serial_number_string(handle, wstr, MAX_STR);  
  31.     wprintf(L"Serial Number String: (%d) %s\n", wstr[0], wstr);  
  32.   
  33.     // Read Indexed String 1  
  34.     res = hid_get_indexed_string(handle, 1, wstr, MAX_STR);  
  35.     wprintf(L"Indexed String 1: %s\n", wstr);  
  36.   
  37.     // Toggle LED (cmd 0x80). The first byte is the report number (0x0).  
  38.     buf[0] = 0x0;  
  39.     buf[1] = 0x80;  
  40.     res = hid_write(handle, buf, 65);  
  41.   
  42.     // Request state (cmd 0x81). The first byte is the report number (0x0).  
  43.     buf[0] = 0x0;  
  44.     buf[1] = 0x81;  
  45.     res = hid_write(handle, buf, 65);  
  46.   
  47.     // Read requested state  
  48.     hid_read(handle, buf, 65);  
  49.   
  50.     // Print out the returned buffer.  
  51.     for (i = 0; i < 4; i++)  
  52.         printf("buf[%d]: %d\n", i, buf[i]);  
  53.   
  54.     return 0;  
  55. }

你可能感兴趣的:(Qt USB通信--hidapi的使用)