IOCTL_SERIAL_SET_LINE_CONTROL、IOCTL_SERIAL_GET_LINE_CONTROL和GetCommState、SetCommState
IOCTL_SERIAL_SET_LINE_CONTROL是Windows系统中用于设置串行端口通信行控制信息的一个设备I/O控制码。该控制码需要通过DeviceIoControl函数发送给串行端口驱动程序,以设置当前串行端口的数据传输率、数据位、停止位、奇偶校验等通信参数信息。在应用程序开发中,可以使用该控制码设置串行端口的通信参数并进行相应的配置,以满足不同的数据传输要求。
SetCommState是一个Windows系统的API函数,通常用于设置串口的通信参数。该函数需要传入一个DCB(Device Control Block)结构体,用于指定串口的通信参数,包括波特率、数据位、停止位、奇偶校验等信息。
函数原型如下:
BOOL SetCommState(
HANDLE hFile,
LPDCB lpDCB
);
其中,hFile为串口的句柄,lpDCB为DCB结构体指针,表示要设置的串口通信参数。调用该函数后,系统会根据传入的参数对串口进行相应的配置。如果函数调用成功,则返回值为非零值(TRUE);否则返回值为零(FALSE)。
需要注意的是,该函数只能用于设置波特率小于等于115200的串口通信参数。对于高速串口通信(如USB串口、PCI串口卡等),应该使用其他的API函数进行设置。
DCB是Windows系统中的一个结构体类型,用于描述串口设备的控制信息。它包含了串口通信的各种参数,如波特率、数据位、停止位、奇偶校验等等。DCB的全称为Device Control Block,通常直接用它的缩写表示。
DCB结构体定义了如下成员:
typedef struct _DCB {
DWORD DCBlength; // 此DCB结构体的长度,不需要手动赋值,由系统自动填充。
DWORD BaudRate; // 波特率
DWORD fBinary; // 是否使用二进制模式通信
DWORD fParity; // 是否开启奇偶校验
DWORD fOutxCtsFlow; // 是否开启CTS流量控制
DWORD fOutxDsrFlow; // 是否开启DSR流量控制
DWORD fDtrControl; // DTR的发送和使用
DWORD fDsrSensitivity;// 是否开启DSR敏感性
DWORD fTXContinueOnXoff; // 发送字符时是否使用XOFF/XON控制
DWORD fOutX; // 是否开启XON/XOFF输出控制
DWORD fInX; // 是否开启XON/XOFF输入控制
DWORD fErrorChar; // 使用错误字符替换不可接受字符
DWORD fNull; // 通信时是否将空字符屏蔽
DWORD fRtsControl; // RTS的发送和使用
DWORD fAbortOnError; // 发送或接收时发生错误时是否立即中止
WORD wReserved; // 保留字段
WORD XonLim; // XOFF字符发送之前,缓冲区中允许的剩余字节数
WORD XoffLim; // XOFF字符发送之后,缓冲区中最少留下的字节数
BYTE ByteSize; // 数据位数
BYTE Parity; // 校验类型
BYTE StopBits; // 停止位数
char XonChar; // XON字符
char XoffChar; // XOFF字符
char ErrorChar; // 发生错误时替换的字符
char EofChar; // 数据流中的输入结束字符
char EvtChar; // 和输入事件一起使用的事件字符
WORD wReserved1; // 保留字段
} DCB;
DCB结构体中的每个成员都代表着具体的串口通信参数或控制信息。应用程序可以通过修改这些成员的值来设置串口的通信参数,在调用SetCommState函数时将DCB结构体传递给函数即可。