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


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


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

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

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 процентов

Эти дополнительные события используются внутри драйвера. Вы не должны переустанавливать состояние их отслеживания.




Начало  Назад  Вперед



Книжный магазин