CubicSDR/src/modules/modem/ModemDigital.cpp

72 lines
1.8 KiB
C++
Raw Normal View History

#include "ModemDigital.h"
ModemDigital::ModemDigital() {
demodulatorCons.store(2);
2015-11-18 22:57:31 -05:00
// Reset demodulator Constellations & Lock
updateDemodulatorCons(0);
currentDemodLock.store(false);
}
ModemKit *ModemDigital::buildKit(long long sampleRate, int audioSampleRate) {
ModemKitDigital *dkit = new ModemKitDigital;
dkit->sampleRate = sampleRate;
dkit->audioSampleRate = audioSampleRate;
return dkit;
}
void ModemDigital::disposeKit(ModemKit *kit) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
delete dkit;
}
void ModemDigital::setDemodulatorLock(bool demod_lock_in) {
2015-11-18 22:57:31 -05:00
currentDemodLock.store(demod_lock_in);
}
int ModemDigital::getDemodulatorLock() {
2015-11-18 22:57:31 -05:00
return currentDemodLock.load();
}
void ModemDigital::setDemodulatorCons(int demod_cons_in) {
demodulatorCons.store(demod_cons_in);
}
int ModemDigital::getDemodulatorCons() {
2015-11-18 22:57:31 -05:00
return currentDemodCons.load();
}
2015-11-18 22:57:31 -05:00
void ModemDigital::updateDemodulatorLock(modem mod, float sensitivity) {
modem_get_demodulator_evm(mod) <= sensitivity ? setDemodulatorLock(true) : setDemodulatorLock(false);
}
2015-11-18 22:57:31 -05:00
void ModemDigital::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
currentDemodCons = cons;
}
}
2015-11-18 22:57:31 -05:00
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);
}
}
2015-11-18 22:57:31 -05:00
void ModemDigital::digitalFinish(ModemKitDigital *kit, modem mod) {
demodOutputDataDigital.empty();
}