86 lines
2.0 KiB
C++
86 lines
2.0 KiB
C++
// Copyright (c) Charles J. Cliffe
|
|
// SPDX-License-Identifier: GPL-2.0+
|
|
|
|
#include "ModemDigital.h"
|
|
|
|
|
|
ModemDigitalOutput::ModemDigitalOutput() {
|
|
|
|
}
|
|
|
|
ModemDigital::ModemDigital() : Modem() {
|
|
#if ENABLE_DIGITAL_LAB
|
|
digitalOut = nullptr;
|
|
#endif
|
|
}
|
|
|
|
ModemDigitalOutput::~ModemDigitalOutput() {
|
|
|
|
}
|
|
|
|
std::string ModemDigital::getType() {
|
|
return "digital";
|
|
}
|
|
|
|
int ModemDigital::checkSampleRate(long long sampleRate, int /* audioSampleRate */) {
|
|
if (sampleRate < MIN_BANDWIDTH) {
|
|
return MIN_BANDWIDTH;
|
|
}
|
|
return sampleRate;
|
|
}
|
|
|
|
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) {
|
|
currentDemodLock.store(demod_lock_in);
|
|
}
|
|
|
|
int ModemDigital::getDemodulatorLock() {
|
|
return currentDemodLock.load();
|
|
}
|
|
|
|
void ModemDigital::updateDemodulatorLock(modem mod, float sensitivity) {
|
|
setDemodulatorLock(modem_get_demodulator_evm(mod) <= sensitivity);
|
|
}
|
|
|
|
void ModemDigital::digitalStart(ModemKitDigital * /* kit */, modem /* mod */, ModemIQData *input) {
|
|
size_t bufSize = input->data.size();
|
|
|
|
if (demodOutputDataDigital.size() != bufSize) {
|
|
if (demodOutputDataDigital.capacity() < bufSize) {
|
|
demodOutputDataDigital.reserve(bufSize);
|
|
}
|
|
demodOutputDataDigital.resize(bufSize);
|
|
}
|
|
}
|
|
|
|
void ModemDigital::digitalFinish(ModemKitDigital * /* kit */, modem /* mod */) {
|
|
#if ENABLE_DIGITAL_LAB
|
|
if (digitalOut && outStream.str().length()) {
|
|
digitalOut->write(outStream.str());
|
|
outStream.str("");
|
|
} else {
|
|
outStream.str("");
|
|
}
|
|
#endif
|
|
}
|
|
|
|
#if ENABLE_DIGITAL_LAB
|
|
void ModemDigital::setOutput(ModemDigitalOutput *modemDigitalOutput) {
|
|
digitalOut = modemDigitalOutput;
|
|
}
|
|
#endif
|