Browse Source

pendular version

let rx channel change between tx+2 and tx+3
pull/1394/head
rejoe2 1 year ago
committed by GitHub
parent
commit
d8af398208
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 10
      src/hm/Communication.h
  2. 4
      src/hm/Heuristic.h
  3. 8
      src/hm/hmDefines.h
  4. 13
      src/hm/hmRadio.h

10
src/hm/Communication.h

@ -186,8 +186,8 @@ class Communication : public CommQueue<> {
if (p->packet[0] == (TX_REQ_INFO + ALL_FRAMES)) { // response from get information command if (p->packet[0] == (TX_REQ_INFO + ALL_FRAMES)) { // response from get information command
if(parseFrame(p)) { if(parseFrame(p)) {
q->iv->curFrmCnt++; q->iv->curFrmCnt++;
if(!mIsRetransmit && (p->packet[9] == 0x02 || p->packet[9] == 0x82) && p->millis < 85) if(!mIsRetransmit && (p->packet[9] == 0x02 || p->packet[9] == 0x82) && p->millis < LIMIT_FAST_IV)
mHeu.setIvRetriesGood(q->iv,p->millis < 70); mHeu.setIvRetriesGood(q->iv,p->millis < LIMIT_VERYFAST_IV);
} }
} else if (p->packet[0] == (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
if(parseDevCtrl(p, q)) if(parseDevCtrl(p, q))
@ -259,7 +259,7 @@ class Communication : public CommQueue<> {
if(framnr) { if(framnr) {
if(0 == q->attempts) { if(0 == q->attempts) {
DPRINT_IVID(DBG_INFO, q->iv->id); DPRINT_IVID(DBG_INFO, q->iv->id);
DBGPRINTLN(F("no attempts left")); DBGPRINTLN(F("timeout, no attempts left"));
closeRequest(q, false); closeRequest(q, false);
return; return;
} }
@ -424,8 +424,8 @@ class Communication : public CommQueue<> {
} }
inline bool parseMiFrame(packet_t *p, const queue_s *q) { inline bool parseMiFrame(packet_t *p, const queue_s *q) {
if(!mIsRetransmit && p->packet[9] == 0x00 && p->millis < 35) //first frame is fast? if(!mIsRetransmit && p->packet[9] == 0x00 && p->millis < LIMIT_FAST_IV_MI) //first frame is fast?
mHeu.setIvRetriesGood(q->iv,p->millis < 22); mHeu.setIvRetriesGood(q->iv,p->millis < LIMIT_VERYFAST_IV_MI);
if ((p->packet[0] == MI_REQ_CH1 + ALL_FRAMES) if ((p->packet[0] == MI_REQ_CH1 + ALL_FRAMES)
|| (p->packet[0] == MI_REQ_CH2 + ALL_FRAMES) || (p->packet[0] == MI_REQ_CH2 + ALL_FRAMES)
|| ((p->packet[0] >= (MI_REQ_4CH + ALL_FRAMES)) || ((p->packet[0] >= (MI_REQ_4CH + ALL_FRAMES))

4
src/hm/Heuristic.h

@ -159,9 +159,9 @@ class Heuristic {
uint8_t getIvRetries(Inverter<> *iv) { uint8_t getIvRetries(Inverter<> *iv) {
if(iv->heuristics.rxSpeeds[0]) if(iv->heuristics.rxSpeeds[0])
return 5; return RETRIES_VERYFAST_IV;
if(iv->heuristics.rxSpeeds[1]) if(iv->heuristics.rxSpeeds[1])
return 10; return RETRIES_FAST_IV;
return 15; return 15;
} }

8
src/hm/hmDefines.h

@ -94,6 +94,14 @@ enum {INV_RADIO_TYPE_NRF = 0, INV_RADIO_TYPE_CMT};
#define DURATION_PAUSE_LASTFR 45 // how long to pause after last frame (ms) #define DURATION_PAUSE_LASTFR 45 // how long to pause after last frame (ms)
const uint8_t duration_reserve[2] = {115,115}; const uint8_t duration_reserve[2] = {115,115};
#define LIMIT_FAST_IV 85 // time limit to qualify an inverter as very fast answering inverter
#define LIMIT_VERYFAST_IV 70 // time limit to qualify an inverter as very fast answering inverter
#define LIMIT_FAST_IV_MI 35 // time limit to qualify a MI type inverter as fast answering inverter
#define LIMIT_VERYFAST_IV_MI 22 // time limit to qualify a MI type inverter as very fast answering inverter
#define RETRIES_FAST_IV 11 // how often shall a message be automatically retransmitted by the nRF (fast answering inverter)
#define RETRIES_VERYFAST_IV 7 // how often shall a message be automatically retransmitted by the nRF (very fast answering inverter)
typedef struct { typedef struct {
uint8_t fieldId; // field id uint8_t fieldId; // field id
uint8_t unitId; // uint id uint8_t unitId; // uint id

13
src/hm/hmRadio.h

@ -124,7 +124,7 @@ class HmRadio : public Radio {
rxPendular = !rxPendular; rxPendular = !rxPendular;
//innerLoopTimeout = (rxPendular ? 1 : 2)*DURATION_LISTEN_MIN; //innerLoopTimeout = (rxPendular ? 1 : 2)*DURATION_LISTEN_MIN;
innerLoopTimeout = DURATION_LISTEN_MIN; //innerLoopTimeout = DURATION_LISTEN_MIN;
if(mNRFloopChannels) if(mNRFloopChannels)
tempRxChIdx = (tempRxChIdx + 4) % RF_CHANNELS; tempRxChIdx = (tempRxChIdx + 4) % RF_CHANNELS;
@ -154,7 +154,8 @@ class HmRadio : public Radio {
if(tx_ok) if(tx_ok)
mLastIv->mAckCount++; mLastIv->mAckCount++;
mRxChIdx = (mTxChIdx + 2) % RF_CHANNELS; //mRxChIdx = (mTxChIdx + 2) % RF_CHANNELS;
mRxChIdx = (mTxChIdx + 3) % RF_CHANNELS;
mNrf24->setChannel(mRfChLst[mRxChIdx]); mNrf24->setChannel(mRfChLst[mRxChIdx]);
mNrf24->startListening(); mNrf24->startListening();
mTimeslotStart = millis(); mTimeslotStart = millis();
@ -162,7 +163,8 @@ class HmRadio : public Radio {
rxPendular = false; rxPendular = false;
mNRFloopChannels = (mLastIv->ivGen == IV_MI); mNRFloopChannels = (mLastIv->ivGen == IV_MI);
innerLoopTimeout = mLastIv->ivGen != IV_MI ? DURATION_TXFRAME : DURATION_ONEFRAME; //innerLoopTimeout = mLastIv->ivGen != IV_MI ? DURATION_TXFRAME : DURATION_ONEFRAME;
innerLoopTimeout = DURATION_LISTEN_MIN;
} }
if(rx_ready) { if(rx_ready) {
@ -186,10 +188,7 @@ class HmRadio : public Radio {
} }
rx_ready = false; // reset rx_ready = false; // reset
return mNRFisInRX; return mNRFisInRX;
} /*else if(tx_fail) { }
mNRFisInRX = false;
return false;
}*/
} }
return false; return false;

Loading…
Cancel
Save