La determinación de la ruta de HID para el dispositivo USB HID usando libhid en Linux

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

  •  21-08-2019
  •  | 
  •  

Pregunta

Estoy interesado en el uso libhid acceder a un dispositivo HID personalizado que estamos desarrollando en un microcontrolador PIC. He podido conseguir con éxito el código test_libhid se ejecute. Las instrucciones para la lectura y escritura a los dispositivos que utilizan esta biblioteca se proporcionan como comentarios en el código test_libhid.

He intentado seguir las técnicas documentadas para la lectura y la escritura, pero hasta ahora, no he tenido éxito para leer o escribir en el dispositivo. Sospecho que la razón puede ser que el descriptor de informes para el dispositivo especifica una matriz de 64 bytes, tanto para los informes de datos de entrada y de salida.

He leído los detalles contenidos en la definición de clase de dispositivo HID para la sección de usb.org, y creo que entiendo cómo funcionan los descriptores en general y cómo se traducen a HID caminos, pero mis intentos de leer y escribir datos en el dispositivo ha fallado.

He comprobado que el dispositivo funciona en Windows, por lo que mi problema parece radicar en el lado de Linux. No creo que debería importar, pero debo señalar que estoy trabajando actualmente en una máquina virtual de VMware, cargado con Ubuntu 8.04 servidor

¿Alguien puede proporcionar alguna orientación sobre cómo especificar que HID camino para el siguiente descriptor de informes (generado a partir de 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

Además, al ejecutar el programa test_libhid, se vuelca el árbol de análisis sintáctico como 64 entradas idénticas que se ven así:

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

Estos son presumiblemente las entradas. Esta lista es seguida por otras 64 entradas que se ven así:

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

He enviado a la lista de correo libhid, pero no ha habido mucha actividad allí recientemente, así que pensé que iba a llevar a mi pregunta aquí. Si alguien puede proporcionar orientación sobre cómo se debe especificar la ruta de HID para este informe de entrada y salida, sería de gran ayuda.

Gracias.

¿Fue útil?

Solución

Después de mucho ensayo y error, nunca fue capaz de conseguir libhid para trabajar con el descriptor de informes para mi dispositivo de destino. Sí encontré que la interfaz de dispositivo HID (hiddev) funcionó muy bien, y en realidad era muy fácil de entender. Hay una buena Referencia PDF para hiddev que recomiendo encarecidamente. Además, la incluyen hiddev.h archivo en / usr / include / linux también fue muy útil. En Ubuntu 8.04, la interfaz hiddev trabajó "fuera de la caja" sin ninguna configuración adicional requerida.

Esperamos que esto sea de alguna ayuda a la siguiente persona que tiene problemas de interfaz de su dispositivo HID a un host Linux.

Nota: El enlace que he proporcionado para el archivo .PDF anterior parece haber desaparecido. He publicado una copia del archivo .PDF aquí . Es un archivo de servicio gratuito para compartir, por lo que tendrá que soportar unos anuncios con el fin de descargarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top