instancia de CI | Estado |
---|---|
Linux/macOS/Windows (master) | |
Windows (master) | |
BSD, last build (branch/PR) | |
Coverity Scan (last) |
HIDAPI es una biblioteca multiplataforma que permite que una aplicación interactúe con dispositivos USB y Bluetooth de clase HID en Windows, Linux, FreeBSD y macOS. HIDAPI puede construirse como una biblioteca compartida ( .so
, .dll
o .dylib
) o puede integrarse directamente en una aplicación de destino agregando un único archivo fuente (por plataforma) y un único encabezado.
Consulte los comentarios sobre la integración directa en su sistema de compilación.
La biblioteca HIDAPI fue desarrollada originalmente por Alan Ott (signal11).
Se trasladó a libusb/hidapi el 4 de junio de 2019 para fusionar correcciones de errores importantes y continuar con el desarrollo de la biblioteca.
hid.dll
) En Linux, se puede utilizar el back-end hidraw o libusb. Hay compensaciones y la funcionalidad admitida es ligeramente diferente. Ambos están construidos de forma predeterminada. Depende de la aplicación que se vincula a hidapi elegir el backend en el momento del vínculo vinculando a libhidapi-libusb
o libhidapi-hidraw
.
Tenga en cuenta que deberá instalar un archivo de reglas udev con su aplicación para que los usuarios sin privilegios puedan acceder a dispositivos HID con hidapi. Consulte el archivo 69-hid.rules en el directorio udev
para ver un ejemplo.
linux/hid.c
):Este back-end utiliza la interfaz hidraw en el kernel de Linux y admite dispositivos HID USB y Bluetooth. Requiere la versión del kernel al menos 2.6.39 para compilarse. Además, solo se comunicará con dispositivos que tengan nodos hidraw asociados. Los teclados, ratones y algunos otros dispositivos que están en la lista negra por tener nodos hidraw no funcionarán. Afortunadamente, para casi todos los usos de hidraw, esto no es un problema.
libusb/hid.c
):Este back-end utiliza libusb-1.0 para comunicarse directamente con un dispositivo USB. Por supuesto, este back-end no funcionará con dispositivos Bluetooth.
HIDAPI también viene con una GUI de prueba. La GUI de prueba es multiplataforma y utiliza Fox Toolkit http://www.fox-toolkit.org. Se basará en todas las plataformas compatibles con HIDAPI. Dado que depende de una biblioteca de terceros, compilarla es opcional pero resulta útil a la hora de depurar hardware.
NOTA: La GUI de prueba basada en Fox Toolkit no está desarrollada ni respaldada activamente por el equipo de HIDAPI. Se conserva como un artefacto histórico. Es posible que incluso funcione en algún momento o en algunas plataformas, pero no obtendrá ninguna característica nueva ni corrección de errores.
No se proporcionan instrucciones para instalar Fox-Toolkit en cada plataforma. Asegúrese de utilizar Fox-Toolkit v1.6 si decide utilizarlo.
Si desea jugar con su dispositivo HID antes de comenzar cualquier desarrollo con HIDAPI y usar una aplicación GUI no es una opción para usted, puede probar hidapitester
.
Esta aplicación tiene una interfaz de consola para la mayoría de las funciones admitidas por la biblioteca HIDAPI.
La API proporciona las funciones HID más utilizadas, incluido el envío y la recepción de informes de funciones, salidas y entradas. El programa de muestra, que se comunica con una versión muy pirateada del ejemplo Microchip USB Generic HID se ve así (con la verificación de errores eliminada para simplificar):
Advertencia: ejecute únicamente el código que comprenda y solo cuando se ajuste a las especificaciones del dispositivo. Escribir datos ( hid_write
) al azar en sus dispositivos HID puede dañarlos.
#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 ;
}
También puede utilizar hidtest/test.c como punto de partida para sus aplicaciones.
HIDAPI puede ser utilizado por una de las tres licencias como se describe en LICENSE.txt.
Si desea crear su propia aplicación que utilice dispositivos HID con HIDAPI, necesita obtener el paquete de desarrollo HIDAPI.
Dependiendo de cuál sea su entorno de desarrollo, es probable que su administrador de paquetes proporcione HIDAPI.
Por ejemplo, en Ubuntu, HIDAPI está disponible a través de APT:
sudo apt install libhidapi-dev
El nombre del paquete HIDAPI para otros sistemas/administradores de paquetes puede diferir. Consulte la documentación/lista de paquetes de su administrador de paquetes.
Consulte BUILD.md para obtener más detalles.