Работа с 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. Если данный бит установлен, то значение остальных бит не имеет значение |