Модемы и факс-модемы. Программирование для MS-DOS и Windows

       

Функция 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.



Содержание раздела