mirror of
https://github.com/lumapu/ahoy.git
synced 2025-07-17 08:17:12 +02:00
discord .2901
- add longer timeout + more retransmits to GridProfile req. - close GridProfile + GetLossRate req. explicitly (also for heuristiscs)
This commit is contained in:
parent
b942b37cfd
commit
e8185b9e80
2 changed files with 35 additions and 4 deletions
|
@ -59,7 +59,7 @@ class Communication : public CommQueue<> {
|
||||||
mLastEmptyQueueMillis = millis();
|
mLastEmptyQueueMillis = millis();
|
||||||
mPrintSequenceDuration = true;
|
mPrintSequenceDuration = true;
|
||||||
|
|
||||||
uint16_t timeout = (q->iv->ivGen == IV_MI) ? MI_TIMEOUT : (((q->iv->mGotFragment && q->iv->mGotLastMsg) || mIsRetransmit) ? SINGLEFR_TIMEOUT : ((q->cmd != AlarmData) ? DEFAULT_TIMEOUT : (1.5 * DEFAULT_TIMEOUT)));
|
uint16_t timeout = (q->iv->ivGen == IV_MI) ? MI_TIMEOUT : (((q->iv->mGotFragment && q->iv->mGotLastMsg) || mIsRetransmit) ? SINGLEFR_TIMEOUT : ((q->cmd != AlarmData) && q->cmd != GridOnProFilePara ? DEFAULT_TIMEOUT : (1.5 * DEFAULT_TIMEOUT)));
|
||||||
uint16_t timeout_min = (q->iv->ivGen == IV_MI) ? MI_TIMEOUT : ((q->iv->mGotFragment || mIsRetransmit)) ? SINGLEFR_TIMEOUT : FRSTMSG_TIMEOUT;
|
uint16_t timeout_min = (q->iv->ivGen == IV_MI) ? MI_TIMEOUT : ((q->iv->mGotFragment || mIsRetransmit)) ? SINGLEFR_TIMEOUT : FRSTMSG_TIMEOUT;
|
||||||
|
|
||||||
/*if(mDebugState != mState) {
|
/*if(mDebugState != mState) {
|
||||||
|
@ -113,10 +113,35 @@ class Communication : public CommQueue<> {
|
||||||
mIsRetransmit = false;
|
mIsRetransmit = false;
|
||||||
mlastTO_min = timeout_min;
|
mlastTO_min = timeout_min;
|
||||||
setAttempt();
|
setAttempt();
|
||||||
|
if(q->cmd == AlarmData || q->cmd == GridOnProFilePara)
|
||||||
|
incrAttempt(q->cmd == AlarmData? 5 : 3);
|
||||||
|
|
||||||
mState = States::WAIT;
|
mState = States::WAIT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case States::WAIT:
|
case States::WAIT:
|
||||||
|
/*if(millis() > mWaitTimeout_min) {
|
||||||
|
if(mIsRetransmit) { // we already have been through...
|
||||||
|
mWaitTimeout = mWaitTimeout_min;
|
||||||
|
} else if(q->iv->mGotFragment) { // nothing received yet?
|
||||||
|
if(q->iv->mGotLastMsg) {
|
||||||
|
//mState = States::CHECK_FRAMES;
|
||||||
|
mWaitTimeout = mWaitTimeout_min;
|
||||||
|
}
|
||||||
|
} else if(mFirstTry) {
|
||||||
|
if(*mSerialDebug) {
|
||||||
|
DPRINT_IVID(DBG_INFO, q->iv->id);
|
||||||
|
DBGPRINT(String(millis() - mWaitTimeout_min + mlastTO_min));
|
||||||
|
DBGPRINTLN(F("ms - second try"));
|
||||||
|
}
|
||||||
|
mFirstTry = false;
|
||||||
|
mlastTO_min = timeout_min;
|
||||||
|
q->iv->radioStatistics.retransmits++; // got nothing
|
||||||
|
mState = States::START;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}*/
|
||||||
if(millis() < mWaitTimeout)
|
if(millis() < mWaitTimeout)
|
||||||
return;
|
return;
|
||||||
mState = States::CHECK_FRAMES;
|
mState = States::CHECK_FRAMES;
|
||||||
|
@ -283,7 +308,7 @@ class Communication : public CommQueue<> {
|
||||||
else
|
else
|
||||||
ah::dumpBuf(p->packet, p->len);
|
ah::dumpBuf(p->packet, p->len);
|
||||||
} else {
|
} else {
|
||||||
DBGPRINT(F("| "));
|
DBGPRINT(F("| 0x"));
|
||||||
DHEX(p->packet[0]);
|
DHEX(p->packet[0]);
|
||||||
DBGPRINT(F(" "));
|
DBGPRINT(F(" "));
|
||||||
DBGHEXLN(p->packet[9]);
|
DBGHEXLN(p->packet[9]);
|
||||||
|
@ -439,6 +464,9 @@ class Communication : public CommQueue<> {
|
||||||
|
|
||||||
if(GridOnProFilePara == q->cmd) {
|
if(GridOnProFilePara == q->cmd) {
|
||||||
q->iv->addGridProfile(mPayload, len);
|
q->iv->addGridProfile(mPayload, len);
|
||||||
|
q->iv->radioStatistics.rxSuccess++;
|
||||||
|
mHeu.evalTxChQuality(q->iv, true, (7 - q->attempts), q->iv->curFrmCnt);
|
||||||
|
cmdDone(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,6 +475,9 @@ class Communication : public CommQueue<> {
|
||||||
if(GetLossRate == q->cmd) {
|
if(GetLossRate == q->cmd) {
|
||||||
q->iv->parseGetLossRate(mPayload, len);
|
q->iv->parseGetLossRate(mPayload, len);
|
||||||
//closeRequest(q, true); //@lumapu: Activating would crash most esp's!
|
//closeRequest(q, true); //@lumapu: Activating would crash most esp's!
|
||||||
|
mHeu.evalTxChQuality(q->iv, true, (9 - q->attempts), q->iv->curFrmCnt);
|
||||||
|
q->iv->radioStatistics.rxSuccess++;
|
||||||
|
cmdDone(false);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
DPRINTLN(DBG_ERROR, F("record is NULL!"));
|
DPRINTLN(DBG_ERROR, F("record is NULL!"));
|
||||||
|
|
|
@ -121,9 +121,10 @@ class HmRadio : public Radio {
|
||||||
|
|
||||||
uint32_t startMicros = micros();
|
uint32_t startMicros = micros();
|
||||||
uint32_t loopMillis = millis();
|
uint32_t loopMillis = millis();
|
||||||
uint32_t outerLoopTimeout = (mLastIv->mIsSingleframeReq) ? 100 : ((mLastIv->mCmd != AlarmData) ? 400 : 600);
|
uint32_t outerLoopTimeout = (mLastIv->mIsSingleframeReq) ? 100 : ((mLastIv->mCmd != AlarmData) && (mLastIv->mCmd != GridOnProFilePara)) ? 400 : 600;
|
||||||
|
|
||||||
while ((millis() - loopMillis) < outerLoopTimeout) {
|
while ((millis() - loopMillis) < outerLoopTimeout) {
|
||||||
|
uint32_t startMicros = micros();
|
||||||
while ((micros() - startMicros) < 5110) { // listen (4088us or?) 5110us to each channel
|
while ((micros() - startMicros) < 5110) { // listen (4088us or?) 5110us to each channel
|
||||||
if (mIrqRcvd) {
|
if (mIrqRcvd) {
|
||||||
mIrqRcvd = false;
|
mIrqRcvd = false;
|
||||||
|
@ -137,7 +138,6 @@ class HmRadio : public Radio {
|
||||||
// switch to next RX channel
|
// switch to next RX channel
|
||||||
mRxChIdx = (mRxChIdx + 1) % RF_CHANNELS;
|
mRxChIdx = (mRxChIdx + 1) % RF_CHANNELS;
|
||||||
mNrf24->setChannel(mRfChLst[mRxChIdx]);
|
mNrf24->setChannel(mRfChLst[mRxChIdx]);
|
||||||
startMicros = micros();
|
|
||||||
}
|
}
|
||||||
// not finished but time is over
|
// not finished but time is over
|
||||||
mRxChIdx = (mRxChIdx + 1) % RF_CHANNELS;
|
mRxChIdx = (mRxChIdx + 1) % RF_CHANNELS;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue