From 37a0c56bfec870944194b48dc20dfc15eec5f3d8 Mon Sep 17 00:00:00 2001 From: Libor Tomsik Date: Thu, 15 Apr 2021 12:50:49 +0200 Subject: [PATCH] Added method for reading current AFC value --- src/modules/SX127x/SX127x.cpp | 16 ++++++++++++++++ src/modules/SX127x/SX127x.h | 7 +++++++ 2 files changed, 23 insertions(+) diff --git a/src/modules/SX127x/SX127x.cpp b/src/modules/SX127x/SX127x.cpp index 917560ad..9d2e00ee 100644 --- a/src/modules/SX127x/SX127x.cpp +++ b/src/modules/SX127x/SX127x.cpp @@ -669,6 +669,22 @@ float SX127x::getFrequencyError(bool autoCorrect) { return(ERR_UNKNOWN); } +float SX127x::getAFCError() +{ + // check active modem + int16_t modem = getActiveModem(); + if(modem != SX127X_FSK_OOK) { + return 0; + } + + // get raw frequency error + int16_t raw = (uint16_t)_mod->SPIgetRegValue(SX127X_REG_AFC_MSB) << 8; + raw |= _mod->SPIgetRegValue(SX127X_REG_AFC_LSB); + + uint32_t base = 1; + return raw * (32000000.0 / (float)(base << 19)); +} + float SX127x::getSNR() { // check active modem if(getActiveModem() != SX127X_LORA) { diff --git a/src/modules/SX127x/SX127x.h b/src/modules/SX127x/SX127x.h index b5621b22..66c5442b 100644 --- a/src/modules/SX127x/SX127x.h +++ b/src/modules/SX127x/SX127x.h @@ -773,6 +773,13 @@ class SX127x: public PhysicalLayer { */ float getFrequencyError(bool autoCorrect = false); + /*! + \brief Gets current AFC error. + + \returns Frequency offset from RF in Hz if AFC is enabled and triggered, zero otherwise. + */ + float getAFCError(); + /*! \brief Gets signal-to-noise ratio of the latest received packet.