Dispositivo HID USB virtuale


9

Sto sviluppando un'applicazione che comunicherà con il dispositivo USB HID collegato. Il problema è che non esiste ancora un dispositivo reale (è in fase di sviluppo da un'altra parte del nostro team), quindi mi piacerebbe davvero avere un modo per emularlo.

L'utilità ideale a cui posso pensare dovrebbe apparire così: un modulo del kernel, che, quando caricato, crea due nodi di dispositivo nel sistema:

  • un dispositivo virtuale USB nascosto, che è indistinguibile da qualsiasi vero nodo dispositivo USB nascosto, probabilmente /dev/hidraw0; e ovviamente questo dispositivo dovrebbe essere visto da qualunque libreria usb-hid che userei, per esempio hidapi.
  • un nodo del dispositivo di servizio, come /dev/virtual_hid_1.

Quindi, quando qualcuno scrive /dev/virtual_hid_1, questi dati dovrebbero essere letteralmente letti /dev/hidraw0e viceversa.

In questo modo, posso scrivere qualche app di debug in qualsiasi lingua che voglio, sia essa pythono qualunque cosa; dovrebbe semplicemente scrivere e leggere da e verso /dev/virtual_hid_1. Sarebbe molto conveniente per lo sviluppo.

C'è qualcosa del genere?

Risposte:


5
  1. Potresti essere interessato a una soluzione hardware economica, elegante e aperta per emulare dispositivi USB in sviluppo: la scheda micropython . (Non ho alcuna affiliazione con questo hardware).

    È una piccola scheda autonoma che esegue Python 3 e si collega all'USB dove può apparire come, ad esempio, un HID del mouse o un HID della tastiera. Basta copiare il file sorgente di Python sul dispositivo e lo esegue. Un bellissimo concetto.

    Ok, non è davvero pensato per quello che vuoi, e potresti aver bisogno di scaricare l'sk e fare un po 'di lavoro in C per farlo apparire esattamente come ti serve, ma la maggior parte del tuo codice sarebbe in Python. Ci sono porte seriali di livello ttl, i2c, spi etc.

  2. Per una soluzione alternativa, esiste una scheda che emula i dispositivi USB con Python ma non sono sicuro che sia possibile acquistare un prodotto finito.

  3. Esiste anche un'emulazione USB tramite usbip senza hardware aggiuntivo, che non ho ancora visto.


5

Probabilmente stai cercando il uhidmodulo del kernel. Vedi la documentazione nei sorgenti del kernel :

Con UHID, un driver di trasporto dello spazio utente può creare dispositivi nascosti del kernel per ciascun dispositivo collegato al bus controllato dallo spazio utente. L'API UHID definisce gli eventi I / O forniti dal kernel nello spazio utente e viceversa.

Esiste un'applicazione di spazio utente di esempio in ./samples/uhid/uhid-example.c

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.