Skip to content

Commit 352e6fb

Browse files
committed
Fix overflow at extremely low RSSI
Some LoRaWAN modem like SX1272 can receive downlink packets with RSSI level less than -127. So "int8_t" is not enough for store all possible RSSI values. For example, SX1272 has sensitivity at -137 dBm. Problem was manifested in the file "SX1272_LoRaRadio.cpp" at SX1272_LoRaRadio::handle_dio0_irq() method. When value of _rf_settings.lora_packet_handler.rssi_value calculated incorrect RSSI will be stored. Example case: Value readen from register REG_LR_PKTSNRVALUE _rf_settings.lora_packet_handler.snr_value equals -47. Value readen from register REG_LR_PKTRSSIVALUE equals 17. RSSI_OFFSET equals "-139", snr equals "-11". For case MODEM_LORA value calculated by formula: _rf_settings.lora_packet_handler.rssi_value = RSSI_OFFSET + rssi + (rssi >> 4) + snr; and result value will be "124" because of int8_t overflow so it's not correct value (too high). Correct value must be: -139 + 17 + (1) + (-11) = -132. Another motivation: at all other places int16_t type used to store RSSI value.
1 parent 2eb06e7 commit 352e6fb

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

connectivity/lorawan/include/lorawan/LoRaRadio.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ typedef struct radio_fsk_packet_handler {
200200
/**
201201
* Storage for RSSI value of the received signal.
202202
*/
203-
int8_t rssi_value;
203+
int16_t rssi_value;
204204

205205
/**
206206
* Automated frequency correction value.
@@ -333,7 +333,7 @@ typedef struct radio_lora_packet_handler {
333333
/**
334334
* RSSI value in dBm for the received packet.
335335
*/
336-
int8_t rssi_value;
336+
int16_t rssi_value;
337337

338338
/**
339339
* Size of the transmitted or received packet.

0 commit comments

Comments
 (0)