Сбросить дескриптор связи получить буфер? - PullRequest
3 голосов
/ 02 апреля 2009

В Win32 C есть вызов API для очистки (сброса) содержимого буфера приема COM-порта? Я мог только найти функции для очистки буферов передачи.

Ответы [ 2 ]

8 голосов
/ 02 апреля 2009

`PurgeComm () ' может отбрасывать все символы в одном или обоих буферах Tx и Rx и прерывать любые ожидающие операции чтения и / или записи на порту. Чтобы сделать все для порта, скажите что-то вроде:

PurgeComm(hPort, PURGE_RXABORT|PURGE_TXABORT|PURGE_RXCLEAR|PURGE_TXCLEAR) 

Вы также можете убедиться, что вы обработали или явно проигнорировали все ожидающие ошибки на порту, возможно, с ClearCommError().

ReadFile() можно использовать для очистки только буфера Rx и FIFO путем считывания всех доступных байтов в буфер отходов. Обратите внимание, что вам может потребоваться «неестественное» знание, чтобы правильно определить размер буфера, или повторять вызов ReadFile(), пока он больше не скажет.

Однако чтение буфера для очистки будет иметь смысл, только если вы сначала установили COMMTIMEOUTS «рационально» или чтение будет блокироваться до тех пор, пока буфер не будет заполнен.

0 голосов
/ 02 апреля 2009

очистка приемного буфера не имеет смысла, чтобы получить данные из приемного буфера com-порта, просто вызовите ReadFile на дескрипторе к com-порту

FlushFileBuffers синхронно форсирует передачу данных в передающие буферы

PurgeComm очищает буфер без передачи или приема (это в основном удаление)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...