From 5b4a3483063d61ac54b1639a5208fd0dfb5c805e Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Tue, 26 Jul 2016 19:25:39 -0400 Subject: [PATCH] Add FM Stereo De-emphasis setting --- src/modules/modem/analog/ModemFMStereo.cpp | 43 ++++++++++++++++++++++ src/modules/modem/analog/ModemFMStereo.h | 6 +++ 2 files changed, 49 insertions(+) diff --git a/src/modules/modem/analog/ModemFMStereo.cpp b/src/modules/modem/analog/ModemFMStereo.cpp index acc7078..7997553 100644 --- a/src/modules/modem/analog/ModemFMStereo.cpp +++ b/src/modules/modem/analog/ModemFMStereo.cpp @@ -2,6 +2,7 @@ ModemFMStereo::ModemFMStereo() { demodFM = freqdem_create(0.5); + _demph = 75; } ModemFMStereo::~ModemFMStereo() { @@ -34,6 +35,48 @@ int ModemFMStereo::getDefaultSampleRate() { return 200000; } +ModemArgInfoList ModemFMStereo::getSettings() { + ModemArgInfoList args; + + ModemArgInfo demphArg; + demphArg.key = "demph"; + demphArg.name = "De-emphasis"; + demphArg.value = std::to_string(_demph); + demphArg.description = "FM Stereo De-Emphasis, typically 75us in US/Canada, 50us elsewhere."; + + demphArg.type = ModemArgInfo::STRING; + + std::vector demphOptNames; + demphOptNames.push_back("None"); + demphOptNames.push_back("50μs"); + demphOptNames.push_back("75μs"); + demphArg.optionNames = demphOptNames; + + std::vector demphOpts; + demphOpts.push_back("0"); + demphOpts.push_back("50"); + demphOpts.push_back("75"); + demphArg.options = demphOpts; + + args.push_back(demphArg); + + return args; +} + +void ModemFMStereo::writeSetting(std::string setting, std::string value) { + if (setting == "demph") { + _demph = std::stoi(value); + rebuildKit(); + } +} + +std::string ModemFMStereo::readSetting(std::string setting) { + if (setting == "demph") { + return std::to_string(_demph); + } + return ""; +} + ModemKit *ModemFMStereo::buildKit(long long sampleRate, int audioSampleRate) { ModemKitFMStereo *kit = new ModemKitFMStereo; diff --git a/src/modules/modem/analog/ModemFMStereo.h b/src/modules/modem/analog/ModemFMStereo.h index 6cf9768..a198424 100644 --- a/src/modules/modem/analog/ModemFMStereo.h +++ b/src/modules/modem/analog/ModemFMStereo.h @@ -34,6 +34,10 @@ public: int checkSampleRate(long long sampleRate, int audioSampleRate); int getDefaultSampleRate(); + ModemArgInfoList getSettings(); + void writeSetting(std::string setting, std::string value); + std::string readSetting(std::string setting); + ModemKit *buildKit(long long sampleRate, int audioSampleRate); void disposeKit(ModemKit *kit); @@ -45,4 +49,6 @@ private: std::vector resampledOutputData; std::vector resampledStereoData; freqdem demodFM; + + int _demph; }; \ No newline at end of file