5

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

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

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

那么如何在 linux 机器上用 c++ 读取这个人机界面设备呢?示例将不胜感激。谢谢。

4

3 回答 3

2

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

$ hexdump -C /dev/hidraw1

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

于 2012-01-01T20:21:59.400 回答
1

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

   #include <libusb.h>

另一种方法是将 /dev/usb/hiddev0 读取为具有读、写系统调用的简单文件。参见:man open,man 2 read,man 2 write。

   #include <fcntl.h>
   #include <unistd.h>
于 2011-01-16T19:28:30.713 回答
1

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

一些初始值,例如 Product ID/Vendor ID 可以通过终端命令获得:

lsusb

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

lsusb -v

从中,您可以找到可以写入设备上的哪些地址,以及可以读取哪些地址(可能还有读/写缓冲区的大小)。但这是您在没有适当文件的情况下所能获得的。您将需要知道要写入设备的值,以及期望从设备返回的值。

假设您确实知道要从/向设备读取/写入哪些值,请尝试按照以下示例进行操作:

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

我还假设您的设备符合 HID 标准,但事实并非如此。无论如何,祝你在 USB 之旅中一切顺利。

于 2011-11-06T14:04:54.900 回答