Newsgroup: it.comp.programmare
Titolo: Linux e Porte seriali

contemporaneamente a questo posto sto googlando però........
.....mi servirebbe una classe o qualche esempio in c/c++ per poter 
trasmettere/ricevere su porta seriale dei dati in binario.
Fino ad ora ho trovato solo materiale per comunicare con dei modem, 
niente più.
Qualahce dritta in proposito?

Iw7 ha scritto:

La comunicazione con dei modem e' gia' una comunicazione su una porta 
seriale.
Comunque, per dialogare con una porta seriale a basso livello, 
normalmente si definiscono due handle, uno per leggere e l'altro per 
scrivere, cosi' puoi tranquillamente operare in modo asincrono.
Alla base di tutto c'e' la funzione ioctl() che serve per impostare i 
parametri della porta seriale.
Poi, in base alla tua situazione, se il collegamento e' diretto, o se 
c'e' di mezzo una portante, o altro, devi definire i segnali della 
porta, associarli a degli interrupt, e a questi associare le funzioni di 
lettura e scrittura.
Purtroppo non lavoro piu' sulle seriali dal secolo scorso, altrimenti ti 
avrei dato volentieri dei sorgenti.

 avrei dato volentieri dei sorgenti.
intanto ti ringrazio per le indicazioni.
Il collegamento č diretto, si tratta di comunicare con un lettore RFID da 
tavolo.
nessuna portatnte, tutt'al piů un segnale opzionale di presenza di un tag 
nel raggio di lettura da porre su l'RTS della seriale.
Il mio problema problema č il tempo che ho a disposizione per buttare giů 
del codice piů o meno funzionante e l'ideale sarebbe stato rcalcare qualche 
esempio in modo da poter poi migliorare il tutto con calma e maggior 
cognizione di causa.
Ti ringrazio ancora, cmq le info che mi hai dato sono utili.
Ciao ciao e buona serata. 

Iw7 ha scritto:

le porte seriali sono 'file' nel direttorio /dev/...
In modo triviale si gestiscono con open, read, write.
Poi ci sono funzioni particolari come la readcond
e altre per configurare la linea (che pero' puoi fare con
devioctrl).
B.

 devioctrl).
devioctl.h...ho trovato solo materiale win32, se non ho capito male per 
linux si dovrebbero usare ioctl.h e company.
Cmq ti ringrazio  perchè anche i tuoi consigli sono stati utili, avvolte 
si tratta solo di trovare una combinazione diversa di parole chiave da 
usare con San Google.
Ancora grazie a tutti e alla prossima

Ho trovato in rete questo esempio:
http://www.l-d-x.com/umodem/umodem.c
Credo che possa esserti utile: imposta i parametri della seriale e poi
manda a video quello che arriva dalla seriale e scrive sulla seriale
quello che scrivi sulla tastiera.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 quello che scrivi sulla tastiera.
Ti ringrazio per l'indicazione, ma purtroppo il grosso dei "caratteri" che 
devo trattare sono bytes, non stringhe pure, ecco perchè non mi erano 
sufficienti gli esempi di comunicazione già trovati in rete.
Comunque grazie anche ai vostri consigli ho risolto quasi tutti i problemi, 
infatti l'ultimo riguarda in particolare php, quindi se non trovo soluzione 
per conto mio provvederò a spostarmi sul gruppo apposito.
Grazie a tutti e alla prossima. 

 sufficienti gli esempi di comunicazione già trovati in rete.
I caratteri sono byte...
ciao
S

ciao
Ciao anche a te e buon fine settimana.


Continuo a non capire la tua difficolta'.
I byte sono byte, per trasmettere 1 o 67 o 245 non cambia la tecnica.
Inoltre in C non esistono stringhe, esistono solo array di char, se
poi l'array e' popolato con 'A' o con 0x41 non cambia nulla.
ciao
S

 
Dove' la difficolta? In C non ci sono problemi a gestire array
di BYTE (unsigned char oppure la typedef uint8_t) nel range 0..255 (0xFF).
Le operazioni che devi fare sono abbstanza semplici
  mySer = open("/dev/...", );
Usa le funzioni posix o altre equivalenti per configurare
la porta seriale che vuoi usare nel modo desiderato
(baud rate, stop bits, bits per char, parity, handshake
hardware o no etc..)
Vedi ad esempio tcgetattr(), tcsetattr() (POSIX).
Se ho ben capito quello che ti interessa e' configurare
la porta in modalita' raw (senza nessun filtro software).
A questo punto.... leggi i dati dalla porta seriale
numRd = read(mySer, rdbuffer, rdbufSize)
Ti processi i tuo pacchetto ed eventualmente scrivi sulla
porta ...
numWr = write(mySer, wrbuffer, wrbufSize)
Quarda se questo puo' essre utile:
http://tldp.org/HOWTO/Serial-HOWTO.html
Bye
B.


 già visto è messo da parte per tempi futuri ;-P