Newsgroup: it.comp.os.linux.development
Titolo: Associare evento a segnale su seriale

Quali istruzioni posso usare in C, sviluppando su macchina Linux, per 
eseguire una determinata istruzione in presenza di un segnale logico su 
seriale?
Faccio un esempio che magari risulta tutto più chiaro. Sulla seriale mi 
arriva uno stato alto sul pin RXD al quale devo far corrispondere un 
evento (execlp, fork o altro) che deve però essere terminato quando lo 
stato alto tornerà basso.
Grazie
Gian Leonardo



afaik non si può. è una limitazione hadware, per quello che ne so. se
vuoi puoi farlo con la parallela, ma l'uart non dovrebbe permetterti di
beccare le transizione dei livelli. Al massimo puoi mandare un byte e
fare una select e sai quando arriva il byte.

fare una select e sai quando arriva il byte.
Questo e' vero per i segnali dati, ma per i segnali di controllo dovrebbe
essere possibile verificarine lo stato, il problema e' che bisogna fare il
polling (la seriale genera anche degli interrupt ma credo che andrebbero
gestiti a livello di kernel).
Il tutto con beneficio d'inventario :-)
Alessandro.

 fare una select e sai quando arriva il byte.
Questa cosa mi piacerebbe capirla bene. Perchè non posso farlo? 
Ammettiamo che lo stato logico vada alto e io legga un byte alla volta 
-> avrò "11111111" che comparato con un char o un int posso utilizzare, 
mentre a segnale 0 avrò "00000000" e quindi sarà pari all'int 0.
Ehm... forse la faccio troppo semplice io e mi sfugge qualcosa, quindi 
vi prego di illuminarmi ;-)
grazie
Gian Leonardo


questo lo puoi fare, quello che non puoi beccare è il singolo bit.
Perché l'uart dovrebbe prendere i bit e convertirli da seriale a
parallelo, permettendo la lettura dei byte, non dei bit.
Altrimenti, dovresti cuccarti l'interrupt, ma è più complesso.


Quello che ti sfugge e' che i segnali seriali devono essere "sincronizzati",
ovverosia deve essere possibile capire quando inizia e finisce il byte, quindi
tra un byte e l'altro ci deve essere un'oscillazione del livello obbligata
(il bit di stop, se non erro). Un segnale "sempre alto" o "sempre basso"
sarebbe initelleggibile per la seriale.
Alessandro.

>
Un link a caso che potra' chiariti le idee:
http://www.wcscnet.com/Tutorials/SerialComm/Page1.htm
Alessandro.

 sarebbe initelleggibile per la seriale.
Allora tu mi dici che non è possibile leggere direttamente il flusso in 
input perchè bloccato dall'hardware che richiede il rispetto del 
protocollo di RTX?  Per intenderci: non c'è possibilità di fregarsene 
dell'allineamento del bit e ricevere il flusso?
Era questo che mi interessava capire, altrimenti la vedo moooolto dura. 
Quello che devo fare è veramente elementare, devo associare alla 
pressione di tasto, che per forza di cose non può essere della tastiera 
:-(, un evento... tutto qui. Pensavo ci fosse una via più semplice per 
farlo.
Gian Leonardo


La cosa piu' semplice sarebbe usare la porta parallela che si comporta come ti
aspetteresti, in alternativa puoi usare uno dei segnali di controllo della
seriale, ma non i segnali dati.
Alessandro.

 seriale, ma non i segnali dati.
Ok, allora torniamo al mio quesito iniziale? Come interrogo un pin dei 
segnali dicontrolo per sapere il suo stato sulla seriale? Purtroppo non 
posso utilizzare la parallela :-(
Grazie
Gian Leonardo


http://www.easysw.com/~mike/serial/serial.html#5_1_1
Alessandro.

 
http://www.easysw.com/~mike/serial/serial.html#5_1_1
Caspita, ho ritrovato il documento nel cassetto... me l'ero dimenticato! 
Grazie mille del link :-D
Gian Leonardo