#ifndef __SERIAL_PORT_H__ #include "buffer.h" #include "util/boostthread.h" class CTstmodemDlg; #include class SerialPort { public: SerialPort(); ~SerialPort(); bool open(); void close(); bool UpdateCommParams(); bool SetSpeed(const std::string &speed); bool SetBits(const std::string &bits); void SetPort(const std::string &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(std::string& str); bool SendData(const std::string& 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::condition m_sndcond; boost::mutex m_sndmtx; Buffer m_snd; std::string m_speed; std::string m_bits; std::string 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); // 0 : incoming/read // 1 : outgoing/write // 2 : openlog // 3 : closelog void logdata(int dir, const void *buf, int size); void closelog(); void openlog(); HANDLE _flog; }; #define __SERIAL_PORT_H__ #endif