diff --git a/src/app.cpp b/src/app.cpp index 5666e2d7..a58ae877 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -191,10 +191,6 @@ void app::onNetwork(bool gotIp) { ah::Scheduler::resetTicker(); regularTickers(); //reinstall regular tickers every(std::bind(&app::tickSend, this), mConfig->nrf.sendInterval, "tSend"); - #if defined(ESP32) - if(mConfig->cmt.enabled) - everySec(std::bind(&CmtRadioType::tickSecond, &mCmtRadio), "tsCmt"); - #endif mMqttReconnect = true; mSunrise = 0; // needs to be set to 0, to reinstall sunrise and ivComm tickers! //once(std::bind(&app::tickNtpUpdate, this), 2, "ntp2"); diff --git a/src/hm/hmRadio.h b/src/hm/hmRadio.h index 96e38fac..a808bd88 100644 --- a/src/hm/hmRadio.h +++ b/src/hm/hmRadio.h @@ -6,10 +6,7 @@ #ifndef __HM_RADIO_H__ #define __HM_RADIO_H__ -#include "../utils/dbg.h" #include -#include "../utils/crc.h" -#include "../config/config.h" #include "SPI.h" #include "radio.h" @@ -137,17 +134,10 @@ class HmRadio : public Radio { return true; } - void handleIntr(void) { - mIrqRcvd = true; - } - bool isChipConnected(void) { //DPRINTLN(DBG_VERBOSE, F("hmRadio.h:isChipConnected")); return mNrf24.isChipConnected(); } - void enableDebug() { - mSerialDebug = true; - } void sendControlPacket(Inverter<> *iv, uint8_t cmd, uint16_t *data, bool isRetransmit, bool isNoMI = true, bool is4chMI = false) { DPRINT(DBG_INFO, F("sendControlPacket cmd: 0x")); @@ -199,27 +189,6 @@ class HmRadio : public Radio { sendPacket(iv, cnt, isRetransmit, isNoMI); } - void prepareDevInformCmd(Inverter<> *iv, uint8_t cmd, uint32_t ts, uint16_t alarmMesId, bool isRetransmit, uint8_t reqfld=TX_REQ_INFO) { // might not be necessary to add additional arg. - if(mSerialDebug) { - DPRINT(DBG_DEBUG, F("prepareDevInformCmd 0x")); - DPRINTLN(DBG_DEBUG,String(cmd, HEX)); - } - initPacket(iv->radioId.u64, reqfld, ALL_FRAMES); - mTxBuf[10] = cmd; // cid - mTxBuf[11] = 0x00; - CP_U32_LittleEndian(&mTxBuf[12], ts); - if (cmd == AlarmData ) { //cmd == RealTimeRunData_Debug || - mTxBuf[18] = (alarmMesId >> 8) & 0xff; - mTxBuf[19] = (alarmMesId ) & 0xff; - } - sendPacket(iv, 24, isRetransmit); - } - - void sendCmdPacket(Inverter<> *iv, uint8_t mid, uint8_t pid, bool isRetransmit, bool appendCrc16=true) { - initPacket(iv->radioId.u64, mid, pid); - sendPacket(iv, 10, isRetransmit, appendCrc16); - } - uint8_t getDataRate(void) { if(!mNrf24.isChipConnected()) return 3; // unknown @@ -231,7 +200,6 @@ class HmRadio : public Radio { } std::queue mBufCtrl; - bool mSerialDebug; private: bool getReceived(void) { @@ -264,19 +232,7 @@ class HmRadio : public Radio { } void sendPacket(Inverter<> *iv, uint8_t len, bool isRetransmit, bool appendCrc16=true) { - //DPRINTLN(DBG_VERBOSE, F("hmRadio.h:sendPacket")); - //DPRINTLN(DBG_VERBOSE, "sent packet: #" + String(iv->radioStatistics.txCnt)); - - // append crc's - if (appendCrc16 && (len > 10)) { - // crc control data - uint16_t crc = ah::crc16(&mTxBuf[10], len - 10); - mTxBuf[len++] = (crc >> 8) & 0xff; - mTxBuf[len++] = (crc ) & 0xff; - } - // crc over all - mTxBuf[len] = ah::crc8(mTxBuf, len); - len++; + updateCrcs(len, appendCrc16); // set TX and RX channels mTxChIdx = (mTxChIdx + 1) % RF_CHANNELS; @@ -302,7 +258,9 @@ class HmRadio : public Radio { iv->radioStatistics.txCnt++; } - volatile bool mIrqRcvd; + uint64_t getIvId(Inverter<> *iv) { + return iv->radioId.u64; + } uint8_t mRfChLst[RF_CHANNELS]; uint8_t mTxChIdx; diff --git a/src/hm/radio.h b/src/hm/radio.h index 4247fa72..e9b1e47b 100644 --- a/src/hm/radio.h +++ b/src/hm/radio.h @@ -11,6 +11,9 @@ #define ALL_FRAMES 0x80 #define SINGLE_FRAME 0x81 +#include "../utils/dbg.h" +#include "../utils/crc.h" + // forward declaration of class template class Inverter; @@ -19,11 +22,40 @@ class Inverter; class Radio { public: virtual void sendControlPacket(Inverter<> *iv, uint8_t cmd, uint16_t *data, bool isRetransmit, bool isNoMI = true, bool is4chMI = false) = 0; - virtual void prepareDevInformCmd(Inverter<> *iv, uint8_t cmd, uint32_t ts, uint16_t alarmMesId, bool isRetransmit, uint8_t reqfld=TX_REQ_INFO) = 0; - virtual void sendCmdPacket(Inverter<> *iv, uint8_t mid, uint8_t pid, bool isRetransmit, bool appendCrc16=true) = 0; virtual bool switchFrequency(Inverter<> *iv, uint32_t fromkHz, uint32_t tokHz) { return true; } + void handleIntr(void) { + mIrqRcvd = true; + } + + void enableDebug() { + mSerialDebug = true; + } + + void sendCmdPacket(Inverter<> *iv, uint8_t mid, uint8_t pid, bool isRetransmit, bool appendCrc16=true) { + initPacket(getIvId(iv), mid, pid); + sendPacket(iv, 10, isRetransmit, appendCrc16); + } + + void prepareDevInformCmd(Inverter<> *iv, uint8_t cmd, uint32_t ts, uint16_t alarmMesId, bool isRetransmit, uint8_t reqfld=TX_REQ_INFO) { // might not be necessary to add additional arg. + if(mSerialDebug) { + DPRINT(DBG_DEBUG, F("prepareDevInformCmd 0x")); + DPRINTLN(DBG_DEBUG,String(cmd, HEX)); + } + initPacket(getIvId(iv), reqfld, ALL_FRAMES); + mTxBuf[10] = cmd; + CP_U32_LittleEndian(&mTxBuf[12], ts); + if (cmd == AlarmData ) { //cmd == RealTimeRunData_Debug || + mTxBuf[18] = (alarmMesId >> 8) & 0xff; + mTxBuf[19] = (alarmMesId ) & 0xff; + } + sendPacket(iv, 24, isRetransmit); + } + protected: + virtual void sendPacket(Inverter<> *iv, uint8_t len, bool isRetransmit, bool appendCrc16=true) = 0; + virtual uint64_t getIvId(Inverter<> *iv) = 0; + void initPacket(uint64_t ivId, uint8_t mid, uint8_t pid) { mTxBuf[0] = mid; CP_U32_BigEndian(&mTxBuf[1], ivId >> 8); @@ -32,6 +64,19 @@ class Radio { memset(&mTxBuf[10], 0x00, (MAX_RF_PAYLOAD_SIZE-10)); } + void updateCrcs(uint8_t len, bool appendCrc16=true) { + // append crc's + if (appendCrc16 && (len > 10)) { + // crc control data + uint16_t crc = ah::crc16(&mTxBuf[10], len - 10); + mTxBuf[len++] = (crc >> 8) & 0xff; + mTxBuf[len++] = (crc ) & 0xff; + } + // crc over all + mTxBuf[len] = ah::crc8(mTxBuf, len); + len++; + } + void generateDtuSn(void) { uint32_t chipID = 0; #ifdef ESP32 @@ -48,6 +93,8 @@ class Radio { } uint32_t mDtuSn; + volatile bool mIrqRcvd; + bool mSerialDebug; uint8_t mTxBuf[MAX_RF_PAYLOAD_SIZE]; }; diff --git a/src/hms/hmsRadio.h b/src/hms/hmsRadio.h index 1c26cb91..b6b6bb48 100644 --- a/src/hms/hmsRadio.h +++ b/src/hms/hmsRadio.h @@ -6,7 +6,6 @@ #ifndef __HMS_RADIO_H__ #define __HMS_RADIO_H__ -#include "../utils/dbg.h" #include "cmt2300a.h" #include "../hm/radio.h" @@ -44,17 +43,6 @@ class CmtRadio : public Radio { return false; } - void tickSecond() { - } - - void handleIntr(void) { - mIrqRcvd = true; - } - - void enableDebug() { - mSerialDebug = true; - } - bool isConnected() { return mCmtAvail; } @@ -90,30 +78,11 @@ class CmtRadio : public Radio { return true; } - void prepareDevInformCmd(Inverter<> *iv, uint8_t cmd, uint32_t ts, uint16_t alarmMesId, bool isRetransmit, uint8_t reqfld=TX_REQ_INFO) { // might not be necessary to add additional arg. - initPacket(iv->radioId.u64, reqfld, ALL_FRAMES); - mTxBuf[10] = cmd; - CP_U32_LittleEndian(&mTxBuf[12], ts); - if (cmd == AlarmData ) { //cmd == RealTimeRunData_Debug || - mTxBuf[18] = (alarmMesId >> 8) & 0xff; - mTxBuf[19] = (alarmMesId ) & 0xff; - } - sendPacket(iv, 24, isRetransmit); - } - - void sendCmdPacket(Inverter<> *iv, uint8_t mid, uint8_t pid, bool isRetransmit, bool appendCrc16=true) { - initPacket(iv->radioId.u64, mid, pid); - sendPacket(iv, 10, isRetransmit); - } + std::queue mBufCtrl; - void sendPacket(Inverter<> *iv, uint8_t len, bool isRetransmit) { - if (len > 14) { - uint16_t crc = ah::crc16(&mTxBuf[10], len - 10); - mTxBuf[len++] = (crc >> 8) & 0xff; - mTxBuf[len++] = (crc ) & 0xff; - } - mTxBuf[len] = ah::crc8(mTxBuf, len); - len++; + private: + void sendPacket(Inverter<> *iv, uint8_t len, bool isRetransmit, bool appendCrc16=true) { + updateCrcs(len, appendCrc16); if(mSerialDebug) { DPRINT(DBG_INFO, F("TX ")); @@ -136,9 +105,10 @@ class CmtRadio : public Radio { iv->radioStatistics.txCnt++; } - std::queue mBufCtrl; + uint64_t getIvId(Inverter<> *iv) { + return iv->radioId.u64; + } - private: inline void reset(bool genDtuSn) { if(genDtuSn) generateDtuSn(); @@ -182,8 +152,6 @@ class CmtRadio : public Radio { } CmtType mCmt; - bool mSerialDebug; - bool mIrqRcvd; bool mRqstGetRx; bool mCmtAvail; };