在Linux上使用libhid确定USB HID设备的HID路径

时间:2009-06-29 22:18:20

标签: linux usb hid

我对使用libhid访问我们正在PIC单片机上开发的自定义HID设备感兴趣。我已经能够成功运行test_libhid代码。使用此库读取和写入设备的说明在test_libhid代码中作为注释提供。

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

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

我已经验证该设备可以在Windows中运行,所以我的问题似乎出现在Linux端。我不认为它应该重要,但我应该注意到我目前正在使用Ubuntu 8.04服务器加载VMWare虚拟机

任何人都可以提供一些有关如何为以下报告描述符指定HID路径的指导(从lsusb -vvv生成):

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路径的指导,那将是一个巨大的帮助。

感谢。

1 个答案:

答案 0 :(得分: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。它是一个免费的文件共享服务,所以你需要忍受一些广告才能下载它。