Получив доступ к порту, необходимо его настроить — задать скорость обмена, формат данных, параметры четности и т. д. Основные параметры последовательного порта задают структуры DCB и COMMTIMEOUTS. Структура DCB содержит основные параметры порта и, кроме этого, довольно много специфических полей.
typedef struct _DCB {
DWORD DCBlength; // sizeof(DCB)
DWORD BaudRate; // current baud rate
DWORD fBinary:1; // binary mode, no EOF check
DWORD fParity:1; // enable parity checking
DWORD fOutxCtsFlow:1; // CTS output flow control
DWORD fOutxDsrFlow:1; // DSR output flow control
DWORD fDtrControl:2; // DTR flow control type
DWORD fDsrSensitivity:1; // DSR sensitivity
DWORD fTXContinueOnXoff:1; // XOFF continues Tx
DWORD fOutX:1; // XON/XOFF out flow control
DWORD fInX:1; // XON/XOFF in flow control
DWORD fErrorChar:1; // enable error replacement
DWORD fNull:1; // enable null stripping
DWORD fRtsControl:2; // RTS flow control
DWORD fAbortOnError:1; // abort reads/writes on error
DWORD fDummy2:17; // reserved
WORD wReserved; // not currently used
WORD XonLim; // transmit XON threshold
WORD XoffLim; // transmit XOFF threshold
BYTE ByteSize; // number of bits/byte, 4-8
BYTE Parity; // 0-4=no,odd,even,mark,space
BYTE StopBits; // 0,1,2 = 1, 1.5, 2
char XonChar; // Tx and Rx XON character
char XoffChar; // Tx and Rx XOFF character
char ErrorChar; // error replacement character
char EofChar; // end of input character
char EvtChar; // received event character
WORD wReserved1; // reserved; do not use
} DCB;
Мы рассмотрим назначение только некоторых основных полей этой структуры, используемых для нашего случая ввода-вывода, так как многие поля можно заполнить значениями “по умолчанию”, пользуясь функцией GetCommState:
BOOL GetCommState(
HANDLE hFile,
LPDCB lpDCB
);
Таким образом, нет необходимости вникать во все тонкости структуры. После этого некоторые поля DCB все же придется заполнить вручную, а именно:
BaudRate — скорость передачи данных. Возможно указание следующих констант: CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200, CBR_128000, CBR_256000.Можно просто указать соответствующее число, например 9600, но предпочтительнее все-таки пользоваться символическими константами.