Nas últimas semanas, tenho construído um dispositivo USB usando um PIC18F2550. Desta vez, quis me envolver em uma discussão com o host de software. Afinal, se você construir um dispositivo USB, é lógico que irá querer usá-lo de algum software de computador, certo? Se você criou algo que se parece com um dispositivo padrão (por exemplo, um mouse), então isso é fácil. É só você tratá-lo como faria com qualquer outro mouse.
No entanto, é mais simples e mais flexível construir uma HID (Human Interface Device, ou em tradução livre, dispositivo de interface humana). E foi isso que eu fiz. É verdade que um mouse (e teclado) é uma HID. Mas nem todos os HIDs agem como dispositivos de entrada padrão.
Você poderia escrever um driver USB completo, mas isso dá muito trabalho. Sem mencionar que seria necessário escrever um driver novo para cada sistema operacional. Isso é parte da beleza de usar o projeto HID: todos os principais sistemas operacionais já têm um driver para isso. Seu trabalho é interagir com eles a partir do software de usuário simples-para-escrever.
Existem algumas opções. A biblioteca libusb é muito flexível, mas também é um pouco complexa para trabalhar quando você não precisa de todas as suas capacidades. Além disso, o suporte do Windows foi limitado recentemente.
A outra opção usar a biblioteca HIDAPI. Isso fornece uma interface uniforme entre Linux, Mac e Windows por meio de back-ends diferentes. Primeiro, queria escrever uma interface de linha de comando simples para provar que eu poderia falar com o dispositivo.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include #include “hidapi.h”
int main(int argc, char *argv[]) { int state=0; float v;
unsigned char buf[65]; hid_device *handle; if (hid_init()) return; printf(“Hid initn”); handle=hid_open(0x4d8,0xf83f,NULL); // our PID if (!handle) return; printf(“Hid openedn”); buf[0]=0; // send a command buf[1]=1; buf[2]=1; int rv1=hid_write(handle,buf,3); printf(“Write returned %xn”,rv1); buf[0]=0; // send a read command buf[1]=2; hid_write(handle,buf,2); hid_read(handle,buf,sizeof(buf)); // read data back v=(buf[3] |
Não é muito excitante, mas fácil de seguir. A função hid_init configura a biblioteca enquanto a chamada thehid_open abre o meu dispositivo específico. O hid_read,hid_write e comandos hid_close fazem o que você acha que eles fazem. Finalmente, o hid_exit limpa e nada fica para trás.
Muito simples. Claro, você pode fazer muito mais, mas o código desta série irá permitir que você faça uma quantidade surpreendente de desenvolvimento USB com um mínimo de barulho.
A Cohesity anunciou a concessão da Patente Nº 12.619.501 pelo Escritório de Patentes e Marcas…
Diogo Cortiz, professor da PUC-SP e doutor em Tecnologias da Inteligência e Design Digital, tem…
DJ Sampath chegou aos Estados Unidos há 30 anos com oito dólares no bolso e…
A evolução da inteligência artificial nos serviços financeiros ainda esbarra em desafios relacionados à experiência…
A Motorola Solutions anunciou a assinatura de um acordo definitivo para adquirir a D-Fend Solutions,…
Nesta terça-feira (2), a Meta anunciou a expansão global de configurações de conteúdo para contas…