changes
This commit is contained in:
parent
45bdbe0a57
commit
ebc835c794
@ -9,7 +9,7 @@
|
|||||||
#include "Resources.h"
|
#include "Resources.h"
|
||||||
|
|
||||||
|
|
||||||
// #define USE_REAL_TEXTS 1
|
#define USE_REAL_TEXTS 1
|
||||||
|
|
||||||
|
|
||||||
#ifndef USE_REAL_TEXTS
|
#ifndef USE_REAL_TEXTS
|
||||||
|
@ -33,7 +33,7 @@ void setup() {
|
|||||||
configInvalidateCmd.registerYourself(&cmdServer);
|
configInvalidateCmd.registerYourself(&cmdServer);
|
||||||
uptime.begin(&cmdServer);
|
uptime.begin(&cmdServer);
|
||||||
thermometer.begin(&cmdServer);
|
thermometer.begin(&cmdServer);
|
||||||
meterBusClient.begin(&cmdServer, &thermometer);
|
meterBusClient.begin(&cmdServer, &thermometer, &uptime);
|
||||||
|
|
||||||
digitalWrite(OK_LED_PIN, HIGH);
|
digitalWrite(OK_LED_PIN, HIGH);
|
||||||
}
|
}
|
||||||
|
@ -52,18 +52,19 @@ String MeterBusClientConfig::exec(String params) {
|
|||||||
|
|
||||||
|
|
||||||
MeterBusClient::MeterBusClient() : m_meterBusClientConfig(this), m_address(0),
|
MeterBusClient::MeterBusClient() : m_meterBusClientConfig(this), m_address(0),
|
||||||
m_frameCnt(0), m_myFrameCnt(0), m_invalidFrameCnt(0), m_invalidChecksum(0),
|
m_frameCnt(0), m_accessCnt(0), m_myFrameCnt(0), m_invalidFrameCnt(0), m_invalidChecksum(0),
|
||||||
m_collisionCnt(0) {
|
m_collisionCnt(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MeterBusClient::begin(CmdServer *cmdServer, Thermometer *thermometer) {
|
void MeterBusClient::begin(CmdServer *cmdServer, Thermometer *thermometer, Uptime *uptime) {
|
||||||
Serial.print("I'm at "); Serial.println((long)this, 16);
|
Serial.print("I'm at "); Serial.println((long)this, 16);
|
||||||
|
|
||||||
|
|
||||||
m_meterBusClientConfig.registerYourself(cmdServer);
|
m_meterBusClientConfig.registerYourself(cmdServer);
|
||||||
m_thermometer = thermometer;
|
m_thermometer = thermometer;
|
||||||
|
m_uptime = uptime;
|
||||||
|
|
||||||
//Serial3.begin(1200);
|
//Serial3.begin(1200);
|
||||||
//Serial3.begin(2400, SERIAL_8E1);
|
//Serial3.begin(2400, SERIAL_8E1);
|
||||||
@ -103,6 +104,13 @@ bool MeterBusClient::getInfo() {
|
|||||||
return m_info;
|
return m_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned char MeterBusClient::getStatus() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char MeterBusClient::getAccessCnt() {
|
||||||
|
return m_accessCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -189,6 +197,7 @@ bool MeterBusClient::handleFrame() {
|
|||||||
SND_NKE();
|
SND_NKE();
|
||||||
res = true;
|
res = true;
|
||||||
} else if (m_frame.cField == 0x5b) {
|
} else if (m_frame.cField == 0x5b) {
|
||||||
|
m_accessCnt++;
|
||||||
REQ_UD2();
|
REQ_UD2();
|
||||||
res = true;
|
res = true;
|
||||||
} else {
|
} else {
|
||||||
@ -219,9 +228,9 @@ void MeterBusClient::exec() {
|
|||||||
static unsigned long receivedDoneTimestamp;
|
static unsigned long receivedDoneTimestamp;
|
||||||
|
|
||||||
int chi = Serial3.read();
|
int chi = Serial3.read();
|
||||||
if (chi != -1) {
|
//if (chi != -1) {
|
||||||
Serial.print("Received: "); Serial.println(chi, 16);
|
// Serial.print("Received: "); Serial.println(chi, 16);
|
||||||
}
|
//}
|
||||||
char ch = (char) chi;
|
char ch = (char) chi;
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
@ -352,8 +361,8 @@ void MeterBusClient::exec() {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case STATE_DELAYED_RESPONSE:
|
case STATE_DELAYED_RESPONSE:
|
||||||
for (unsigned int i = 0; i < sendBufferLen; i++) {
|
for (unsigned int i = 0; i < m_sendBufferLen; i++) {
|
||||||
Serial3.write(sendBuffer[i]);
|
Serial3.write(m_sendBuffer[i]);
|
||||||
}
|
}
|
||||||
echoReceiveCnt = 0;
|
echoReceiveCnt = 0;
|
||||||
state = STATE_RECEIVE_ECHO;
|
state = STATE_RECEIVE_ECHO;
|
||||||
@ -361,10 +370,10 @@ void MeterBusClient::exec() {
|
|||||||
|
|
||||||
case STATE_RECEIVE_ECHO:
|
case STATE_RECEIVE_ECHO:
|
||||||
if (chi != -1) {
|
if (chi != -1) {
|
||||||
Serial.println("echo character");
|
//Serial.println("echo character");
|
||||||
if (ch == sendBuffer[echoReceiveCnt]) {
|
if (ch == m_sendBuffer[echoReceiveCnt]) {
|
||||||
echoReceiveCnt++;
|
echoReceiveCnt++;
|
||||||
if (echoReceiveCnt == sendBufferLen) {
|
if (echoReceiveCnt == m_sendBufferLen) {
|
||||||
state = STATE_DONE;
|
state = STATE_DONE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "Resources.h"
|
#include "Resources.h"
|
||||||
#include "Thermometer.h"
|
#include "Thermometer.h"
|
||||||
|
#include "uptime.h"
|
||||||
|
|
||||||
|
|
||||||
const unsigned long RESPONSE_DELAY = 50;
|
const unsigned long RESPONSE_DELAY = 50;
|
||||||
@ -71,29 +72,38 @@ struct MeterBusFrame {
|
|||||||
class MeterBusClient {
|
class MeterBusClient {
|
||||||
public:
|
public:
|
||||||
MeterBusClient();
|
MeterBusClient();
|
||||||
void begin(CmdServer *cmdServer, Thermometer *thermometer);
|
void begin(CmdServer *cmdServer, Thermometer *thermometer, Uptime *uptime);
|
||||||
void exec();
|
void exec();
|
||||||
friend class MeterBusClientConfig;
|
friend class MeterBusClientConfig;
|
||||||
private:
|
private:
|
||||||
MeterBusClientConfig m_meterBusClientConfig;
|
MeterBusClientConfig m_meterBusClientConfig;
|
||||||
Thermometer *m_thermometer;
|
Thermometer *m_thermometer;
|
||||||
|
Uptime *m_uptime;
|
||||||
unsigned char m_address;
|
unsigned char m_address;
|
||||||
void setAddress(unsigned char address);
|
void setAddress(unsigned char address);
|
||||||
unsigned char getAddress();
|
unsigned char getAddress();
|
||||||
bool handleFrame();
|
bool handleFrame();
|
||||||
MeterBusFrame m_frame;
|
MeterBusFrame m_frame;
|
||||||
|
|
||||||
unsigned char sendBuffer[265];
|
unsigned char m_sendBuffer[265];
|
||||||
unsigned int sendBufferLen;
|
unsigned int m_sendBufferLen;
|
||||||
void aSB(unsigned char c); // append to send buffer
|
void aSB(unsigned char v); // append to send buffer
|
||||||
|
void aSB(unsigned int v);
|
||||||
|
void aSB(unsigned long v);
|
||||||
|
void aSB(float v);
|
||||||
unsigned char calcSendChecksum();
|
unsigned char calcSendChecksum();
|
||||||
|
void calcAndSetFrameLength();
|
||||||
|
|
||||||
unsigned long m_frameCnt;
|
unsigned long m_frameCnt;
|
||||||
|
unsigned char m_accessCnt;
|
||||||
unsigned long m_myFrameCnt;
|
unsigned long m_myFrameCnt;
|
||||||
unsigned long m_invalidFrameCnt;
|
unsigned long m_invalidFrameCnt;
|
||||||
unsigned long m_invalidChecksum;
|
unsigned long m_invalidChecksum;
|
||||||
unsigned long m_collisionCnt;
|
unsigned long m_collisionCnt;
|
||||||
|
|
||||||
|
unsigned char getAccessCnt();
|
||||||
|
unsigned char getStatus();
|
||||||
|
|
||||||
bool m_debug;
|
bool m_debug;
|
||||||
bool getDebug();
|
bool getDebug();
|
||||||
void setDebug(bool b);
|
void setDebug(bool b);
|
||||||
|
@ -7,34 +7,180 @@
|
|||||||
|
|
||||||
#include "meterBusClient.h"
|
#include "meterBusClient.h"
|
||||||
|
|
||||||
inline void MeterBusClient::aSB(unsigned char c) {
|
void MeterBusClient::aSB(unsigned char v) {
|
||||||
sendBuffer[sendBufferLen++] = c;
|
m_sendBuffer[m_sendBufferLen] = v;
|
||||||
|
m_sendBufferLen++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MeterBusClient::aSB(unsigned int v) {
|
||||||
|
// 16 bit
|
||||||
|
union {
|
||||||
|
unsigned int i;
|
||||||
|
unsigned char c[2];
|
||||||
|
} u;
|
||||||
|
u.i = v;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[0];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[1];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MeterBusClient::aSB(unsigned long v) {
|
||||||
|
// 32 bit
|
||||||
|
union{
|
||||||
|
unsigned long l;
|
||||||
|
unsigned char c[4];
|
||||||
|
} u;
|
||||||
|
u.l = v;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[0];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[1];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[2];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[3];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MeterBusClient::aSB(float v) {
|
||||||
|
// 32 bit
|
||||||
|
union{
|
||||||
|
float f;
|
||||||
|
unsigned char c[4];
|
||||||
|
} u;
|
||||||
|
u.f = v;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[0];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[1];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[2];
|
||||||
|
m_sendBufferLen++;
|
||||||
|
m_sendBuffer[m_sendBufferLen] = u.c[3];
|
||||||
|
m_sendBufferLen++;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char MeterBusClient::calcSendChecksum() {
|
unsigned char MeterBusClient::calcSendChecksum() {
|
||||||
unsigned char checksum = 0;
|
unsigned char checksum = 0;
|
||||||
for (unsigned int i = 4; i < sendBufferLen; i++) {
|
for (unsigned int i = 4; i < m_sendBufferLen; i++) {
|
||||||
checksum += sendBuffer[i];
|
checksum += m_sendBuffer[i];
|
||||||
}
|
}
|
||||||
return checksum;
|
return checksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MeterBusClient::calcAndSetFrameLength() {
|
||||||
|
unsigned char frameLength = m_sendBufferLen - 6;
|
||||||
|
m_sendBuffer[1] = frameLength;
|
||||||
|
m_sendBuffer[2] = frameLength;
|
||||||
|
}
|
||||||
|
|
||||||
void MeterBusClient::SND_NKE() {
|
void MeterBusClient::SND_NKE() {
|
||||||
sendBufferLen = 0;
|
m_sendBufferLen = 0;
|
||||||
aSB(0xE5);
|
aSB((unsigned char)0xE5);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeterBusClient::REQ_UD2() {
|
void MeterBusClient::REQ_UD2() {
|
||||||
sendBufferLen = 0;
|
m_sendBufferLen = 0;
|
||||||
aSB(0x68);
|
// frame header
|
||||||
aSB(0x03);
|
aSB((unsigned char)0x68);
|
||||||
aSB(0x03);
|
aSB((unsigned char)0x00);
|
||||||
aSB(0x68);
|
aSB((unsigned char)0x00);
|
||||||
aSB(0x01);
|
aSB((unsigned char)0x68);
|
||||||
|
|
||||||
|
// C
|
||||||
|
aSB((unsigned char)0x08);
|
||||||
|
|
||||||
|
// A
|
||||||
aSB(getAddress());
|
aSB(getAddress());
|
||||||
aSB(0x03);
|
|
||||||
|
// CI
|
||||||
|
aSB((unsigned char)0x72);
|
||||||
|
|
||||||
|
// Header
|
||||||
|
aSB((unsigned long)0); // Ident
|
||||||
|
aSB((unsigned int)0); // Manu.
|
||||||
|
aSB((unsigned char)1); // Version
|
||||||
|
aSB((unsigned char)0); // Medium: other
|
||||||
|
aSB(getAccessCnt()); // Access
|
||||||
|
aSB(getStatus()); // Status
|
||||||
|
aSB((unsigned int)0); // Signatur
|
||||||
|
|
||||||
|
// Uptime
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x01);
|
||||||
|
// VIF
|
||||||
|
aSB((unsigned char)0x24);
|
||||||
|
aSB(m_uptime->getSeconds());
|
||||||
|
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x01);
|
||||||
|
// VIF
|
||||||
|
aSB((unsigned char)0x25);
|
||||||
|
aSB(m_uptime->getMinutes());
|
||||||
|
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x01);
|
||||||
|
// VIF
|
||||||
|
aSB((unsigned char)0x26);
|
||||||
|
aSB(m_uptime->getHours());
|
||||||
|
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x02);
|
||||||
|
// VIF
|
||||||
|
aSB((unsigned char)0x27);
|
||||||
|
aSB((unsigned int)m_uptime->getDays());
|
||||||
|
|
||||||
|
|
||||||
|
// Temperatur 1
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x05);
|
||||||
|
// VIF
|
||||||
|
aSB((unsigned char)0x67);
|
||||||
|
// value
|
||||||
|
aSB(m_thermometer->getTemperature(0));
|
||||||
|
|
||||||
|
// Temperatur 2
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x05);
|
||||||
|
// VIF
|
||||||
|
aSB((unsigned char)0x67);
|
||||||
|
// value
|
||||||
|
aSB(m_thermometer->getTemperature(1));
|
||||||
|
|
||||||
|
// Temperatur 3
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x05);
|
||||||
|
// VIF
|
||||||
|
aSB((unsigned char)0x67);
|
||||||
|
// value
|
||||||
|
aSB(m_thermometer->getTemperature(2));
|
||||||
|
|
||||||
|
// Temperatur 4
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x05);
|
||||||
|
// VIF
|
||||||
|
aSB((unsigned char)0x67);
|
||||||
|
// value
|
||||||
|
aSB(m_thermometer->getTemperature(3));
|
||||||
|
|
||||||
|
// Structured Manufacturer Data
|
||||||
|
// DIF
|
||||||
|
aSB((unsigned char)0x0f);
|
||||||
|
aSB(m_frameCnt);
|
||||||
|
aSB(m_myFrameCnt);
|
||||||
|
aSB(m_invalidFrameCnt);
|
||||||
|
aSB(m_invalidChecksum);
|
||||||
|
aSB(m_collisionCnt);
|
||||||
|
aSB(m_thermometer->getCalibrateFactor(0));
|
||||||
|
aSB(m_thermometer->getCalibrateFactor(1));
|
||||||
|
aSB(m_thermometer->getCalibrateFactor(2));
|
||||||
|
aSB(m_thermometer->getCalibrateFactor(3));
|
||||||
|
aSB(m_thermometer->getAlpha());
|
||||||
|
aSB(m_thermometer->getPeriodMeasure());
|
||||||
|
|
||||||
|
|
||||||
aSB(calcSendChecksum());
|
aSB(calcSendChecksum());
|
||||||
aSB(0x16);
|
aSB((unsigned char)0x16);
|
||||||
|
calcAndSetFrameLength();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,6 +202,10 @@ void Thermometer::setTemperature(unsigned int index, float t) {
|
|||||||
m_lastSmoothedTemperature[index] = m_smoothedTemperature[index];
|
m_lastSmoothedTemperature[index] = m_smoothedTemperature[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float Thermometer::getTemperature(unsigned int index) {
|
||||||
|
return m_temperature[index];
|
||||||
|
}
|
||||||
|
|
||||||
void Thermometer::prepareAdc() {
|
void Thermometer::prepareAdc() {
|
||||||
unsigned long oldRegValue = AD7190_GetRegisterValue(AD7190_REG_CONF, 3, 1);
|
unsigned long oldRegValue = AD7190_GetRegisterValue(AD7190_REG_CONF, 3, 1);
|
||||||
oldRegValue &= ~(AD7190_CONF_CHAN(0xFF));
|
oldRegValue &= ~(AD7190_CONF_CHAN(0xFF));
|
||||||
|
@ -74,6 +74,10 @@ public:
|
|||||||
void exec();
|
void exec();
|
||||||
friend class ThermConfig;
|
friend class ThermConfig;
|
||||||
friend class ThermValues;
|
friend class ThermValues;
|
||||||
|
float getTemperature(unsigned int index);
|
||||||
|
float getCalibrateFactor(unsigned int i);
|
||||||
|
unsigned long getPeriodMeasure();
|
||||||
|
float getAlpha();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned long m_periodMillis;
|
unsigned long m_periodMillis;
|
||||||
@ -104,11 +108,8 @@ private:
|
|||||||
void setTemperature(unsigned int index, float t);
|
void setTemperature(unsigned int index, float t);
|
||||||
void setR(unsigned int index, float r);
|
void setR(unsigned int index, float r);
|
||||||
void setPeriodMeasure(unsigned long p);
|
void setPeriodMeasure(unsigned long p);
|
||||||
unsigned long getPeriodMeasure();
|
|
||||||
void setAlpha(float a);
|
void setAlpha(float a);
|
||||||
float getAlpha();
|
|
||||||
void setCalibrateFactor(unsigned int i, float c);
|
void setCalibrateFactor(unsigned int i, float c);
|
||||||
float getCalibrateFactor(unsigned int i);
|
|
||||||
void setDebug(bool b);
|
void setDebug(bool b);
|
||||||
bool getDebug();
|
bool getDebug();
|
||||||
void setInfo(bool b);
|
void setInfo(bool b);
|
||||||
|
2
uptime.h
2
uptime.h
@ -26,7 +26,7 @@ public:
|
|||||||
uint8_t getSeconds() { return m_seconds; };
|
uint8_t getSeconds() { return m_seconds; };
|
||||||
uint8_t getMinutes() { return m_minutes; };
|
uint8_t getMinutes() { return m_minutes; };
|
||||||
uint8_t getHours() { return m_hours; };
|
uint8_t getHours() { return m_hours; };
|
||||||
uint8_t getDays() { return m_days; };
|
uint16_t getDays() { return m_days; };
|
||||||
private:
|
private:
|
||||||
UptimeCmd m_uptimeCmd;
|
UptimeCmd m_uptimeCmd;
|
||||||
uint8_t m_seconds;
|
uint8_t m_seconds;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user