1+ #pragma once
2+ #include " ../decoder.h"
3+ #include < signal_path/vfo_manager.h>
4+ #include < utils/optionlist.h>
5+ #include < gui/widgets/symbol_diagram.h>
6+ #include < gui/style.h>
7+ #include < dsp/sink/handler_sink.h>
8+ #include " flex.h"
9+
10+ class FLEXDecoder : public Decoder {
11+ dsp::stream<float > dummy1;
12+ dsp::stream<uint8_t > dummy2;
13+ public:
14+ FLEXDecoder (const std::string& name, VFOManager::VFO* vfo) : diag(0.6 , 1600 ) {
15+ this ->name = name;
16+ this ->vfo = vfo;
17+
18+ // Define baudrate options
19+ baudrates.define (1600 , " 1600 Baud" , 1600 );
20+ baudrates.define (3200 , " 3200 Baud" , 3200 );
21+ baudrates.define (6400 , " 6400 Baud" , 6400 );
22+
23+ // Init DSP
24+ vfo->setBandwidthLimits (12500 , 12500 , true );
25+ vfo->setSampleRate (16000 , 12500 );
26+ reshape.init (&dummy1, 1600.0 , (1600 / 30.0 ) - 1600.0 );
27+ dataHandler.init (&dummy2, _dataHandler, this );
28+ diagHandler.init (&reshape.out , _diagHandler, this );
29+ }
30+
31+ ~FLEXDecoder () {
32+ stop ();
33+ }
34+
35+ void showMenu () {
36+ ImGui::LeftLabel (" Baudrate" );
37+ ImGui::FillWidth ();
38+ if (ImGui::Combo ((" ##pager_decoder_flex_br_" + name).c_str (), &brId, baudrates.txt )) {
39+ // TODO
40+ }
41+
42+ ImGui::FillWidth ();
43+ diag.draw ();
44+ }
45+
46+ void setVFO (VFOManager::VFO* vfo) {
47+ this ->vfo = vfo;
48+ vfo->setBandwidthLimits (12500 , 12500 , true );
49+ vfo->setSampleRate (24000 , 12500 );
50+ // dsp.setInput(vfo->output);
51+ }
52+
53+ void start () {
54+ flog::debug (" FLEX start" );
55+ // dsp.start();
56+ reshape.start ();
57+ dataHandler.start ();
58+ diagHandler.start ();
59+ }
60+
61+ void stop () {
62+ flog::debug (" FLEX stop" );
63+ // dsp.stop();
64+ reshape.stop ();
65+ dataHandler.stop ();
66+ diagHandler.stop ();
67+ }
68+
69+ private:
70+ static void _dataHandler (uint8_t * data, int count, void * ctx) {
71+ FLEXDecoder* _this = (FLEXDecoder*)ctx;
72+ // _this->decoder.process(data, count);
73+ }
74+
75+ static void _diagHandler (float * data, int count, void * ctx) {
76+ FLEXDecoder* _this = (FLEXDecoder*)ctx;
77+ float * buf = _this->diag .acquireBuffer ();
78+ memcpy (buf, data, count * sizeof (float ));
79+ _this->diag .releaseBuffer ();
80+ }
81+
82+ std::string name;
83+
84+ VFOManager::VFO* vfo;
85+ dsp::buffer::Reshaper<float > reshape;
86+ dsp::sink::Handler<uint8_t > dataHandler;
87+ dsp::sink::Handler<float > diagHandler;
88+
89+ flex::Decoder decoder;
90+
91+ ImGui::SymbolDiagram diag;
92+
93+ int brId = 0 ;
94+
95+ OptionList<int , int > baudrates;
96+ };
0 commit comments