Работа с COM и LPT в Win32. | страница 22



Последовательный канал передачи данных можно перевести в специальное состояние, называемое разрывом связи. При этом передача данных прекращается, а выходная линия переводится в состояние "0". Приемник, обнаружив, что за время необходимое для передачи стартового бита, битов данных, бита четности и стоповых битов, приемная линия ни разу не перешла в состояние "1", так же фиксирует у себя состояние разрыва.

>BOOL SetCommBreak(HANDLE hFile);

>BOOL ClearCommBreak(HANDLE hFile);

Следует заметить, что состояние разрыва линии устанавливается аппаратно. Поэтому нет другого способа возобновить прерваную, с помощью SetCommBreak, передачу данных, кроме вызова ClearCommBreak.

Более тонкое управление потоком данным позволяет осуществить функция:

>BOOL EscapeCommFunction(HANDLE hFile, DWORD dwFunc);

Выполняемое действие определяется вторым параметром, который может принимать одно из следующих значений:

CLRDTR Сбрасывает сигнал DTR
CLRRTS Сбрасывает сигнал RTS
SETDTR Устанавливет сигнал DTR
SETRTS Устанавливает сигнал RTS
SETXOFF Симулирует прием символа XOFF
SETXON Симулирует прием символа XON
SETBREAK Переводит выходную линию передатчика в состояние разрыва. SetCommBreak является упрощенной формой данного вызова.
CLRBREAK Снимает состояние разрыва для выходной линии передатчика. ClearCommBreak является упрощенной формой данного вызова.

Приостановить прием/передачу данных может и возникновение любой ошибки при установленом в TRUE поле fAbortOnError в структуре DCB использованой для настройки режимов работы коммуникационного порта. В этом случае, для восстановления нормальной работы порта, следует использовать функцию:

>BOOL ClearCommError(HANDLE hFile, LPDWORD lpErrors, LPCOMSTAT lpStat);

Эта функция не только сбрасывает признак ошибки для соответсвующего порта, но и возвращает более подробную информацию об ошибке. Кроме того, возможно получение информации о текущем состоянии порта. Вот что означают параметры:

hFile

Описатель открытого файла коммуникационного порта.

lpErrors

Адрес переменной, в которую заносится информация об ошибке. В этой переменной могут быть установлены один или несколько из следующих бит:

CE_BREAK Обнаружено состояние разрыва связи
CE_DNS Только для Windows95. Параллельное устройство не выбрано.
CE_FRAME Ошибка обрамления.
CE_IOE Ошибка ввода-вывода при работе с портом
CE_MODE Запрошеный режим не поддерживается, или неверный описатель hFile. Если данный бит установлен, то значение остальных бит не имеет значение