IOCTL_SERIAL_GET_HANDFLOW
2023-06-19
35
0
IOCTL_SERIAL_GET_HANDFLOW 是一个 Windows 常量,它用于标识获取串口通讯接口的流控参数的 IOCTL 命令。通过调用 IOCTL_SERIAL_GET_HANDFLOW,驱动程序可以返回流控参数,这些参数包括:使用的流控协议、Xon 字符、Xoff 字符、流控阈值等。
该命令的请求结构体为 SERIAL_HANDFLOW 结构体,定义在 Winioctl.h 头文件中:
typedef struct _SERIAL_HANDFLOW {
ULONG ControlHandShake;
ULONG FlowReplace;
LONG XonLimit;
LONG XoffLimit;
} SERIAL_HANDFLOW,*PSERIAL_HANDFLOW;
其中, ControlHandShake 表示使用的流控协议,可以是一个或多个常量值的组合; FlowReplace 表示是否替换流控字符; XonLimit 和 XoffLimit 分别表示发送 Xon/Xoff 字符前缓存区中剩余的字符数,达到指定数量时发送 Xon/Xoff 字符。
驱动程序接收到 IOCTL_SERIAL_GET_HANDFLOW 命令之后,应该将相关流控参数填充到 SERIAL_HANDFLOW 结构体中,然后返回该结构体给应用程序。
在应用程序中,可以通过以下两种方式访问串口通讯接口的流控参数:
- 通过设备控制块(DCB)结构体访问
调用 GetCommState 函数就可以获取串口通讯接口的 DCB 结构体,其中包括了串口的所有控制参数,例如波特率、数据位、停止位、奇偶校验等参数,以及流控参数等。
- 调用 DeviceIoControl 函数访问
可以使用 DeviceIoControl 函数向串口设备驱动程序发送 IOCTL_SERIAL_GET_HANDFLOW 命令,以获取流控参数。在调用 DeviceIoControl 函数时,应该指定 IOCTL_SERIAL_GET_HANDFLOW 命令,以及相关输入/输出缓冲区参数,然后通过获取返回的缓冲区获取参数值。