改后的SerialPort.h

/*
** FILENAME   CSerialPort.h
**
** PURPOSE    This class can read, write and watch one serial port.
**      It sends messages to its owner when something happends on the port
**      The class creates a thread for reading and writing so the main
**      program is not blocked.
**
** CREATION DATE  15-09-1997
** LAST MODIFICATION 12-11-1997
**
** AUTHOR    Remon Spekreijse
**
**
*/

#ifndef __SERIALPORT_H__
#define __SERIALPORT_H__

#define WM_COMM_BREAK_DETECTED  WM_USER+1 // A break was detected on input.
#define WM_COMM_CTS_DETECTED  WM_USER+2 // The CTS (clear-to-send) signal changed state.
#define WM_COMM_DSR_DETECTED  WM_USER+3 // The DSR (data-set-ready) signal changed state.
#define WM_COMM_ERR_DETECTED  WM_USER+4 // A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.
#define WM_COMM_RING_DETECTED  WM_USER+5 // A ring indicator was detected.
#define WM_COMM_RLSD_DETECTED  WM_USER+6 // The RLSD (receive-line-signal-detect) signal changed state.
#define WM_COMM_RXCHAR    WM_USER+7 // A character was received and placed in the input buffer.
#define WM_COMM_RXFLAG_DETECTED  WM_USER+8 // The event character was received and placed in the input buffer. 
#define WM_COMM_TXEMPTY_DETECTED WM_USER+9 // The last character in the output buffer was sent. 

class CSerialPort
{              
public:
 void WriteToPort(LPCTSTR string,int n);
 void WriteToPort(LPCTSTR string);
 int m_nWriteSize;
 void WriteToPort(char* string, int n );
 void ClosePort();
 // contruction and destruction
 CSerialPort();
 virtual  ~CSerialPort();

 // port initialisation           
 BOOL  InitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 512);
 
 // start/stop comm watching
 BOOL  StartMonitoring();
 BOOL  RestartMonitoring();
 BOOL  StopMonitoring();

 DWORD  GetWriteBufferSize();
 DWORD  GetCommEvents();
 DCB   GetDCB();

 void  WriteToPort(char* string);

protected:
 // protected memberfunctions
 void  ProcessErrorMessage(char* ErrorText);
 static UINT CommThread(LPVOID pParam);
 static void ReceiveChar(CSerialPort* port, COMSTAT comstat);
 static void WriteChar(CSerialPort* port);

 // thread
 CWinThread*   m_Thread;

 // synchronisation objects
 CRITICAL_SECTION m_csCommunicationSync;
 BOOL    m_bThreadAlive;
 // handles
 HANDLE    m_hShutdownEvent;
 HANDLE    m_hComm;
 HANDLE    m_hWriteEvent;

 // Event array.
 // One element is used for each event. There are two event handles for each port.
 // A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent).
 // There is a general shutdown when the port is closed.
 HANDLE    m_hEventArray[3];

 // structures
 OVERLAPPED   m_ov;
 COMMTIMEOUTS  m_CommTimeouts;
 DCB     m_dcb;

 // owner window
 CWnd*    m_pOwner;

 // misc
 UINT    m_nPortNr;
 char*    m_szWriteBuffer;
 DWORD    m_dwCommEvents;
 DWORD    m_nWriteBufferSize;
};

#endif __SERIALPORT_H__

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值