#ifndef __SERIAL_PORT_H__ #include "buffer.h" #include "boost_lite.h" class CTstmodemDlg; class SerialPort { public: SerialPort(); ~SerialPort(); bool open(); void close(); bool UpdateCommParams(); bool SetSpeed(CString &speed); bool SetBits(CString &bits); void SetPort(CString &port); void SetView(CTstmodemDlg& dlg); bool SetBreak(bool state); bool SetDTR(bool state); bool SetRTS(bool state); bool SetIRMode(bool state); bool SetRtsCtsFlowControl(bool state); int ReceiveData(CString& str); bool SendData(CString& str); bool SendIoctl(); private: HANDLE m_hPort; CTstmodemDlg* m_dlg; HANDLE m_hThread; DWORD m_nThreadId; boost::condition m_rcvcond; boost::mutex m_rcvmtx; Buffer m_rcv; boost::mutex m_sndmtx; Buffer m_snd; CString m_speed; CString m_bits; CString m_device; static DWORD MainThreadProc(SerialPort *port); DWORD PortThreadProc(); void handleStartBreakEvent(DWORD modem, const DCB& dcb); void handleEndBreakEvent(DWORD modem, const DCB& dcb); void handleCTSEvent(DWORD modem, const DCB& dcb); void handleDSREvent(DWORD modem, const DCB& dcb); void handleERREvent(DWORD modem, const DCB& dcb); void handleRINGEvent(DWORD modem, const DCB& dcb); void handleRLSDEvent(DWORD modem, const DCB& dcb); void handleRXCharEvent(DWORD modem, const DCB& dcb); //void andleRXFlagEvent(DWORD modem, const DCB& dcb); void handleTXEmptyEvent(DWORD modem, const DCB& dcb); }; #define __SERIAL_PORT_H__ #endif