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 };