【问题标题】:Determining the HID Path for USB HID device using libhid on Linux在 Linux 上使用 libhid 确定 USB HID 设备的 HID 路径
【发布时间】:2009-06-29 22:18:20
【问题描述】:

我有兴趣使用 libhid 访问我们正在 PIC 微控制器上开发的自定义 HID 设备。我已经能够成功运行 test_libhid 代码。使用该库读写设备的指令在 test_libhid 代码中以 cmets 的形式提供。

我已尝试遵循记录在案的读写技术,但到目前为止,我还没有成功地读取或写入设备。我怀疑原因可能是设备的报告描述符为输入和输出数据报告指定了一个 64 字节的数组。

我已阅读 usb.org 的 HID 设备类定义部分中包含的详细信息,并且我认为我了解描述符的一般工作原理以及它们如何转换为 HID 路径,但我尝试读取和写入数据到设备发生故障。

我已验证该设备可在 Windows 中运行,因此我的问题似乎出在 Linux 端。我认为这无关紧要,但我应该注意,我目前正在使用 VMWare 虚拟机,加载了 Ubuntu 8.04 服务器

谁能提供一些关于如何为以下报告描述符(从 lsusb –vvv 生成)指定 HID 路径的指导:

Report Descriptor: (length is 29)
    Item(Global): Usage Page, data= [ 0x00 0xff ] 65280 
                        (null)
    Item(Local ): Usage, data= [ 0x01 ] 1
                        (null)
    Item(Main  ): Collection, data= [ 0x01 ] 1
                        Application
    Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                        (null)
    Item(Local ): Usage Maximum, data= [ 0x40 ] 64
                        (null)
    Item(Global): Logical Minimum, data= [ 0x00 ] 0
    Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
    Item(Global): Report Size, data= [ 0x08 ] 8
    Item(Global): Report Count, data= [ 0x40 ] 64
    Item(Main  ): Input, data= [ 0x02 ] 2
                  Data Variable Absolute No_Wrap Linear
                  Preferred_State No_Null_Position Non_Volatile Bitfield
    Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                        (null)
    Item(Local ): Usage Maximum, data= [ 0x40 ] 64
                        (null)
    Item(Main  ): Output, data= [ 0x02 ] 2
                        Data Variable Absolute No_Wrap Linear
                        Preferred_State No_Null_Position Non_Volatile Bitfield
    Item(Main  ): End Collection, data=none

另外,当我运行 test_libhid 程序时,它会将解析树转储为 64 个相同的条目,如下所示:

path: 0xff000001.0x00000000; type: 0x80

这些大概是输入。此列表后面是另外 64 个条目,如下所示:

path: 0xff000001.0x00000000; type: 0x90

我已经发布到 libhid 邮件列表,但最近那里没有太多活动,所以我想我会在这里提出我的问题。如果任何人都可以提供有关如何指定此输入和输出报告的 HID 路径的指导,那将是一个巨大的帮助。

谢谢。

【问题讨论】:

  • 发布您的注释:部分作为答案并稍后接受

标签: linux usb hid


【解决方案1】:

经过多次反复试验,我始终无法让 libhid 使用目标设备的报告描述符。我确实发现 HID 设备接口 (hiddev) 工作得很好,而且实际上很容易理解。我强烈推荐一个很好的PDF Reference for hiddev。此外,/usr/include/linux 中的包含文件 hiddev.h 也很有帮助。在 Ubuntu 8.04 中,hiddev 界面“开箱即用”,无需额外配置。

希望这对下一个在将 HID 设备连接到 Linux 主机时遇到问题的人有所帮助。

注意:我为上述 .PDF 文件提供的链接似乎已消失。我发布了copy of the .PDF file here。它是一项免费的文件共享服务,因此您需要忍受一些广告才能下载它。

【讨论】:

  • 对不起,那个下载链接现在失效了,能不能重新上传一下?谢谢:)
  • 恐怕PDF又死了。也许你可以把它放在幻灯片或类似的东西上?
  • 我也处于同样的困境中。我更喜欢 libusb,因为它非常简单。 libhid 需要大量额外信息来发送和接收数据包。
猜你喜欢
  • 2012-05-10
  • 2011-11-02
  • 1970-01-01
  • 2015-06-04
  • 2023-04-07
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多