与 HID 对话

问题描述 投票:0回答:3

我有一个由 PNI Corp 开发的传感器,称为 spacepoint-fusion。我需要用 C++ 与该设备交互并不断从设备读取新数据。

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

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

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

c++ linux hid
3个回答
2
投票

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

$ hexdump -C /dev/hidraw1

如果您获得一些有用的数据,那么最简单的方法是使用

open()
read()
从设备获取输入。每个
read()
应从您的设备返回一包信息。您需要一些设备文档,或者准备好对数据包的含义进行逆向工程。


2
投票

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

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

lsusb

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

lsusb -v

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

假设您确实知道要从设备读取/写入哪些值,请尝试遵循以下示例:

https://web.archive.org/web/20130902234909/http://www.lvr.com/code/generic_hid.c

我还假设您的设备符合 HID 标准,但事实并非如此。不管怎样,祝您 USB 之旅一切顺利。


1
投票

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

   #include <libusb.h>

另一种方法是使用读、写系统调用将 /dev/usb/hiddev0 作为简单文件读取。 请参阅:man 打开,man 2 读取,man 2 写入。

   #include <fcntl.h>
   #include <unistd.h>
© www.soinside.com 2019 - 2024. All rights reserved.