WinCE串口编程API函数(三)

·设置接收/发送缓冲区大小

BOOL SetupComm(

  HANDLE hFile,

  DWORD dwInQueue,

  DWORD dwOutQueue

);

hFile指定已打开的串口句柄,dwInQueue指定接收缓冲区的大小,dwOutQueue指定发送缓冲区的大小。

返回值:成功时返回非零值,失败时返回零。

例:

SetupComm(m_hComm,512,512);

如果不使用该函数,系统会推荐一个适合的默认值。

·控制串口

BOOL SetCommBreak(

  HANDLE hFile

);

BOOL ClearCommBreak(

  HANDLE hFile

);

  SetCommBreak函数用来停止串口传输字符并且设置串口为中断状态,ClearCommBreak函数用于重新传输字符,hFile指定已打开的串口句柄。

·清空串口缓冲区

BOOL PurgeComm(

  HANDLE hFile,

  DWORD dwFlags

);

  PurgeComm函数用于清空串口的接收缓冲区与发送缓冲区。dwFlags参数用来设置操作类型,设置为PURGE_TXCLEAR,表示清空发送缓冲区,设置为PURGE_RXCLEAR,表示清空接收缓冲区。两者也可以组合使用,表示同时清空接收缓冲区和发送缓冲区。

例:

PurgeComm(ceSeries->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR );

·清除错误并查询状态

BOOL ClearCommError(

  HANDLE hFile,

  LPDWORD lpErrors,

  LPCOMSTAT lpStat

);

  ClearCommError函数用于清除驱动程序产生的任何错误并返回当前串口的状态。lpErrors表示发生的错误码,lpStat指向COMSTAT结构,用于存储当前串口的状态。

 

 

 

  错误码表:

CE_BREAK

硬件检测到了一个中断情况

CE_FRAME

硬件检测到了一个帧错误

CE_IOE

硬件通信时发生一个I/O错误

CE_MODE

请求模式未被支持,或者hFile参数无效。如果指定了这个错误,那么它就是唯一的合法错误。

CE_OVERRUN

字符缓冲区被侵占,下一个字符丢失

CE_RXOVER

输入缓冲区溢出。输入缓冲区没有空间或者收到end-of-file (EOF)字符后又收到字符

CE_RXPARITY

硬件检测到奇偶校验错误

CE_TXFULL

应用程序试图发送一个字符,但输出缓冲区已满

COMSTAT结构体:

typedef struct _COMSTAT {

    DWORD fCtsHold : 1;

    DWORD fDsrHold : 1;

    DWORD fRlsdHold : 1;

    DWORD fXoffHold : 1;

    DWORD fXoffSent : 1;

    DWORD fEof : 1;

    DWORD fTxim : 1;

    DWORD fReserved : 25;

    DWORD cbInQue;

    DWORD cbOutQue;

} COMSTAT, *LPCOMSTAT;

fCtsHold:表示是否正在等待CTS (Clear to Send)信号。

fDsrHold:表示是否正在等待DSR (Data Set Ready)信号。

fRlsdHold:表示是否正在等待RLSD (Receive Line Signal Detect)(接收线路信号检测,也叫载波检测)信号。

fXoffHold:表示是否因为收到XOFF字符而等待。

fXoffSent:表示是否因为驱动程序发送XOFF字符而等待。

fEof:表示是否收到End of File (EOF)字符。

fTxim:如果是1,表示队列中的字符是由TransmitCommChar函数写入的而不是WriteFile函数。

fReserved:保留,未用。

cbInQue:表示接收缓冲区中存储的待ReadFile读取的字节数。

cbOutQue:表示发送缓冲区中存储的待发送的字节数。

例:

DWORD dwReadErrors;

COMSTAT    cmState;

ClearCommError(m_hComm,&dwReadErrors,&cmState);

你可能感兴趣的:(编程,api,struct,存储,WinCE,Signal)