Detect modem communication timeouts for sx126x chips

This commit is contained in:
Mark Qvist 2024-10-07 20:43:16 +02:00
parent 5807cfdb96
commit d61d14e117
2 changed files with 31 additions and 21 deletions

View File

@ -472,34 +472,43 @@ int sx126x::beginPacket(int implicitHeader)
int sx126x::endPacket() int sx126x::endPacket()
{ {
setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode); setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
// put in single TX mode // put in single TX mode
uint8_t timeout[3] = {0}; uint8_t timeout[3] = {0};
executeOpcode(OP_TX_6X, timeout, 3); executeOpcode(OP_TX_6X, timeout, 3);
uint8_t buf[2]; uint8_t buf[2];
buf[0] = 0x00; buf[0] = 0x00;
buf[1] = 0x00; buf[1] = 0x00;
executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2); executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2);
// wait for TX done bool timed_out = false;
while ((buf[1] & IRQ_TX_DONE_MASK_6X) == 0) { uint32_t w_timeout = millis()+LORA_MODEM_TIMEOUT_MS;
buf[0] = 0x00; // wait for TX done
buf[1] = 0x00; while ((millis() < w_timeout) && ((buf[1] & IRQ_TX_DONE_MASK_6X) == 0)) {
executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2); buf[0] = 0x00;
yield(); buf[1] = 0x00;
} executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2);
yield();
}
// clear IRQ's if (!(millis() < w_timeout)) { timed_out = true; }
uint8_t mask[2]; // clear IRQ's
mask[0] = 0x00;
mask[1] = IRQ_TX_DONE_MASK_6X; uint8_t mask[2];
executeOpcode(OP_CLEAR_IRQ_STATUS_6X, mask, 2); mask[0] = 0x00;
return 1; mask[1] = IRQ_TX_DONE_MASK_6X;
executeOpcode(OP_CLEAR_IRQ_STATUS_6X, mask, 2);
if (timed_out) {
return 0;
} else {
return 1;
}
} }
uint8_t sx126x::modemStatus() { uint8_t sx126x::modemStatus() {

View File

@ -17,6 +17,7 @@
#define LORA_DEFAULT_RXEN_PIN -1 #define LORA_DEFAULT_RXEN_PIN -1
#define LORA_DEFAULT_TXEN_PIN -1 #define LORA_DEFAULT_TXEN_PIN -1
#define LORA_DEFAULT_BUSY_PIN -1 #define LORA_DEFAULT_BUSY_PIN -1
#define LORA_MODEM_TIMEOUT_MS 20E3
#define PA_OUTPUT_RFO_PIN 0 #define PA_OUTPUT_RFO_PIN 0
#define PA_OUTPUT_PA_BOOST_PIN 1 #define PA_OUTPUT_PA_BOOST_PIN 1