串口开发中使用WaitCommEvent

news/2024/5/18 21:51:10 标签: character, signal, winapi, structure, input, output

WaitCommEvent

  作用:
  为一个特指的通信设备等待一个事件发生,该函数所监控的事件是与该设备句柄相关联的一系列事件。
  原型:
  BOOL WINAPI WaitCommEvent(
  __in         HANDLE hFile,
  __out        LPDWORD lpEvtMask,
  __in         LPOVERLAPPED lpOverlapped
  );
  参数:
  hFile:指向通信设备的一个句柄,该句柄应该是由 CreateFile函数返回的。
  lpEvtMask:一个指向DWORD的指针。如果发生错误,pEvtMask指向0,否则指向以下的某一事件
  Value Meaning
EV_BREAK
  0x0040 A break was detected oninput.(在输入过程中发生中断)
EV_CTS
  0x0008 The CTS (clear-to-send) signal changedstate.(CTS线上的信号改变状态)
EV_DSR
  0x0010 The DSR (data-set-ready) signal changedstate.(DSR 线上的信号改变状态)
EV_ERR
  0x0080 A line-status error occurred. Line-statuserrors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.
EV_RING
  0x0100 A ring indicator was detected.
EV_RLSD
  0x0020 The RLSD (receive-line-signal-detect)signal changed state.
EV_RXCHAR
  0x0001 A character was received and placed inthe input buffer.(输入缓冲区不为空)
EV_RXFLAG
  0x0002 The event character was received andplaced in the input buffer. The event character is specified in thedevice's DCB structure, which is applied to a serial port by usingthe SetCommState function.
EV_TXEMPTY
  0x0004 The last character in the output bufferwas sent.(输出缓冲区的数据全部发送出去)


  lpOverlapped:指向OVERLAPPED结构体的一个指针。如果hFile是用异步方式打开的(在CreateFile()函数中,第三个参数设置为FILE_FLAG_OVERLAPPED),lpOverlapped不能指向一个空OVERLAPPED结构体,而是与Readfile()和WreteFile()中的OVERLAPPED参数为同一个参数。如果hFile是用异步方式打开的,而lpOverlapped指向一个空的OVERLAPPED结构体,那么函数会错误地报告,等待的操作已经完成(而此时等待的操作可能还没有完成)。
  如果hFile是用异步方式打开的,而lpOverlapped指向一个非空的OVERLAPPED结构体,那么函数WaitCommEvent被默认为异步操作,马上返回。这时,OVERLAPPED结构体必须包含一个由CreateEvent()函数返回的手动重置事件对象的句柄hEven。
  如果hFile是用同步方式打开的,那么函数WaitCommEvent不会返回,直到要等待的事件发生。
  返回值:
  如果函数成功,返回非零值,否则返回0。要得到错误信息,可以调用GetLastError函数。
  备注:
  WaitCommEvent函数为指定的通信资源监听一系列的Event,这些Event可以由 SetcommMask和GetcommMask函数来设置和查询。
  如果异步操作不能马上完成,那么该函数会返回一个FALSE,同时GetLastError函数可以截获错误码ERROR_IO_PENDING(#defineERROR_IO_PENDING997),表示操作转到后台运行。在WaitCommEvent函数返回之前,系统将OVERLAPPED结构中的hEven句柄设置为无信号状态;当WaitCommEvent函数所等待的任何一个Event发生后,系统将OVERLAPPED结构中的hEven句柄设置为有信号状态,同时将所发生事件赋给lpEvtMask。
  父进程可以根据lpEvtMask来做出相应的事件处理,然后也可以调用GetOverlappedResult函数来判断WaitCommEvent的操作是否成功。
  如果WaitCommEvent函数在后台运行的时候,进程企图想通过SetcommMask函数来改变当前设备的Event,那么WaitCommEvent函数马上返回,lpEvtMask指向0。


http://www.niftyadmin.cn/n/1403635.html

相关文章

Windows 下如何安装配置Snort视频教程

Windows 下如何安装配置Snort视频教程:第一步:http://www.tudou.com/programs/view/UUbIQCng360/第二部:http://www.tudou.com/programs/view/NqcPETQk2n8/

数据结构——链表实现两个多项式加减乘除

任务概述: 使用链表实现两个多项式的基本操作。初级要求:实现加法、减法和微分操作。高级要求:实现乘法和除法操作。(除法操作中,当不能除尽时还要求列出余式。) 要点: 链表中的每个结点形式如…

Windows CE下USB设备驱动开发的一些基础知识

Windows CE下USB设备驱动开发的一些基础知识 随着USB设备的普及,摆在开发人员面前的驱动开发任务也是越来越繁重了,特别是对于一些嵌入式开发厂商来讲,由于设备所采用的操作系统不同,相应的硬件接口也是不一样的,开发相…

数据结构——Huffman编码及译码

Huffman编码及译码 1.掌握二叉树的二叉链表存贮结构。 2.掌握Huffman算法。 要求: 使用文件保存初始的文本数据及最终的结果。 文件名为inputfile1.txt的文件保存的是一段英文短文;文件名为inputfile2.txt的文件保存01形式的编…

Windows CE下的USB设备驱动程序开发实例

下面举个简单的例子来详细说明一下驱动程序的开发过程。 例如我们有个USB Mouse设备,设备信息描述如下: Device Descriptor: bcdUSB: 0x0100 bDeviceClass: 0x00 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x08 (8) idVendor: 0x05…

程序设计应知道的那些事儿之函数

程序设计应知道的那些事儿之函数1函数 有时,程序员知道他需要多次使用同一组指令。可以将这些指令组合到一个被称为函数的较小的子程序中。在其他语言中,函数被称为子例程或程序。例如,控制汽车转向的动作实际上包含许多较小的动作&#xff1…

数据结构——求金属融化所需要的时间(图的遍历)

求金属融化所需要的时间 1) 在N N的格子上放置着形状不规则的金属(5≤N≤1000)。 金属为11格子的整数倍组成的不规则形状;金属有可能中空,这样在开始的时刻中空的方格不会立即充满液体;当中空的格子有缺口时&#x…

十种能够迅速降血脂的食物

血脂,是人体血液中所含脂类的总称,包括甘油三酯、磷脂、胆固醇和游离脂肪酸等。血液中脂类含量与全身脂类总量相比只占极少的一部分,但它却运转于人体各部组织之间,一般可以反映出体内脂类代谢情况。正常成人血清脂类含量相对稳定…