2015-11-16 23:49:54 -05:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "liquid/liquid.h"
|
|
|
|
#include "IOThread.h"
|
|
|
|
#include "AudioThread.h"
|
|
|
|
|
|
|
|
class ModemKit {
|
|
|
|
public:
|
|
|
|
ModemKit() : sampleRate(0), audioSampleRate(0) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
long long sampleRate;
|
|
|
|
int audioSampleRate;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class ModemIQData: public ReferenceCounter {
|
|
|
|
public:
|
|
|
|
std::vector<liquid_float_complex> data;
|
|
|
|
long long sampleRate;
|
|
|
|
|
|
|
|
ModemIQData() : sampleRate(0) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
~ModemIQData() {
|
|
|
|
std::lock_guard < std::mutex > lock(m_mutex);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
class Modem;
|
2015-11-17 00:21:17 -05:00
|
|
|
typedef std::map<std::string,Modem *> ModemFactoryList;
|
2015-11-16 23:49:54 -05:00
|
|
|
|
|
|
|
class Modem {
|
|
|
|
public:
|
2015-11-17 00:21:17 -05:00
|
|
|
static void addModemFactory(std::string modemName, Modem *factorySingle);
|
2015-11-16 23:49:54 -05:00
|
|
|
static ModemFactoryList getFactories();
|
2015-11-17 20:20:12 -05:00
|
|
|
static Modem *makeModem(std::string modemType);
|
2015-11-16 23:49:54 -05:00
|
|
|
|
2015-11-17 20:20:12 -05:00
|
|
|
virtual Modem *factory() = 0;
|
2015-11-16 23:49:54 -05:00
|
|
|
|
2015-11-17 21:22:51 -05:00
|
|
|
Modem();
|
|
|
|
virtual ~Modem();
|
|
|
|
|
2015-11-17 20:20:12 -05:00
|
|
|
virtual ModemKit *buildKit(long long sampleRate, int audioSampleRate) = 0;
|
|
|
|
virtual void disposeKit(ModemKit *kit) = 0;
|
|
|
|
virtual void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) = 0;
|
2015-11-16 23:49:54 -05:00
|
|
|
private:
|
|
|
|
static ModemFactoryList modemFactories;
|
|
|
|
};
|