аут операции чтения. Аналогично существует
Это и есть общий тайм- аут операции чтения. Аналогично существует и общий тайм-аут операции записи.
Формула для вычисления общего тайм-аута операции, например, чтения, выглядит так:
NumOfChar x ReadTotalTimeoutMultiplier + ReadTotalTimeoutConstant где NumOfChar — число символов, запрошенных для операции чтения.
В нашем случае тайм-ауты записи можно не использовать и установить их равными нулю.
После заполнения структуры COMMTIMEOUTS, необходимо вызвать функцию установки тайм-аутов:
BOOL SetCommTimeouts(HANDLE hFile,LPCOMMTIMEOUTS lpCommTimeouts); Поскольку операции передачи-приема ведутся на малой скорости, используется буферизация данных. Для задания размера буфера приема и передачи необходимо воспользоваться функцией:
BOOL SetupComm(HANDLE hFile,DWORD dwInQueue,DWORD dwOutQueue); Допустим, вы обмениваетесь с внешним устройством пакетами информации размером 1024 байта, тогда разумным размером буферов будет значение 1200. Функция SetupComm интересна тем, что она может просто принять ваши размеры к сведению, внеся свои коррективы, либо вообще отвергнуть предложенные вами размеры буферов — в таком случае эта функция завершится ошибкой.
Приведу пример открытия и конфигурирования последовательного порта COM1. Для краткости — без определения ошибок. В данном примере порт открывается для работы со скоростью 9 600 бит/c, используется 1 стоповый бит, бит четности не используется:
#include . . . . . . . . . .HANDLE handle;COMMTIMEOUTS CommTimeOuts;DCB dcb;handle = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);SetupComm(handle, SizeBuffer, SizeBuffer);GetCommState(handle, &dcb);
dcb.BaudRate = CBR_9600;dcb.fBinary = TRUE;dcb.fOutxCtsFlow = FALSE;dcb.fOutxDsrFlow = FALSE;dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;dcb.fDsrSensitivity = FALSE;dcb.fNull = FALSE;dcb.fRtsControl = RTS_CONTROL_DISABLE;dcb.fAbortOnError = FALSE;dcb.ByteSize = 8;dcb.Parity = NOPARITY;
Содержание Назад Вперед