#pragma once #if USE_RTL_SDR #include "SDRThread.h" #else #include "SoapySDRThread.h" #endif #include class SDRPostThread : public IOThread { public: SDRPostThread(); ~SDRPostThread(); void bindDemodulator(DemodulatorInstance *demod); void removeDemodulator(DemodulatorInstance *demod); void run(); void terminate(); void setIQVisualRange(long long frequency, int bandwidth); protected: SDRThreadIQDataQueue *iqDataInQueue; DemodulatorThreadInputQueue *iqDataOutQueue; DemodulatorThreadInputQueue *iqVisualQueue; DemodulatorThreadInputQueue *iqActiveDemodVisualQueue; std::mutex busy_demod; std::vector demodulators; private: void initPFBChannelizer(); void updateActiveDemodulators(); void updateChannels(); int getChannelAt(long long frequency); ReBuffer buffers; std::vector fpData; std::vector dataOut; std::vector chanCenters; long long chanBw; int nRunDemods; std::vector runDemods; std::vector demodChannel; std::vector demodChannelActive; ReBuffer visualDataBuffers; atomic_bool doRefresh; atomic_llong visFrequency; atomic_int visBandwidth; int numChannels, sampleRate; long long frequency; firpfbch_crcf channelizer; iirfilt_crcf dcFilter; };