Dispositivo HID USB virtual

9

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

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

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

Portanto, quando alguém escreve /dev/virtual_hid_1, esses dados devem ser lidos literalmente /dev/hidraw0e vice-versa.

Dessa forma, eu posso escrever um aplicativo de depuração em qualquer idioma que desejar, seja ele pythonou o que for; deve apenas escrever e ler de e para /dev/virtual_hid_1. Seria muito conveniente para o desenvolvimento.

Existe algo assim?

Dmitry Frank
fonte

Respostas:

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

    É uma pequena placa autônoma que roda 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 ele é executado. Um conceito bonito.

    Ok, não é realmente para o que você deseja, e pode ser necessário fazer o download do 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 estaria em python. Existem portas seriais de nível ttl, i2c, spi etc.

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

  3. Também há emulação USB usando o usbip sem hardware extra, que ainda não vi.

meuh
fonte
5

Você provavelmente está procurando pelo uhidmódulo do kernel. Veja a documentação nas fontes do kernel :

Com o UHID, um driver de transporte no espaço do usuário pode criar dispositivos ocultos do kernel para cada dispositivo conectado ao barramento controlado pelo espaço do usuário. A API UHID define os eventos de E / S fornecidos do kernel para o espaço do usuário e vice-versa.

Há um exemplo de aplicativo de espaço do usuário em ./samples/uhid/uhid-example.c

Marmarek
fonte