和HID交谈

时间:2011-01-16 17:55:35

标签: c++ linux hid

我有一个由PNI公司开发的传感器叫做spacepoint-fusion。我需要用C ++与这个设备连接,并不断从设备中读取新数据。

当我将设备插入计算机时,我看到/ dev / hidraw1和/ dev / hidraw2出现了。另外/ dev / usb / hiddev0出现了。

我的问题是我不知道如何阅读这些设备。我在网上找不到任何示例或文档。我甚至不知道从哪里开始。我一直在寻找libhid和hiddev作为可能的解决方案,但到目前为止,我还无法弄清楚如何使用这些库中的任何一个。

那么如何在linux机器上用c ++中的这个人机界面设备读取?非常感谢例子。 感谢。

3 个答案:

答案 0 :(得分:2)

尝试在hidraw设备上运行hexdump并在'spacepoint-fusion'上创建一些输入。

$ hexdump -C /dev/hidraw1

如果您获得了一些有用的数据,那么最简单的方法是使用open()read()来获取设备的输入。每个read()都应该从您的设备返回一个信息包。您需要为您的设备提供一些文档,或者准备对数据包的含义进行反向工程。

答案 1 :(得分:1)

您应该使用libusb库:http://libusb.sourceforge.net/doc/index.html

   #include <libusb.h>

另一种方法是将/ dev / usb / hiddev0作为具有读取,写入系统调用的简单文件读取。 见:男人打开,男人2读,男人2写。

   #include <fcntl.h>
   #include <unistd.h>

答案 2 :(得分:1)

你前面有一条复杂的道路。您首先需要有关“spacepoint-fusion”的信息(希望它附带文档)。

使用终端命令可以获得一些初始值,例如产品ID /供应商ID:

lsusb

接下来,您可能需要知道端点,可以使用以下命令找到端点:

lsusb -v

由此,您可以找到可以写入设备上的哪些地址,以及可以读取哪些地址(以及可能的读/写缓冲区大小)。但是,如果没有适当的文件,这就是你能得到的。您需要知道要写入设备的值以及期望从设备返回的值。

假设您知道要从/向设备读取/写入的值,请尝试并遵循以下示例:

http://www.lvr.com/code/generic_hid.c

我也假设您的设备符合HID标准,但根本不需要这样。无论如何,我祝你USB旅程顺利。