mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-01 18:29:56 +00:00
SX1262: fix serious bug with detecting if we have a rx packet in progress
Could cause hangs on the way into sleep (and enormous power consumption). Instead of checking for rx packet length (which only changes at completion) check if we've received preamble bits but haven't yet received a completed packet interrupt. notes: wait to sleep loop problem radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 Can not send yet, busyRx radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 vs normal run radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 radio wait to sleep, txEmpty=0 Starting low level send (id=0x53fe1dd0 Fr0xe5 To0xff, WantAck0, HopLim3 encrypted) Completed sending (id=0x53fe1dd0 Fr0xe5 To0xff, WantAck0, HopLim3 encrypted)
This commit is contained in:
parent
044cc26340
commit
7a5832ab8a
@ -12,44 +12,10 @@ ublox parsing failure
|
||||
|
||||
record power measurements and update spreadsheet
|
||||
|
||||
wait to sleep loop problem
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
Can not send yet, busyRx
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
|
||||
vs normal run
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
radio wait to sleep, txEmpty=0
|
||||
Starting low level send (id=0x53fe1dd0 Fr0xe5 To0xff, WantAck0, HopLim3 encrypted)
|
||||
Completed sending (id=0x53fe1dd0 Fr0xe5 To0xff, WantAck0, HopLim3 encrypted)
|
||||
|
||||
fix has_gps based on new logic
|
||||
|
||||
make sure we are turning off lora radio in deep sleep
|
||||
|
||||
don't send locations if the user has forbidden that (lie to phone so phone won't either)
|
||||
|
||||
have loop methods return allowable sleep time (from their perspective)
|
||||
|
@ -63,7 +63,7 @@ lib_deps =
|
||||
1202 ; CRC32, explicitly needed because dependency is missing in the ble ota update lib
|
||||
https://github.com/meshtastic/arduino-fsm.git
|
||||
https://github.com/meshtastic/SparkFun_Ublox_Arduino_Library.git#cb8353dfddd1b0e205098f5e70d5f2a5f74b4838
|
||||
https://github.com/meshtastic/RadioLib.git#ac7feac00f5e0bd95a3ac5d5852b4cc7344cf95c
|
||||
https://github.com/meshtastic/RadioLib.git#1083c2e76f9906c5f80dfec726facebf8413eef0
|
||||
https://github.com/meshtastic/TinyGPSPlus.git
|
||||
https://github.com/meshtastic/AXP202X_Library.git#8404abb6d4b486748636bc6ad72d2a47baaf5460
|
||||
Wire ; explicitly needed here because the AXP202 library forgets to add it
|
||||
|
@ -42,7 +42,7 @@ bool RF95Interface::init()
|
||||
power = MAX_POWER;
|
||||
|
||||
limitPower();
|
||||
|
||||
|
||||
iface = lora = new RadioLibRF95(&module);
|
||||
|
||||
#ifdef RF95_TCXO
|
||||
@ -158,7 +158,7 @@ void RF95Interface::startReceive()
|
||||
|
||||
isReceiving = true;
|
||||
|
||||
// Must be done AFTER, starting transmit, because startTransmit clears (possibly stale) interrupt pending register bits
|
||||
// Must be done AFTER, starting receive, because startReceive clears (possibly stale) interrupt pending register bits
|
||||
enableInterrupt(isrRxLevel0);
|
||||
}
|
||||
|
||||
@ -171,7 +171,7 @@ bool RF95Interface::isActivelyReceiving()
|
||||
bool RF95Interface::sleep()
|
||||
{
|
||||
// put chipset into sleep mode
|
||||
disableInterrupt();
|
||||
setStandby(); // First cancel any active receving/sending
|
||||
lora->sleep();
|
||||
|
||||
return true;
|
||||
|
@ -179,9 +179,17 @@ void SX1262Interface::startReceive()
|
||||
/** Could we send right now (i.e. either not actively receving or transmitting)? */
|
||||
bool SX1262Interface::isActivelyReceiving()
|
||||
{
|
||||
// return false; // FIXME
|
||||
// FIXME this is not correct? - often always true - need to add an extra conditional
|
||||
return lora.getPacketLength() > 0;
|
||||
// The IRQ status will be cleared when we start our read operation. Check if we've started a preamble, but haven't yet
|
||||
// received and handled the interrupt for reading the packet/handling errors.
|
||||
|
||||
uint16_t irq = lora.getIrqStatus();
|
||||
bool hasPreamble = (irq & SX126X_IRQ_PREAMBLE_DETECTED);
|
||||
|
||||
// this is not correct - often always true - need to add an extra conditional
|
||||
// size_t bytesPending = lora.getPacketLength();
|
||||
|
||||
// if (hasPreamble || bytesPending) DEBUG_MSG("rx hasPre %d, bytes %d\n", hasPreamble, bytesPending);
|
||||
return hasPreamble;
|
||||
}
|
||||
|
||||
bool SX1262Interface::sleep()
|
||||
|
Loading…
Reference in New Issue
Block a user