mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2025-09-09 02:07:52 -04:00
Modem can now trigger kit rebuild, add FSK test settings
This commit is contained in:
parent
4a62eae096
commit
4af943791b
@ -108,7 +108,12 @@ void DemodulatorPreThread::run() {
|
|||||||
sampleRateChanged.store(false);
|
sampleRateChanged.store(false);
|
||||||
audioSampleRateChanged.store(false);
|
audioSampleRateChanged.store(false);
|
||||||
demodTypeChanged.store(false);
|
demodTypeChanged.store(false);
|
||||||
} else if (cModemKit && cModem && (bandwidthChanged.load() || sampleRateChanged.load() || audioSampleRateChanged.load()) && (newSampleRate && newAudioSampleRate && newBandwidth)) {
|
}
|
||||||
|
else if (
|
||||||
|
cModemKit && cModem &&
|
||||||
|
(bandwidthChanged.load() || sampleRateChanged.load() || audioSampleRateChanged.load() || cModem->shouldRebuildKit()) &&
|
||||||
|
(newSampleRate && newAudioSampleRate && newBandwidth)
|
||||||
|
) {
|
||||||
DemodulatorWorkerThreadCommand command(DemodulatorWorkerThreadCommand::DEMOD_WORKER_THREAD_CMD_BUILD_FILTERS);
|
DemodulatorWorkerThreadCommand command(DemodulatorWorkerThreadCommand::DEMOD_WORKER_THREAD_CMD_BUILD_FILTERS);
|
||||||
command.frequency = newFrequency;
|
command.frequency = newFrequency;
|
||||||
command.sampleRate = newSampleRate;
|
command.sampleRate = newSampleRate;
|
||||||
|
@ -72,6 +72,9 @@ void DemodulatorWorkerThread::run() {
|
|||||||
} else if (makeDemod) {
|
} else if (makeDemod) {
|
||||||
cModemKit = nullptr;
|
cModemKit = nullptr;
|
||||||
}
|
}
|
||||||
|
if (cModem != nullptr) {
|
||||||
|
cModem->clearRebuildKit();
|
||||||
|
}
|
||||||
|
|
||||||
float As = 60.0f; // stop-band attenuation [dB]
|
float As = 60.0f; // stop-band attenuation [dB]
|
||||||
|
|
||||||
|
@ -55,3 +55,15 @@ Modem::Modem() {
|
|||||||
Modem::~Modem() {
|
Modem::~Modem() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Modem::shouldRebuildKit() {
|
||||||
|
return refreshKit.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Modem::rebuildKit() {
|
||||||
|
refreshKit.store(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Modem::clearRebuildKit() {
|
||||||
|
refreshKit.store(false);
|
||||||
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "IOThread.h"
|
#include "IOThread.h"
|
||||||
#include "AudioThread.h"
|
#include "AudioThread.h"
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
class ModemKit {
|
class ModemKit {
|
||||||
public:
|
public:
|
||||||
@ -108,9 +109,12 @@ class Modem {
|
|||||||
public:
|
public:
|
||||||
static void addModemFactory(Modem *factorySingle);
|
static void addModemFactory(Modem *factorySingle);
|
||||||
static ModemFactoryList getFactories();
|
static ModemFactoryList getFactories();
|
||||||
|
|
||||||
static Modem *makeModem(std::string modemType);
|
static Modem *makeModem(std::string modemType);
|
||||||
|
|
||||||
virtual std::string getType() = 0;
|
virtual std::string getType() = 0;
|
||||||
virtual std::string getName() = 0;
|
virtual std::string getName() = 0;
|
||||||
|
|
||||||
virtual Modem *factory() = 0;
|
virtual Modem *factory() = 0;
|
||||||
|
|
||||||
Modem();
|
Modem();
|
||||||
@ -126,6 +130,12 @@ public:
|
|||||||
virtual void disposeKit(ModemKit *kit) = 0;
|
virtual void disposeKit(ModemKit *kit) = 0;
|
||||||
|
|
||||||
virtual void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) = 0;
|
virtual void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) = 0;
|
||||||
|
|
||||||
|
bool shouldRebuildKit();
|
||||||
|
void rebuildKit();
|
||||||
|
void clearRebuildKit();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ModemFactoryList modemFactories;
|
static ModemFactoryList modemFactories;
|
||||||
|
std::atomic_bool refreshKit;
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "ModemFSK.h"
|
#include "ModemFSK.h"
|
||||||
|
|
||||||
ModemFSK::ModemFSK() {
|
ModemFSK::ModemFSK() {
|
||||||
|
// DMR defaults?
|
||||||
bps = 9600;
|
bps = 9600;
|
||||||
spacing = 7000;
|
spacing = 7000;
|
||||||
}
|
}
|
||||||
@ -12,14 +13,42 @@ Modem *ModemFSK::factory() {
|
|||||||
ModemArgInfoList ModemFSK::getSettings() {
|
ModemArgInfoList ModemFSK::getSettings() {
|
||||||
ModemArgInfoList args;
|
ModemArgInfoList args;
|
||||||
|
|
||||||
|
ModemArgInfo bpsArg;
|
||||||
|
bpsArg.key = "bps";
|
||||||
|
bpsArg.name = "Bits per-symbol";
|
||||||
|
bpsArg.value = std::to_string(bps);
|
||||||
|
bpsArg.description = "FSK modem bits-per-symbol";
|
||||||
|
bpsArg.type = ModemArgInfo::STRING;
|
||||||
|
|
||||||
|
std::vector<std::string> bpsOpts;
|
||||||
|
bpsOpts.push_back("9600");
|
||||||
|
bpsArg.options = bpsOpts;
|
||||||
|
|
||||||
|
args.push_back(bpsArg);
|
||||||
|
|
||||||
|
ModemArgInfo spacingArg;
|
||||||
|
spacingArg.key = "spacing";
|
||||||
|
spacingArg.name = "Symbol Spacing?";
|
||||||
|
spacingArg.description = "Not quite sure yet :-)";
|
||||||
|
spacingArg.type = ModemArgInfo::STRING;
|
||||||
|
spacingArg.value = std::to_string(spacing);
|
||||||
|
|
||||||
|
std::vector<std::string> spacingOpts;
|
||||||
|
spacingOpts.push_back("7000");
|
||||||
|
spacingArg.options = spacingOpts;
|
||||||
|
|
||||||
|
args.push_back(spacingArg);
|
||||||
|
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModemFSK::writeSetting(std::string setting, std::string value) {
|
void ModemFSK::writeSetting(std::string setting, std::string value) {
|
||||||
if (setting == "bps") {
|
if (setting == "bps") {
|
||||||
|
bps = std::stoi(value);
|
||||||
|
rebuildKit();
|
||||||
} else if (setting == "spacing") {
|
} else if (setting == "spacing") {
|
||||||
|
spacing = std::stoi(value);
|
||||||
|
rebuildKit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,8 +64,8 @@ std::string ModemFSK::readSetting(std::string setting) {
|
|||||||
ModemKit *ModemFSK::buildKit(long long sampleRate, int audioSampleRate) {
|
ModemKit *ModemFSK::buildKit(long long sampleRate, int audioSampleRate) {
|
||||||
ModemKitFSK *dkit = new ModemKitFSK;
|
ModemKitFSK *dkit = new ModemKitFSK;
|
||||||
dkit->m = 1;
|
dkit->m = 1;
|
||||||
dkit->k = sampleRate / 9600;
|
dkit->k = sampleRate / bps;
|
||||||
dkit->bandwidth = 7000.0 / sampleRate;
|
dkit->bandwidth = double(spacing) / sampleRate;
|
||||||
|
|
||||||
dkit->demodFSK = fskdem_create(dkit->m, dkit->k, dkit->bandwidth);
|
dkit->demodFSK = fskdem_create(dkit->m, dkit->k, dkit->bandwidth);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user