清除串行端口错误或读取串行端口现在的状态时,可用函数ClearCommError。Windows系统利用此函数清除硬件的通讯错误以及获取通讯设备的当前状态
ClearCommError()函数原型
1 2 3 4 5 |
BOOL ClearCommError( HANDLE hFile, //通信设备的句柄 LPDWORD lpErrors,//接收错误代码变量的指针 LPCOMSTAT lpStat //通信状态缓冲区的指针 ); |
ClearCommError()函数参数说明:
- hFile:串行端冂的Handle值,此值即为使用CreateFile函数后所返回的值。
- lpError:返回错误数值,错误常数如下:
CE_BREAK:检测到中断信号。
CE_DNS:Windows95专用,未被选择的并行端口。
CE_FRAME:硬件检到框架错误
CE_IOE:通信设备发生输入/输出綹误,
CE_MODE:设置模式错误,或是hFile值错误。
CE_OOP:Wmdows95专用,并行端口发生缺纸错误。CE_OVERRUN:缓冲区容量不足,数据将遗失。
CE_PTO:Windows95专用,并行端口发生超时错误。
CE_RXOVER:接收区满溢或在文件结尾被接收到后仍有数据发送过来。
CE_RXPARITY:硬件检测到校验位检查错误。
CE_TXFULL:发送缓存区已满后,应用程序仍要发送数据。 - lpStat:指向通信端口状态的结构变量。此结构的原始声明如下:
123456789101112typedef struct _COMSTAT { //cstDWORD fCtsHold : 1; //Tx正在等待CTS信号DWORD fDsrHold : 1; //Tx正在等待DSR信号DWORD fRlsdHold : 1; //Tx正在等待RLSD信号DWORD fXoffHold : 1; //Tx由于接收XOFF字符而在等待DWORD fXoffSent : 1; //Tx由于发送XOFF字符而在等待DWORD fEof : 1; //发送EOF字符DWORD fTxim : 1; //字符在等待TxDWORD fReserved : 25; //保留DWORD cbInQue; //输入缓冲区中的字节数DWORD cbOutQue; //输出缓冲区中的字节数} COMSTAT, *LPCOMSTAT;
此结构屮有关参数说明如下:
fCtsHold:是否正在等待CTS信号。占一个位的位置。
fDsrHold:是否正在等待DSR信号。占一个位的位置。
fRlsdHoId:是否正在等待RLSD信号。占一个位的位置。
fXoftHoId:是否因收到xoff字符而在等待。占一个位的位置。
fXoffHold:是否因送出xoff字符而使得发送的动作在等待。占一个位置
cbInQue:在输入缓冲区尚未被ReadFile函数读取的数据字节数。这个参数经常被用来进行状态检查。
cbOutQue:在发送缓冲区而尚未被发送的据字节数。