Функция ReadComm
Функция ReadComm позволяет прочитать данные из входной очереди COM-порта. Прототип функции представлен ниже:
int ReadComm(int idComDev, void FAR* lpvBuf, int cbRead);
Параметр idComDev является идентификатором COM-порта, из которого будут прочитаны данные.
Параметр lpvBuf содержит дальний указатель на буфер, в который будут записаны прочитанные из COM-порта данные.
Последний параметр cbRead задает количество символов, которое следует прочитать из входной очереди порта.
Следите за тем, чтобы значение cbRead не было больше, чем размер буфера lpvBuf
В случае успешного выполнения функции возвращаемое значение определяет количество символов, прочитанное из COM-порта. Если во время выполнения функции произошла ошибка, функция возвращает отрицательное значение. При этом абсолютное значение возвращенной величины определяет количество символов, успешно прочитанных из COM-порта.
В случае возникновения ошибки ее причину можно выяснить с помощью функции GetCommError. Так как ошибка может произойти и в том случае, когда ни один символ из входной очереди не прочитан, то, если ReadComm возвращает нулевую величину, следует вызвать функцию GetCommError, чтобы удостоверится в отсутствии ошибок.
Если величина, возвращаемая функцией меньше чем значение параметра cbRead, это означает, что на момент вызова функции во входной очереди COM-порта находилось символов меньше, чем определено параметром cbRead.
Если величина, возвращаемая функцией равна значению параметра cbRead, то возможно, что в очереди приемника еще находятся данные. Поэтому можно сразу повторно вызвать функцию ReadComm.
В качестве примера использования функции ReadComm мы приводим исходный текст функции ReadCommChar, считывающей из входной очереди один символ:
//==========================================================
// Функция ReadCommChar
//==========================================================
int ReadCommChar(int nPortID)
{
int iResult = 0;
int iErr = 0;
// Считываем из COM-порта один символ
iErr = ReadComm(nPortID, (LPSTR)&iResult, 1);
// Если символ не прочитан, обрабатываем ошибку
if(iErr != 1)
{
iResult = -1;
// Сбрасываем флаги ошибок
GetCommError(nPortID, NULL);
}
return iResult;
}
В качестве параметра для функции ReadCommChar необходимо передать идентификатор COM-порта. Функция ReadCommChar вызывает ReadComm и пытается считать из входной очереди COM-порта один символ.
Если ReadComm возвращает единицу, символ успешно прочитан и функция ReadCommChar возвращает код полученного символа. В противном случае для того, чтобы сбросить флаги ошибок, вызывается функция GetCommError. Затем функция ReadCommChar возвращает -1.