Instance CI | Statut |
---|---|
Linux/macOS/Windows (master) | |
Windows (master) | |
BSD, last build (branch/PR) | |
Coverity Scan (last) |
HIDAPI est une bibliothèque multiplateforme qui permet à une application de s'interfacer avec des appareils USB et Bluetooth de classe HID sous Windows, Linux, FreeBSD et macOS. HIDAPI peut être construit comme une bibliothèque partagée ( .so
, .dll
ou .dylib
) ou peut être intégré directement dans une application cible en ajoutant un seul fichier source (par plate-forme) et un seul en-tête.
Voir les remarques sur l'intégration directement dans votre système de build.
La bibliothèque HIDAPI a été initialement développée par Alan Ott (signal11).
Elle a été déplacée vers libusb/hidapi le 4 juin 2019, afin de fusionner des corrections de bugs importantes et de poursuivre le développement de la bibliothèque.
hid.dll
) Sous Linux, le back-end hidraw ou libusb peut être utilisé. Il existe des compromis et les fonctionnalités prises en charge sont légèrement différentes. Les deux sont construits par défaut. Il appartient à l'application liée à hidapi de choisir le backend au moment de la liaison en créant un lien vers libhidapi-libusb
ou libhidapi-hidraw
.
Notez que vous devrez installer un fichier de règles udev avec votre application pour que les utilisateurs non privilégiés puissent accéder aux appareils HID avec hidapi. Reportez-vous au fichier 69-hid.rules dans le répertoire udev
pour un exemple.
linux/hid.c
) :Ce back-end utilise l'interface hidraw du noyau Linux et prend en charge les périphériques USB et Bluetooth HID. Il nécessite la version du noyau au moins 2.6.39 pour être construit. De plus, il ne communiquera qu’avec les appareils auxquels sont associés des nœuds hidraw. Les claviers, souris et certains autres appareils qui sont sur liste noire en raison de leurs nœuds hidraw ne fonctionneront pas. Heureusement, pour presque toutes les utilisations de hidraw, cela ne pose pas de problème.
libusb/hid.c
) :Ce back-end utilise libusb-1.0 pour communiquer directement avec un périphérique USB. Ce back-end ne fonctionnera bien sûr pas avec les appareils Bluetooth.
HIDAPI est également livré avec une interface graphique de test. L'interface graphique de test est multiplateforme et utilise Fox Toolkit http://www.fox-toolkit.org. Il s'appuiera sur toutes les plates-formes prises en charge par HIDAPI. Comme il repose sur une bibliothèque tierce, sa construction est facultative mais utile lors du débogage du matériel.
REMARQUE : L'interface graphique de test basée sur Fox Toolkit n'est pas activement développée ni prise en charge par l'équipe HIDAPI. Il est conservé comme objet historique. Il peut même fonctionner à un moment donné ou sur certaines plates-formes, mais il ne bénéficiera pas de nouvelles fonctionnalités ni de corrections de bugs.
Les instructions pour installer Fox-Toolkit sur chaque plate-forme ne sont pas fournies. Assurez-vous d'utiliser Fox-Toolkit v1.6 si vous choisissez de l'utiliser.
Si vous souhaitez jouer avec votre appareil HID avant de commencer tout développement avec HIDAPI et que l'utilisation d'une application GUI n'est pas une option pour vous, vous pouvez essayer hidapitester
.
Cette application dispose d'une interface console pour la plupart des fonctionnalités prises en charge par la bibliothèque HIDAPI.
L'API fournit les fonctions HID les plus couramment utilisées, notamment l'envoi et la réception de rapports d'entrée, de sortie et de fonctionnalités. L'exemple de programme, qui communique avec une version fortement piratée de l'exemple Microchip USB Generic HID, ressemble à ceci (avec la vérification des erreurs supprimée pour plus de simplicité) :
Avertissement : exécutez uniquement le code que vous comprenez et uniquement lorsqu'il est conforme aux spécifications de l'appareil. L'écriture aléatoire de données ( hid_write
) sur vos appareils HID peut les casser.
#include // printf
#include // wchar_t
#include
#define MAX_STR 255
int main ( int argc , char * argv [])
{
int res ;
unsigned char buf [ 65 ];
wchar_t wstr [ MAX_STR ];
hid_device * handle ;
int i ;
// Initialize the hidapi library
res = hid_init ();
// Open the device using the VID, PID,
// and optionally the Serial number.
handle = hid_open ( 0x4d8 , 0x3f , NULL );
if (! handle ) {
printf ( "Unable to open devicen" );
hid_exit ();
return 1 ;
}
// Read the Manufacturer String
res = hid_get_manufacturer_string ( handle , wstr , MAX_STR );
printf ( "Manufacturer String: %lsn" , wstr );
// Read the Product String
res = hid_get_product_string ( handle , wstr , MAX_STR );
printf ( "Product String: %lsn" , wstr );
// Read the Serial Number String
res = hid_get_serial_number_string ( handle , wstr , MAX_STR );
printf ( "Serial Number String: (%d) %lsn" , wstr [ 0 ], wstr );
// Read Indexed String 1
res = hid_get_indexed_string ( handle , 1 , wstr , MAX_STR );
printf ( "Indexed String 1: %lsn" , wstr );
// Toggle LED (cmd 0x80). The first byte is the report number (0x0).
buf [ 0 ] = 0x0 ;
buf [ 1 ] = 0x80 ;
res = hid_write ( handle , buf , 65 );
// Request state (cmd 0x81). The first byte is the report number (0x0).
buf [ 0 ] = 0x0 ;
buf [ 1 ] = 0x81 ;
res = hid_write ( handle , buf , 65 );
// Read requested state
res = hid_read ( handle , buf , 65 );
// Print out the returned buffer.
for ( i = 0 ; i < 4 ; i ++ )
printf ( "buf[%d]: %dn" , i , buf [ i ]);
// Close the device
hid_close ( handle );
// Finalize the hidapi library
res = hid_exit ();
return 0 ;
}
Vous pouvez également utiliser hidtest/test.c comme point de départ pour vos applications.
HIDAPI peut être utilisé par l'une des trois licences décrites dans LICENSE.txt.
Si vous souhaitez créer votre propre application utilisant des appareils HID avec HIDAPI, vous devez vous procurer le package de développement HIDAPI.
En fonction de votre environnement de développement, HIDAPI sera probablement fourni par votre gestionnaire de packages.
Par exemple sur Ubuntu, HIDAPI est disponible via APT :
sudo apt install libhidapi-dev
Le nom du package HIDAPI pour d’autres systèmes/gestionnaires de packages peut différer. Vérifiez la documentation/liste des packages de votre gestionnaire de packages.
Consultez BUILD.md pour plus de détails.