2014-12-16 18:27:32 -05:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <queue>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include "DemodDefs.h"
|
|
|
|
#include "AudioThread.h"
|
2015-11-17 19:32:47 -05:00
|
|
|
#include "Modem.h"
|
2014-12-16 18:27:32 -05:00
|
|
|
|
2014-12-23 01:59:03 -05:00
|
|
|
typedef ThreadQueue<AudioThreadInput *> DemodulatorThreadOutputQueue;
|
2014-12-16 18:27:32 -05:00
|
|
|
|
2015-08-24 01:31:37 -04:00
|
|
|
#define DEMOD_VIS_SIZE 2048
|
2015-11-17 23:23:23 -05:00
|
|
|
class DemodulatorInstance;
|
2014-12-21 16:08:32 -05:00
|
|
|
|
2015-07-29 20:57:02 -04:00
|
|
|
class DemodulatorThread : public IOThread {
|
2014-12-16 18:27:32 -05:00
|
|
|
public:
|
|
|
|
|
2015-11-17 23:23:23 -05:00
|
|
|
DemodulatorThread(DemodulatorInstance *parent);
|
2014-12-16 21:30:03 -05:00
|
|
|
~DemodulatorThread();
|
2014-12-16 18:27:32 -05:00
|
|
|
|
2015-07-30 00:52:00 -04:00
|
|
|
void onBindOutput(std::string name, ThreadQueueBase *threadQueue);
|
|
|
|
|
2015-07-29 20:57:02 -04:00
|
|
|
void run();
|
2014-12-16 21:30:03 -05:00
|
|
|
void terminate();
|
2015-11-17 21:22:51 -05:00
|
|
|
|
2015-07-19 15:34:06 -04:00
|
|
|
void setAGC(bool state);
|
|
|
|
bool getAGC();
|
|
|
|
|
2015-08-17 00:59:38 -04:00
|
|
|
void setMuted(bool state);
|
|
|
|
bool isMuted();
|
|
|
|
|
2014-12-31 19:45:01 -05:00
|
|
|
float getSignalLevel();
|
|
|
|
void setSquelchLevel(float signal_level_in);
|
|
|
|
float getSquelchLevel();
|
2015-06-05 03:51:46 -04:00
|
|
|
|
|
|
|
void setDemodulatorLock(bool demod_lock_in);
|
|
|
|
int getDemodulatorLock();
|
2015-06-10 04:50:14 -04:00
|
|
|
|
|
|
|
void setDemodulatorCons(int demod_cons_in);
|
|
|
|
int getDemodulatorCons();
|
2015-11-16 23:49:54 -05:00
|
|
|
//
|
|
|
|
//#ifdef __APPLE__
|
|
|
|
// static void *pthread_helper(void *context) {
|
|
|
|
// return ((DemodulatorThread *) context)->threadMain();
|
|
|
|
// }
|
|
|
|
//#endif
|
2014-12-16 18:27:32 -05:00
|
|
|
|
|
|
|
protected:
|
2015-11-17 23:23:23 -05:00
|
|
|
DemodulatorInstance *demodInstance;
|
2015-07-28 21:56:39 -04:00
|
|
|
ReBuffer<AudioThreadInput> outputBuffers;
|
2015-01-01 03:48:32 -05:00
|
|
|
|
2015-01-03 17:07:39 -05:00
|
|
|
std::vector<liquid_float_complex> agcData;
|
|
|
|
std::vector<float> agcAMData;
|
2015-11-16 23:49:54 -05:00
|
|
|
// std::vector<float> demodOutputData;
|
|
|
|
// std::vector<float> demodStereoData;
|
|
|
|
// std::vector<float> resampledOutputData;
|
|
|
|
// std::vector<float> resampledStereoData;
|
2015-06-29 15:55:21 -04:00
|
|
|
std::vector<unsigned int> demodOutputDataDigital;
|
|
|
|
//std::vector<unsigned int> demodOutputDataDigitalTest;
|
|
|
|
|
|
|
|
//std::vector<unsigned char> demodOutputSoftbits;
|
|
|
|
//std::vector<unsigned char> demodOutputSoftbitsTest;
|
2015-06-18 16:07:53 -04:00
|
|
|
|
2015-11-16 23:49:54 -05:00
|
|
|
// freqdem demodFM;
|
|
|
|
// ampmodem demodAM;
|
|
|
|
// ampmodem demodAM_DSB_CSP;
|
|
|
|
// ampmodem demodAM_DSB;
|
|
|
|
// ampmodem demodAM_LSB;
|
|
|
|
// ampmodem demodAM_USB;
|
|
|
|
/*
|
2015-06-10 04:50:14 -04:00
|
|
|
modem demodASK;
|
|
|
|
modem demodASK2;
|
|
|
|
modem demodASK4;
|
|
|
|
modem demodASK8;
|
|
|
|
modem demodASK16;
|
|
|
|
modem demodASK32;
|
|
|
|
modem demodASK64;
|
|
|
|
modem demodASK128;
|
|
|
|
modem demodASK256;
|
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodAPSK;
|
2015-06-10 13:39:08 -04:00
|
|
|
modem demodAPSK4;
|
|
|
|
modem demodAPSK8;
|
|
|
|
modem demodAPSK16;
|
|
|
|
modem demodAPSK32;
|
|
|
|
modem demodAPSK64;
|
|
|
|
modem demodAPSK128;
|
|
|
|
modem demodAPSK256;
|
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodBPSK;
|
2015-06-10 13:39:08 -04:00
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodDPSK;
|
2015-06-10 13:39:08 -04:00
|
|
|
modem demodDPSK2;
|
|
|
|
modem demodDPSK4;
|
|
|
|
modem demodDPSK8;
|
|
|
|
modem demodDPSK16;
|
|
|
|
modem demodDPSK32;
|
|
|
|
modem demodDPSK64;
|
|
|
|
modem demodDPSK128;
|
|
|
|
modem demodDPSK256;
|
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodPSK;
|
2015-06-10 13:39:08 -04:00
|
|
|
modem demodPSK2;
|
|
|
|
modem demodPSK4;
|
|
|
|
modem demodPSK8;
|
|
|
|
modem demodPSK16;
|
|
|
|
modem demodPSK32;
|
|
|
|
modem demodPSK64;
|
|
|
|
modem demodPSK128;
|
|
|
|
modem demodPSK256;
|
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodOOK;
|
2015-06-10 13:39:08 -04:00
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodSQAM;
|
2015-06-10 13:39:08 -04:00
|
|
|
modem demodSQAM32;
|
|
|
|
modem demodSQAM128;
|
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodST;
|
2015-06-10 13:39:08 -04:00
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodQAM;
|
2015-06-10 13:39:08 -04:00
|
|
|
modem demodQAM4;
|
|
|
|
modem demodQAM8;
|
|
|
|
modem demodQAM16;
|
|
|
|
modem demodQAM32;
|
|
|
|
modem demodQAM64;
|
|
|
|
modem demodQAM128;
|
|
|
|
modem demodQAM256;
|
|
|
|
|
2015-06-03 05:23:16 -04:00
|
|
|
modem demodQPSK;
|
2015-11-16 23:49:54 -05:00
|
|
|
*/
|
2015-01-03 17:07:39 -05:00
|
|
|
agc_crcf iqAutoGain;
|
2014-12-16 18:27:32 -05:00
|
|
|
|
2015-01-03 17:07:39 -05:00
|
|
|
float amOutputCeil;
|
|
|
|
float amOutputCeilMA;
|
|
|
|
float amOutputCeilMAA;
|
2015-01-01 03:48:32 -05:00
|
|
|
|
2015-08-17 00:59:38 -04:00
|
|
|
std::atomic_bool muted;
|
2015-07-19 15:34:06 -04:00
|
|
|
std::atomic_bool agcEnabled;
|
2015-07-20 00:00:50 -04:00
|
|
|
std::atomic_int demodulatorCons;
|
2015-03-15 21:02:26 -04:00
|
|
|
int audioSampleRate;
|
2014-12-16 18:27:32 -05:00
|
|
|
|
2015-01-03 17:07:39 -05:00
|
|
|
std::atomic<float> squelchLevel;
|
|
|
|
std::atomic<float> signalLevel;
|
|
|
|
bool squelchEnabled;
|
2015-06-05 03:51:46 -04:00
|
|
|
|
2015-06-09 11:00:05 -04:00
|
|
|
bool currentDemodLock;
|
2015-06-10 13:39:08 -04:00
|
|
|
int currentDemodCons;
|
|
|
|
|
|
|
|
void updateDemodulatorCons(int Cons);
|
2015-06-09 11:00:05 -04:00
|
|
|
void updateDemodulatorLock(modem demod, float sensitivity);
|
2015-07-30 21:53:29 -04:00
|
|
|
|
2015-11-17 19:32:47 -05:00
|
|
|
Modem *cModem;
|
|
|
|
ModemKit *cModemKit;
|
|
|
|
|
2015-07-30 00:28:53 -04:00
|
|
|
DemodulatorThreadPostInputQueue* iqInputQueue;
|
|
|
|
AudioThreadInputQueue *audioOutputQueue;
|
|
|
|
DemodulatorThreadOutputQueue* audioVisOutputQueue;
|
|
|
|
DemodulatorThreadControlCommandQueue *threadQueueControl;
|
|
|
|
DemodulatorThreadCommandQueue* threadQueueNotify;
|
2014-12-16 18:27:32 -05:00
|
|
|
};
|