Browse Source

changed to generic packet_t

pull/1197/head
lumapu 2 years ago
parent
commit
d8feaf02ac
  1. 8
      src/app.cpp
  2. 6
      src/hm/hmPayload.h
  3. 4
      src/hms/cmt2300a.h
  4. 9
      src/hms/esp32_3wSpi.h
  5. 23
      src/hms/hmsPayload.h
  6. 11
      src/hms/hmsRadio.h

8
src/app.cpp

@ -151,18 +151,18 @@ void app::loop(void) {
#if defined(ESP32) #if defined(ESP32)
if (mCmtRadio.loop() && mConfig->cmt.enabled) { if (mCmtRadio.loop() && mConfig->cmt.enabled) {
while (!mCmtRadio.mBufCtrl.empty()) { while (!mCmtRadio.mBufCtrl.empty()) {
hmsPacket_t *p = &mCmtRadio.mBufCtrl.front(); packet_t *p = &mCmtRadio.mBufCtrl.front();
if (mConfig->serial.debug) { if (mConfig->serial.debug) {
DPRINT(DBG_INFO, F("RX ")); DPRINT(DBG_INFO, F("RX "));
DBGPRINT(String(p->data[0])); DBGPRINT(String(p->len));
DBGPRINT(F(", ")); DBGPRINT(F(", "));
DBGPRINT(String(p->rssi)); DBGPRINT(String(p->rssi));
DBGPRINT(F("dBm | ")); DBGPRINT(F("dBm | "));
ah::dumpBuf(&p->data[1], p->data[0]); ah::dumpBuf(p->packet, p->len);
} }
mCmtStat.frmCnt++; mCmtStat.frmCnt++;
Inverter<> *iv = mSys.findInverter(&p->data[2]); Inverter<> *iv = mSys.findInverter(&p->packet[1]);
if(NULL != iv) { if(NULL != iv) {
if((iv->ivGen == IV_HMS) || (iv->ivGen == IV_HMT)) if((iv->ivGen == IV_HMS) || (iv->ivGen == IV_HMT))
mHmsPayload.add(iv, p); mHmsPayload.add(iv, p);

6
src/hm/hmPayload.h

@ -33,12 +33,12 @@ typedef std::function<void(uint8_t, Inverter<> *)> payloadListenerType;
typedef std::function<void(Inverter<> *)> alarmListenerType; typedef std::function<void(Inverter<> *)> alarmListenerType;
template<class HMSYSTEM, class HMRADIO> template<class HMSYSTEM, class RADIO>
class HmPayload { class HmPayload {
public: public:
HmPayload() {} HmPayload() {}
void setup(IApp *app, HMSYSTEM *sys, HMRADIO *radio, statistics_t *stat, uint8_t maxRetransmits, uint32_t *timestamp) { void setup(IApp *app, HMSYSTEM *sys, RADIO *radio, statistics_t *stat, uint8_t maxRetransmits, uint32_t *timestamp) {
mApp = app; mApp = app;
mSys = sys; mSys = sys;
mRadio = radio; mRadio = radio;
@ -460,7 +460,7 @@ class HmPayload {
IApp *mApp; IApp *mApp;
HMSYSTEM *mSys; HMSYSTEM *mSys;
HMRADIO *mRadio; RADIO *mRadio;
statistics_t *mStat; statistics_t *mStat;
uint8_t mMaxRetrans; uint8_t mMaxRetrans;
uint32_t *mTimestamp; uint32_t *mTimestamp;

4
src/hms/cmt2300a.h

@ -239,7 +239,7 @@ class Cmt2300a {
return CMT_SUCCESS; return CMT_SUCCESS;
} }
uint8_t getRx(uint8_t buf[], uint8_t len, int8_t *rssi) { uint8_t getRx(uint8_t buf[], uint8_t *rxLen, uint8_t maxlen, int8_t *rssi) {
if(mTxPending) if(mTxPending)
return CMT_ERR_TX_PENDING; return CMT_ERR_TX_PENDING;
@ -250,7 +250,7 @@ class Cmt2300a {
if(!cmtSwitchStatus(CMT2300A_GO_STBY, CMT2300A_STA_STBY)) if(!cmtSwitchStatus(CMT2300A_GO_STBY, CMT2300A_STA_STBY))
return CMT_ERR_SWITCH_STATE; return CMT_ERR_SWITCH_STATE;
mSpi.readFifo(buf, len); mSpi.readFifo(buf, rxLen, maxlen);
*rssi = mSpi.readReg(CMT2300A_CUS_RSSI_DBM) - 128; *rssi = mSpi.readReg(CMT2300A_CUS_RSSI_DBM) - 128;
if(!cmtSwitchStatus(CMT2300A_GO_SLEEP, CMT2300A_STA_SLEEP)) if(!cmtSwitchStatus(CMT2300A_GO_SLEEP, CMT2300A_STA_SLEEP))

9
src/hms/esp32_3wSpi.h

@ -141,7 +141,7 @@ class esp32_3wSpi {
SPI_PARAM_UNLOCK(); SPI_PARAM_UNLOCK();
} }
void readFifo(uint8_t buf[], uint8_t len) { void readFifo(uint8_t buf[], uint8_t *len, uint8_t maxlen) {
if(!mInitialized) if(!mInitialized)
return; return;
uint8_t rx_data; uint8_t rx_data;
@ -154,10 +154,13 @@ class esp32_3wSpi {
}; };
SPI_PARAM_LOCK(); SPI_PARAM_LOCK();
for(uint8_t i = 0; i < len; i++) { for(uint8_t i = 0; i < maxlen; i++) {
ESP_ERROR_CHECK(spi_device_polling_transmit(spi_fifo, &t)); ESP_ERROR_CHECK(spi_device_polling_transmit(spi_fifo, &t));
delayMicroseconds(4); // > 4 us delayMicroseconds(4); // > 4 us
buf[i] = rx_data; if(0 == i)
*len = rx_data;
else
buf[i-1] = rx_data;
} }
SPI_PARAM_UNLOCK(); SPI_PARAM_UNLOCK();
} }

23
src/hms/hmsPayload.h

@ -172,18 +172,19 @@ class HmsPayload {
} }
} }
void add(Inverter<> *iv, hmsPacket_t *p) { void add(Inverter<> *iv, packet_t *p) {
if (p->data[1] == (TX_REQ_INFO + ALL_FRAMES)) { // response from get information command if (p->packet[0] == (TX_REQ_INFO + ALL_FRAMES)) { // response from get information command
mPayload[iv->id].txId = p->data[1]; mPayload[iv->id].txId = p->packet[0];
DPRINTLN(DBG_DEBUG, F("Response from info request received")); DPRINTLN(DBG_DEBUG, F("Response from info request received"));
uint8_t *pid = &p->data[10]; uint8_t *pid = &p->packet[9];
if (*pid == 0x00) { if (*pid == 0x00) {
DPRINTLN(DBG_DEBUG, F("fragment number zero received and ignored")); DPRINTLN(DBG_DEBUG, F("fragment number zero received and ignored"));
} else { } else {
DPRINTLN(DBG_DEBUG, "PID: 0x" + String(*pid, HEX)); DPRINT(DBG_DEBUG, F("PID: 0x"));
DPRINTLN(DBG_DEBUG, String(*pid, HEX));
if ((*pid & 0x7F) < MAX_PAYLOAD_ENTRIES) { if ((*pid & 0x7F) < MAX_PAYLOAD_ENTRIES) {
memcpy(mPayload[iv->id].data[(*pid & 0x7F) - 1], &p->data[11], p->data[0] - 11); memcpy(mPayload[iv->id].data[(*pid & 0x7F) - 1], &p->packet[10], p->len - 11);
mPayload[iv->id].len[(*pid & 0x7F) - 1] = p->data[0] -11; mPayload[iv->id].len[(*pid & 0x7F) - 1] = p->len - 11;
mPayload[iv->id].gotFragment = true; mPayload[iv->id].gotFragment = true;
mPayload[iv->id].rssi[(*pid & 0x7F) - 1] = p->rssi; mPayload[iv->id].rssi[(*pid & 0x7F) - 1] = p->rssi;
} }
@ -197,15 +198,15 @@ class HmsPayload {
} }
} }
} }
} else if (p->data[1] == (TX_REQ_DEVCONTROL + ALL_FRAMES)) { // response from dev control command } else if (p->packet[0] == (TX_REQ_DEVCONTROL + ALL_FRAMES)) { // response from dev control command
DPRINTLN(DBG_DEBUG, F("Response from devcontrol request received")); DPRINTLN(DBG_DEBUG, F("Response from devcontrol request received"));
mPayload[iv->id].txId = p->data[1]; mPayload[iv->id].txId = p->packet[0];
iv->clearDevControlRequest(); iv->clearDevControlRequest();
if ((p->data[13] == ActivePowerContr) && (p->data[14] == 0x00)) { if ((p->packet[12] == ActivePowerContr) && (p->packet[13] == 0x00)) {
bool ok = true; bool ok = true;
if((p->data[11] == 0x00) && (p->data[12] == 0x00)) { if((p->packet[10] == 0x00) && (p->packet[11] == 0x00)) {
mApp->setMqttPowerLimitAck(iv); mApp->setMqttPowerLimitAck(iv);
iv->powerLimitAck = true; iv->powerLimitAck = true;
} else } else

11
src/hms/hmsRadio.h

@ -9,11 +9,6 @@
#include "../utils/dbg.h" #include "../utils/dbg.h"
#include "cmt2300a.h" #include "cmt2300a.h"
typedef struct {
int8_t rssi;
uint8_t data[28];
} hmsPacket_t;
#define U32_B3(val) ((uint8_t)((val >> 24) & 0xff)) #define U32_B3(val) ((uint8_t)((val >> 24) & 0xff))
#define U32_B2(val) ((uint8_t)((val >> 16) & 0xff)) #define U32_B2(val) ((uint8_t)((val >> 16) & 0xff))
#define U32_B1(val) ((uint8_t)((val >> 8) & 0xff)) #define U32_B1(val) ((uint8_t)((val >> 8) & 0xff))
@ -146,7 +141,7 @@ class CmtRadio {
mStat->txCnt++; mStat->txCnt++;
} }
std::queue<hmsPacket_t> mBufCtrl; std::queue<packet_t> mBufCtrl;
private: private:
inline void reset(bool genDtuSn) { inline void reset(bool genDtuSn) {
@ -206,8 +201,8 @@ class CmtRadio {
} }
inline void getRx(void) { inline void getRx(void) {
hmsPacket_t p; packet_t p;
uint8_t status = mCmt.getRx(p.data, 28, &p.rssi); uint8_t status = mCmt.getRx(p.packet, &p.len, 28, &p.rssi);
if(CMT_SUCCESS == status) if(CMT_SUCCESS == status)
mBufCtrl.push(p); mBufCtrl.push(p);
} }

Loading…
Cancel
Save