mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-10 07:26:38 +02:00
* added RX channel 40
* improved RF24 ISR * reduced AP active time to 60s (will be increase once a client is connected) * added `yield` without success -> random reboot (cause 4)
This commit is contained in:
parent
247ae3e1db
commit
c7d039ac8c
7 changed files with 53 additions and 33 deletions
|
@ -152,6 +152,8 @@ void app::setup(uint32_t timeout) {
|
||||||
void app::loop(void) {
|
void app::loop(void) {
|
||||||
Main::loop();
|
Main::loop();
|
||||||
|
|
||||||
|
mSys->Radio.loop();
|
||||||
|
|
||||||
if(checkTicker(&mRxTicker, 5)) {
|
if(checkTicker(&mRxTicker, 5)) {
|
||||||
bool rxRdy = mSys->Radio.switchRxCh();
|
bool rxRdy = mSys->Radio.switchRxCh();
|
||||||
|
|
||||||
|
@ -187,6 +189,7 @@ void app::loop(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mSys->BufCtrl.popBack();
|
mSys->BufCtrl.popBack();
|
||||||
|
yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -309,6 +312,7 @@ bool app::buildPayload(uint8_t id) {
|
||||||
else
|
else
|
||||||
crc = crc16(mPayload[id].data[i], mPayload[id].len[i], crc);
|
crc = crc16(mPayload[id].data[i], mPayload[id].len[i], crc);
|
||||||
}
|
}
|
||||||
|
yield();
|
||||||
}
|
}
|
||||||
if(crc == crcRcv)
|
if(crc == crcRcv)
|
||||||
return true;
|
return true;
|
||||||
|
@ -341,7 +345,7 @@ void app::processPayload(bool retransmit) {
|
||||||
else
|
else
|
||||||
mSys->Radio.sendTimePacket(iv->radioId.u64, mPayload[iv->id].ts);
|
mSys->Radio.sendTimePacket(iv->radioId.u64, mPayload[iv->id].ts);
|
||||||
}
|
}
|
||||||
mSys->Radio.switchRxCh(100);
|
mSys->Radio.switchRxCh(300);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -352,6 +356,7 @@ void app::processPayload(bool retransmit) {
|
||||||
for(uint8_t i = 0; i < (mPayload[iv->id].maxPackId); i ++) {
|
for(uint8_t i = 0; i < (mPayload[iv->id].maxPackId); i ++) {
|
||||||
memcpy(&payload[offs], mPayload[iv->id].data[i], (mPayload[iv->id].len[i]));
|
memcpy(&payload[offs], mPayload[iv->id].data[i], (mPayload[iv->id].len[i]));
|
||||||
offs += (mPayload[iv->id].len[i]);
|
offs += (mPayload[iv->id].len[i]);
|
||||||
|
yield();
|
||||||
}
|
}
|
||||||
offs-=2;
|
offs-=2;
|
||||||
if(mSerialDebug) {
|
if(mSerialDebug) {
|
||||||
|
@ -367,6 +372,7 @@ void app::processPayload(bool retransmit) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
yield();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,6 +635,7 @@ void app::showLiveData(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
modHtml += "</div>";
|
modHtml += "</div>";
|
||||||
|
yield();
|
||||||
}
|
}
|
||||||
modHtml += F("<div class=\"ts\">Last received data requested at: ") + getDateTimeStr(iv->ts) + F("</div>");
|
modHtml += F("<div class=\"ts\">Last received data requested at: ") + getDateTimeStr(iv->ts) + F("</div>");
|
||||||
modHtml += F("</div>");
|
modHtml += F("</div>");
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
// time during the ESP will act as access point on connection failure (to
|
// time during the ESP will act as access point on connection failure (to
|
||||||
// station) in seconds
|
// station) in seconds
|
||||||
#define WIFI_AP_ACTIVE_TIME 3*60
|
#define WIFI_AP_ACTIVE_TIME 60
|
||||||
|
|
||||||
// default device name
|
// default device name
|
||||||
#define DEF_DEVICE_NAME "ESP-DTU"
|
#define DEF_DEVICE_NAME "ESP-DTU"
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 4
|
#define VERSION_MINOR 4
|
||||||
#define VERSION_PATCH 13
|
#define VERSION_PATCH 14
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#define DTU_RADIO_ID ((uint64_t)0x1234567801ULL)
|
#define DTU_RADIO_ID ((uint64_t)0x1234567801ULL)
|
||||||
#define DUMMY_RADIO_ID ((uint64_t)0xDEADBEEF01ULL)
|
#define DUMMY_RADIO_ID ((uint64_t)0xDEADBEEF01ULL)
|
||||||
|
|
||||||
#define RX_LOOP_CNT 400
|
#define RX_LOOP_CNT 600
|
||||||
|
|
||||||
const char* const rf24AmpPower[] = {"MIN", "LOW", "HIGH", "MAX"};
|
const char* const rf24AmpPower[] = {"MIN", "LOW", "HIGH", "MAX"};
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@ class HmRadio {
|
||||||
mRxChLst[1] = 23;
|
mRxChLst[1] = 23;
|
||||||
mRxChLst[2] = 61;
|
mRxChLst[2] = 61;
|
||||||
mRxChLst[3] = 75;
|
mRxChLst[3] = 75;
|
||||||
|
mRxChLst[4] = 40;
|
||||||
mRxChIdx = 0;
|
mRxChIdx = 0;
|
||||||
mRxLoopCnt = RX_LOOP_CNT;
|
mRxLoopCnt = RX_LOOP_CNT;
|
||||||
|
|
||||||
|
@ -66,6 +67,7 @@ class HmRadio {
|
||||||
mSendCnt = 0;
|
mSendCnt = 0;
|
||||||
|
|
||||||
mSerialDebug = false;
|
mSerialDebug = false;
|
||||||
|
mIrqRcvd = false;
|
||||||
}
|
}
|
||||||
~HmRadio() {}
|
~HmRadio() {}
|
||||||
|
|
||||||
|
@ -102,15 +104,18 @@ class HmRadio {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleIntr(void) {
|
void loop(void) {
|
||||||
|
DISABLE_IRQ;
|
||||||
|
if(mIrqRcvd) {
|
||||||
|
mIrqRcvd = false;
|
||||||
|
bool tx_ok, tx_fail, rx_ready;
|
||||||
|
mNrf24.whatHappened(tx_ok, tx_fail, rx_ready); // resets the IRQ pin to HIGH
|
||||||
|
RESTORE_IRQ;
|
||||||
uint8_t pipe, len;
|
uint8_t pipe, len;
|
||||||
packet_t *p;
|
packet_t *p;
|
||||||
|
|
||||||
DISABLE_IRQ;
|
|
||||||
while(mNrf24.available(&pipe)) {
|
while(mNrf24.available(&pipe)) {
|
||||||
if(!mBufCtrl->full()) {
|
if(!mBufCtrl->full()) {
|
||||||
p = mBufCtrl->getFront();
|
p = mBufCtrl->getFront();
|
||||||
memset(p->packet, 0xcc, MAX_RF_PAYLOAD_SIZE);
|
|
||||||
p->rxCh = mRxChLst[mRxChIdx];
|
p->rxCh = mRxChLst[mRxChIdx];
|
||||||
len = mNrf24.getPayloadSize();
|
len = mNrf24.getPayloadSize();
|
||||||
if(len > MAX_RF_PAYLOAD_SIZE)
|
if(len > MAX_RF_PAYLOAD_SIZE)
|
||||||
|
@ -120,15 +125,20 @@ class HmRadio {
|
||||||
mBufCtrl->pushFront(p);
|
mBufCtrl->pushFront(p);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bool tx_ok, tx_fail, rx_ready;
|
|
||||||
mNrf24.whatHappened(tx_ok, tx_fail, rx_ready); // reset interrupt status
|
|
||||||
mNrf24.flush_rx(); // drop the packet
|
mNrf24.flush_rx(); // drop the packet
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
yield();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
RESTORE_IRQ;
|
RESTORE_IRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handleIntr(void) {
|
||||||
|
mIrqRcvd = true;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t getDefaultChannel(void) {
|
uint8_t getDefaultChannel(void) {
|
||||||
return mTxChLst[0];
|
return mTxChLst[0];
|
||||||
}
|
}
|
||||||
|
@ -183,7 +193,7 @@ class HmRadio {
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool switchRxCh(uint8_t addLoop = 0) {
|
bool switchRxCh(uint16_t addLoop = 0) {
|
||||||
mRxLoopCnt += addLoop;
|
mRxLoopCnt += addLoop;
|
||||||
if(mRxLoopCnt != 0) {
|
if(mRxLoopCnt != 0) {
|
||||||
mRxLoopCnt--;
|
mRxLoopCnt--;
|
||||||
|
@ -263,7 +273,7 @@ class HmRadio {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t getRxNxtChannel(void) {
|
uint8_t getRxNxtChannel(void) {
|
||||||
if(++mRxChIdx >= 4)
|
if(++mRxChIdx >= 5)
|
||||||
mRxChIdx = 0;
|
mRxChIdx = 0;
|
||||||
return mRxChLst[mRxChIdx];
|
return mRxChLst[mRxChIdx];
|
||||||
}
|
}
|
||||||
|
@ -272,13 +282,15 @@ class HmRadio {
|
||||||
uint8_t mTxChLst[1];
|
uint8_t mTxChLst[1];
|
||||||
//uint8_t mTxChIdx;
|
//uint8_t mTxChIdx;
|
||||||
|
|
||||||
uint8_t mRxChLst[4];
|
uint8_t mRxChLst[5];
|
||||||
uint8_t mRxChIdx;
|
uint8_t mRxChIdx;
|
||||||
uint16_t mRxLoopCnt;
|
uint16_t mRxLoopCnt;
|
||||||
|
|
||||||
RF24 mNrf24;
|
RF24 mNrf24;
|
||||||
BUFFER *mBufCtrl;
|
BUFFER *mBufCtrl;
|
||||||
uint8_t mTxBuf[MAX_RF_PAYLOAD_SIZE];
|
uint8_t mTxBuf[MAX_RF_PAYLOAD_SIZE];
|
||||||
|
|
||||||
|
volatile bool mIrqRcvd;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*__RADIO_H__*/
|
#endif /*__RADIO_H__*/
|
||||||
|
|
|
@ -36,8 +36,8 @@ class HmSystem {
|
||||||
p->id = mNumInv;
|
p->id = mNumInv;
|
||||||
p->serial.u64 = serial;
|
p->serial.u64 = serial;
|
||||||
memcpy(p->chMaxPwr, chMaxPwr, (4*2));
|
memcpy(p->chMaxPwr, chMaxPwr, (4*2));
|
||||||
DPRINT("SERIAL: " + String(p->serial.b[5], HEX));
|
//DPRINT("SERIAL: " + String(p->serial.b[5], HEX));
|
||||||
DPRINTLN(" " + String(p->serial.b[4], HEX));
|
//DPRINTLN(" " + String(p->serial.b[4], HEX));
|
||||||
if(p->serial.b[5] == 0x11) {
|
if(p->serial.b[5] == 0x11) {
|
||||||
switch(p->serial.b[4]) {
|
switch(p->serial.b[4]) {
|
||||||
case 0x21: p->type = INV_TYPE_1CH; break;
|
case 0x21: p->type = INV_TYPE_1CH; break;
|
||||||
|
|
|
@ -105,10 +105,10 @@ void Main::loop(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(++mHeapStatCnt >= 10) {
|
/*if(++mHeapStatCnt >= 10) {
|
||||||
mHeapStatCnt = 0;
|
mHeapStatCnt = 0;
|
||||||
stats();
|
stats();
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ class mqtt {
|
||||||
|
|
||||||
if(!mClient->connected())
|
if(!mClient->connected())
|
||||||
reconnect();
|
reconnect();
|
||||||
|
if(mClient->connected())
|
||||||
mClient->publish(top, msg);
|
mClient->publish(top, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue