From f95982adc944d955b2658d435b08c65529534546 Mon Sep 17 00:00:00 2001
From: Lucas Russo <lerwys@gmail.com>
Date: Tue, 26 Apr 2016 17:10:54 -0300
Subject: [PATCH] sm_io/chips/*: add new si57x get_freq ()

---
 include/sm_ch_si57x.h         |  2 ++
 src/sm_io/chips/sm_ch_si57x.c | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/include/sm_ch_si57x.h b/include/sm_ch_si57x.h
index d65cdbf3..9d8bd798 100644
--- a/include/sm_ch_si57x.h
+++ b/include/sm_ch_si57x.h
@@ -41,6 +41,8 @@ smch_err_e smch_si57x_get_defaults (smch_si57x_t *self, double fout);
 
 /* Setup new frequency */
 smch_err_e smch_si57x_set_freq (smch_si57x_t *self, double frequency);
+/* Get current frequency */
+smch_err_e smch_si57x_get_freq (smch_si57x_t *self, double *freq);
 
 #ifdef __cplusplus
 }
diff --git a/src/sm_io/chips/sm_ch_si57x.c b/src/sm_io/chips/sm_ch_si57x.c
index bd86e404..2bea03fb 100644
--- a/src/sm_io/chips/sm_ch_si57x.c
+++ b/src/sm_io/chips/sm_ch_si57x.c
@@ -200,6 +200,24 @@ err_exit:
     return err;
 }
 
+smch_err_e smch_si57x_get_freq (smch_si57x_t *self, double *freq)
+{
+    assert (self);
+    assert (freq);
+    smch_err_e err = SMCH_SUCCESS;
+    double frequency = 0;
+
+    DBE_DEBUG (DBG_SM_CH | DBG_LVL_TRACE, "[sm_ch:si57x_set_freq] Getting current "
+            "frequency\n");
+
+    /* rfreq is usually a large value. So we divide it first */
+    frequency = (double) self->rfreq / (self->hs_div * self->n1);
+    frequency *= self->fxtal;
+
+    *freq = frequency;
+    return err;
+}
+
 /***************** Static functions *****************/
 
 static smch_err_e _smch_si57x_write_8 (smch_si57x_t *self, uint8_t addr,
-- 
GitLab