1 // Copyright (c) Charles J. Cliffe 2 // SPDX-License-Identifier: GPL-2.0+ 3 4 #pragma once 5 #include "Modem.h" 6 #include <map> 7 #include <vector> 8 #include <sstream> 9 #include <ostream> 10 #include <mutex> 11 12 class ModemKitDigital : public ModemKit { 13 public: ModemKitDigital()14 ModemKitDigital() : ModemKit() { 15 16 }; 17 }; 18 19 class ModemDigitalOutput { 20 public: 21 ModemDigitalOutput(); 22 virtual ~ModemDigitalOutput(); 23 24 virtual void write(std::string outp) = 0; 25 virtual void write(char outc) = 0; 26 27 virtual void Show() = 0; 28 virtual void Hide() = 0; 29 virtual void Close() = 0; 30 31 private: 32 }; 33 34 class ModemDigital : public Modem { 35 public: 36 ModemDigital(); 37 38 std::string getType() override; 39 40 int checkSampleRate(long long sampleRate, int audioSampleRate) override; 41 42 ModemKit *buildKit(long long sampleRate, int audioSampleRate) override; 43 void disposeKit(ModemKit *kit) override; 44 45 virtual void digitalStart(ModemKitDigital *kit, modem mod, ModemIQData *input); 46 virtual void digitalFinish(ModemKitDigital *kit, modem mod); 47 48 virtual void setDemodulatorLock(bool demod_lock_in); 49 virtual int getDemodulatorLock(); 50 51 virtual void updateDemodulatorLock(modem mod, float sensitivity); 52 53 #if ENABLE_DIGITAL_LAB 54 void setOutput(ModemDigitalOutput *digitalOutput); 55 #endif 56 57 protected: 58 std::vector<unsigned int> demodOutputDataDigital; 59 std::atomic_bool currentDemodLock; 60 #if ENABLE_DIGITAL_LAB 61 ModemDigitalOutput *digitalOut; 62 std::stringstream outStream; 63 #endif 64 };