mirror of
https://github.com/lumapu/ahoy.git
synced 2025-07-26 04:37:14 +02:00
changed to generic packet_t
This commit is contained in:
parent
09896fbe6b
commit
d8feaf02ac
6 changed files with 30 additions and 31 deletions
|
@ -151,18 +151,18 @@ void app::loop(void) {
|
|||
#if defined(ESP32)
|
||||
if (mCmtRadio.loop() && mConfig->cmt.enabled) {
|
||||
while (!mCmtRadio.mBufCtrl.empty()) {
|
||||
hmsPacket_t *p = &mCmtRadio.mBufCtrl.front();
|
||||
packet_t *p = &mCmtRadio.mBufCtrl.front();
|
||||
if (mConfig->serial.debug) {
|
||||
DPRINT(DBG_INFO, F("RX "));
|
||||
DBGPRINT(String(p->data[0]));
|
||||
DBGPRINT(String(p->len));
|
||||
DBGPRINT(F(", "));
|
||||
DBGPRINT(String(p->rssi));
|
||||
DBGPRINT(F("dBm | "));
|
||||
ah::dumpBuf(&p->data[1], p->data[0]);
|
||||
ah::dumpBuf(p->packet, p->len);
|
||||
}
|
||||
mCmtStat.frmCnt++;
|
||||
|
||||
Inverter<> *iv = mSys.findInverter(&p->data[2]);
|
||||
Inverter<> *iv = mSys.findInverter(&p->packet[1]);
|
||||
if(NULL != iv) {
|
||||
if((iv->ivGen == IV_HMS) || (iv->ivGen == IV_HMT))
|
||||
mHmsPayload.add(iv, p);
|
||||
|
|
|
@ -33,12 +33,12 @@ typedef std::function<void(uint8_t, Inverter<> *)> payloadListenerType;
|
|||
typedef std::function<void(Inverter<> *)> alarmListenerType;
|
||||
|
||||
|
||||
template<class HMSYSTEM, class HMRADIO>
|
||||
template<class HMSYSTEM, class RADIO>
|
||||
class HmPayload {
|
||||
public:
|
||||
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;
|
||||
mSys = sys;
|
||||
mRadio = radio;
|
||||
|
@ -460,7 +460,7 @@ class HmPayload {
|
|||
|
||||
IApp *mApp;
|
||||
HMSYSTEM *mSys;
|
||||
HMRADIO *mRadio;
|
||||
RADIO *mRadio;
|
||||
statistics_t *mStat;
|
||||
uint8_t mMaxRetrans;
|
||||
uint32_t *mTimestamp;
|
||||
|
|
|
@ -239,7 +239,7 @@ class Cmt2300a {
|
|||
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)
|
||||
return CMT_ERR_TX_PENDING;
|
||||
|
||||
|
@ -250,7 +250,7 @@ class Cmt2300a {
|
|||
if(!cmtSwitchStatus(CMT2300A_GO_STBY, CMT2300A_STA_STBY))
|
||||
return CMT_ERR_SWITCH_STATE;
|
||||
|
||||
mSpi.readFifo(buf, len);
|
||||
mSpi.readFifo(buf, rxLen, maxlen);
|
||||
*rssi = mSpi.readReg(CMT2300A_CUS_RSSI_DBM) - 128;
|
||||
|
||||
if(!cmtSwitchStatus(CMT2300A_GO_SLEEP, CMT2300A_STA_SLEEP))
|
||||
|
|
|
@ -141,7 +141,7 @@ class esp32_3wSpi {
|
|||
SPI_PARAM_UNLOCK();
|
||||
}
|
||||
|
||||
void readFifo(uint8_t buf[], uint8_t len) {
|
||||
void readFifo(uint8_t buf[], uint8_t *len, uint8_t maxlen) {
|
||||
if(!mInitialized)
|
||||
return;
|
||||
uint8_t rx_data;
|
||||
|
@ -154,10 +154,13 @@ class esp32_3wSpi {
|
|||
};
|
||||
|
||||
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));
|
||||
delayMicroseconds(4); // > 4 us
|
||||
buf[i] = rx_data;
|
||||
if(0 == i)
|
||||
*len = rx_data;
|
||||
else
|
||||
buf[i-1] = rx_data;
|
||||
}
|
||||
SPI_PARAM_UNLOCK();
|
||||
}
|
||||
|
|
|
@ -172,18 +172,19 @@ class HmsPayload {
|
|||
}
|
||||
}
|
||||
|
||||
void add(Inverter<> *iv, hmsPacket_t *p) {
|
||||
if (p->data[1] == (TX_REQ_INFO + ALL_FRAMES)) { // response from get information command
|
||||
mPayload[iv->id].txId = p->data[1];
|
||||
void add(Inverter<> *iv, packet_t *p) {
|
||||
if (p->packet[0] == (TX_REQ_INFO + ALL_FRAMES)) { // response from get information command
|
||||
mPayload[iv->id].txId = p->packet[0];
|
||||
DPRINTLN(DBG_DEBUG, F("Response from info request received"));
|
||||
uint8_t *pid = &p->data[10];
|
||||
uint8_t *pid = &p->packet[9];
|
||||
if (*pid == 0x00) {
|
||||
DPRINTLN(DBG_DEBUG, F("fragment number zero received and ignored"));
|
||||
} 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) {
|
||||
memcpy(mPayload[iv->id].data[(*pid & 0x7F) - 1], &p->data[11], p->data[0] - 11);
|
||||
mPayload[iv->id].len[(*pid & 0x7F) - 1] = 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->len - 11;
|
||||
mPayload[iv->id].gotFragment = true;
|
||||
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"));
|
||||
|
||||
mPayload[iv->id].txId = p->data[1];
|
||||
mPayload[iv->id].txId = p->packet[0];
|
||||
iv->clearDevControlRequest();
|
||||
|
||||
if ((p->data[13] == ActivePowerContr) && (p->data[14] == 0x00)) {
|
||||
if ((p->packet[12] == ActivePowerContr) && (p->packet[13] == 0x00)) {
|
||||
bool ok = true;
|
||||
if((p->data[11] == 0x00) && (p->data[12] == 0x00)) {
|
||||
if((p->packet[10] == 0x00) && (p->packet[11] == 0x00)) {
|
||||
mApp->setMqttPowerLimitAck(iv);
|
||||
iv->powerLimitAck = true;
|
||||
} else
|
||||
|
|
|
@ -9,11 +9,6 @@
|
|||
#include "../utils/dbg.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_B2(val) ((uint8_t)((val >> 16) & 0xff))
|
||||
#define U32_B1(val) ((uint8_t)((val >> 8) & 0xff))
|
||||
|
@ -146,7 +141,7 @@ class CmtRadio {
|
|||
mStat->txCnt++;
|
||||
}
|
||||
|
||||
std::queue<hmsPacket_t> mBufCtrl;
|
||||
std::queue<packet_t> mBufCtrl;
|
||||
|
||||
private:
|
||||
inline void reset(bool genDtuSn) {
|
||||
|
@ -206,8 +201,8 @@ class CmtRadio {
|
|||
}
|
||||
|
||||
inline void getRx(void) {
|
||||
hmsPacket_t p;
|
||||
uint8_t status = mCmt.getRx(p.data, 28, &p.rssi);
|
||||
packet_t p;
|
||||
uint8_t status = mCmt.getRx(p.packet, &p.len, 28, &p.rssi);
|
||||
if(CMT_SUCCESS == status)
|
||||
mBufCtrl.push(p);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue