La détermination du chemin HID pour le périphérique USB HID en utilisant libhid sur Linux

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

  •  21-08-2019
  •  | 
  •  

Question

Je suis intéressé à utiliser libhid pour accéder à un périphérique HID sur mesure que nous développons sur un microcontrôleur PIC. Je suis en mesure d'obtenir avec succès le code test_libhid à exécuter. Les instructions pour la lecture et l'écriture à l'aide des appareils de cette bibliothèque sont fournis sous forme de commentaires dans le code test_libhid.

J'ai essayé de suivre les techniques documentées pour la lecture et l'écriture, mais jusqu'à présent, je ne l'ai pas été à lire avec succès ou écrire sur le périphérique. Je soupçonne que la raison peut être que le descripteur de rapport pour l'appareil indique un tableau de 64 octets pour l'entrée et des rapports de données de sortie.

J'ai lu les détails contenus dans la définition de classe de l'appareil pour la section HID de usb.org, et je pense que je comprends comment les descripteurs fonctionnent en général et la façon dont ils se traduisent par des chemins HID, mais mes tentatives pour lire et écrire des données à l'appareil ont échoué.

Je l'ai vérifié que l'appareil fonctionne sous Windows, donc mon problème semble se situer du côté Linux. Je ne pense pas qu'il devrait importer, mais je dois souligner que je travaille actuellement dans une machine virtuelle VMWare, chargé avec le serveur Ubuntu 8.04

Quelqu'un peut-il fournir des indications sur la façon de spécifier qu'il HID chemin pour le descripteur de rapport suivant (généré à partir 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

En outre, quand je lance le programme test_libhid, il déverse l'arbre d'analyse syntaxique de 64 entrées identiques qui ressemblent à ceci:

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

Ce sont probablement les entrées. Cette liste est suivie d'une autre 64 entrées qui ressemblent à ceci:

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

Je l'ai signalé à la liste de diffusion de libhid, mais il n'y a pas eu beaucoup d'activités là-bas récemment, donc je pensais que je porterais ma question ici. Si quelqu'un peut donner des indications sur la façon dont le chemin HID pour cette entrée et sortie du rapport doit être spécifié, ce serait une grande aide.

Merci.

Était-ce utile?

La solution

Après plusieurs essais et erreurs, je n'a jamais été en mesure d'obtenir libhid de travailler avec le descripteur de rapport pour mon appareil cible. Je ne trouve que l'interface périphérique HID (hiddev) fonctionnait très bien et était en fait très facile à comprendre. Il y a un bon PDF Référence hiddev que je recommande fortement. En outre, le fichier inclus hiddev.h dans / usr / include / linux a également été très utile. Dans Ubuntu 8.04, l'interface hiddev a travaillé « hors de la boîte » sans configuration supplémentaire.

Espérons que cela sera d'une aide à la personne suivante qui a des problèmes d'interface HID leur appareil à un hôte Linux.

Note: Le lien que je fournis pour le fichier .PDF ci-dessus semble avoir disparu. J'ai posté un copie du fichier .PDF . Son service de partage de fichiers gratuit, vous devrez supporter quelques publicités pour le télécharger.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top