к конфигурированию порта, но не
Следует заметить, что функция
BuildCommDCB только заполняет поля
DCB указанными значениями.
Это подготовительный шаг к конфигурированию порта, но не само конфигурирование, которое выполняется рассматриваемыми далее функциями. Поэтому Вы можете вызвать
BuildCommDCB для общего заполнения структуры
DCB, затем изменить значения не устраивающих Вас полей, и после этого вызывать функцию конфигурирования порта.
Заполнить
DCB можно еще одним способом. Вызовом функции
GetCommState. Эта функция заполняет
DCB информацией о текущем состоянии устройства, точнее о его настройках. Вот как она выглядит:
|
BOOL GetCommState( HANDLE hFile, LPDCB lpDCB ); |
|
Функция очень проста и имеет всего два параметра:
|
hFile |
|
Описатель открытого файла коммуникационного порта. Этот описатель возвращается функцией CreateFile. Следовательно, прежде чем получить параметры порта, Вы должны его открыть. Для функции BuildCommDCB это не требовалось. |
|
lpDCB |
|
Указатель на DCB. Для DCB должен быть выделен блок памяти. |
При успешном завершении функция возвращает ненулевое значение. При ошибке нуль. Получить параметры порта можно в любой момент, а не только при начальной настройке.
Заполнив
DCB можно приступать к собственно конфигурированию порта. Это делается с помощью функции
SetCommState:
|
BOOL SetCommState( HANDLE hFile, LPDCB lpDCB ); |
|
Эта функция имеет точно такие же параметры, как GetCommState. Различается только направление передачи информации. GetCommState считывает информацию из внутренних управляющих структур и регистров порта, а SetCommState наоборот заносит ее. Следует быть осторожным при вызове функции SetCommState, поскольку она изменит параметры даже в том случае, если очереди приема/передачи не пусты, что может вызвать искажение потока передаваемых или принимаемых данных.
Еще одна тонкость этой функции заключется в том, что она завершится с ошибкой, если поля XonChar и XoffChar в DCB содержат одинаковые значения.
Содержание Назад Вперед
|