diff --git a/LoRa.cpp b/LoRa.cpp index dcf5edc..fe2b1ef 100644 --- a/LoRa.cpp +++ b/LoRa.cpp @@ -219,6 +219,12 @@ uint8_t LoRaClass::packetRssiRaw() { int LoRaClass::packetRssi() { int pkt_rssi = (int)readRegister(REG_PKT_RSSI_VALUE); + int8_t pkt_snr = ((int8_t)readRegister(REG_PKT_SNR_VALUE)); + if pkt_snr < 0 { + pkt_rssi = pkt_rssi * 16 / 15; + } else { + pkt_rssi += pkt_snr / 4; + } // TODO: change this to look at the actual model code if (_frequency < 820E6) pkt_rssi -= 7; pkt_rssi -= 157; diff --git a/RNode_Firmware.ino b/RNode_Firmware.ino index 4928529..6bf3bfb 100644 --- a/RNode_Firmware.ino +++ b/RNode_Firmware.ino @@ -144,7 +144,7 @@ void receiveCallback(int packet_size) { // recieved packet to the host. Serial.write(FEND); Serial.write(CMD_STAT_RSSI); - Serial.write((uint8_t)(last_rssi-rssi_offset)); + Serial.write((uint8_t)(last_rssi+rssi_offset)); Serial.write(FEND); // And then write the entire packet @@ -170,7 +170,7 @@ void receiveCallback(int packet_size) { // recieved packet to the host. Serial.write(FEND); Serial.write(CMD_STAT_RSSI); - Serial.write((uint8_t)(last_rssi-rssi_offset)); + Serial.write((uint8_t)(last_rssi+rssi_offset)); Serial.write(FEND); // And then write the entire packet