MeterBusPowerMaster/meterBusMaster.h

91 lines
2.4 KiB
C
Raw Normal View History

2014-01-17 22:00:39 +01:00
#ifndef METERBUSMASTER_H_
#define METERBUSMASTER_H_
#include <WString.h>
#include <Print.h>
#include "cmd.h"
#include "mBusDialog.h"
const unsigned long RESPONSE_TIMEOUT = 2000; // millisecond
2014-01-18 15:51:27 +01:00
const uint8_t RX_EN_PIN = 2;
const uint8_t RX_ENABLE = LOW;
const uint8_t RX_DISABLE = HIGH;
2014-01-17 22:00:39 +01:00
2014-01-18 15:51:27 +01:00
const uint8_t CURRENT_IN = A0;
2014-01-19 00:37:40 +01:00
const double U_UNIT = 4.9; // mV
2014-02-02 16:39:08 +01:00
const double R_SHUNT = 10.0;
2014-01-17 22:00:39 +01:00
class SendOctets : public Cmd, public ResponseCallback {
public:
SendOctets(RequestSender *meterBusMaster) : m_meterBusMaster(meterBusMaster) {}
virtual String getCmdName() { return "SO"; }
2014-01-18 15:51:27 +01:00
virtual String getHelp() { return "Send octets"; }
2014-01-17 22:00:39 +01:00
virtual String exec(String params);
virtual void sendResponse(uint8_t *responseBuffer, uint16_t responseBufferLength);
virtual void sendError(uint8_t code);
private:
RequestSender *m_meterBusMaster;
};
2014-01-18 15:51:27 +01:00
class MeasureCurrent : public Cmd {
public:
MeasureCurrent(RequestSender *meterBusMaster) : m_meterBusMaster(meterBusMaster) {}
virtual String getCmdName() { return "MC"; }
virtual String getHelp() { return "Measure current"; }
virtual String exec(String params);
private:
RequestSender *m_meterBusMaster;
};
2014-02-02 16:39:08 +01:00
class CalibrationSupport : public Cmd {
public:
2014-02-02 16:47:01 +01:00
CalibrationSupport(RequestSender *meterBusMaster) : m_meterBusMaster(meterBusMaster), enable(false) {}
2014-02-02 16:39:08 +01:00
virtual String getCmdName() { return "CS"; }
virtual String getHelp() { return "Calibration Support"; }
virtual String exec(String params);
private:
RequestSender *m_meterBusMaster;
2014-02-02 16:47:01 +01:00
bool enable;
2014-02-02 16:39:08 +01:00
};
2014-01-17 22:00:39 +01:00
const uint8_t SEND_BUFFER_SIZE = 30;
const uint8_t RECEIVE_BUFFER_SIZE = 180;
class MeterBusMaster : public RequestSender {
public:
MeterBusMaster();
void begin(CmdServer *cmdServer);
void exec();
uint8_t *getSendBuffer();
void sendBufferReady(uint16_t bufLen, ResponseCallback *responseCallback);
2014-02-02 16:39:08 +01:00
friend class CalibrationSupport;
2014-01-17 22:00:39 +01:00
private:
SendOctets m_sendOctets;
2014-01-18 15:51:27 +01:00
MeasureCurrent m_measureCurrent;
2014-02-02 16:39:08 +01:00
CalibrationSupport m_calibrationSupport;
2014-01-17 22:00:39 +01:00
bool m_cmdReadyToSend;
bool m_cmdReadyFromRecv;
bool m_expectResponse;
uint16_t m_sendBufLen;
uint16_t m_recvBufLen;
uint8_t m_retransmitCount;
ResponseCallback *m_responseCallback;
uint8_t m_sendBuffer[SEND_BUFFER_SIZE];
uint8_t m_recvBuffer[RECEIVE_BUFFER_SIZE];
bool m_sampling;
2014-02-03 23:04:57 +01:00
bool m_calibration;
2014-01-17 22:00:39 +01:00
void prepareResponse(bool err, uint8_t in);
void sample();
void hold();
};
#endif /* METERBUSMASTER_H_ */