Dispositivo virtual USB HID

9

Estoy desarrollando una aplicación que se comunicará con el dispositivo USB HID conectado. El problema es que todavía no hay un dispositivo real (está siendo desarrollado por otra parte de nuestro equipo), por lo que me gustaría tener alguna forma de emularlo.

La utilidad ideal que se me ocurre debería tener este aspecto: un módulo de kernel que, cuando se carga, crea dos nodos de dispositivo en el sistema:

  • un dispositivo virtual usb-hid, que es indistinguible de cualquier nodo real del dispositivo usb-hid, probablemente /dev/hidraw0; y, por supuesto, este dispositivo debería ser visto por cualquier biblioteca usb-hid que use, por ejemplo hidapi.
  • un nodo de dispositivo de servicio, como /dev/virtual_hid_1.

Entonces, cuando alguien escribe /dev/virtual_hid_1, estos datos deben leerse literalmente /dev/hidraw0y viceversa.

De esta manera, puedo escribir alguna aplicación de depuración en cualquier idioma que desee, ya sea pythono lo que sea; simplemente debe escribir y leer desde y hacia /dev/virtual_hid_1. Sería muy conveniente para el desarrollo.

¿Hay algo como esto?

Dmitry Frank
fuente

Respuestas:

5
  1. Es posible que le interese una solución de hardware económica, elegante y abierta para emular dispositivos usb en desarrollo: la placa micropython . (No tengo ningún problema con este hardware).

    Es una pequeña placa independiente que ejecuta python 3 y se conecta al usb donde puede aparecer como, por ejemplo, un HID de mouse o HID de teclado. Simplemente copie su archivo fuente de Python en el dispositivo y lo ejecuta. Un bello concepto.

    Ok, en realidad no está destinado a lo que desea, y es posible que deba descargar el SDK y hacer un poco de trabajo en C para que aparezca exactamente como lo necesita, pero la mayor parte de su código estaría en Python. Hay puertos serie de nivel ttl, puertos i2c, spi, etc.

  2. Para una solución alternativa, hay una placa que emula dispositivos USB con Python, pero no estoy seguro de si puede comprar un producto terminado.

  3. También hay emulación usb usando usbip sin hardware adicional, que aún no he visto.

meuh
fuente
5

Probablemente estés buscando un uhidmódulo de kernel. Ver documentación en las fuentes del kernel :

Con UHID, un controlador de transporte de espacio de usuario puede crear dispositivos ocultos del núcleo para cada dispositivo conectado al bus controlado por espacio de usuario. La API UHID define los eventos de E / S proporcionados desde el núcleo al espacio de usuario y viceversa.

Hay un ejemplo de aplicación de espacio de usuario en ./samples/uhid/uhid-example.c

Marmarek
fuente