From 145490c8910eeda653abe4e0d3a1f86645e5789b Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 24 Mar 2023 10:07:43 -1000 Subject: [PATCH 1/3] MP: Don't change state when not necessary --- Firmware/LoRaSerial/States.ino | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Firmware/LoRaSerial/States.ino b/Firmware/LoRaSerial/States.ino index afdd09ef..613597da 100644 --- a/Firmware/LoRaSerial/States.ino +++ b/Firmware/LoRaSerial/States.ino @@ -1411,10 +1411,6 @@ void updateRadioState() changeState(RADIO_MP_WAIT_TX_DONE); } } - else - { - changeState(RADIO_MP_STANDBY); - } break; case DATAGRAM_HEARTBEAT: @@ -1432,7 +1428,6 @@ void updateRadioState() lastPacketReceived = millis(); //Update timestamp for Link LED blinkHeartbeatLed(true); - changeState(RADIO_MP_STANDBY); } break; @@ -1446,8 +1441,6 @@ void updateRadioState() frequencyCorrection += radio.getFrequencyError() / 1000000.0; lastPacketReceived = millis(); //Update timestamp for Link LED - - changeState(RADIO_MP_STANDBY); break; } } From 5ed8c70e287890dcfbe1401d276f3b829b94a060 Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 24 Mar 2023 10:05:49 -1000 Subject: [PATCH 2/3] MP: Make sure large heartbeatTimeout does not overflow link break time --- Firmware/LoRaSerial/States.ino | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Firmware/LoRaSerial/States.ino b/Firmware/LoRaSerial/States.ino index 613597da..57802d11 100644 --- a/Firmware/LoRaSerial/States.ino +++ b/Firmware/LoRaSerial/States.ino @@ -995,7 +995,7 @@ void updateRadioState() //---------- //Always check for link timeout //---------- - if ((millis() - linkDownTimer) >= (LINK_BREAK_MULTIPLIER * settings.heartbeatTimeout)) + if ((millis() - linkDownTimer) >= (LINK_BREAK_MULTIPLIER * (uint32_t)settings.heartbeatTimeout)) //Break the link breakLink(); break; @@ -1475,7 +1475,7 @@ void updateRadioState() //If the client hasn't received a packet in too long, return to scanning else if (settings.server == false) { - if ((millis() - lastPacketReceived) > (settings.heartbeatTimeout * 3)) + if ((millis() - lastPacketReceived) > ((uint32_t)settings.heartbeatTimeout * LINK_BREAK_MULTIPLIER)) { if (settings.debugSync) { @@ -1919,7 +1919,7 @@ void updateRadioState() vcReceiveHeartbeat(millis() - currentMillis); //Delay for a while before sending the HEARTBEAT - heartbeatRandomTime = random((settings.heartbeatTimeout * 2) / 10, settings.heartbeatTimeout); + heartbeatRandomTime = random(((uint32_t)settings.heartbeatTimeout * 2) / 10, settings.heartbeatTimeout); changeState(RADIO_VC_WAIT_RECEIVE); } else @@ -2503,7 +2503,7 @@ void updateRadioState() //Determine if the link has timed out vc = &virtualCircuitList[index]; if ((vc->vcState != VC_STATE_LINK_DOWN) && (serverLinkBroken - || ((currentMillis - vc->lastTrafficMillis) > (LINK_BREAK_MULTIPLIER * settings.heartbeatTimeout)))) + || ((currentMillis - vc->lastTrafficMillis) > (LINK_BREAK_MULTIPLIER * (uint32_t)settings.heartbeatTimeout)))) { if (index == VC_SERVER) { From 9ed7a6fb2523774813d849e140544a993dbd339a Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 24 Mar 2023 10:02:37 -1000 Subject: [PATCH 3/3] MP: Stop the channel clock while waiting for HEARTBEAT on channel 0 --- Firmware/LoRaSerial/States.ino | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Firmware/LoRaSerial/States.ino b/Firmware/LoRaSerial/States.ino index 57802d11..d3208b79 100644 --- a/Firmware/LoRaSerial/States.ino +++ b/Firmware/LoRaSerial/States.ino @@ -1256,6 +1256,7 @@ void updateRadioState() switch (packetType) { default: + stopChannelTimer(); triggerEvent(TRIGGER_UNKNOWN_PACKET); if (settings.debugDatagrams) { @@ -1268,14 +1269,17 @@ void updateRadioState() break; case DATAGRAM_BAD: + stopChannelTimer(); triggerEvent(TRIGGER_BAD_PACKET); break; case DATAGRAM_CRC_ERROR: + stopChannelTimer(); triggerEvent(TRIGGER_CRC_ERROR); break; case DATAGRAM_NETID_MISMATCH: + stopChannelTimer(); triggerEvent(TRIGGER_NETID_MISMATCH); break; @@ -1286,10 +1290,12 @@ void updateRadioState() case DATAGRAM_REMOTE_COMMAND: case DATAGRAM_REMOTE_COMMAND_RESPONSE: //We should not be receiving these datagrams, but if we do, just ignore + stopChannelTimer(); triggerEvent(TRIGGER_BAD_PACKET); break; case DATAGRAM_FIND_PARTNER: + stopChannelTimer(); triggerEvent(TRIGGER_RX_FIND_PARTNER); break; @@ -1334,6 +1340,7 @@ void updateRadioState() case DATAGRAM_DATA: //Don't deal with data until we are sync'd with server + stopChannelTimer(); triggerEvent(TRIGGER_RX_DATA); break; }