Windows串口编程
+ -

串口IOCTL_SERIAL_PURGE及 PurgeComm

2023-06-19 58 0

在Windows系统中,IOCTL_SERIAL_PURGE 是指清空串口设备的读写缓冲区的 IOCTL 码。使用该 IOCTL 命令可以清空串口设备的读写缓冲区并丢弃其中的所有数据。

该 IOCTL 命令可以用于以下情况:

  • 丢弃全部的写缓冲数据,以确保不会发送任何未完成的数据。
  • 丢弃全部的读缓冲数据,确保从一个干净的状态开始。
  • 丢弃保存在硬件 FIFO 内部的全部未传输数据。

重要提示:需要注意的是,执行该 IOCTL 命令时会清空串口设备的读写缓冲区并丢弃其中所有数据,如果设备正在传输数据,该操作会导致数据丢失。因此,在执行该命令前应当先将数据从缓冲区读取出来并处理完毕,以避免数据丢失。

if (IoControlCode == IOCTL_SERIAL_PURGE) 
{
    IoStack->Parameters.DeviceIoControl.InputBufferLength == 4;
    KdPrint(("IOCTL_SERIAL_PURGE\n"));
    PULONG pMask = (PULONG)Irp->AssociatedIrp.SystemBuffer;
    KdPrint(("purge mask=0x%x\n", pMask[0]));
}

在Win32 API中,IOCTL_SERIAL_PURGE 对应的函数是 PurgeComm()。PurgeComm() 函数用于清空串口设备的读写缓冲区。调用该函数会清空串口设备的读写缓冲区并丢弃其中的所有数据,它可以完成如下操作:

  • 清空串口设备的输入缓冲区。
  • 清空串口设备的输出缓冲区。
  • 丢弃串口设备中保存的所有未传输数据。

PurgeComm() 函数的语法如下:

BOOL PurgeComm(
  HANDLE hFile,
  DWORD  dwFlags
);

其中,hFile 参数是串口设备的句柄,dwFlags 参数可以取以下值:

  • PURGE_TXABORT:清空输出缓冲区并取消所有挂起的写操作。
  • PURGE_RXABORT:清空输入缓冲区并取消所有挂起的读操作。
  • PURGE_TXCLEAR:清空输出缓冲区。
  • PURGE_RXCLEAR:清空输入缓冲区。

这些标志可以组合使用,比如,要清空输入缓冲区和输出缓冲区,可以把 dwFlags 参数设置为 PURGE_RXCLEAR | PURGE_TXCLEAR。

函数返回值为 BOOL 类型,如果函数执行成功,则返回值为 TRUE,否则返回值为 FALSE。

0 篇笔记 写笔记

寒江独钓串口过滤驱动程序源代码
comcap_tst.c////// @file comcap_tst.c/// @author crazy_chu/// @date 2008-6-20/// #ifndef _COMCAP_TST_HEADER_#define _COMCAP_......
串口过滤驱动调试过程蓝屏NO_MORE_IRP_STACK_LOCATIONS(35)问题分析
最近在搞一个串口的过滤驱动程序,在调度过程中报了一个蓝屏问题。NO_MORE_IRP_STACK_LOCATIONS (35)A higher level driver has attempted to call a lower level driver throughthe IoCallDr......
Windows串口编程的IOCTL和函数
下面是常见的IOCTL及对应的Win32 API函数列表,包括COM端口和USB设备的操作。IOCTRL的宏定义位于文件:C:Program Files (x86)Windows Kits10Include10.0.18362.0shared tddser.h中IOCTL......
同步方式串口收发数据
以下是一个简单的win32串口通信程序,该程序使用了Windows API中的CreateFile、SetCommTimeouts、SetCommState、WriteFile和ReadFile等函数来进行串口通信。#include #include
以下是一个简单的win32串口异步通信程序,该程序使用了Windows API中的CreateIoCompletionPort、CreateFile、SetCommTimeouts、SetCommState、WriteFile和ReadFileEx等函数来进行串口通信。相较于同步通信,异步通信更加灵......
以下是一个使用WaitCommEvent函数的简单的win32串口通信程序,该程序使用了Windows API中的CreateFile、SetCommTimeouts、SetCommState、.WriteFile和ReadFile等函数来进行串口通信。#include
在Windows系统中,IOCTL_SERIAL_PURGE 是指清空串口设备的读写缓冲区的 IOCTL 码。使用该 IOCTL 命令可以清空串口设备的读写缓冲区并丢弃其中的所有数据。该 IOCTL 命令可以用于以下情况:丢弃全部的写缓冲数据,以确保不会发送任何未完成的数据。丢弃全部的读缓冲数......
在 Windows 操作系统下,IOCTL_SERIAL_INTERNAL_CANCEL_WAIT_WAKE 是指撤销等待唤醒(Wait-Wake)操作的内部标识(ioctl command code)。Wait-Wake 操作是指,在计算机系统待机时,通过唤醒设备的方式,让设备执行某些操作。当设......
在 Win32 API 中,用于操作串口通讯的函数主要包括:CreateFile该函数用于打开一个串口通讯接口,返回的句柄可以用于读写串口。在调用 CreateFile 函数时需要指定串口通讯接口的名称和一些访问权限等参数,详见 MSDN 文档:HANDLE CreateFile( LP......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!