From d4a1f755a9e5426187fe6e80eb32c299f81104dd Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli (think)" Date: Fri, 17 Aug 2012 11:33:02 +0200 Subject: crc-dabmod: remote control for FIRFilter --- src/FIRFilter.h | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/FIRFilter.h') diff --git a/src/FIRFilter.h b/src/FIRFilter.h index 0c06930..b9abb3e 100644 --- a/src/FIRFilter.h +++ b/src/FIRFilter.h @@ -32,6 +32,7 @@ #include #include +#include "RemoteControl.h" #include "ModCodec.h" #include "PcDebug.h" @@ -40,6 +41,7 @@ #include #include +#include #define FIRFILTER_PIPELINE_DELAY 1 @@ -94,8 +96,17 @@ public: }; struct FIRFilterWorkerData { + /* Thread-safe queues to give data to and get data from + * the worker + */ ThreadsafeQueue input_queue; ThreadsafeQueue output_queue; + + /* Remote-control can change the taps while the filter + * runs. This lock makes sure nothing bad happens when + * the taps are being modified + */ + mutable boost::mutex taps_mutex; float* taps; int n_taps; }; @@ -133,10 +144,10 @@ class FIRFilterWorker { }; -class FIRFilter : public ModCodec +class FIRFilter : public ModCodec, public RemoteControllable { public: - FIRFilter(const char* taps_file); + FIRFilter(std::string taps_file); virtual ~FIRFilter(); FIRFilter(const FIRFilter&); FIRFilter& operator=(const FIRFilter&); @@ -144,8 +155,16 @@ public: int process(Buffer* const dataIn, Buffer* dataOut); const char* name() { return "FIRFilter"; } + /******* REMOTE CONTROL ********/ + void set_parameter(string parameter, string value); + string get_parameter(string parameter); + + protected: - int my_Ntaps; + void load_filter_taps(); + + std::string myTapsFile; + int myNtaps; float* myFilter; FIRFilterWorker worker; -- cgit v1.2.3