Newsgroup: it.comp.os.linux.development
Titolo: Gestione Seriale in QT

Ciao a tutti,
    se il cielo vuole è l'ultima grande domanda che ho da porvi, ma è
fondamentale.
Come gestisco una seriale sotto QT? (Devo solo ricevere dati)
Premessa: in C, a terminale, so scrivere un programmino che apre /dev/ttyS0
con open e vi scrive con write. Tutto ok. Non ho provato il read ma il
concetto è questo. Solo, devo avere i permessi per accedere alla periferica.
Il problema è con QT: io vorrei avere un EVENTO, un SEGNALE che mi dica che
sono arrivati dati!
Rabbrividiamo? Va bene: mi serve un evento come l'OnComm di Visual Basic!!
Ora, non so se devo fare una Thread che aspetta i dati, ma ho provato
brevemente QThread senza successo.
Oppure una pipe che genera un evento??? Ma come? Non sembrano proprio
esserci segnali che abbiano a che fare con gli I/O!!!
Molto importante è un'altro aspetto: come imposto baud rate, parità e bit
della porta?
E' l'ultimo mattoncino che mi manca, accidenti pensavo fosse più semplice la
seriale!!
Grazie tante a tutti
    Osolemio

 della porta?
con le qt non ho la più pallida idea. Prova però a leggere
Serial-Programming-HOWTO

 bit della porta?
Esempio di codice scritto molto tempo fa:
// file = std::string("/dev/ttyS0")
fd = open (file.c_str(), O_RDWR | O_SYNC);
if (fd == -1)
{
    return false;
} else {
    // Set up the serial
    termios tattr;
    tcgetattr (fd, &tattr);
    tattr.c_iflag &= ~ (INLCR | IGNCR | ICRNL | IXON);
    tattr.c_oflag &= ~ (OPOST | ONLCR | OCRNL | ONLRET);
    tattr.c_cflag = CS8 | CREAD | CLOCAL;
    tattr.c_lflag &= ~ (ICANON | ECHO);
    tattr.c_cc[VMIN] = 1;
    tattr.c_cc[VTIME] = 0;
    cfsetispeed (&tattr, B9600);
    cfsetospeed (&tattr, B9600);
    tcsetattr (fd, TCSAFLUSH, &tattr);
    return true;
}
Buon man :-)
-- 
Andrea Bergia - studente              Linux Registered User #281550

 Serial-Programming-HOWTO
Ti ringrazio moltissimo!!! Che newbie a non cercare prima tra gli HOWTOs,
non credevo ce ne fossero anche di programmazione!
C'è un esempio di applicazione asincrona... praticamente si usa il segnale
SIGIO!!!
Il mio QT application launcher apre la ttyS0, la configura, e definisce il
signal handler.
Dopodiché fa partire la mia widget ed esce.
Ad ogni carattere ricevuto dalla seriale viene richiamato il mio signal
handler che elabora e richiama un metodo della mia classe principale che
gestisce tutto!!!
Ancora grazie
Osolemio

 Scordatelo. :-)
Invece c'è, grazie ad Ottavio Campana!
Nel Serial-Programming-HOWTO c'è un esempio di applicazione asincrona...
praticamente si usa il segnale SIGIO dopo avere opportunamente configurato
la seriale. NON DICO che sia la stessa cosa di OnComm, ma che mi è utile per
generare un evento di carattere ricevuto!!!
Ragazzi, la mia filosofia è: se una cosa utile esiste in WIN$, in un modo o
nell'altro non può NON esistere in Linux, soprattutto se parliamo di VB, che
mi impedisce di fare il 40% delle cose possibili con un sistema operativo!!!
E' intrigante programmare sotto Linux, ci sono tante possibilità per
risolvere dei problemi... io non le conosco ma si capisce quando devono
esistere!
Grazie per la risposta, la metto da parte nel forziere di cose utili!
Buon lavoro
Osolemio

 dati lanci un segnale.
...
Solo un consiglio. Mischiare thread e segnali e' spesso fonte di mal di
testa. Io preferisco sempre restare su classici condvar e semafori.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
	**ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
 -<! Woe to you, oh Earth and Sea, for the Devil sends the Beast with
      wrath, because He knows the time is short... !>- Revelations, XIII - 18

 generare un evento di carattere ricevuto!!!
Non conosco QT, ma sappi che per esempio in gtk c'e' una funzione 
chiamata gdk_input_add() che serve proprio ad associare una callback ad 
un evento su file (sia che sia un socket, un file speciale come una 
seriale o un file vero e proprio :) ).
Mi sembra strano che non ci sia un meccanismo simile anche su QT.
Bye,
  Gabry

 Come gestisco una seriale sotto QT? (Devo solo ricevere dati)
dai un occhio qua 
http://www.sat.dundee.ac.uk/~arb/qt/