From 4a62eae0961a3b3b09acb6e7c787f5db733d8ab1 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Mon, 23 Nov 2015 20:03:47 -0500 Subject: [PATCH] Convert constellation code to ModemArgInfo settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Note: can’t set constellation yet until property grid is added --- src/AppFrame.cpp | 27 ------ src/AppFrame.h | 1 - src/demod/DemodulatorInstance.cpp | 15 ---- src/demod/DemodulatorInstance.h | 3 - src/demod/DemodulatorMgr.cpp | 9 -- src/demod/DemodulatorMgr.h | 4 - src/modules/modem/Modem.cpp | 16 ++++ src/modules/modem/Modem.h | 5 +- src/modules/modem/ModemDigital.cpp | 21 +---- src/modules/modem/ModemDigital.h | 12 ++- src/modules/modem/digital/ModemAPSK.cpp | 113 +++++++++++++++--------- src/modules/modem/digital/ModemAPSK.h | 8 ++ src/modules/modem/digital/ModemASK.cpp | 108 +++++++++++++--------- src/modules/modem/digital/ModemASK.h | 8 ++ src/modules/modem/digital/ModemBPSK.cpp | 6 -- src/modules/modem/digital/ModemBPSK.h | 5 +- src/modules/modem/digital/ModemDPSK.cpp | 109 ++++++++++++++--------- src/modules/modem/digital/ModemDPSK.h | 8 ++ src/modules/modem/digital/ModemFSK.cpp | 32 +++++-- src/modules/modem/digital/ModemFSK.h | 12 ++- src/modules/modem/digital/ModemOOK.cpp | 6 -- src/modules/modem/digital/ModemOOK.h | 5 +- src/modules/modem/digital/ModemPSK.cpp | 110 ++++++++++++++--------- src/modules/modem/digital/ModemPSK.h | 8 ++ src/modules/modem/digital/ModemQAM.cpp | 105 +++++++++++++--------- src/modules/modem/digital/ModemQAM.h | 8 ++ src/modules/modem/digital/ModemQPSK.cpp | 6 -- src/modules/modem/digital/ModemQPSK.h | 4 +- src/modules/modem/digital/ModemSQAM.cpp | 85 +++++++++--------- src/modules/modem/digital/ModemSQAM.h | 8 ++ src/modules/modem/digital/ModemST.cpp | 6 -- src/modules/modem/digital/ModemST.h | 4 +- src/visual/PrimaryGLContext.cpp | 6 +- 33 files changed, 495 insertions(+), 388 deletions(-) diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index 35f0b43..0f9b47c 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -93,19 +93,6 @@ AppFrame::AppFrame() : demodModeSelectorAdv->addChoice(10, "QPSK"); demodModeSelectorAdv->setHelpTip("Choose advanced modulation types."); demodTray->Add(demodModeSelectorAdv, 3, wxEXPAND | wxALL, 0); - - demodModeSelectorCons = new ModeSelectorCanvas(this, attribList); - demodModeSelectorCons->addChoice(1, "auto"); - demodModeSelectorCons->addChoice(2, "2"); - demodModeSelectorCons->addChoice(4, "4"); - demodModeSelectorCons->addChoice(8, "8"); - demodModeSelectorCons->addChoice(16, "16"); - demodModeSelectorCons->addChoice(32, "32"); - demodModeSelectorCons->addChoice(64, "64"); - demodModeSelectorCons->addChoice(128, "128"); - demodModeSelectorCons->addChoice(256, "256"); - demodModeSelectorCons->setHelpTip("Choose number of constallations types."); - demodTray->Add(demodModeSelectorCons, 2, wxEXPAND | wxALL, 0); #endif wxGetApp().getDemodSpectrumProcessor()->setup(1024); @@ -862,9 +849,7 @@ void AppFrame::OnIdle(wxIdleEvent& event) { std::string dType = demod->getDemodulatorType(); demodModeSelector->setSelection(dType); #ifdef ENABLE_DIGITAL_LAB - int dCons = demod->getDemodulatorCons(); demodModeSelectorAdv->setSelection(dType); - demodModeSelectorCons->setSelection(dCons); #endif demodMuteButton->setSelection(demod->isMuted()?1:-1); } @@ -896,7 +881,6 @@ void AppFrame::OnIdle(wxIdleEvent& event) { std::string dSelection = demodModeSelector->getSelectionLabel(); #ifdef ENABLE_DIGITAL_LAB std::string dSelectionadv = demodModeSelectorAdv->getSelectionLabel(); - int dSelectionCons = demodModeSelectorCons->getSelection(); // basic demodulators if (dSelection != "" && dSelection != demod->getDemodulatorType()) { @@ -908,11 +892,6 @@ void AppFrame::OnIdle(wxIdleEvent& event) { demod->setDemodulatorType(dSelectionadv); demodModeSelector->setSelection(-1); } - - // set constellations - if (dSelectionCons != demod->getDemodulatorCons()) { - demod->setDemodulatorCons(dSelectionCons); - } #else // basic demodulators if (dSelection != "" && dSelection != demod->getDemodulatorType()) { @@ -958,7 +937,6 @@ void AppFrame::OnIdle(wxIdleEvent& event) { std::string dSelection = demodModeSelector->getSelectionLabel(); #ifdef ENABLE_DIGITAL_LAB std::string dSelectionadv = demodModeSelectorAdv->getSelectionLabel(); - int dSelectionCons = demodModeSelectorCons->getSelection(); // basic demodulators if (dSelection != "" && dSelection != mgr->getLastDemodulatorType()) { @@ -970,11 +948,6 @@ void AppFrame::OnIdle(wxIdleEvent& event) { mgr->setLastDemodulatorType(dSelectionadv); demodModeSelector->setSelection(-1); } - - // set constellations - if (dSelectionCons != mgr->getLastDemodulatorCons()) { - mgr->setLastDemodulatorCons(dSelectionCons); - } #else // basic demodulators if (dSelection != "" && dSelection != mgr->getLastDemodulatorType()) { diff --git a/src/AppFrame.h b/src/AppFrame.h index 694d8c7..2ca576a 100644 --- a/src/AppFrame.h +++ b/src/AppFrame.h @@ -81,7 +81,6 @@ private: ModeSelectorCanvas *demodModeSelector; #ifdef ENABLE_DIGITAL_LAB ModeSelectorCanvas *demodModeSelectorAdv; - ModeSelectorCanvas *demodModeSelectorCons; #endif SpectrumCanvas *demodSpectrumCanvas; WaterfallCanvas *demodWaterfallCanvas; diff --git a/src/demod/DemodulatorInstance.cpp b/src/demod/DemodulatorInstance.cpp index cf9ba0f..33c5832 100644 --- a/src/demod/DemodulatorInstance.cpp +++ b/src/demod/DemodulatorInstance.cpp @@ -261,21 +261,6 @@ int DemodulatorInstance::getDemodulatorLock() { return 0; } -void DemodulatorInstance::setDemodulatorCons(int demod_cons_in) { - Modem *cModem = demodulatorPreThread->getModem(); - if (cModem && cModem->getType() == "digital") { - ((ModemDigital *)cModem)->setDemodulatorCons(demod_cons_in); - } -} - -int DemodulatorInstance::getDemodulatorCons() { - Modem *cModem = demodulatorPreThread->getModem(); - if (cModem && cModem->getType() == "digital") { - return ((ModemDigital *)cModem)->getDemodulatorCons(); - } - return 0; -} - void DemodulatorInstance::setBandwidth(int bw) { demodulatorPreThread->setBandwidth(bw); } diff --git a/src/demod/DemodulatorInstance.h b/src/demod/DemodulatorInstance.h index fa14679..58801ae 100644 --- a/src/demod/DemodulatorInstance.h +++ b/src/demod/DemodulatorInstance.h @@ -58,9 +58,6 @@ public: void setDemodulatorLock(bool demod_lock_in); int getDemodulatorLock(); - - void setDemodulatorCons(int demod_cons_in); - int getDemodulatorCons(); void setBandwidth(int bw); int getBandwidth(); diff --git a/src/demod/DemodulatorMgr.cpp b/src/demod/DemodulatorMgr.cpp index fc6c4e1..939bed0 100644 --- a/src/demod/DemodulatorMgr.cpp +++ b/src/demod/DemodulatorMgr.cpp @@ -162,7 +162,6 @@ void DemodulatorMgr::updateLastState() { lastBandwidth = lastActiveDemodulator->getBandwidth(); lastDemodType = lastActiveDemodulator->getDemodulatorType(); lastDemodLock = lastActiveDemodulator->getDemodulatorLock(); - lastDemodCons = lastActiveDemodulator->getDemodulatorCons(); lastSquelchEnabled = lastActiveDemodulator->isSquelchEnabled(); lastSquelch = lastActiveDemodulator->getSquelchLevel(); lastGain = lastActiveDemodulator->getGain(); @@ -191,14 +190,6 @@ void DemodulatorMgr::setLastDemodulatorType(std::string lastDemodType) { this->lastDemodType = lastDemodType; } -int DemodulatorMgr::getLastDemodulatorCons() const { - return lastDemodCons; -} - -void DemodulatorMgr::setLastDemodulatorCons(int lastDemodCons) { - this->lastDemodCons = lastDemodCons; -} - float DemodulatorMgr::getLastGain() const { return lastGain; } diff --git a/src/demod/DemodulatorMgr.h b/src/demod/DemodulatorMgr.h index c57386a..a93204e 100644 --- a/src/demod/DemodulatorMgr.h +++ b/src/demod/DemodulatorMgr.h @@ -27,9 +27,6 @@ public: std::string getLastDemodulatorType() const; void setLastDemodulatorType(std::string lastDemodType); - - int getLastDemodulatorCons() const; - void setLastDemodulatorCons(int lastDemodCons); float getLastGain() const; void setLastGain(float lastGain); @@ -56,7 +53,6 @@ private: int lastBandwidth; std::string lastDemodType; bool lastDemodLock; - int lastDemodCons; bool lastSquelchEnabled; float lastSquelch; float lastGain; diff --git a/src/modules/modem/Modem.cpp b/src/modules/modem/Modem.cpp index 30ea605..69adc7b 100644 --- a/src/modules/modem/Modem.cpp +++ b/src/modules/modem/Modem.cpp @@ -2,6 +2,22 @@ ModemFactoryList Modem::modemFactories; +//! Create an empty range (0.0, 0.0) +ModemRange::ModemRange(void) { + _min = 0; + _max = 0; +} + +//! Create a min/max range +ModemRange::ModemRange(const double minimum, const double maximum) { + _min = minimum; + _max = maximum; +} + +ModemArgInfo::ModemArgInfo(void) { + +} + void Modem::addModemFactory(Modem *factorySingle) { modemFactories[factorySingle->getName()] = factorySingle; } diff --git a/src/modules/modem/Modem.h b/src/modules/modem/Modem.h index cda7a95..7edb2d5 100644 --- a/src/modules/modem/Modem.h +++ b/src/modules/modem/Modem.h @@ -29,7 +29,6 @@ public: } }; - // Copy of SoapySDR::Range, original comments class ModemRange { @@ -51,7 +50,6 @@ private: double _min, _max; }; - // Modified version of SoapySDR::ArgInfo, original comments class ModemArgInfo { @@ -121,9 +119,12 @@ public: virtual ModemArgInfoList getSettings(); virtual void writeSetting(std::string setting, std::string value); virtual std::string readSetting(std::string setting); + virtual int checkSampleRate(long long sampleRate, int audioSampleRate) = 0; + virtual ModemKit *buildKit(long long sampleRate, int audioSampleRate) = 0; virtual void disposeKit(ModemKit *kit) = 0; + virtual void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) = 0; private: static ModemFactoryList modemFactories; diff --git a/src/modules/modem/ModemDigital.cpp b/src/modules/modem/ModemDigital.cpp index 6ed184f..c8c09f6 100644 --- a/src/modules/modem/ModemDigital.cpp +++ b/src/modules/modem/ModemDigital.cpp @@ -38,24 +38,10 @@ int ModemDigital::getDemodulatorLock() { return currentDemodLock.load(); } -void ModemDigital::setDemodulatorCons(int demod_cons_in) { - demodulatorCons.store(demod_cons_in); -} - -int ModemDigital::getDemodulatorCons() { - return currentDemodCons.load(); -} - void ModemDigital::updateDemodulatorLock(modem mod, float sensitivity) { setDemodulatorLock(modem_get_demodulator_evm(mod) <= sensitivity); } -void ModemDigital::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - } -} - void ModemDigital::digitalStart(ModemKitDigital *kit, modem mod, ModemIQData *input) { int bufSize = input->data.size(); @@ -65,14 +51,9 @@ void ModemDigital::digitalStart(ModemKitDigital *kit, modem mod, ModemIQData *in } demodOutputDataDigital.resize(bufSize); } - - if (demodulatorCons.load() != currentDemodCons.load()) { - updateDemodulatorCons(demodulatorCons.load()); - currentDemodLock.store(false); - } } void ModemDigital::digitalFinish(ModemKitDigital *kit, modem mod) { demodOutputDataDigital.empty(); } - + \ No newline at end of file diff --git a/src/modules/modem/ModemDigital.h b/src/modules/modem/ModemDigital.h index e78b5a7..3c0e1be 100644 --- a/src/modules/modem/ModemDigital.h +++ b/src/modules/modem/ModemDigital.h @@ -12,28 +12,26 @@ public: class ModemDigital : public Modem { public: ModemDigital(); + std::string getType(); + virtual int checkSampleRate(long long sampleRate, int audioSampleRate); + virtual ModemKit *buildKit(long long sampleRate, int audioSampleRate); virtual void disposeKit(ModemKit *kit); + virtual void digitalStart(ModemKitDigital *kit, modem mod, ModemIQData *input); virtual void digitalFinish(ModemKitDigital *kit, modem mod); virtual void setDemodulatorLock(bool demod_lock_in); virtual int getDemodulatorLock(); - virtual void setDemodulatorCons(int demod_cons_in); - virtual int getDemodulatorCons(); - - virtual void updateDemodulatorCons(int cons); virtual void updateDemodulatorLock(modem mod, float sensitivity); protected: std::vector demodOutputDataDigital; - std::atomic_int demodulatorCons; std::atomic_bool currentDemodLock; - std::atomic_int currentDemodCons; - + // std::vector demodOutputDataDigitalTest; // std::vector demodOutputSoftbits; // std::vector demodOutputSoftbitsTest; diff --git a/src/modules/modem/digital/ModemAPSK.cpp b/src/modules/modem/digital/ModemAPSK.cpp index ed04c10..f7d72d5 100644 --- a/src/modules/modem/digital/ModemAPSK.cpp +++ b/src/modules/modem/digital/ModemAPSK.cpp @@ -8,9 +8,8 @@ ModemAPSK::ModemAPSK() { demodAPSK64 = modem_create(LIQUID_MODEM_APSK64); demodAPSK128 = modem_create(LIQUID_MODEM_APSK128); demodAPSK256 = modem_create(LIQUID_MODEM_APSK256); - demodulatorCons.store(4); - currentDemodCons.store(0); - updateDemodulatorCons(4); + demodAPSK = demodAPSK4; + cons = 4; } Modem *ModemAPSK::factory() { @@ -31,46 +30,76 @@ std::string ModemAPSK::getName() { return "APSK"; } +ModemArgInfoList ModemAPSK::getSettings() { + ModemArgInfoList args; + + ModemArgInfo consArg; + consArg.key = "cons"; + consArg.name = "Constellation"; + consArg.description = "Modem Constellation Pattern"; + consArg.value = std::to_string(cons); + consArg.type = ModemArgInfo::STRING; + std::vector consOpts; + consOpts.push_back("4"); + consOpts.push_back("8"); + consOpts.push_back("16"); + consOpts.push_back("32"); + consOpts.push_back("64"); + consOpts.push_back("128"); + consOpts.push_back("256"); + consArg.options = consOpts; + args.push_back(consArg); + + return args; +} + +void ModemAPSK::writeSetting(std::string setting, std::string value) { + if (setting == "cons") { + int newCons = std::stoi(value); + updateDemodulatorCons(newCons); + } +} + +std::string ModemAPSK::readSetting(std::string setting) { + if (setting == "cons") { + return std::to_string(cons); + } + return ""; +} + void ModemAPSK::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - switch (demodulatorCons.load()) { - case 2: - demodAPSK = demodAPSK4; - updateDemodulatorCons(4); - break; - case 4: - demodAPSK = demodAPSK4; - updateDemodulatorCons(4); - break; - case 8: - demodAPSK = demodAPSK8; - updateDemodulatorCons(8); - break; - case 16: - demodAPSK = demodAPSK16; - updateDemodulatorCons(16); - break; - case 32: - demodAPSK = demodAPSK32; - updateDemodulatorCons(32); - break; - case 64: - demodAPSK = demodAPSK64; - updateDemodulatorCons(64); - break; - case 128: - demodAPSK = demodAPSK128; - updateDemodulatorCons(128); - break; - case 256: - demodAPSK = demodAPSK256; - updateDemodulatorCons(256); - break; - default: - demodAPSK = demodAPSK4; - break; - } + switch (cons) { + case 4: + demodAPSK = demodAPSK4; + updateDemodulatorCons(4); + break; + case 8: + demodAPSK = demodAPSK8; + updateDemodulatorCons(8); + break; + case 16: + demodAPSK = demodAPSK16; + updateDemodulatorCons(16); + break; + case 32: + demodAPSK = demodAPSK32; + updateDemodulatorCons(32); + break; + case 64: + demodAPSK = demodAPSK64; + updateDemodulatorCons(64); + break; + case 128: + demodAPSK = demodAPSK128; + updateDemodulatorCons(128); + break; + case 256: + demodAPSK = demodAPSK256; + updateDemodulatorCons(256); + break; + default: + demodAPSK = demodAPSK4; + break; } } diff --git a/src/modules/modem/digital/ModemAPSK.h b/src/modules/modem/digital/ModemAPSK.h index f5497df..dc9a4c6 100644 --- a/src/modules/modem/digital/ModemAPSK.h +++ b/src/modules/modem/digital/ModemAPSK.h @@ -5,12 +5,20 @@ class ModemAPSK : public ModemDigital { public: ModemAPSK(); ~ModemAPSK(); + std::string getName(); + Modem *factory(); + + ModemArgInfoList getSettings(); + void writeSetting(std::string setting, std::string value); + std::string readSetting(std::string setting); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: + int cons; modem demodAPSK; modem demodAPSK4; modem demodAPSK8; diff --git a/src/modules/modem/digital/ModemASK.cpp b/src/modules/modem/digital/ModemASK.cpp index af09b76..fb9adf4 100644 --- a/src/modules/modem/digital/ModemASK.cpp +++ b/src/modules/modem/digital/ModemASK.cpp @@ -10,9 +10,7 @@ ModemASK::ModemASK() { demodASK128 = modem_create(LIQUID_MODEM_ASK128); demodASK256 = modem_create(LIQUID_MODEM_ASK256); demodASK = demodASK2; - demodulatorCons.store(2); - currentDemodCons.store(0); - updateDemodulatorCons(2); + cons = 2; } Modem *ModemASK::factory() { @@ -33,47 +31,71 @@ std::string ModemASK::getName() { return "ASK"; } +ModemArgInfoList ModemASK::getSettings() { + ModemArgInfoList args; + + ModemArgInfo consArg; + consArg.key = "cons"; + consArg.name = "Constellation"; + consArg.description = "Modem Constellation Pattern"; + consArg.value = std::to_string(cons); + consArg.type = ModemArgInfo::STRING; + std::vector consOpts; + consOpts.push_back("2"); + consOpts.push_back("4"); + consOpts.push_back("8"); + consOpts.push_back("16"); + consOpts.push_back("32"); + consOpts.push_back("64"); + consOpts.push_back("128"); + consOpts.push_back("256"); + consArg.options = consOpts; + args.push_back(consArg); + + return args; +} + +void ModemASK::writeSetting(std::string setting, std::string value) { + if (setting == "cons") { + int newCons = std::stoi(value); + updateDemodulatorCons(newCons); + } +} + +std::string ModemASK::readSetting(std::string setting) { + if (setting == "cons") { + return std::to_string(cons); + } + return ""; +} + void ModemASK::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - - switch (demodulatorCons.load()) { - case 2: - demodASK = demodASK2; - updateDemodulatorCons(2); - break; - case 4: - demodASK = demodASK4; - updateDemodulatorCons(4); - break; - case 8: - demodASK = demodASK8; - updateDemodulatorCons(8); - break; - case 16: - demodASK = demodASK16; - updateDemodulatorCons(16); - break; - case 32: - demodASK = demodASK32; - updateDemodulatorCons(32); - break; - case 64: - demodASK = demodASK64; - updateDemodulatorCons(64); - break; - case 128: - demodASK = demodASK128; - updateDemodulatorCons(128); - break; - case 256: - demodASK = demodASK256; - updateDemodulatorCons(256); - break; - default: - demodASK = demodASK2; - break; - } + this->cons = cons; + switch (cons) { + case 2: + demodASK = demodASK2; + break; + case 4: + demodASK = demodASK4; + break; + case 8: + demodASK = demodASK8; + break; + case 16: + demodASK = demodASK16; + break; + case 32: + demodASK = demodASK32; + break; + case 64: + demodASK = demodASK64; + break; + case 128: + demodASK = demodASK128; + break; + case 256: + demodASK = demodASK256; + break; } } diff --git a/src/modules/modem/digital/ModemASK.h b/src/modules/modem/digital/ModemASK.h index 5dfffc1..e102b96 100644 --- a/src/modules/modem/digital/ModemASK.h +++ b/src/modules/modem/digital/ModemASK.h @@ -5,12 +5,20 @@ class ModemASK : public ModemDigital { public: ModemASK(); ~ModemASK(); + std::string getName(); + Modem *factory(); + + ModemArgInfoList getSettings(); + void writeSetting(std::string setting, std::string value); + std::string readSetting(std::string setting); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: + int cons; modem demodASK; modem demodASK2; modem demodASK4; diff --git a/src/modules/modem/digital/ModemBPSK.cpp b/src/modules/modem/digital/ModemBPSK.cpp index 535cdae..6e2b3a1 100644 --- a/src/modules/modem/digital/ModemBPSK.cpp +++ b/src/modules/modem/digital/ModemBPSK.cpp @@ -16,12 +16,6 @@ std::string ModemBPSK::getName() { return "BPSK"; } -void ModemBPSK::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - } -} - void ModemBPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { ModemKitDigital *dkit = (ModemKitDigital *)kit; digitalStart(dkit, demodBPSK, input); diff --git a/src/modules/modem/digital/ModemBPSK.h b/src/modules/modem/digital/ModemBPSK.h index ef26c5c..e571478 100644 --- a/src/modules/modem/digital/ModemBPSK.h +++ b/src/modules/modem/digital/ModemBPSK.h @@ -5,12 +5,13 @@ class ModemBPSK : public ModemDigital { public: ModemBPSK(); ~ModemBPSK(); + std::string getName(); + Modem *factory(); - void updateDemodulatorCons(int cons); + void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: modem demodBPSK; - }; diff --git a/src/modules/modem/digital/ModemDPSK.cpp b/src/modules/modem/digital/ModemDPSK.cpp index b44ebb7..9698e8c 100644 --- a/src/modules/modem/digital/ModemDPSK.cpp +++ b/src/modules/modem/digital/ModemDPSK.cpp @@ -9,9 +9,8 @@ ModemDPSK::ModemDPSK() { demodDPSK64 = modem_create(LIQUID_MODEM_DPSK64); demodDPSK128 = modem_create(LIQUID_MODEM_DPSK128); demodDPSK256 = modem_create(LIQUID_MODEM_DPSK256); - demodulatorCons.store(2); - currentDemodCons.store(0); - updateDemodulatorCons(2); + demodDPSK = demodDPSK2; + cons = 2; } Modem *ModemDPSK::factory() { @@ -33,47 +32,71 @@ ModemDPSK::~ModemDPSK() { modem_destroy(demodDPSK256); } +ModemArgInfoList ModemDPSK::getSettings() { + ModemArgInfoList args; + + ModemArgInfo consArg; + consArg.key = "cons"; + consArg.name = "Constellation"; + consArg.description = "Modem Constellation Pattern"; + consArg.value = std::to_string(cons); + consArg.type = ModemArgInfo::STRING; + std::vector consOpts; + consOpts.push_back("2"); + consOpts.push_back("4"); + consOpts.push_back("8"); + consOpts.push_back("16"); + consOpts.push_back("32"); + consOpts.push_back("64"); + consOpts.push_back("128"); + consOpts.push_back("256"); + consArg.options = consOpts; + args.push_back(consArg); + + return args; +} + +void ModemDPSK::writeSetting(std::string setting, std::string value) { + if (setting == "cons") { + int newCons = std::stoi(value); + updateDemodulatorCons(newCons); + } +} + +std::string ModemDPSK::readSetting(std::string setting) { + if (setting == "cons") { + return std::to_string(cons); + } + return ""; +} + void ModemDPSK::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - - switch (demodulatorCons.load()) { - case 2: - demodDPSK = demodDPSK2; - updateDemodulatorCons(2); - break; - case 4: - demodDPSK = demodDPSK4; - updateDemodulatorCons(4); - break; - case 8: - demodDPSK = demodDPSK8; - updateDemodulatorCons(8); - break; - case 16: - demodDPSK = demodDPSK16; - updateDemodulatorCons(16); - break; - case 32: - demodDPSK = demodDPSK32; - updateDemodulatorCons(32); - break; - case 64: - demodDPSK = demodDPSK64; - updateDemodulatorCons(64); - break; - case 128: - demodDPSK = demodDPSK128; - updateDemodulatorCons(128); - break; - case 256: - demodDPSK = demodDPSK256; - updateDemodulatorCons(256); - break; - default: - demodDPSK = demodDPSK2; - break; - } + this->cons = cons; + switch (cons) { + case 2: + demodDPSK = demodDPSK2; + break; + case 4: + demodDPSK = demodDPSK4; + break; + case 8: + demodDPSK = demodDPSK8; + break; + case 16: + demodDPSK = demodDPSK16; + break; + case 32: + demodDPSK = demodDPSK32; + break; + case 64: + demodDPSK = demodDPSK64; + break; + case 128: + demodDPSK = demodDPSK128; + break; + case 256: + demodDPSK = demodDPSK256; + break; } } diff --git a/src/modules/modem/digital/ModemDPSK.h b/src/modules/modem/digital/ModemDPSK.h index b431ffd..3b76e00 100644 --- a/src/modules/modem/digital/ModemDPSK.h +++ b/src/modules/modem/digital/ModemDPSK.h @@ -5,12 +5,20 @@ class ModemDPSK : public ModemDigital { public: ModemDPSK(); ~ModemDPSK(); + std::string getName(); + Modem *factory(); + + ModemArgInfoList getSettings(); + void writeSetting(std::string setting, std::string value); + std::string readSetting(std::string setting); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: + int cons; modem demodDPSK; modem demodDPSK2; modem demodDPSK4; diff --git a/src/modules/modem/digital/ModemFSK.cpp b/src/modules/modem/digital/ModemFSK.cpp index f73d99c..aad5bfd 100644 --- a/src/modules/modem/digital/ModemFSK.cpp +++ b/src/modules/modem/digital/ModemFSK.cpp @@ -1,15 +1,37 @@ #include "ModemFSK.h" ModemFSK::ModemFSK() { - demodulatorCons.store(2); - currentDemodCons.store(0); - updateDemodulatorCons(2); + bps = 9600; + spacing = 7000; } Modem *ModemFSK::factory() { return new ModemFSK; } +ModemArgInfoList ModemFSK::getSettings() { + ModemArgInfoList args; + + return args; +} + +void ModemFSK::writeSetting(std::string setting, std::string value) { + if (setting == "bps") { + + } else if (setting == "spacing") { + + } +} + +std::string ModemFSK::readSetting(std::string setting) { + if (setting == "bps") { + return std::to_string(bps); + } else if (setting == "spacing") { + return std::to_string(spacing); + } + return ""; +} + ModemKit *ModemFSK::buildKit(long long sampleRate, int audioSampleRate) { ModemKitFSK *dkit = new ModemKitFSK; dkit->m = 1; @@ -38,10 +60,6 @@ ModemFSK::~ModemFSK() { } -void ModemFSK::updateDemodulatorCons(int cons) { - -} - void ModemFSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { ModemKitFSK *dkit = (ModemKitFSK *)kit; diff --git a/src/modules/modem/digital/ModemFSK.h b/src/modules/modem/digital/ModemFSK.h index f1fe62c..a5392ae 100644 --- a/src/modules/modem/digital/ModemFSK.h +++ b/src/modules/modem/digital/ModemFSK.h @@ -15,15 +15,21 @@ class ModemFSK : public ModemDigital { public: ModemFSK(); ~ModemFSK(); + std::string getName(); + Modem *factory(); + + 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); - void updateDemodulatorCons(int cons); + void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); - private: - fskdem dem; + int bps, spacing; }; diff --git a/src/modules/modem/digital/ModemOOK.cpp b/src/modules/modem/digital/ModemOOK.cpp index 7be56d7..d0e92f9 100644 --- a/src/modules/modem/digital/ModemOOK.cpp +++ b/src/modules/modem/digital/ModemOOK.cpp @@ -16,12 +16,6 @@ std::string ModemOOK::getName() { return "OOK"; } -void ModemOOK::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - } -} - void ModemOOK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { ModemKitDigital *dkit = (ModemKitDigital *)kit; digitalStart(dkit, demodOOK, input); diff --git a/src/modules/modem/digital/ModemOOK.h b/src/modules/modem/digital/ModemOOK.h index 6f15c8b..4266113 100644 --- a/src/modules/modem/digital/ModemOOK.h +++ b/src/modules/modem/digital/ModemOOK.h @@ -5,12 +5,13 @@ class ModemOOK : public ModemDigital { public: ModemOOK(); ~ModemOOK(); + std::string getName(); + Modem *factory(); - void updateDemodulatorCons(int cons); + void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: modem demodOOK; - }; diff --git a/src/modules/modem/digital/ModemPSK.cpp b/src/modules/modem/digital/ModemPSK.cpp index cf05a9e..1f33ff3 100644 --- a/src/modules/modem/digital/ModemPSK.cpp +++ b/src/modules/modem/digital/ModemPSK.cpp @@ -9,9 +9,8 @@ ModemPSK::ModemPSK() { demodPSK64 = modem_create(LIQUID_MODEM_PSK64); demodPSK128 = modem_create(LIQUID_MODEM_PSK128); demodPSK256 = modem_create(LIQUID_MODEM_PSK256); - demodulatorCons.store(2); - currentDemodCons.store(0); - updateDemodulatorCons(2); + demodPSK = demodPSK2; + cons = 2; } Modem *ModemPSK::factory() { @@ -33,47 +32,72 @@ ModemPSK::~ModemPSK() { modem_destroy(demodPSK256); } + +ModemArgInfoList ModemPSK::getSettings() { + ModemArgInfoList args; + + ModemArgInfo consArg; + consArg.key = "cons"; + consArg.name = "Constellation"; + consArg.description = "Modem Constellation Pattern"; + consArg.value = std::to_string(cons); + consArg.type = ModemArgInfo::STRING; + std::vector consOpts; + consOpts.push_back("2"); + consOpts.push_back("4"); + consOpts.push_back("8"); + consOpts.push_back("16"); + consOpts.push_back("32"); + consOpts.push_back("64"); + consOpts.push_back("128"); + consOpts.push_back("256"); + consArg.options = consOpts; + args.push_back(consArg); + + return args; +} + +void ModemPSK::writeSetting(std::string setting, std::string value) { + if (setting == "cons") { + int newCons = std::stoi(value); + updateDemodulatorCons(newCons); + } +} + +std::string ModemPSK::readSetting(std::string setting) { + if (setting == "cons") { + return std::to_string(cons); + } + return ""; +} + void ModemPSK::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - - switch (demodulatorCons.load()) { - case 2: - demodPSK = demodPSK2; - updateDemodulatorCons(2); - break; - case 4: - demodPSK = demodPSK4; - updateDemodulatorCons(4); - break; - case 8: - demodPSK = demodPSK8; - updateDemodulatorCons(8); - break; - case 16: - demodPSK = demodPSK16; - updateDemodulatorCons(16); - break; - case 32: - demodPSK = demodPSK32; - updateDemodulatorCons(32); - break; - case 64: - demodPSK = demodPSK64; - updateDemodulatorCons(64); - break; - case 128: - demodPSK = demodPSK128; - updateDemodulatorCons(128); - break; - case 256: - demodPSK = demodPSK256; - updateDemodulatorCons(256); - break; - default: - demodPSK = demodPSK2; - break; - } + this->cons = cons; + switch (cons) { + case 2: + demodPSK = demodPSK2; + break; + case 4: + demodPSK = demodPSK4; + break; + case 8: + demodPSK = demodPSK8; + break; + case 16: + demodPSK = demodPSK16; + break; + case 32: + demodPSK = demodPSK32; + break; + case 64: + demodPSK = demodPSK64; + break; + case 128: + demodPSK = demodPSK128; + break; + case 256: + demodPSK = demodPSK256; + break; } } diff --git a/src/modules/modem/digital/ModemPSK.h b/src/modules/modem/digital/ModemPSK.h index 913f8f8..6f51a58 100644 --- a/src/modules/modem/digital/ModemPSK.h +++ b/src/modules/modem/digital/ModemPSK.h @@ -5,12 +5,20 @@ class ModemPSK : public ModemDigital { public: ModemPSK(); ~ModemPSK(); + std::string getName(); + Modem *factory(); + + ModemArgInfoList getSettings(); + void writeSetting(std::string setting, std::string value); + std::string readSetting(std::string setting); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: + int cons; modem demodPSK; modem demodPSK2; modem demodPSK4; diff --git a/src/modules/modem/digital/ModemQAM.cpp b/src/modules/modem/digital/ModemQAM.cpp index f14b5b5..63659a3 100644 --- a/src/modules/modem/digital/ModemQAM.cpp +++ b/src/modules/modem/digital/ModemQAM.cpp @@ -8,9 +8,8 @@ ModemQAM::ModemQAM() { demodQAM64 = modem_create(LIQUID_MODEM_QAM64); demodQAM128 = modem_create(LIQUID_MODEM_QAM128); demodQAM256 = modem_create(LIQUID_MODEM_QAM256); - demodulatorCons.store(4); - currentDemodCons.store(0); - updateDemodulatorCons(4); + demodQAM = demodQAM4; + cons = 4; } Modem *ModemQAM::factory() { @@ -31,47 +30,67 @@ ModemQAM::~ModemQAM() { modem_destroy(demodQAM256); } +ModemArgInfoList ModemQAM::getSettings() { + ModemArgInfoList args; + + ModemArgInfo consArg; + consArg.key = "cons"; + consArg.name = "Constellation"; + consArg.description = "Modem Constellation Pattern"; + consArg.value = std::to_string(cons); + consArg.type = ModemArgInfo::STRING; + std::vector consOpts; + consOpts.push_back("4"); + consOpts.push_back("8"); + consOpts.push_back("16"); + consOpts.push_back("32"); + consOpts.push_back("64"); + consOpts.push_back("128"); + consOpts.push_back("256"); + consArg.options = consOpts; + args.push_back(consArg); + + return args; +} + +void ModemQAM::writeSetting(std::string setting, std::string value) { + if (setting == "cons") { + int newCons = std::stoi(value); + updateDemodulatorCons(newCons); + } +} + +std::string ModemQAM::readSetting(std::string setting) { + if (setting == "cons") { + return std::to_string(cons); + } + return ""; +} + void ModemQAM::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - - switch (demodulatorCons.load()) { - case 2: - demodQAM = demodQAM4; - updateDemodulatorCons(4); - break; - case 4: - demodQAM = demodQAM4; - updateDemodulatorCons(4); - break; - case 8: - demodQAM = demodQAM8; - updateDemodulatorCons(8); - break; - case 16: - demodQAM = demodQAM16; - updateDemodulatorCons(16); - break; - case 32: - demodQAM = demodQAM32; - updateDemodulatorCons(32); - break; - case 64: - demodQAM = demodQAM64; - updateDemodulatorCons(64); - break; - case 128: - demodQAM = demodQAM128; - updateDemodulatorCons(128); - break; - case 256: - demodQAM = demodQAM256; - updateDemodulatorCons(256); - break; - default: - demodQAM = demodQAM4; - break; - } + this->cons = cons; + switch (cons) { + case 4: + demodQAM = demodQAM4; + break; + case 8: + demodQAM = demodQAM8; + break; + case 16: + demodQAM = demodQAM16; + break; + case 32: + demodQAM = demodQAM32; + break; + case 64: + demodQAM = demodQAM64; + break; + case 128: + demodQAM = demodQAM128; + break; + case 256: + demodQAM = demodQAM256; + break; } } diff --git a/src/modules/modem/digital/ModemQAM.h b/src/modules/modem/digital/ModemQAM.h index 973f9ff..3be6936 100644 --- a/src/modules/modem/digital/ModemQAM.h +++ b/src/modules/modem/digital/ModemQAM.h @@ -5,12 +5,20 @@ class ModemQAM : public ModemDigital { public: ModemQAM(); ~ModemQAM(); + std::string getName(); + Modem *factory(); + + ModemArgInfoList getSettings(); + void writeSetting(std::string setting, std::string value); + std::string readSetting(std::string setting); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: + int cons; modem demodQAM; modem demodQAM4; modem demodQAM8; diff --git a/src/modules/modem/digital/ModemQPSK.cpp b/src/modules/modem/digital/ModemQPSK.cpp index 309cadb..98dfb7f 100644 --- a/src/modules/modem/digital/ModemQPSK.cpp +++ b/src/modules/modem/digital/ModemQPSK.cpp @@ -16,12 +16,6 @@ std::string ModemQPSK::getName() { return "QPSK"; } -void ModemQPSK::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - } -} - void ModemQPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { ModemKitDigital *dkit = (ModemKitDigital *)kit; digitalStart(dkit, demodQPSK, input); diff --git a/src/modules/modem/digital/ModemQPSK.h b/src/modules/modem/digital/ModemQPSK.h index 4d26e49..9de5d4e 100644 --- a/src/modules/modem/digital/ModemQPSK.h +++ b/src/modules/modem/digital/ModemQPSK.h @@ -5,9 +5,11 @@ class ModemQPSK : public ModemDigital { public: ModemQPSK(); ~ModemQPSK(); + std::string getName(); + Modem *factory(); - void updateDemodulatorCons(int cons); + void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemSQAM.cpp b/src/modules/modem/digital/ModemSQAM.cpp index a4abd39..fbb8f47 100644 --- a/src/modules/modem/digital/ModemSQAM.cpp +++ b/src/modules/modem/digital/ModemSQAM.cpp @@ -3,9 +3,8 @@ ModemSQAM::ModemSQAM() { demodSQAM32 = modem_create(LIQUID_MODEM_SQAM32); demodSQAM128 = modem_create(LIQUID_MODEM_SQAM128); - demodulatorCons.store(32); - currentDemodCons.store(0); - updateDemodulatorCons(32); + demodSQAM = demodSQAM32; + cons = 32; } Modem *ModemSQAM::factory() { @@ -21,47 +20,47 @@ std::string ModemSQAM::getName() { return "SQAM"; } +ModemArgInfoList ModemSQAM::getSettings() { + ModemArgInfoList args; + + ModemArgInfo consArg; + consArg.key = "cons"; + consArg.name = "Constellation"; + consArg.description = "Modem Constellation Pattern"; + consArg.value = std::to_string(cons); + consArg.type = ModemArgInfo::STRING; + std::vector consOpts; + consOpts.push_back("32"); + consOpts.push_back("128"); + consArg.options = consOpts; + args.push_back(consArg); + + return args; +} + +void ModemSQAM::writeSetting(std::string setting, std::string value) { + if (setting == "cons") { + int newCons = std::stoi(value); + updateDemodulatorCons(newCons); + } +} + +std::string ModemSQAM::readSetting(std::string setting) { + if (setting == "cons") { + return std::to_string(cons); + } + return ""; +} + void ModemSQAM::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - - switch (demodulatorCons.load()) { - case 2: - demodSQAM = demodSQAM32; - updateDemodulatorCons(32); - break; - case 4: - demodSQAM = demodSQAM32; - updateDemodulatorCons(32); - break; - case 8: - demodSQAM = demodSQAM32; - updateDemodulatorCons(32); - break; - case 16: - demodSQAM = demodSQAM32; - updateDemodulatorCons(32); - break; - case 32: - demodSQAM = demodSQAM32; - updateDemodulatorCons(32); - break; - case 64: - demodSQAM = demodSQAM32; - updateDemodulatorCons(32); - break; - case 128: - demodSQAM = demodSQAM128; - updateDemodulatorCons(128); - break; - case 256: - demodSQAM = demodSQAM128; - updateDemodulatorCons(128); - break; - default: - demodSQAM = demodSQAM32; - break; - } + this->cons = cons; + switch (cons) { + case 32: + demodSQAM = demodSQAM32; + break; + case 128: + demodSQAM = demodSQAM128; + break; } } diff --git a/src/modules/modem/digital/ModemSQAM.h b/src/modules/modem/digital/ModemSQAM.h index e26b497..cb5b3af 100644 --- a/src/modules/modem/digital/ModemSQAM.h +++ b/src/modules/modem/digital/ModemSQAM.h @@ -5,12 +5,20 @@ class ModemSQAM : public ModemDigital { public: ModemSQAM(); ~ModemSQAM(); + std::string getName(); + Modem *factory(); + + ModemArgInfoList getSettings(); + void writeSetting(std::string setting, std::string value); + std::string readSetting(std::string setting); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: + int cons; modem demodSQAM; modem demodSQAM32; modem demodSQAM128; diff --git a/src/modules/modem/digital/ModemST.cpp b/src/modules/modem/digital/ModemST.cpp index b5d8e3f..7adbe71 100644 --- a/src/modules/modem/digital/ModemST.cpp +++ b/src/modules/modem/digital/ModemST.cpp @@ -16,12 +16,6 @@ ModemST::~ModemST() { modem_destroy(demodST); } -void ModemST::updateDemodulatorCons(int cons) { - if (currentDemodCons.load() != cons) { - currentDemodCons = cons; - } -} - void ModemST::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { ModemKitDigital *dkit = (ModemKitDigital *)kit; digitalStart(dkit, demodST, input); diff --git a/src/modules/modem/digital/ModemST.h b/src/modules/modem/digital/ModemST.h index ac9ee10..2e92ae2 100644 --- a/src/modules/modem/digital/ModemST.h +++ b/src/modules/modem/digital/ModemST.h @@ -5,9 +5,11 @@ class ModemST : public ModemDigital { public: ModemST(); ~ModemST(); + std::string getName(); + Modem *factory(); - void updateDemodulatorCons(int cons); + void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/visual/PrimaryGLContext.cpp b/src/visual/PrimaryGLContext.cpp index 7aea40a..612e6bf 100644 --- a/src/visual/PrimaryGLContext.cpp +++ b/src/visual/PrimaryGLContext.cpp @@ -230,9 +230,9 @@ void PrimaryGLContext::DrawDemod(DemodulatorInstance *demod, RGBA4f color, long } // advanced demodulators start here - if (demod->getDemodulatorCons() > 0) { - demodStr = demodStr + std::to_string(demod->getDemodulatorCons()); - } +// if (demod->getDemodulatorCons() > 0) { +// demodStr = demodStr + std::to_string(demod->getDemodulatorCons()); +// } // add lock to string if we have an lock if(demod->getDemodulatorLock()) {