Dispositivo USB Virtual HID

6

Estou desenvolvendo um aplicativo que se comunicará com o dispositivo USB HID conectado. O problema é que ainda não existe um dispositivo real (está sendo desenvolvido por outra parte da nossa equipe), então, eu realmente gostaria de ter uma maneira de imitá-lo.

O utilitário ideal que eu posso pensar deve ser assim: um módulo do kernel, que, quando carregado, cria dois nós de dispositivo no sistema:

  • um dispositivo virtual usb-hid, que é indistinguível de qualquer nó real do dispositivo usb-hid, provavelmente /dev/hidraw0 ; e, claro, esse dispositivo deve ser visto por qualquer biblioteca usb-hid que eu usasse, por exemplo, hidapi .
  • um nó do dispositivo de serviço, como /dev/virtual_hid_1 .

Assim, quando alguém escreve para /dev/virtual_hid_1 , esses dados devem ser lidos literalmente de /dev/hidraw0 e vice-versa.

Dessa forma, posso escrever algum aplicativo de depuração em qualquer idioma que eu quiser, seja python ou qualquer outra coisa; ele deve simplesmente escrever e ler para e de /dev/virtual_hid_1 . Seria muito conveniente para o desenvolvimento.

Existe algo assim?

    
por Dmitry Frank 11.07.2015 / 11:53

2 respostas

4

  1. Você pode estar interessado em uma solução de hardware barata, elegante e aberta para emular dispositivos USB em desenvolvimento: a placa micropython . (Eu não tenho nenhuma afiliação com este hardware).

    É uma pequena placa autônoma que executa python 3 e se conecta ao usb onde pode aparecer como, por exemplo, um mouse HID ou um teclado HID. Você acabou de copiar seu arquivo de origem python para o dispositivo e o executa. Um belo conceito.

    Ok, isso não é exatamente o que você quer, e você pode precisar baixar o sdk e fazer um pouco de trabalho em C para que ele apareça exatamente como você precisa, mas a maior parte do seu código seria em python . Existem portas seriais de nível ttl, portas i2c, spi etc.

  2. Para uma solução alternativa, há uma placa que emula usb dispositivos com python , mas não tenho certeza se você pode comprar um produto acabado.

  3. Há também emulação usb usando usbip sem hardware extra, que eu não olhei ainda .

por 11.07.2015 / 19:46
2

Você provavelmente está procurando pelo módulo uhid kernel. Veja documentação em fontes do kernel :

With UHID, a user-space transport driver can create kernel hid-devices for each device connected to the user-space controlled bus. The UHID API defines the I/O events provided from the kernel to user-space and vice versa.

There is an example user-space application in ./samples/uhid/uhid-example.c

    
por 12.01.2017 / 02:48