The signal to noise Ratio (SNR) and Received Signal Strength Indication(RSSI) for inbound messages required reading values from three registers
•RegPktSnrValue
•RegPktRssiValue
•RegRssiValue
I had to modify the OnDataRecievedHandler method signature so the values could be returned
public delegate void OnDataRecievedHandler(float packetSnr, int packetRssi, int rssi, byte[] data);
I was inspired by the RSSI adjustment approach used in the Arduino-LoRa library
// Get the RSSI HF vs. LF port adjustment section 5.5.5 RSSI and SNR in LoRa Mode float packetSnr = this.Rfm9XLoraModem.ReadByte((byte)Registers.RegPktSnrValue) * 0.25f; int rssi = this.Rfm9XLoraModem.ReadByte((byte)Registers.RegRssiValue); if (Frequency > RFMidBandThreshold) { rssi = RssiAdjustmentHF + rssi; } else { rssi = RssiAdjustmentLF + rssi; } int packetRssi = this.Rfm9XLoraModem.ReadByte((byte)Registers.RegPktRssiValue); if (Frequency > RFMidBandThreshold) { packetRssi = RssiAdjustmentHF + packetRssi; } else { packetRssi = RssiAdjustmentLF + packetRssi; } OnDataReceived?.Invoke( packetSnr, packetRssi, rssi, messageBytes);
The values displayed in the Rfm9xLoRaDeviceClient application looked reasonable, but will need further checking
00:06:14-Rfm9X PacketSnr 9.8 Packet RSSI -47dBm RSSI -111dBm = 28 byte message "Hello W10 IoT Core LoRa! 182" Sending 20 bytes message Hello NetMF LoRa! 38 Transmit-Done 00:06:24-Rfm9X PacketSnr 9.8 Packet RSSI -48dBm RSSI -111dBm = 28 byte message "Hello W10 IoT Core LoRa! 181" Sending 20 bytes message Hello NetMF LoRa! 39 Transmit-Done 00:06:34-Rfm9X PacketSnr 9.8 Packet RSSI -47dBm RSSI -112dBm = 28 byte message "Hello W10 IoT Core LoRa! 180" Sending 20 bytes message Hello NetMF LoRa! 40 Transmit-Done 00:06:44-Rfm9X PacketSnr 10.0 Packet RSSI -48dBm RSSI -111dBm = 28 byte message "Hello W10 IoT Core LoRa! 179"