Работа с коммуникационными портами (COM и LPT) в программах для Win32


    d8ef8794     

Синхронный режим обмена довольно редко


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

Начнем с событий связаных с последовательными портами. Вы указываете системе осуществлять слежение за возникновением связанных с портом событий устанавливая маску с помощью функции

BOOL SetCommMask( HANDLE hFile, DWORD dwEvtMask );
Маска отслеживаемых событий задается вторым параметром. Можно указывать любую комбинацию следующих значений:

EV_BREAK Состояние разрыва приемной линии EV_CTS Изменение состояния линии CTS EV_DSR Изменение состояния линии DSR EV_ERR Ошибка обрамления, перебега или четности EV_RING Входящий звонок на модем (сигнал на линии RI порта) EV_RLSD Изменение состояния линии RLSD (DCD) EV_RXCHAR Символ принят и помещен в приемный буфер EV_RXFLAG Принят символ заданый полем EvtChar структуры DCB использованой для настройки режимов работы порта EV_TXEMPTY Из буфера передачи передан последний символ Если dwEvtMask равно нулю, то отслеживание событий запрещается. Разумеется всегда можно получить текущую маску отслеживаемых событий с помощью функции

BOOL GetCommMask( HANDLE hFile, LPDWORD lpEvtMask );
Вторым параметром задается адрес переменной принимающей значение текущей установленой маски отслеживаемых событий. В дополнение к событиям, перечисленым в описании функции SetCommMask, данная функция может возвратить следующие:

EV_EVENT1 Устройство-зависимое событие EV_EVENT2 Устройство-зависимое событие EV_PERR Ошибка принтера EV_RX80FULL Приемный буфер заполнен на 80 процентов Эти дополнительные события используются внутри драйвера. Вы не должны переустанавливать состояние их отслеживания.


Содержание  Назад  Вперед