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!!
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!!