Определение пути HID для USB-устройства HID с помощью libhid в Linux

StackOverflow https://stackoverflow.com/questions/1060860

  •  21-08-2019
  •  | 
  •  

Вопрос

Я заинтересован в использовании libhid для доступа к специальному HID-устройству, которое мы разрабатываем на микроконтроллере PIC.Мне удалось успешно запустить код test_libhid.Инструкции по чтению и записи на устройства, использующие эту библиотеку, представлены в виде комментариев в коде test_libhid.

Я пытался следовать документированным методам чтения и записи, но до сих пор мне не удалось успешно прочитать или записать на устройство.Я подозреваю, что причина может заключаться в том, что дескриптор отчета для устройства определяет массив размером 64 байта как для отчетов о входных, так и о выходных данных.

Я прочитал подробности, содержащиеся в разделе «Определение класса устройства для HID» на сайте usb.org, и думаю, что понимаю, как в целом работают дескрипторы и как они преобразуются в пути HID, но мои попытки читать и записывать данные на устройство не имели успеха. неуспешный.

Я убедился, что устройство работает в Windows, поэтому моя проблема, похоже, связана со стороной Linux.Не думаю, что это имеет значение, но должен отметить, что сейчас я работаю на виртуальной машине VMWare, загруженной сервером Ubuntu 8.04.

Может ли кто-нибудь дать рекомендации о том, как указать путь 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 для этого входного и выходного отчета, это будет огромной помощью.

Спасибо.

Это было полезно?

Решение

После долгих проб и ошибок мне так и не удалось заставить libhid работать с дескриптором отчета для моего целевого устройства.Я обнаружил, что интерфейс HID-устройства (hiddev) работает очень хорошо и на самом деле его очень легко понять.Есть хороший PDF-ссылка на hiddev что я очень рекомендую.Кроме того, очень полезным оказался включаемый файл hiddev.h в /usr/include/linux.В Ubuntu 8.04 интерфейс hiddev работал «из коробки» без необходимости дополнительной настройки.

Надеюсь, это поможет следующему человеку, у которого возникнут проблемы с подключением своего HID-устройства к хосту Linux.

Примечание:Ссылка, которую я предоставил на файл .PDF выше, похоже, исчезла.я опубликовал копия файла .PDF здесь.Это бесплатный сервис обмена файлами, поэтому вам придется выдержать несколько рекламных объявлений, чтобы его загрузить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top