Шрифт:
BOOL SetCommBreak(
HANDLE hFile
);
BOOL ClearCommBreak(
HANDLE hFile
);
Функция EscapeCommFunction
Следует заметить, что состояние разрыва линии устанавливается аппаратно. Поэтому нет другого способа возобновить прерванную, с помощью SetCommBreak, передачу данных, кроме вызова ClearCommBreak. Более тонкое управление потоком данным позволяет осуществить функция:
BOOL EscapeCommFunction(
HANDLE hFile,
DWORD dwFunc
);
Выполняемое действие определяется вторым параметром, который может принимать одно из следующих значений:
• CLRDTR — Сбрасывает сигнал DTR
• CLRRTS — Сбрасывает сигнал RTS
• SETDTR — Устанавливает сигнал DTR
• SETRTS — Устанавливает сигнал RTS
• SETXOFF — Симулирует прием символа XOFF
• SETXON — Симулирует прием символа XON
• SETBREAK — Переводит выходную линию передатчика в состояние разрыва. SetCommBreak является упрощенной формой данного вызова.
• CLRBREAK — Снимает состояние разрыва для выходной линии передатчика. ClearCommBreak является упрощенной формой данного вызова.
Функция ClearCommError
Приостановить прием/передачу данных может и возникновение любой ошибки при установленном в TRUE поле fAbortOnError в структуре DCB использованной для настройки режимов работы коммуникационного порта. В этом случае, для восстановления нормальной работы порта, следует использовать функцию:
BOOL ClearCommError(
HANDLE hFile,
LPDWORD IpErrors,
LPCOMSTAT IpStat
);
Эта функция не только сбрасывает признак ошибки для соответствующего порта, но и возвращает более подробную информацию об ошибке. Кроме того, возможно получение информации о текущем состоянии порта. Вот что означают параметры:
• hFile
Описатель открытого файла коммуникационного порта.
• IpErrors
Адрес переменной, в которую заносится информация об ошибке. В этой переменной могут быть установлены один или несколько из следующих бит:
• CE_BREAK — Обнаружено состояние разрыва связи
• CE_DNS — Только для Windows95. Параллельное устройство не выбрано.
• CE_FRAME — Ошибка обрамления.
• СЕ_IOЕ — Ошибка ввода-вывода при работе с портом
• СЕ_MODE — Запрошенный режим не поддерживается, или неверный описатель hFile. Если данный бит установлен, то значение остальных бит не имеет значение.
• СЕ_ООР — Только для Windows95. Для параллельного порта установлен сигнал "нет бумаги".
• CE_OVERRUN — Ошибка перебега (переполнение аппаратного буфера), следующий символ потерян.
• СЕ_РТО — Только для Windows95. Тайм-аут на параллельном порту.
• CE_RXOVER — Переполнение приемного буфера или принят символ после символа конца файла (EOF)
• CE_RXPARITY — Ошибка четности
• CE_TXFULL — Переполнение буфера передачи
• IpStat
Адрес структуры COMMSTAT. Должен быть указан, или адрес выделенного блока памяти, или NULL, если не требуется получать информацию о состоянии.
Структура COMMSTAT
Если с информацией об ошибке все ясно, то со структурой COMMSTAT мы еще не встречались. Вот она:
typedef struct _COMSTAT
DWORD fCtsHold:1;
DWORD fDsrHoldr:1;
DWORD fRlsdHold:1;
DWORD fXoffHold:1;
DWORD fXoffSent:1;
DWORD fEof:1;
DWORD fTxim:1;
DWORD fReserved:25;
DWORD cblnQue;
DWORD cbOutQue;
} COMSTAT, *LPCOMSTAT;
Поля структуры имеют следующее значение:
• fCtsHold
Передача приостановлена из-за сброса сигнала CSR.
• fDsrHold
Передача приостановлена из-за сброса сигнала DSR.
• fRlsdHold
Передача приостановлена из-за ожидания сигнала RLSD (receive-line-signal-detect). Более известное название данного сигнала — DCD (обнаружение несущей).