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