SerialCommHelper.h
上传用户:chineseart
上传日期:2022-06-24
资源大小:52k
文件大小:2k
源码类别:

串口编程

开发平台:

Visual C++

  1. // SerialCommHelper.h: interface for the CSerialCommHelper class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #pragma once
  5. #include "SerialBuffer.h"
  6. #include "DebugDump.h"
  7. #include <map>
  8. typedef enum tagSERIAL_STATE
  9. {
  10. SS_Unknown,
  11. SS_UnInit,
  12. SS_Init,
  13. SS_Started ,
  14. SS_Stopped ,
  15. } SERIAL_STATE;
  16. class CSerialCommHelper  
  17. {
  18. private:
  19. SERIAL_STATE m_eState;
  20. HANDLE m_hCommPort;
  21. HANDLE m_hThreadTerm ;
  22. HANDLE m_hThread;
  23. HANDLE m_hThreadStarted;
  24. HANDLE m_hDataRx;
  25. bool m_abIsConnected;
  26. void InvalidateHandle(HANDLE& hHandle );
  27. void CloseAndCleanHandle(HANDLE& hHandle) ;
  28. CSerialBuffer m_theSerialBuffer;
  29. CRITICAL_SECTION m_csLock;
  30. SERIAL_STATE GetCurrentState() {return m_eState;}
  31. public:
  32. CSerialCommHelper();
  33. virtual ~CSerialCommHelper();
  34. //void GetEventToWaitOn(HANDLE* hEvent) {*hEvent = m_hDataRx;}
  35. HANDLE GetWaitForEvent() {return m_hDataRx;} 
  36. inline void LockThis() {EnterCriticalSection ( &m_csLock );}
  37. inline void UnLockThis() {LeaveCriticalSection (&m_csLock); }
  38. inline void InitLock() {InitializeCriticalSection (&m_csLock );}
  39. inline void DelLock() {DeleteCriticalSection (&m_csLock );}
  40.   inline bool IsInputAvailable()
  41. {
  42. LockThis (); 
  43. bool abData = ( !m_theSerialBuffer.IsEmpty() ) ;
  44. UnLockThis (); 
  45. return abData;
  46. inline bool IsConnection() {return m_abIsConnected ;}
  47.   inline void SetDataReadEvent() { SetEvent ( m_hDataRx ); }
  48. HRESULT Read_N (std::string& data,long alCount,long alTimeOut);
  49. HRESULT Read_Upto (std::string& data,char chTerminator ,long * alCount,long alTimeOut);
  50. HRESULT ReadAvailable(std::string& data);
  51. HRESULT Write (const char* data,DWORD dwSize);
  52. HRESULT Init(std::string szPortName= _T("COM1"), DWORD dwBaudRate = 9600,BYTE byParity = 0,BYTE byStopBits = 1,BYTE byByteSize  = 8);
  53. HRESULT Start();
  54. HRESULT Stop();
  55. HRESULT UnInit();
  56. static unsigned __stdcall ThreadFn(void*pvParam);
  57. //-- helper fn.
  58.   HRESULT  CanProcess();
  59. void OnSetDebugOption(long  iOpt,BOOL bOnOff);
  60. };