/* * meterBusClient.h * * Created on: 08.03.2014 * Author: wn */ #ifndef METERBUSCLIENT_H_ #define METERBUSCLIENT_H_ #include "cmd.h" #include "Config.h" #include "Resources.h" #include "Thermometer.h" const unsigned long RESPONSE_DELAY = 50; class MeterBusClient; class MeterBusClientConfig : public Cmd { public: MeterBusClientConfig(MeterBusClient *meterBusClient) : m_meterBusClient(meterBusClient) {}; virtual String getCmdName() { return "MBCC"; } virtual String getHelp() { return getResource(MBC_CONFIG_HELP_KEY); } virtual String exec(String params); private: MeterBusClient *m_meterBusClient; }; struct MeterBusFrame { /* * Short Frame: * Start 10h * C-Field * A-Field * Check-Sum * Stop 16h * * Long Frame: * Start 68h * Length * Length * Start 68h * C-Field * A-Field * CI-Field * User-Data * Check-Sum * Stop 16h * */ unsigned char startDelimiter; unsigned char length; unsigned char cField; unsigned char aField; unsigned char ciField; unsigned char userData[255]; unsigned char checksum; bool valid; }; class MeterBusClient { public: MeterBusClient(); void begin(CmdServer *cmdServer, Thermometer *thermometer); void exec(); friend class MeterBusClientConfig; private: MeterBusClientConfig m_meterBusClientConfig; Thermometer *m_thermometer; unsigned char m_address; void setAddress(unsigned char address); unsigned char getAddress(); bool handleFrame(); MeterBusFrame m_frame; unsigned char sendBuffer[265]; unsigned int sendBufferLen; void aSB(unsigned char c); // append to send buffer unsigned char calcSendChecksum(); unsigned long m_frameCnt; unsigned long m_myFrameCnt; unsigned long m_invalidFrameCnt; unsigned long m_invalidChecksum; unsigned long m_collisionCnt; bool m_debug; bool getDebug(); void setDebug(bool b); bool m_info; bool getInfo(); void setInfo(bool b); void SND_NKE(); void REQ_UD2(); }; #endif /* METERBUSCLIENT_H_ */