// Copyright (c) Charles J. Cliffe // SPDX-License-Identifier: GPL-2.0+ #pragma once #include "SoapySDRThread.h" #include class SDRPostThread : public IOThread { public: SDRPostThread(); ~SDRPostThread(); void bindDemodulator(DemodulatorInstance *demod); void bindDemodulators(std::vector *demods); void removeDemodulator(DemodulatorInstance *demod); virtual void run(); virtual void terminate(); void runSingleCH(SDRThreadIQData *data_in); void runPFBCH(SDRThreadIQData *data_in); void setIQVisualRange(long long frequency, int bandwidth); protected: SDRThreadIQDataQueuePtr iqDataInQueue; DemodulatorThreadInputQueuePtr iqDataOutQueue; DemodulatorThreadInputQueuePtr iqVisualQueue; DemodulatorThreadInputQueuePtr iqActiveDemodVisualQueue; //protects access to demodulators lists and such 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 = 0; size_t 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; std::vector dcBuf; };