mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2026-06-05 07:24:47 -04:00
Make modemFactories function ref vs. instances which carry other dsp kit stuff
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
|
||||
ModemFactoryList Modem::modemFactories;
|
||||
DefaultRatesList Modem::modemDefaultRates;
|
||||
|
||||
//! Create an empty range (0.0, 0.0)
|
||||
ModemRange::ModemRange(void) {
|
||||
@@ -38,8 +39,9 @@ Modem::~Modem() {
|
||||
|
||||
}
|
||||
|
||||
void Modem::addModemFactory(Modem *factorySingle) {
|
||||
modemFactories[factorySingle->getName()] = factorySingle;
|
||||
void Modem::addModemFactory(ModemFactoryFn factoryFunc, std::string modemName, int defaultRate) {
|
||||
modemFactories[modemName] = factoryFunc;
|
||||
modemDefaultRates[modemName] = defaultRate;
|
||||
}
|
||||
|
||||
ModemFactoryList Modem::getFactories() {
|
||||
@@ -48,15 +50,15 @@ ModemFactoryList Modem::getFactories() {
|
||||
|
||||
Modem *Modem::makeModem(std::string modemName) {
|
||||
if (modemFactories.find(modemName) != modemFactories.end()) {
|
||||
return modemFactories[modemName]->factory();
|
||||
return (Modem *)modemFactories[modemName]();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int Modem::getModemDefaultSampleRate(std::string modemName) {
|
||||
if (modemFactories.find(modemName) != modemFactories.end()) {
|
||||
return modemFactories[modemName]->getDefaultSampleRate();
|
||||
if (modemDefaultRates.find(modemName) != modemDefaultRates.end()) {
|
||||
return modemDefaultRates[modemName];
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -108,14 +108,21 @@ public:
|
||||
|
||||
typedef std::vector<ModemArgInfo> ModemArgInfoList;
|
||||
|
||||
class Modem;
|
||||
typedef std::map<std::string,Modem *> ModemFactoryList;
|
||||
class ModemBase {
|
||||
|
||||
};
|
||||
|
||||
typedef ModemBase *(*ModemFactoryFn)();
|
||||
|
||||
|
||||
typedef std::map<std::string, ModemFactoryFn> ModemFactoryList;
|
||||
typedef std::map<std::string, int> DefaultRatesList;
|
||||
|
||||
typedef std::map<std::string, std::string> ModemSettings;
|
||||
|
||||
class Modem {
|
||||
class Modem : public ModemBase {
|
||||
public:
|
||||
static void addModemFactory(Modem *factorySingle);
|
||||
static void addModemFactory(ModemFactoryFn, std::string modemName, int defaultRate);
|
||||
static ModemFactoryList getFactories();
|
||||
|
||||
static Modem *makeModem(std::string modemName);
|
||||
@@ -124,8 +131,6 @@ public:
|
||||
virtual std::string getType() = 0;
|
||||
virtual std::string getName() = 0;
|
||||
|
||||
virtual Modem *factory() = 0;
|
||||
|
||||
Modem();
|
||||
virtual ~Modem();
|
||||
|
||||
@@ -149,5 +154,6 @@ public:
|
||||
|
||||
private:
|
||||
static ModemFactoryList modemFactories;
|
||||
static DefaultRatesList modemDefaultRates;
|
||||
std::atomic_bool refreshKit;
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@ ModemAM::~ModemAM() {
|
||||
ampmodem_destroy(demodAM);
|
||||
}
|
||||
|
||||
Modem *ModemAM::factory() {
|
||||
ModemBase *ModemAM::factory() {
|
||||
return new ModemAM;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int getDefaultSampleRate();
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ ModemDSB::~ModemDSB() {
|
||||
ampmodem_destroy(demodAM_DSB);
|
||||
}
|
||||
|
||||
Modem *ModemDSB::factory() {
|
||||
ModemBase *ModemDSB::factory() {
|
||||
return new ModemDSB;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int getDefaultSampleRate();
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ ModemFM::~ModemFM() {
|
||||
freqdem_destroy(demodFM);
|
||||
}
|
||||
|
||||
Modem *ModemFM::factory() {
|
||||
ModemBase *ModemFM::factory() {
|
||||
return new ModemFM;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int getDefaultSampleRate();
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ std::string ModemFMStereo::getName() {
|
||||
return "FMS";
|
||||
}
|
||||
|
||||
Modem *ModemFMStereo::factory() {
|
||||
ModemBase *ModemFMStereo::factory() {
|
||||
return new ModemFMStereo;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
std::string getType();
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int checkSampleRate(long long sampleRate, int audioSampleRate);
|
||||
int getDefaultSampleRate();
|
||||
|
||||
@@ -12,7 +12,7 @@ std::string ModemIQ::getName() {
|
||||
return "I/Q";
|
||||
}
|
||||
|
||||
Modem *ModemIQ::factory() {
|
||||
ModemBase *ModemIQ::factory() {
|
||||
return new ModemIQ;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
std::string getType();
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int checkSampleRate(long long sampleRate, int audioSampleRate);
|
||||
int getDefaultSampleRate();
|
||||
|
||||
@@ -13,7 +13,7 @@ ModemLSB::ModemLSB() : ModemAnalog() {
|
||||
c2rFilt = firhilbf_create(5, 90.0);
|
||||
}
|
||||
|
||||
Modem *ModemLSB::factory() {
|
||||
ModemBase *ModemLSB::factory() {
|
||||
return new ModemLSB;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int checkSampleRate(long long sampleRate, int audioSampleRate);
|
||||
int getDefaultSampleRate();
|
||||
|
||||
@@ -8,7 +8,7 @@ ModemNBFM::~ModemNBFM() {
|
||||
freqdem_destroy(demodFM);
|
||||
}
|
||||
|
||||
Modem *ModemNBFM::factory() {
|
||||
ModemBase *ModemNBFM::factory() {
|
||||
return new ModemNBFM;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int getDefaultSampleRate();
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ ModemUSB::ModemUSB() : ModemAnalog() {
|
||||
c2rFilt = firhilbf_create(5, 90.0);
|
||||
}
|
||||
|
||||
Modem *ModemUSB::factory() {
|
||||
ModemBase *ModemUSB::factory() {
|
||||
return new ModemUSB;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int checkSampleRate(long long sampleRate, int audioSampleRate);
|
||||
int getDefaultSampleRate();
|
||||
|
||||
@@ -12,7 +12,7 @@ ModemAPSK::ModemAPSK() : ModemDigital() {
|
||||
cons = 4;
|
||||
}
|
||||
|
||||
Modem *ModemAPSK::factory() {
|
||||
ModemBase *ModemAPSK::factory() {
|
||||
return new ModemAPSK;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
ModemArgInfoList getSettings();
|
||||
void writeSetting(std::string setting, std::string value);
|
||||
|
||||
@@ -13,7 +13,7 @@ ModemASK::ModemASK() : ModemDigital() {
|
||||
cons = 2;
|
||||
}
|
||||
|
||||
Modem *ModemASK::factory() {
|
||||
ModemBase *ModemASK::factory() {
|
||||
return new ModemASK;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
ModemArgInfoList getSettings();
|
||||
void writeSetting(std::string setting, std::string value);
|
||||
|
||||
@@ -4,7 +4,7 @@ ModemBPSK::ModemBPSK() : ModemDigital() {
|
||||
demodBPSK = modem_create(LIQUID_MODEM_BPSK);
|
||||
}
|
||||
|
||||
Modem *ModemBPSK::factory() {
|
||||
ModemBase *ModemBPSK::factory() {
|
||||
return new ModemBPSK;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ ModemDPSK::ModemDPSK() : ModemDigital() {
|
||||
cons = 2;
|
||||
}
|
||||
|
||||
Modem *ModemDPSK::factory() {
|
||||
ModemBase *ModemDPSK::factory() {
|
||||
return new ModemDPSK;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
ModemArgInfoList getSettings();
|
||||
void writeSetting(std::string setting, std::string value);
|
||||
|
||||
@@ -9,7 +9,7 @@ ModemFSK::ModemFSK() : ModemDigital() {
|
||||
outStream << std::hex;
|
||||
}
|
||||
|
||||
Modem *ModemFSK::factory() {
|
||||
ModemBase *ModemFSK::factory() {
|
||||
return new ModemFSK;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int checkSampleRate(long long sampleRate, int audioSampleRate);
|
||||
int getDefaultSampleRate();
|
||||
|
||||
@@ -16,7 +16,7 @@ std::string ModemGMSK::getName() {
|
||||
return "GMSK";
|
||||
}
|
||||
|
||||
Modem *ModemGMSK::factory() {
|
||||
ModemBase *ModemGMSK::factory() {
|
||||
return new ModemGMSK;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int checkSampleRate(long long sampleRate, int audioSampleRate);
|
||||
int getDefaultSampleRate();
|
||||
|
||||
@@ -12,7 +12,7 @@ std::string ModemOOK::getName() {
|
||||
return "OOK";
|
||||
}
|
||||
|
||||
Modem *ModemOOK::factory() {
|
||||
ModemBase *ModemOOK::factory() {
|
||||
return new ModemOOK;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
int checkSampleRate(long long sampleRate, int audioSampleRate);
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ ModemPSK::ModemPSK() : ModemDigital() {
|
||||
cons = 2;
|
||||
}
|
||||
|
||||
Modem *ModemPSK::factory() {
|
||||
ModemBase *ModemPSK::factory() {
|
||||
return new ModemPSK;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
ModemArgInfoList getSettings();
|
||||
void writeSetting(std::string setting, std::string value);
|
||||
|
||||
@@ -12,7 +12,7 @@ ModemQAM::ModemQAM() : ModemDigital() {
|
||||
cons = 4;
|
||||
}
|
||||
|
||||
Modem *ModemQAM::factory() {
|
||||
ModemBase *ModemQAM::factory() {
|
||||
return new ModemQAM;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
ModemArgInfoList getSettings();
|
||||
void writeSetting(std::string setting, std::string value);
|
||||
|
||||
@@ -4,7 +4,7 @@ ModemQPSK::ModemQPSK() : ModemDigital() {
|
||||
demodQPSK = modem_create(LIQUID_MODEM_QPSK);
|
||||
}
|
||||
|
||||
Modem *ModemQPSK::factory() {
|
||||
ModemBase *ModemQPSK::factory() {
|
||||
return new ModemQPSK;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ ModemSQAM::ModemSQAM() : ModemDigital() {
|
||||
cons = 32;
|
||||
}
|
||||
|
||||
Modem *ModemSQAM::factory() {
|
||||
ModemBase *ModemSQAM::factory() {
|
||||
return new ModemSQAM;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
ModemArgInfoList getSettings();
|
||||
void writeSetting(std::string setting, std::string value);
|
||||
|
||||
@@ -4,7 +4,7 @@ ModemST::ModemST() : ModemDigital() {
|
||||
demodST = modem_create(LIQUID_MODEM_V29);
|
||||
}
|
||||
|
||||
Modem *ModemST::factory() {
|
||||
ModemBase *ModemST::factory() {
|
||||
return new ModemST;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public:
|
||||
|
||||
std::string getName();
|
||||
|
||||
Modem *factory();
|
||||
static ModemBase *factory();
|
||||
|
||||
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user