Получить количество байтов, ожидающих на последовательном порту перед чтением - PullRequest
2 голосов
/ 24 августа 2011

У меня есть специальное устройство, с которого я отправляю / получаю данные через последовательный порт. Мне было интересно, есть ли какая-либо функция, которую я могу использовать, чтобы получить количество байтов, ожидающих чтения с последовательного порта?

Мне нужно только решение для Windows API, если оно существует. Это кажется тривиальной задачей, и я не хочу использовать внешние компоненты.

Ответы [ 3 ]

5 голосов
/ 24 августа 2011

ClearCommError должен заполнить COMSTAT (запись TComStat) с элементом 'cbInQue', указывающим непрочитанное количество байтов, полученных на порт.

4 голосов
/ 24 августа 2011

Я использую TComPort .Хотя вы можете использовать вызовы WinAPi, они сложны, и TComPort заботится о скучных вещах.Он очень легкий и бесплатный, и вы можете использовать функцию TComport.InputCount, которая из справки:

 Returns the number of bytes in input buffer.

function InputCount: Integer;

Description
Call InputCount function to get the number of bytes in input buffer.
1 голос
/ 24 августа 2011

Win API ClearCommError должен возвращать количество символов, ожидающих в буфере приемника, где cHandle в настоящее время используется / открыт последовательный порт связи.

function TRS232Comm.InputCount: cardinal;
var
  Errors: Cardinal;
  CommStat: TComStat;
begin
  if not ClearCommError(cHandle, Errors, @CommStat) then
  begin
    PurgeComm(cHandle, PURGE_RXCLEAR);     //Just empty comm buffer on error and return 0
    result := 0;
  end else
    result := CommStat.cbInQue;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...