#pragma once #include #include #include "DemodDefs.h" #include "AudioThread.h" #include "Modem.h" typedef ThreadQueue DemodulatorThreadOutputQueue; #define DEMOD_VIS_SIZE 2048 class DemodulatorInstance; class DemodulatorThread : public IOThread { public: DemodulatorThread(DemodulatorInstance *parent); ~DemodulatorThread(); void onBindOutput(std::string name, ThreadQueueBase *threadQueue); void run(); void terminate(); void setAGC(bool state); bool getAGC(); void setMuted(bool state); bool isMuted(); float getSignalLevel(); void setSquelchLevel(float signal_level_in); float getSquelchLevel(); void setDemodulatorLock(bool demod_lock_in); int getDemodulatorLock(); void setDemodulatorCons(int demod_cons_in); int getDemodulatorCons(); // //#ifdef __APPLE__ // static void *pthread_helper(void *context) { // return ((DemodulatorThread *) context)->threadMain(); // } //#endif protected: DemodulatorInstance *demodInstance; ReBuffer outputBuffers; std::vector agcData; std::vector agcAMData; // std::vector demodOutputData; // std::vector demodStereoData; // std::vector resampledOutputData; // std::vector resampledStereoData; std::vector demodOutputDataDigital; //std::vector demodOutputDataDigitalTest; //std::vector demodOutputSoftbits; //std::vector demodOutputSoftbitsTest; // freqdem demodFM; // ampmodem demodAM; // ampmodem demodAM_DSB_CSP; // ampmodem demodAM_DSB; // ampmodem demodAM_LSB; // ampmodem demodAM_USB; /* modem demodASK; modem demodASK2; modem demodASK4; modem demodASK8; modem demodASK16; modem demodASK32; modem demodASK64; modem demodASK128; modem demodASK256; modem demodAPSK; modem demodAPSK4; modem demodAPSK8; modem demodAPSK16; modem demodAPSK32; modem demodAPSK64; modem demodAPSK128; modem demodAPSK256; modem demodBPSK; modem demodDPSK; modem demodDPSK2; modem demodDPSK4; modem demodDPSK8; modem demodDPSK16; modem demodDPSK32; modem demodDPSK64; modem demodDPSK128; modem demodDPSK256; modem demodPSK; modem demodPSK2; modem demodPSK4; modem demodPSK8; modem demodPSK16; modem demodPSK32; modem demodPSK64; modem demodPSK128; modem demodPSK256; modem demodOOK; modem demodSQAM; modem demodSQAM32; modem demodSQAM128; modem demodST; modem demodQAM; modem demodQAM4; modem demodQAM8; modem demodQAM16; modem demodQAM32; modem demodQAM64; modem demodQAM128; modem demodQAM256; modem demodQPSK; */ agc_crcf iqAutoGain; float amOutputCeil; float amOutputCeilMA; float amOutputCeilMAA; std::atomic_bool muted; std::atomic_bool agcEnabled; std::atomic_int demodulatorCons; int audioSampleRate; std::atomic squelchLevel; std::atomic signalLevel; bool squelchEnabled; bool currentDemodLock; int currentDemodCons; void updateDemodulatorCons(int Cons); void updateDemodulatorLock(modem demod, float sensitivity); Modem *cModem; ModemKit *cModemKit; DemodulatorThreadPostInputQueue* iqInputQueue; AudioThreadInputQueue *audioOutputQueue; DemodulatorThreadOutputQueue* audioVisOutputQueue; DemodulatorThreadControlCommandQueue *threadQueueControl; DemodulatorThreadCommandQueue* threadQueueNotify; };