From f43abdddaf53e7776271dd049c6468203b481431 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Wed, 18 Nov 2015 22:57:31 -0500 Subject: [PATCH] updateDemodulatorCons() cleanup --- src/modules/modem/ModemDigital.cpp | 53 +++++++------- src/modules/modem/ModemDigital.h | 18 ++--- src/modules/modem/digital/ModemAPSK.cpp | 90 ++++++++++++++---------- src/modules/modem/digital/ModemAPSK.h | 1 + src/modules/modem/digital/ModemASK.cpp | 15 ++++ src/modules/modem/digital/ModemASK.h | 1 + src/modules/modem/digital/ModemBPSK.cpp | 12 +++- src/modules/modem/digital/ModemBPSK.h | 1 + src/modules/modem/digital/ModemDPSK.cpp | 93 ++++++++++++++----------- src/modules/modem/digital/ModemDPSK.h | 1 + src/modules/modem/digital/ModemOOK.cpp | 13 +++- src/modules/modem/digital/ModemOOK.h | 1 + src/modules/modem/digital/ModemPSK.cpp | 91 +++++++++++++----------- src/modules/modem/digital/ModemPSK.h | 1 + src/modules/modem/digital/ModemQAM.cpp | 93 ++++++++++++++----------- src/modules/modem/digital/ModemQAM.h | 1 + src/modules/modem/digital/ModemQPSK.cpp | 12 +++- src/modules/modem/digital/ModemQPSK.h | 1 + src/modules/modem/digital/ModemSQAM.cpp | 91 +++++++++++++----------- src/modules/modem/digital/ModemSQAM.h | 1 + src/modules/modem/digital/ModemST.cpp | 12 +++- src/modules/modem/digital/ModemST.h | 1 + 22 files changed, 368 insertions(+), 235 deletions(-) diff --git a/src/modules/modem/ModemDigital.cpp b/src/modules/modem/ModemDigital.cpp index 9a73695..f24baa4 100644 --- a/src/modules/modem/ModemDigital.cpp +++ b/src/modules/modem/ModemDigital.cpp @@ -2,8 +2,9 @@ ModemDigital::ModemDigital() { demodulatorCons.store(2); - currentDemodCons = 0; - currentDemodLock = false; + // Reset demodulator Constellations & Lock + updateDemodulatorCons(0); + currentDemodLock.store(false); } ModemKit *ModemDigital::buildKit(long long sampleRate, int audioSampleRate) { @@ -23,11 +24,11 @@ void ModemDigital::disposeKit(ModemKit *kit) { void ModemDigital::setDemodulatorLock(bool demod_lock_in) { - demod_lock_in ? currentDemodLock = true : currentDemodLock = false; + currentDemodLock.store(demod_lock_in); } int ModemDigital::getDemodulatorLock() { - return currentDemodLock; + return currentDemodLock.load(); } void ModemDigital::setDemodulatorCons(int demod_cons_in) { @@ -35,36 +36,36 @@ void ModemDigital::setDemodulatorCons(int demod_cons_in) { } int ModemDigital::getDemodulatorCons() { - return currentDemodCons; + return currentDemodCons.load(); } -void ModemDigital::updateDemodulatorLock(modem demod, float sensitivity) { - modem_get_demodulator_evm(demod) <= sensitivity ? setDemodulatorLock(true) : setDemodulatorLock(false); +void ModemDigital::updateDemodulatorLock(modem mod, float sensitivity) { + modem_get_demodulator_evm(mod) <= sensitivity ? setDemodulatorLock(true) : setDemodulatorLock(false); } -void ModemDigital::updateDemodulatorCons(int Cons) { - if (currentDemodCons != Cons) { - currentDemodCons = Cons; +void ModemDigital::updateDemodulatorCons(int cons) { + if (currentDemodCons.load() != cons) { + currentDemodCons = cons; } } - -// Demodulate -/* - // Reset demodulator Constellations & Lock - // updateDemodulatorCons(0); - -{ - switch (demodulatorType.load()) { - // advanced demodulators - - } +void ModemDigital::digitalStart(ModemKitDigital *kit, modem mod, ModemIQData *input) { + int bufSize = input->data.size(); + + if (demodOutputDataDigital.size() != bufSize) { + if (demodOutputDataDigital.capacity() < bufSize) { + demodOutputDataDigital.reserve(bufSize); + } + demodOutputDataDigital.resize(bufSize); + } + + if (demodulatorCons.load() != currentDemodCons.load()) { + updateDemodulatorCons(demodulatorCons.load()); + currentDemodLock.store(false); + } } - +void ModemDigital::digitalFinish(ModemKitDigital *kit, modem mod) { + demodOutputDataDigital.empty(); } - // demodOutputDataDigital.empty(); - - - */ diff --git a/src/modules/modem/ModemDigital.h b/src/modules/modem/ModemDigital.h index 2c0809f..de427cc 100644 --- a/src/modules/modem/ModemDigital.h +++ b/src/modules/modem/ModemDigital.h @@ -14,21 +14,23 @@ public: ModemDigital(); ModemKit *buildKit(long long sampleRate, int audioSampleRate); void disposeKit(ModemKit *kit); + void digitalStart(ModemKitDigital *kit, modem mod, ModemIQData *input); + void digitalFinish(ModemKitDigital *kit, modem mod); - void setDemodulatorLock(bool demod_lock_in); - int getDemodulatorLock(); + virtual void setDemodulatorLock(bool demod_lock_in); + virtual int getDemodulatorLock(); - void setDemodulatorCons(int demod_cons_in); - int getDemodulatorCons(); + virtual void setDemodulatorCons(int demod_cons_in); + virtual int getDemodulatorCons(); - void updateDemodulatorCons(int Cons); - void updateDemodulatorLock(modem demod, float sensitivity); + virtual void updateDemodulatorCons(int cons); + virtual void updateDemodulatorLock(modem mod, float sensitivity); protected: std::vector demodOutputDataDigital; std::atomic_int demodulatorCons; - bool currentDemodLock; - int currentDemodCons; + std::atomic_bool currentDemodLock; + std::atomic_int currentDemodCons; // std::vector demodOutputDataDigitalTest; // std::vector demodOutputSoftbits; diff --git a/src/modules/modem/digital/ModemAPSK.cpp b/src/modules/modem/digital/ModemAPSK.cpp index 9f27f98..65e2189 100644 --- a/src/modules/modem/digital/ModemAPSK.cpp +++ b/src/modules/modem/digital/ModemAPSK.cpp @@ -8,7 +8,9 @@ ModemAPSK::ModemAPSK() { demodAPSK64 = modem_create(LIQUID_MODEM_APSK64); demodAPSK128 = modem_create(LIQUID_MODEM_APSK128); demodAPSK256 = modem_create(LIQUID_MODEM_APSK256); - demodAPSK = demodAPSK4; + demodulatorCons.store(4); + currentDemodCons.store(0); + updateDemodulatorCons(4); } Modem *ModemAPSK::factory() { @@ -25,47 +27,59 @@ ModemAPSK::~ModemAPSK() { modem_destroy(demodAPSK256); } -void ModemAPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { - 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; +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; + } } +} + +void ModemAPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { + ModemKitDigital *dkit = (ModemKitDigital *)kit; + + digitalStart(dkit, demodAPSK, input); for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodAPSK, input->data[i], &demodOutputDataDigital[i]); } + updateDemodulatorLock(demodAPSK, 0.005f); + + digitalFinish(dkit, demodAPSK); } diff --git a/src/modules/modem/digital/ModemAPSK.h b/src/modules/modem/digital/ModemAPSK.h index 475b043..003bcfe 100644 --- a/src/modules/modem/digital/ModemAPSK.h +++ b/src/modules/modem/digital/ModemAPSK.h @@ -6,6 +6,7 @@ public: ModemAPSK(); ~ModemAPSK(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemASK.cpp b/src/modules/modem/digital/ModemASK.cpp index 2119406..2888f6e 100644 --- a/src/modules/modem/digital/ModemASK.cpp +++ b/src/modules/modem/digital/ModemASK.cpp @@ -10,6 +10,9 @@ ModemASK::ModemASK() { demodASK128 = modem_create(LIQUID_MODEM_ASK128); demodASK256 = modem_create(LIQUID_MODEM_ASK256); demodASK = demodASK2; + demodulatorCons.store(2); + currentDemodCons.store(0); + updateDemodulatorCons(2); } Modem *ModemASK::factory() { @@ -26,7 +29,15 @@ ModemASK::~ModemASK() { modem_destroy(demodASK256); } +void ModemASK::updateDemodulatorCons(int cons) { + if (currentDemodCons.load() != cons) { + currentDemodCons = cons; + + } +} + void ModemASK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { + ModemKitDigital *dkit = (ModemKitDigital *)kit; switch (demodulatorCons.load()) { case 2: @@ -66,8 +77,12 @@ void ModemASK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *a break; } + digitalStart(dkit, demodASK, input); + for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodASK, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodASK, 0.005f); + + digitalFinish(dkit, demodASK); } \ No newline at end of file diff --git a/src/modules/modem/digital/ModemASK.h b/src/modules/modem/digital/ModemASK.h index 090d2c3..a32fc6e 100644 --- a/src/modules/modem/digital/ModemASK.h +++ b/src/modules/modem/digital/ModemASK.h @@ -6,6 +6,7 @@ public: ModemASK(); ~ModemASK(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemBPSK.cpp b/src/modules/modem/digital/ModemBPSK.cpp index 51dea63..d7339d3 100644 --- a/src/modules/modem/digital/ModemBPSK.cpp +++ b/src/modules/modem/digital/ModemBPSK.cpp @@ -2,7 +2,6 @@ ModemBPSK::ModemBPSK() { demodBPSK = modem_create(LIQUID_MODEM_BPSK); - } Modem *ModemBPSK::factory() { @@ -13,9 +12,20 @@ ModemBPSK::~ModemBPSK() { modem_destroy(demodBPSK); } +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); + for (int i = 0, bufSize=input->data.size(); i < bufSize; i++) { modem_demodulate(demodBPSK, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodBPSK, 0.005f); + + digitalFinish(dkit, demodBPSK); } \ No newline at end of file diff --git a/src/modules/modem/digital/ModemBPSK.h b/src/modules/modem/digital/ModemBPSK.h index a454170..be28c16 100644 --- a/src/modules/modem/digital/ModemBPSK.h +++ b/src/modules/modem/digital/ModemBPSK.h @@ -6,6 +6,7 @@ public: ModemBPSK(); ~ModemBPSK(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemDPSK.cpp b/src/modules/modem/digital/ModemDPSK.cpp index 7a12b3e..07e49f5 100644 --- a/src/modules/modem/digital/ModemDPSK.cpp +++ b/src/modules/modem/digital/ModemDPSK.cpp @@ -9,7 +9,9 @@ ModemDPSK::ModemDPSK() { demodDPSK64 = modem_create(LIQUID_MODEM_DPSK64); demodDPSK128 = modem_create(LIQUID_MODEM_DPSK128); demodDPSK256 = modem_create(LIQUID_MODEM_DPSK256); - demodDPSK = demodDPSK2; + demodulatorCons.store(2); + currentDemodCons.store(0); + updateDemodulatorCons(2); } Modem *ModemDPSK::factory() { @@ -27,48 +29,59 @@ ModemDPSK::~ModemDPSK() { modem_destroy(demodDPSK256); } -void ModemDPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { - - 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; +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; + } } - +} + +void ModemDPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { + ModemKitDigital *dkit = (ModemKitDigital *)kit; + + digitalStart(dkit, demodDPSK, input); + for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodDPSK, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodDPSK, 0.005f); + + digitalFinish(dkit, demodDPSK); } \ No newline at end of file diff --git a/src/modules/modem/digital/ModemDPSK.h b/src/modules/modem/digital/ModemDPSK.h index a3f188b..00b115d 100644 --- a/src/modules/modem/digital/ModemDPSK.h +++ b/src/modules/modem/digital/ModemDPSK.h @@ -6,6 +6,7 @@ public: ModemDPSK(); ~ModemDPSK(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemOOK.cpp b/src/modules/modem/digital/ModemOOK.cpp index b8a8025..87b6d48 100644 --- a/src/modules/modem/digital/ModemOOK.cpp +++ b/src/modules/modem/digital/ModemOOK.cpp @@ -12,10 +12,21 @@ ModemOOK::~ModemOOK() { modem_destroy(demodOOK); } + +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); + for (int i = 0, bufSize=input->data.size(); i < bufSize; i++) { modem_demodulate(demodOOK, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodOOK, 0.005f); + + digitalFinish(dkit, demodOOK); } \ No newline at end of file diff --git a/src/modules/modem/digital/ModemOOK.h b/src/modules/modem/digital/ModemOOK.h index 9af2837..5bc7731 100644 --- a/src/modules/modem/digital/ModemOOK.h +++ b/src/modules/modem/digital/ModemOOK.h @@ -6,6 +6,7 @@ public: ModemOOK(); ~ModemOOK(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemPSK.cpp b/src/modules/modem/digital/ModemPSK.cpp index 3a75f14..3d391cd 100644 --- a/src/modules/modem/digital/ModemPSK.cpp +++ b/src/modules/modem/digital/ModemPSK.cpp @@ -9,7 +9,9 @@ ModemPSK::ModemPSK() { demodPSK64 = modem_create(LIQUID_MODEM_PSK64); demodPSK128 = modem_create(LIQUID_MODEM_PSK128); demodPSK256 = modem_create(LIQUID_MODEM_PSK256); - demodPSK = demodPSK2; + demodulatorCons.store(2); + currentDemodCons.store(0); + updateDemodulatorCons(2); } Modem *ModemPSK::factory() { @@ -27,48 +29,59 @@ ModemPSK::~ModemPSK() { modem_destroy(demodPSK256); } -void ModemPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { - - 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; +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; + } } +} + +void ModemPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { + ModemKitDigital *dkit = (ModemKitDigital *)kit; + + digitalStart(dkit, demodPSK, input); for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodPSK, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodPSK, 0.005f); + + digitalFinish(dkit, demodPSK); } \ No newline at end of file diff --git a/src/modules/modem/digital/ModemPSK.h b/src/modules/modem/digital/ModemPSK.h index 5cbc68c..d1818fc 100644 --- a/src/modules/modem/digital/ModemPSK.h +++ b/src/modules/modem/digital/ModemPSK.h @@ -6,6 +6,7 @@ public: ModemPSK(); ~ModemPSK(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemQAM.cpp b/src/modules/modem/digital/ModemQAM.cpp index 4790cad..5beea0e 100644 --- a/src/modules/modem/digital/ModemQAM.cpp +++ b/src/modules/modem/digital/ModemQAM.cpp @@ -8,7 +8,9 @@ ModemQAM::ModemQAM() { demodQAM64 = modem_create(LIQUID_MODEM_QAM64); demodQAM128 = modem_create(LIQUID_MODEM_QAM128); demodQAM256 = modem_create(LIQUID_MODEM_QAM256); - demodQAM = demodQAM4; + demodulatorCons.store(4); + currentDemodCons.store(0); + updateDemodulatorCons(4); } Modem *ModemQAM::factory() { @@ -25,49 +27,58 @@ ModemQAM::~ModemQAM() { modem_destroy(demodQAM256); } -void ModemQAM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { - - - 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; +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; + } } - +} + +void ModemQAM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { + ModemKitDigital *dkit = (ModemKitDigital *)kit; + digitalStart(dkit, demodQAM, input); + for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodQAM, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodQAM, 0.5f); + + digitalFinish(dkit, demodQAM); } diff --git a/src/modules/modem/digital/ModemQAM.h b/src/modules/modem/digital/ModemQAM.h index 2971cb8..2780321 100644 --- a/src/modules/modem/digital/ModemQAM.h +++ b/src/modules/modem/digital/ModemQAM.h @@ -6,6 +6,7 @@ public: ModemQAM(); ~ModemQAM(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemQPSK.cpp b/src/modules/modem/digital/ModemQPSK.cpp index f316f04..d47e998 100644 --- a/src/modules/modem/digital/ModemQPSK.cpp +++ b/src/modules/modem/digital/ModemQPSK.cpp @@ -12,10 +12,20 @@ ModemQPSK::~ModemQPSK() { modem_destroy(demodQPSK); } +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); + for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodQPSK, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodQPSK, 0.8f); + + digitalFinish(dkit, demodQPSK); } \ No newline at end of file diff --git a/src/modules/modem/digital/ModemQPSK.h b/src/modules/modem/digital/ModemQPSK.h index dfdd1b0..7fbd56f 100644 --- a/src/modules/modem/digital/ModemQPSK.h +++ b/src/modules/modem/digital/ModemQPSK.h @@ -6,6 +6,7 @@ public: ModemQPSK(); ~ModemQPSK(); 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 3721bea..c8df8c7 100644 --- a/src/modules/modem/digital/ModemSQAM.cpp +++ b/src/modules/modem/digital/ModemSQAM.cpp @@ -3,7 +3,9 @@ ModemSQAM::ModemSQAM() { demodSQAM32 = modem_create(LIQUID_MODEM_SQAM32); demodSQAM128 = modem_create(LIQUID_MODEM_SQAM128); - demodSQAM = demodSQAM32; + demodulatorCons.store(32); + currentDemodCons.store(0); + updateDemodulatorCons(32); } Modem *ModemSQAM::factory() { @@ -15,48 +17,59 @@ ModemSQAM::~ModemSQAM() { modem_destroy(demodSQAM128); } -void ModemSQAM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { - - 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; +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; + } } +} + +void ModemSQAM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { + ModemKitDigital *dkit = (ModemKitDigital *)kit; + + digitalStart(dkit, demodSQAM, input); for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodSQAM, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodSQAM, 0.005f); + + digitalFinish(dkit, demodSQAM); } \ No newline at end of file diff --git a/src/modules/modem/digital/ModemSQAM.h b/src/modules/modem/digital/ModemSQAM.h index b869547..b87c770 100644 --- a/src/modules/modem/digital/ModemSQAM.h +++ b/src/modules/modem/digital/ModemSQAM.h @@ -6,6 +6,7 @@ public: ModemSQAM(); ~ModemSQAM(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: diff --git a/src/modules/modem/digital/ModemST.cpp b/src/modules/modem/digital/ModemST.cpp index 480a215..708063b 100644 --- a/src/modules/modem/digital/ModemST.cpp +++ b/src/modules/modem/digital/ModemST.cpp @@ -12,10 +12,20 @@ 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); + for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodST, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodST, 0.005f); + + digitalFinish(dkit, demodST); } \ No newline at end of file diff --git a/src/modules/modem/digital/ModemST.h b/src/modules/modem/digital/ModemST.h index 380f05f..26cf358 100644 --- a/src/modules/modem/digital/ModemST.h +++ b/src/modules/modem/digital/ModemST.h @@ -6,6 +6,7 @@ public: ModemST(); ~ModemST(); Modem *factory(); + void updateDemodulatorCons(int cons); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); private: