Files
ThermometerPro/meterBusClient.h
2014-04-04 20:38:11 +02:00

111 lines
2.0 KiB
C++

/*
* 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_ */