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. |
---|
|
connectivity/lorawan/include/lorawan/LoRaRadio.h |
---|