PDA

View Full Version : [C++] Comunicazione seriale con API Windows


Stobby
27-04-2010, 20:46
Buonasera a tutti,
sto scrivendo un software di comunicazione che si avvale della porta seriale per comunicare con una periferica hardware.
La comunicazione avviene tipicamente tramite messaggi scambiati secondo lo standard RS232.

Per implementare la comunicazione seriale ho scelto, per motivi di efficienza, di utilizzare una comunicazione asincrona gestendo la comunicazione seriale con l'API CreateFile.

Generalmente tutto funziona bene, salvo per un problema che mi sta letteralmente facendo fumare la testa :)...

Prima di effettuare una scrittura verifico che il buffer di ricezione sia vuoto. Per fare questo effettuo una lettura sulla seriale con ReadFile(...), e qui si presenta il problema.

Se il buffer è effettivamente vuoto la funzione ritorna FALSE e setta l'ultimo errore a ERROR_IO_PENDING, tuttavia, nel ciclo successivo in cui monitoro il completamento della trasmissione ho il seguente problema:

- la funzione WaitForSingleObject non rileva mai che l'evento associato alla comunicazione è segnalato;
- la struttura OVERLAPPED che creo ha il membro Internal che assume il valore 259.

Volevo chiedervi dunque.. il valore che è assegnato al membro Internal è in qualche modo legato ai codici di errore di windows?
Esiste una metodologia "standard" per effettuare il flush dei buffer di invio/ricezione della porta seriale attraverso le API di windows?

Grazie a tutti coloro che mi risponderanno..

ciao!!

cionci
28-04-2010, 09:14
Prova ad usare questa:
http://msdn.microsoft.com/en-us/library/aa364439(v=VS.85).aspx

Stobby
29-04-2010, 20:15
Grazie mille...dopo ore di smanettamento su msdn non ero riuscito a trovare l'api giusta....
Avevo costruito un workaround giocando sui timeout della seriale per risolvere il problema...

Grazie ancora!

cionci
29-04-2010, 20:36
Funziona ? Non l'avevo mai usato sulle com.