From bedf7e60522bb34b19f4a28b8866aea7062c9054 Mon Sep 17 00:00:00 2001
From: "Matthias P. Braendli" <matthias.braendli@mpb.li>
Date: Tue, 22 Jan 2019 10:08:07 +0100
Subject: Add modulator rate (r/o) to RC

---
 src/DabMod.cpp       |  4 +++-
 src/DabModulator.cpp | 34 +++++++++++++++++++++++++++++++++-
 src/DabModulator.h   | 21 +++++++++++++--------
 3 files changed, 49 insertions(+), 10 deletions(-)

(limited to 'src')

diff --git a/src/DabMod.cpp b/src/DabMod.cpp
index c53b7c9..57acd40 100644
--- a/src/DabMod.cpp
+++ b/src/DabMod.cpp
@@ -3,7 +3,7 @@
    Her Majesty the Queen in Right of Canada (Communications Research
    Center Canada)
 
-   Copyright (C) 2018
+   Copyright (C) 2019
    Matthias P. Braendli, matthias.braendli@mpb.li
 
     http://opendigitalradio.org
@@ -315,6 +315,7 @@ int launch_modulator(int argc, char* argv[])
         Flowgraph flowgraph;
 
         auto modulator = make_shared<DabModulator>(ediReader, mod_settings);
+        rcs.enrol(modulator.get());
 
         if (format_converter) {
             flowgraph.connect(modulator, format_converter);
@@ -420,6 +421,7 @@ int launch_modulator(int argc, char* argv[])
 
             auto input = make_shared<InputMemory>(&m.data);
             auto modulator = make_shared<DabModulator>(etiReader, mod_settings);
+            rcs.enrol(modulator.get());
 
             if (format_converter) {
                 flowgraph.connect(modulator, format_converter);
diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp
index ca958e3..666745d 100644
--- a/src/DabModulator.cpp
+++ b/src/DabModulator.cpp
@@ -3,7 +3,7 @@
    Her Majesty the Queen in Right of Canada (Communications Research
    Center Canada)
 
-   Copyright (C) 2018
+   Copyright (C) 2019
    Matthias P. Braendli, matthias.braendli@mpb.li
 
     http://opendigitalradio.org
@@ -58,15 +58,20 @@
 #include "RemoteControl.h"
 #include "Log.h"
 
+using namespace std;
+
 DabModulator::DabModulator(EtiSource& etiSource,
                            mod_settings_t& settings) :
     ModInput(),
+    RemoteControllable("modulator"),
     m_settings(settings),
     myEtiSource(etiSource),
     myFlowgraph()
 {
     PDEBUG("DabModulator::DabModulator() @ %p\n", this);
 
+    RC_ADD_PARAMETER(rate, "(Read-only) IQ output samplerate");
+
     if (m_settings.dabMode == 0) {
         setMode(2);
     }
@@ -385,3 +390,30 @@ meta_vec_t DabModulator::process_metadata(const meta_vec_t& metadataIn)
     return {};
 }
 
+
+void DabModulator::set_parameter(const string& parameter, const string& value)
+{
+    if (parameter == "rate") {
+        throw ParameterError("Parameter 'rate' is read-only");
+    }
+    else {
+        stringstream ss;
+        ss << "Parameter '" << parameter <<
+            "' is not exported by controllable " << get_rc_name();
+        throw ParameterError(ss.str());
+    }
+}
+
+const string DabModulator::get_parameter(const string& parameter) const
+{
+    stringstream ss;
+    if (parameter == "rate") {
+        ss << m_settings.outputRate;
+    }
+    else {
+        ss << "Parameter '" << parameter <<
+            "' is not exported by controllable " << get_rc_name();
+        throw ParameterError(ss.str());
+    }
+    return ss.str();
+}
diff --git a/src/DabModulator.h b/src/DabModulator.h
index 355eeb3..00d71f5 100644
--- a/src/DabModulator.h
+++ b/src/DabModulator.h
@@ -3,7 +3,7 @@
    Her Majesty the Queen in Right of Canada (Communications Research
    Center Canada)
 
-   Copyright (C) 2018
+   Copyright (C) 2019
    Matthias P. Braendli, matthias.braendli@mpb.li
 
     http://opendigitalradio.org
@@ -46,21 +46,26 @@
 #include "TII.h"
 
 
-class DabModulator : public ModInput, public ModMetadata
+class DabModulator : public ModInput, public ModMetadata, public RemoteControllable
 {
 public:
-    DabModulator(EtiSource& etiSource,
-                 mod_settings_t& settings);
+    DabModulator(EtiSource& etiSource, mod_settings_t& settings);
 
-    int process(Buffer* dataOut);
-    const char* name() { return "DabModulator"; }
+    int process(Buffer* dataOut) override;
+    const char* name() override { return "DabModulator"; }
 
-    virtual meta_vec_t process_metadata(
-            const meta_vec_t& metadataIn);
+    virtual meta_vec_t process_metadata(const meta_vec_t& metadataIn) override;
 
     /* Required to get the timestamp */
     EtiSource* getEtiSource() { return &myEtiSource; }
 
+    /******* REMOTE CONTROL ********/
+    virtual void set_parameter(const std::string& parameter,
+            const std::string& value) override;
+
+    virtual const std::string get_parameter(
+            const std::string& parameter) const override;
+
 protected:
     void setMode(unsigned mode);
 
-- 
cgit v1.2.3