1 #pragma once 2 3 #include "ASyncSerial.h" 4 #include "DomoticzHardware.h" 5 #include "P1MeterBase.h" 6 7 #define RX_BUFFER_SIZE 256 8 9 class CRFXBase: public P1MeterBase 10 { 11 friend class RFXComSerial; 12 friend class RFXComTCP; 13 friend class MainWorker; 14 public: 15 enum _eRFXAsyncType 16 { 17 ATYPE_DISABLED = 0, 18 ATYPE_P1_DSMR_1, 19 ATYPE_P1_DSMR_2, 20 ATYPE_P1_DSMR_3, 21 ATYPE_P1_DSMR_4, 22 ATYPE_P1_DSMR_5, 23 ATYPE_TELEINFO_1200, 24 ATYPE_TELEINFO_19200, 25 }; 26 CRFXBase(); 27 ~CRFXBase(); 28 std::string m_Version; 29 _eRFXAsyncType m_AsyncType; 30 int m_NoiseLevel; 31 bool SetRFXCOMHardwaremodes(const unsigned char Mode1, const unsigned char Mode2, const unsigned char Mode3, const unsigned char Mode4, const unsigned char Mode5, const unsigned char Mode6); 32 void SendResetCommand(); 33 virtual bool WriteToHardware(const char *pdata, const unsigned char length) = 0; 34 void SetAsyncType(_eRFXAsyncType const AsyncType); 35 protected: 36 void Set_Async_Parameters(const _eRFXAsyncType AsyncType); 37 void Parse_Async_Data(const uint8_t *pData, const int Len); 38 bool onInternalMessage(const unsigned char *pBuffer, const size_t Len, const bool checkValid = true); 39 virtual bool StartHardware() = 0; 40 virtual bool StopHardware() = 0; 41 42 time_t m_LastP1Received = 0; 43 44 std::mutex readQueueMutex; 45 unsigned char m_rxbuffer[RX_BUFFER_SIZE] = { 0 }; 46 unsigned char m_rxbufferpos = { 0 }; 47 private: 48 static bool CheckValidRFXData(const uint8_t *pData); 49 void SendCommand(const unsigned char Cmd); 50 std::shared_ptr<std::thread> m_thread; 51 bool m_bReceiverStarted; 52 }; 53 54