mirror of
https://github.com/markqvist/RNode_Firmware.git
synced 2024-12-27 00:19:43 -05:00
Detect modem communication timeouts for sx126x chips
This commit is contained in:
parent
5807cfdb96
commit
d61d14e117
51
sx126x.cpp
51
sx126x.cpp
@ -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() {
|
||||||
|
1
sx126x.h
1
sx126x.h
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user