Instância de CI | Status |
---|---|
Linux/macOS/Windows (master) | |
Windows (master) | |
BSD, last build (branch/PR) | |
Coverity Scan (last) |
HIDAPI é uma biblioteca multiplataforma que permite que um aplicativo faça interface com dispositivos USB e Bluetooth da classe HID no Windows, Linux, FreeBSD e macOS. HIDAPI pode ser construída como uma biblioteca compartilhada ( .so
, .dll
ou .dylib
) ou pode ser incorporada diretamente em um aplicativo de destino adicionando um único arquivo de origem (por plataforma) e um único cabeçalho.
Veja os comentários sobre a incorporação diretamente em seu sistema de compilação.
A biblioteca HIDAPI foi originalmente desenvolvida por Alan Ott (signal11).
Ela foi movida para libusb/hidapi em 4 de junho de 2019, a fim de mesclar correções de bugs importantes e continuar o desenvolvimento da biblioteca.
hid.dll
) No Linux, o back-end hidraw ou libusb pode ser usado. Existem desvantagens e a funcionalidade suportada é um pouco diferente. Ambos são construídos por padrão. Cabe ao aplicativo vinculado ao hidapi escolher o back-end no momento do link, vinculando-o a libhidapi-libusb
ou libhidapi-hidraw
.
Observe que você precisará instalar um arquivo de regras udev com seu aplicativo para que usuários sem privilégios possam acessar dispositivos HID com hidapi. Consulte o arquivo 69-hid.rules no diretório udev
para obter um exemplo.
linux/hid.c
):Este back-end usa a interface hidraw no kernel Linux e suporta dispositivos HID USB e Bluetooth. Requer versão do kernel pelo menos 2.6.39 para construir. Além disso, ele se comunicará apenas com dispositivos que possuam nós hidraw associados a eles. Teclados, mouses e alguns outros dispositivos que estão na lista negra por terem nós hidraw não funcionarão. Felizmente, para quase todos os usos do hidraw, isso não é um problema.
libusb/hid.c
):Este back-end usa libusb-1.0 para se comunicar diretamente com um dispositivo USB. É claro que esse back-end não funcionará com dispositivos Bluetooth.
HIDAPI também vem com uma GUI de teste. A GUI de teste é multiplataforma e usa o Fox Toolkit http://www.fox-toolkit.org. Ele será baseado em todas as plataformas suportadas pela HIDAPI. Como depende de uma biblioteca de terceiros, construí-la é opcional, mas é útil ao depurar hardware.
NOTA: A GUI de teste baseada no Fox Toolkit não é desenvolvida ativamente nem suportada pela equipe HIDAPI. É mantido como um artefato histórico. Pode até funcionar em algum momento ou em algumas plataformas, mas não receberá novos recursos ou correções de bugs.
Não são fornecidas instruções para instalar o Fox-Toolkit em cada plataforma. Certifique-se de usar o Fox-Toolkit v1.6 se você decidir usá-lo.
Se você quiser brincar com seu dispositivo HID antes de iniciar qualquer desenvolvimento com HIDAPI e usar um aplicativo GUI não for uma opção para você, tente hidapitester
.
Este aplicativo possui uma interface de console para a maioria dos recursos suportados pela biblioteca HIDAPI.
A API fornece as funções HID mais comumente usadas, incluindo envio e recebimento de relatórios de entrada, saída e recursos. O programa de amostra, que se comunica com uma versão fortemente hackeada do exemplo Microchip USB Generic HID, tem a seguinte aparência (com a verificação de erros removida para simplificar):
Aviso: execute apenas o código que você entende e somente quando ele estiver em conformidade com as especificações do dispositivo. Escrever dados ( hid_write
) aleatoriamente em seus dispositivos HID pode quebrá-los.
#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 ;
}
Você também pode usar hidtest/test.c como ponto de partida para seus aplicativos.
HIDAPI pode ser usado por uma das três licenças descritas em LICENSE.txt.
Se você deseja construir seu próprio aplicativo que usa dispositivos HID com HIDAPI, você precisa obter o pacote de desenvolvimento HIDAPI.
Dependendo de qual é o seu ambiente de desenvolvimento, o HIDAPI provavelmente será fornecido pelo seu gerenciador de pacotes.
Por exemplo, no Ubuntu, o HIDAPI está disponível via APT:
sudo apt install libhidapi-dev
O nome do pacote HIDAPI para outros sistemas/gerenciadores de pacotes pode ser diferente. Verifique a documentação/lista de pacotes do seu gerenciador de pacotes.
Verifique BUILD.md para obter detalhes.