PDA

View Full Version : [JAVA] Lettura da seriale in thread separato, come generare interrupt per informare?


Dani88
11-11-2010, 17:46
Ciao a tutti!
Sto facendo un programma in Java che mi permette di comunicare con Arduino (per chi sa cosa sia :D...se volete info date uno sguardo a wiki...)
Fatto da sta che tale hardware comunica via seriale.
Il mio programma quando premi "connect" tenta prima di aprire una seriale e se ci riesce manda una richiesta ad Arduino con una stringa "CCC" (Can Create Connection) e se arduino risponde ok lo da come connesso.
Da qui in poi il programma deve controllare la seriale e vedere quando ho dei dati, riceverli restituirmi il blocco di dati trasmesso sia esso un array di char o di byte.
Per il momento nel mio programma c'è un while(true) che controlla continuamente se la seriale ha dati disponibili e nel caso li legge...ovviamente questo non è pensabile...
Ho pensato allora di creare un thread separato per farlo...
E' possibile che tale thread mi generi un interrupt o simile in modo da avvisare il programma che sono presenti dati da leggere?
O ancora meglio: esiste un interrupt della seriale che mi avverta che mi stanno mandando dati?

PGI-Bis
11-11-2010, 18:37
dipende dalla libreria che usi per leggere dalla seriale ma in generale se non è una chiavica dovrebbe già gestire la sospensione del thread in termine di "blocco", non diversamente da quanto capita quando cerchi di leggere dei dati da un socket.

Le "comm library" di Sun (RXTX per un'implementazione) supportano la lettura bloccante e la gestione dello stato attraverso gli eventi, vale a dire che quando c'è qualcosa da leggere ti arriva un segnale SerialPortEvent.DATA_AVAILABLE e da lì in poi leggi da un InputStream, che è bloccante.

Altro non saprei dire, l'ultima volta che mi sono cimentato nella lettura di una porta seriale era per il portatile di cristoforo colombo.

Dani88
11-11-2010, 18:47
ehm...la connessione è USB ma emula una seriale da quello che ne so :D
Cmq uso proprio le RXTX...avevo visto esattamente quello di cui parli tu, data available, solo che non ho capito bene, nonostante ricerche in rete, come usarlo...
Se vuoi ti posto la classe che uso ora per leggere, scrivere...

PGI-Bis
11-11-2010, 19:04
butta l'occhio a questo esempio:

http://www.captain.at/howto-java-serial-port-javax-comm-rxtx.php

!fazz
11-11-2010, 19:49
puoi usare un socket per far comunicare i 2 thread