Mi piacerebbe costruire un dispositivo basato su RaspberryPi in grado di comunicare con il mio laptop Linux via USB (non credo che importi, ma userò un dongle USB su misura che ha un chip FTDI su di esso, e il mio laptop avrà i driver FTDI installati su di esso).
Mi piacerebbe rigare il mio dispositivo con un semplice stick di controllo e una semplice tastiera, e quello che mi piacerebbe fare è controllare il mouse e la tastiera del mio portatile attraverso questo dispositivo. Quindi:
- Esempio di mouse:
- Sposto il controller collegato al RPi
- RPi lo converte in una sorta di comando / evento di input
- RPi invia questo comando / evento di ingresso al dongle USB / FTDI collegato al mio laptop
- Il dongle USB / FTDI invia il comando / input ai driver del dispositivo FTDI
- In qualche modo (???) il mouse (correttamente) si sposta sullo schermo del mio laptop
- Esempio di tastiera
- Digito un tasto sulla tastiera collegata al RPi
- RPi lo converte in una sorta di comando / evento di input
- RPi invia questo comando / evento di ingresso al dongle USB / FTDI collegato al mio laptop
- Il dongle USB / FTDI invia il comando / input ai driver del dispositivo FTDI
- In qualche modo (???) il sistema operativo riceve questo comando / input e lo gestisce appropriatamente; ad esempio se un'app è aperta sullo schermo e un determinato campo di testo è attivo, la chiave verrà visualizzata al suo interno, ecc.
Posso gestire tutto fino ai driver FTDI che ricevono il comando / input, ma dove sono perso è come posso convincere quei driver a "parlare" con qualsiasi parte di Linux che è responsabile dello spostamento del mouse o della gestione delle sequenze di tasti . Qualche idea?
I presumo Ho bisogno di scrivere un codice C nativo che:
- Leggi dalla porta seriale (dove verranno inviati i comandi / gli input dal RPi)
- Traduci i dati su quella porta in un comando strutturato (
MOVE_MOUSE_10_PIXELS_LEFT
,KEYSTROKE_A
,KEYSTROKE_H
, ecc.) - In qualche modo comunichi al sistema operativo Linux e digli di gestire un comando del genere. Nel caso di un comando
MOVE_MOUSE_*
, questo significa dire a Linux di spostare effettivamente le coordinate del mouse sullo schermo. Nel caso di un comandoKEY_*
, questo significa dire a Linux di comportarsi come se un utente avesse digitato quella chiave proprio lì sulla tastiera del portatile.
Sono semplicemente insicuro su come eseguire il passaggio n. 3 sopra.