Detect modem communication timeouts for sx126x chips
This commit is contained in:
parent
5807cfdb96
commit
d61d14e117
11
sx126x.cpp
11
sx126x.cpp
|
@ -485,22 +485,31 @@ int sx126x::endPacket()
|
|||
|
||||
executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2);
|
||||
|
||||
bool timed_out = false;
|
||||
uint32_t w_timeout = millis()+LORA_MODEM_TIMEOUT_MS;
|
||||
// wait for TX done
|
||||
while ((buf[1] & IRQ_TX_DONE_MASK_6X) == 0) {
|
||||
while ((millis() < w_timeout) && ((buf[1] & IRQ_TX_DONE_MASK_6X) == 0)) {
|
||||
buf[0] = 0x00;
|
||||
buf[1] = 0x00;
|
||||
executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2);
|
||||
yield();
|
||||
}
|
||||
|
||||
if (!(millis() < w_timeout)) { timed_out = true; }
|
||||
|
||||
// clear IRQ's
|
||||
|
||||
uint8_t mask[2];
|
||||
mask[0] = 0x00;
|
||||
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() {
|
||||
// imitate the register status from the sx1276 / 78
|
||||
|
|
Loading…
Reference in New Issue