libusb 和 hidapi 库编译和使用

1.下载libusbhidapi

libusb · GitHub

libusb库是操作usb设备的库,而hidapi它依赖libusb, 并且专门针对人类输入设备,如鼠标、键盘、触摸屏等设备。

2.编译

./bootstrap
./configure
make
sudo make install

注意:两个库编译方法一样,但是要先编译libusb

3.更新系统动态库

sudo ldconfig

4.编写测试程序

  hidtest.c:

#include <unistd.h>
#include <stdio.h>
#include <libusb-1.0/libusb.h>
#include <hidapi/hidapi.h>


static void print_devs(libusb_device **devs)  
{  
    libusb_device *dev;  
    int i = 0;  
  
    while ((dev = devs[i++]) != NULL) {  
        struct libusb_device_descriptor desc;  
        int r = libusb_get_device_descriptor(dev, &desc);  
        if (r < 0) {  
            fprintf(stderr, "failed to get device descriptor");  
            return;  
        }  
  
        printf("%04x:%04x (bus %d, device %d)\n",  
            desc.idVendor, desc.idProduct,  
            libusb_get_bus_number(dev), libusb_get_device_address(dev));  
    }  
}

static int  test_hidapi(int vid,int pid){
	printf("vid:%04X,pid:%04X\n",vid,pid);
	int res;
	unsigned char buf[65];
	hid_device *handle;
	int i;

	// Initialize the hidapi library
	res = hid_init();

	// Open the device using the VID, PID,
	// and optionally the Serial number.
	// 1a86:7523
	handle = hid_open(vid,pid,NULL);
	if (!handle) {
		printf("Unable to open device\n");
		hid_exit();
		return 1;
	}
	 printf("----------------请移动鼠标-------------------\n");
	// 读取鼠标数据
	while (1) {
		unsigned char data[64];
		int res = hid_read(handle, data, sizeof(data));
		if (res < 0) {
			printf("读取鼠标数据失败\n");
			break;
		}

		// 打印鼠标数据
		printf("鼠标数据: ");
		for (int i = 0; i < res; i++) {
			printf("%02X ", data[i]);
			printf("\n----------------hidapi测试成功-------------------\n");
			exit(0);
		}
		printf("\n");
	}

	// 关闭设备
	hid_close(handle);

	// 清理hidapi
	hid_exit();
}


int main(){
	
	int r;
	ssize_t cnt;
	libusb_device **devs;                         //devices
	libusb_context *ctx = NULL;
	struct libusb_device_descriptor desc;
	r=libusb_init(ctx);                          //init 初始化libusb
	int vid,pid;
	if(r<0) {
		printf("failed to init libusb\n");
		return 1;
	}
	cnt = libusb_get_device_list(NULL,&devs);      //获取设备列表
	if (cnt < 0) {
		printf("failed to get device list\n");  
		return 1;
	}
	print_devs(devs);
	printf("----------------------libusb测试成功--------------------------------\n");


	for (ssize_t i = 0; i < cnt; i++) {
		r = libusb_get_device_descriptor(devs[i], &desc);
		if (r < 0) {
			fprintf(stderr, "无法获取设备描述符: %s\n", libusb_error_name(r));
			continue;
		}

		// 检查是否为鼠标设备
		printf("设备 VID: 0x%04X, PID: 0x%04X,CLASS:%d\n", desc.idVendor, desc.idProduct,desc.bDeviceClass);
		if (desc.bDeviceClass == 0) {
			printf("---->设备 VID: 0x%04X, PID: 0x%04X\n", desc.idVendor, desc.idProduct);
		        vid = desc.idVendor;
			pid = desc.idProduct;
		}
	}
	// 释放设备列表
	libusb_free_device_list(devs, 1);

	// 关闭 libusb
	libusb_exit(ctx);


	test_hidapi(vid,pid);

	return 0;
}

5.编译测试程序

gcc hidtest.c -o test -lusb-1.0 -lhidapi-libusb

 

6.运行效果

sudo ./test

参考资料:

hidapi在linux下编译总结_hidapi linux编译_download_73的博客-CSDN博客

玩转USB HID系列:Linux下使用C语言和libusb开发USB HID-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要编译mingw hidapi-master,可以按照以下步骤进行操作: 1. 首先,确保你已经安装了MinGW(Minimalist GNU for Windows)。如果没有安装,可以从MinGW的官方网站(http://mingw.org)下载安装程序,并按照指引进行安装。 2. 下载mingw hidapi-master的源代码。你可以在hidapi的GitHub页面(https://github.com/signal11/hidapi)上找到源代码的下载链接。点击链接下载并保存代码。 3. 解压下载的源代码压缩包到你选择的目录中。 4. 打开命令提示符,并导航到代码解压后所在的目录。 5. 在命令提示符中输入以下命令编译hidapi: ``` gcc -o hidtest hidtest.c hid.c -lsetupapi ``` 这个命令会编译hidtest.c和hid.c,并链接lsetupapi编译成功后,将生成一个名为hidtest的可执行文件。 6. 使用以下命令运行编译后的可执行文件: ``` hidtest ``` 运行后,你将能够测试和验证hidapi的功能。 注意:编译过程中可能会遇到一些依赖问题,如果出现错误提示缺少某个或文件,你需要安装对应的依赖并再次尝试编译。 ### 回答2: 编译mingw hidapi-master可以按照以下步骤进行: 1. 首先,确保已经安装了Mingw-w64工具链和CMake。Mingw-w64是一个开发工具集,可以让我们在Windows环境中使用GCC编译器。CMake是一个跨平台的建构系统,它可以自动生成编译脚本。 2. 在GitHub上下载mingw hidapi-master的源代码。可以将源代码解压到任意位置。 3. 打开命令提示符,并进入源代码所在的目录。 4. 创建一个新的目录用于编译输出。可以使用命令 `mkdir build` 创建名为"build"的目录。 5. 进入新创建的"build"目录。使用命令 `cd build` 进入。 6. 使用CMake生成编译脚本。在命令提示符中输入 `cmake -G "MinGW Makefiles" ..`。这将生成一个名为"Makefile"的文件,以及其他必要的编译脚本。 7. 开始编译。在命令提示符中输入 `mingw32-make`。这将使用Mingw-w64工具链编译生成可执行文件。 8. 等待编译完成。这可能需要一些时间,具体取决于电脑性能和源代码的复杂程度。 9. 编译完成后,可以在同一目录下找到生成的可执行文件。可以使用命令 `.\hidapi_test` 来运行该可执行文件,测试hidapi是否编译成功。 通过以上步骤,您应该能成功地编译mingw hidapi-master。请注意,编译过程可能会有些变化,具体取决于您的操作系统和工具链的版本。 ### 回答3: 在编译mingw hidapi-master之前,我们需要确保安装了MinGW(一个用于Windows的GNU工具链),以及安装了libusb和libhidapi。以下是编译mingw hidapi-master的步骤: 1. 首先,从GitHub上下载mingw hidapi-master的源代码压缩包,并解压到任意目录。 2. 打开MinGW的命令行终端,并导航到刚才解压的目录。 3. 在命令行中执行以下命令,进入hidapi的源代码目录: ``` cd hidapi ``` 4. 接下来,执行以下命令编译hidapi: ``` make -f Makefile.mingw ``` 这将使用Makefile.mingw文件中的配置选项来编译hidapi,并生成编译后的静态文件libhidapi.a和动态链接文件libhidapi.dll。 5. 如果编译成功,将生成的libhidapi.a和libhidapi.dll文件复制到MinGW工具链的目录中。例如,将这两个文件复制到"MinGW\lib"目录下。 6. 最后,将hidapi的头文件复制到MinGW工具链的include目录中。打开hidapi目录,将hidapi.h复制到"MinGW\include"目录下。 现在,你已经成功编译了mingw hidapi-master。你可以在你的项目中引用hidapi,并使用hidapi提供的函数来访问和控制HID设备。记得在编译你的项目时,添加-lhidapi选项来链接hidapi。 请注意,编译mingw hidapi-master可能会依赖其他和软件包,具体要求可在源代码的README文件或官方文档中找到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值