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