Добавить в цитаты Настройки чтения

Страница 307 из 436



Включает режим слежения за сигналом DSR. Если это поле равно TRUE и сигнал DSR сброшен, передача данных прекращается до установки сигнала DSR.

∙ fDtrControl

Задает режим управления обменом для сигнала DTR. Это поле может принимать следующие значения:

• DTR_CONTROL_DISABLE — Запрещает использование линии DTR

• DTR_CONTROL_ENABLE — Разрешает использование линии DTR

• DTR_CONTROL_HANDSHAKE — Разрешает использование рукопожатия для выхода из ошибочных ситуаций. Этот режим используется, в частности, модемами при восстановлении в ситуации потери связи.

∙ fDsrSensitivity

Задает чувствительность коммуникационного драйвера к состоянию линии DSR. Если это поле равно TRUE, то все принимаемые данные игнорируются драйвером (коммуникационный драйвер расположен в операционной системе) за исключением тех, которые принимаются при установленном сигнале DSR.

∙ fTXContinueOnXoff

Задает, прекращается ли передача при переполнении приемного буфера и передаче драйвером символа XoffChar. Если это поле равно TRUE, то передача продолжается, несмотря на то, что приемный буфер содержит более XoffLim символов и близок к переполнению, а драйвер передал символ XoffChar для приостановления потока принимаемых данных. Если поле равно FALSE, то передача не будет продолжена до тех пор, пока в приемном буфере не останется меньше XonLim символов и драйвер не передаст символ XonChar для возобновления потока принимаемых данных. Таким образом, это поле вводит некую зависимость между управлением входным и выходным потоками информации.

∙ fOutX

Задает использование XON/XOFF управления потоком при передаче. Если это поле равно TRUE, то передача останавливается при приеме символа XoffChar, и возобновляется при приеме символа XonChar.

∙ flnX

Задает использование XON/XOFF управления потоком при приеме. Если это поле равно TRUE, то драйвер передает символ XoffChar, когда в приемном буфере находится более XoffLim, и XonChar, когда в приемном буфере остается менее XonLim символов.

∙ fErrorChar

Указывает на необходимость замены символов с ошибкой четности на символ, задаваемый полем ErrorChar. Если это поле равно TRUE, и поле fParity равно TRUE, то выполняется замена.

∙ fNull

Определяет действии, е выполняемое при приеме нулевого байта. Если это поле TRUE, то нулевые байты отбрасываются при передаче.

∙ fRtsControl

Задает режим управления потоком для сигнала RTS. Если это поле равно 0, то по умолчанию подразумевается RTSCONTROLHANDSHAKE. Поле может принимать одно из следующих значений:

• RTS_CONTROL_DISABLE — Запрещает использование линии RTS

• RTS_CONTROL_ENABLE — Разрешает использование линии RTS

• RTS_CONTROL_HANDSHAKE — Разрешает использование RTS рукопожатия. Драйвер устанавливает сигнал RTS когда приемный буфер заполнен менее, чем на половину, и сбрасывает, когда буфер заполняется более чем на три четверти.

• RTS_CONTROL_TOGGLE — Задает, что сигнал RTS установлен, когда есть данные для пе редачи. Когда все символы из передающего буфера переданы, сигнал сбрасывается.

∙ fAbortOn Error

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

∙ fDummy2

Зарезервировано и не используется.

∙ wReserved

Не используется, должно быть установлено в 0.

∙ XonLim

Задает минимальное число символов в приемном буфере перед посылкой символа XON.

∙ XoffLim

Определяет максимальное количество байт в приемном буфере перед посылкой символа XOFF. Максимально допустимое количество байт в буфере вычисляется вычитанием данного значения из размера приемного буфера в байтах.

∙ ByteSize

Определяет число информационных бит в передаваемых и принимаемых байтах.





∙ Parity

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

• EVENPARITY — Дополнение до четности

• MARKPARITY — Бит четности всегда 1

• NOPARITY — Бит четности отсутствует

• ODDPARITY — Дополнение до нечетности

• SPACEPARITY — Бит четности всегда 0

∙ StopBits

Задает количество стоповых бит. Поле может принимать следующие значения:

• ONESTOPBIT — Один стоповый бит

• ONE5STOPBIT — Полтора стоповых бита

• TWOSTOPBIT — Два стоповых бита

∙ XonChar

Задает символ XON используемый как для приема, так и для передачи.

∙ XoffChar

Задает символ XOFF используемый как для приема, так и для передачи.

∙ ErrorChar

Задает символ, использующийся для замены символов с ошибочной четностью.

∙ EofChar

Задает символ, использующийся для сигнализации о конце данных.

∙ EvtChar

Задает символ, использующийся для сигнализации о событии.

∙ wReserved1

Зарезервировано и не используется.

Так как поля структуры DCB используются для конфигурирования микросхем портов, на них накладываются некоторые ограничения. Размер байта должен быть 5, 6, 7 или 8 бит. Комбинация из пяти битного байта и двух стоповых бит является недопустимой. Так же как и комбинация из шести, семи или восьми битного байта и полутора стоповых бит.

Функция BuildCommDCB

Только что рассмотренная нами структура DCB самая большая из всех, использующихся для настройки последовательных портов. Но она и самая важная. Заполнение всех полей этой структуры может вызвать затруднения, так как надо очень четко представлять, как работает последовательный порт. Поэтому ручную установку полей можно порекомендовать опытным программистам. Если же Вы чувствуете себя не очень уверено, воспользуйтесь функцией BuildCommDCB, которая позволяет заполнить поля структуры DCB на основе строки, по синтаксису аналогичной строке команды mode. Вот как выглядит прототип этой функции:

BOOL BuildCommDCB(LPCTSTR lpDef, LPDCB lpDCB);

Как видно, функция очень проста и имеет всего два параметра:

∙ lpDef

Указатель на строку с конфигурационной информацией в формате команды mode. Например, следующая строка задает скорость 1200, без четности, 8 бит данных и 1 стоповый бит.

baud=1200 parity=N data=8 stop=l

∙ lpDCB

Указатель на заполняемую структуру DCB. При этом структура должна быть уже создана и заполнена нулями, кроме поля DCBlength, которое должно содержать корректное значение. Возможно так же использование уже заполненной структуры DCB, например полученной вызовом одной из функций чтения параметров порта.

В случае успешного завершения функция BuildCommDCB возвращает не нулевое значение. В случае ошибки возвращается 0.