Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [c++] Come leggere costantemente gli input da porta USB

    Buongiorno a tutti.

    Ho acquistato un raspberry pi e vorrei creare un semaforo con 3 led controllato da tastiera o joystick..
    Il linguaggio che vorrei utilizzare è il Java con il quale usando la JNI vorrei creare una classe in c++ che mi permetta di catturare l'input del device cosi da poterlo gestire.
    Il SO è la versione debian per Raspberry PI.

    Il problema è appunto come leggere costantemente gli input ricevuti dai vari devices collegati tramite porta USB... sono a conoscenza che il suddetto SO logga tutti gli eventi in un particolare file sotto la directory

    /dev/input/event{id del dispositivo}

    pero non so come poter leggere questo file in quanto sembra che viene riscritto ad ogni input o qualcosa del genere...

    La mia domanda è qual'è il modo migliore per poter catturare costantemente gl'input prodotti dai vari devices collegati tramite USB su linux?

    Grazie mille in anticipo

  2. #2
    Ho scoperto l'esistenza di questa libreria "libusb" può essere usata per leggere gli input da usb?

  3. #3
    libusb se non erro consente di lavorare in maniera "raw" con periferiche USB, cosa che dubito ti interessi fare; quello che potrebbe andarti bene sono appunto i device sotto /dev/input, che si riescono a leggere abbastanza facilmente. Come spiegato qui, dai device sotto /dev/input leggi sequenze di strutture input_event
    codice:
    struct input_event {
    	struct timeval time;
    	unsigned short type;
    	unsigned short code;
    	unsigned int value;
    };
    che ti dicono gli eventi che si verificano sul device in questione. L'esatto significato di type/code/value dipende dal tipo di dispositivo (vedi la documentazione qui), e altre informazioni dipendono dal tipo di dispositivo si ottengono tramite ioctl.

    Comunque, millemila anni fa avevo scritto una classe per la gestione del joystick sotto Linux, se ti interessa te la posso girare...
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Ciao e grazie per la tua esauriente risposta,

    In realtà hai ragione libusb legge in maniera row ed'è molto più semplice gestire tramite gli eventi loggati dal SO.
    Si mi farebbe comodo una classe già fatta che gestisca lo joystick e ti ringrazio della tua proposta.
    La copi qui direttamente?

  5. #5
    Qui il progetto in cui lo usavo (è roba vecchia, per cui non garantisco niente); la classe in questione sta in Joystick.hpp e Joystick.cpp, per l'uso dai un'occhiata in Main.cpp, sotto StartJoystickMonitoring.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    A prescindere dal Raspberry Pi sei già in grado di ottenere gli eventi del joistick in un normale pc?
    Il raspberry ha un sacco di IO con i quali puoi fare tutto. Ad esempio io uso in C++ e WiringPi per gestire di tutto.

  7. #7
    Sto ancora cercando di ottenere gl'input da joystick su PC usando la libreria in java https://github.com/progman32/evdev-java che dovrebbe utilizzare una classe in c tramite JNI che cattura gli eventi loggati dal SO.
    Il problema è che eseguendo il progetto ricevo un errore della JVM che non riesce a caricare la classe c.

    Fatto questo la parte più ostica è passata o quasi... se non dovessi riuscire dovrei fare in modo di creare da 0 o magari partendo dalla classe scritta da MItaly...

    Per caso voi sapete il perche la JVM non riesce a trovare la classe nativa?

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.