Qt USB通信--hidapi的使用

前面提到过Qt USB通信四种方案,这里详细介绍我使用的hidapi第三方库。
从官网上下载到最新的压缩包hidapi-0.7.0.zip,解压后查看README.txt,里面介绍了三种Windows、Linux、MacOS三种平台下的编译方式:
------
It can be downloaded from github
	git clone git://github.com/signal11/hidapi.git

Build Instructions
-------------------
To build the console test program:
  Windows:
    Build the .sln file in the windows/ directory.
  Linux:
    cd to the linux/ directory and run make.
  Mac OS X:
    cd to the mac/ directory and run make.
 

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

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如下:

HEADERS += hidapi.h

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

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

README里的用例:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "hidapi.h"

#define MAX_STR 255

int main(int argc, char* argv[])
{
	int res;
	unsigned char buf[65];
	wchar_t wstr[MAX_STR];
	hid_device *handle;
	int i;

	// Open the device using the VID, PID,
	// and optionally the Serial number.
	handle = hid_open(0x4d8, 0x3f, NULL);

	// Read the Manufacturer String
	res = hid_get_manufacturer_string(handle, wstr, MAX_STR);
	wprintf(L"Manufacturer String: %s\n", wstr);

	// Read the Product String
	res = hid_get_product_string(handle, wstr, MAX_STR);
	wprintf(L"Product String: %s\n", wstr);

	// Read the Serial Number String
	res = hid_get_serial_number_string(handle, wstr, MAX_STR);
	wprintf(L"Serial Number String: (%d) %s\n", wstr[0], wstr);

	// Read Indexed String 1
	res = hid_get_indexed_string(handle, 1, wstr, MAX_STR);
	wprintf(L"Indexed String 1: %s\n", wstr);

	// Toggle LED (cmd 0x80). The first byte is the report number (0x0).
	buf[0] = 0x0;
	buf[1] = 0x80;
	res = hid_write(handle, buf, 65);

	// Request state (cmd 0x81). The first byte is the report number (0x0).
	buf[0] = 0x0;
	buf[1] = 0x81;
	res = hid_write(handle, buf, 65);

	// Read requested state
	hid_read(handle, buf, 65);

	// Print out the returned buffer.
	for (i = 0; i < 4; i++)
		printf("buf[%d]: %d\n", i, buf[i]);

	return 0;
}



©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页