From 04db22584aeefaa4ddfef5b63b52eeab964363e8 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 15 May 2023 16:40:43 +0100 Subject: [PATCH] Add DSC demodulator --- CMakeLists.txt | 1 + doc/img/DSCDemod_plugin.png | Bin 0 -> 11045 bytes doc/img/DSCDemod_plugin_geocall.png | Bin 0 -> 333280 bytes plugins/channelrx/CMakeLists.txt | 4 + plugins/channelrx/demodadsb/adsbdemodgui.cpp | 5 +- plugins/channelrx/demoddab/dabdemodgui.cpp | 2 +- plugins/channelrx/demoddsc/CMakeLists.txt | 63 + plugins/channelrx/demoddsc/dscdemod.cpp | 763 ++++++++++ plugins/channelrx/demoddsc/dscdemod.h | 205 +++ .../channelrx/demoddsc/dscdemodbaseband.cpp | 182 +++ plugins/channelrx/demoddsc/dscdemodbaseband.h | 103 ++ plugins/channelrx/demoddsc/dscdemodgui.cpp | 1233 +++++++++++++++++ plugins/channelrx/demoddsc/dscdemodgui.h | 171 +++ plugins/channelrx/demoddsc/dscdemodgui.ui | 982 +++++++++++++ plugins/channelrx/demoddsc/dscdemodplugin.cpp | 93 ++ plugins/channelrx/demoddsc/dscdemodplugin.h | 50 + .../channelrx/demoddsc/dscdemodsettings.cpp | 206 +++ plugins/channelrx/demoddsc/dscdemodsettings.h | 76 + plugins/channelrx/demoddsc/dscdemodsink.cpp | 331 +++++ plugins/channelrx/demoddsc/dscdemodsink.h | 154 ++ .../demoddsc/dscdemodwebapiadapter.cpp | 52 + .../demoddsc/dscdemodwebapiadapter.h | 50 + plugins/channelrx/demoddsc/readme.md | 116 ++ sdrbase/CMakeLists.txt | 6 + sdrbase/util/aprsfi.cpp | 187 +++ sdrbase/util/aprsfi.h | 89 ++ sdrbase/util/dsc.cpp | 968 +++++++++++++ sdrbase/util/dsc.h | 234 ++++ sdrbase/util/mmsi.cpp | 421 ++++++ sdrbase/util/mmsi.h | 47 + sdrbase/util/movingaverage.h | 1 + sdrbase/util/osndb.cpp | 10 + sdrbase/util/osndb.h | 1 + sdrbase/webapi/webapirequestmapper.cpp | 5 + sdrbase/webapi/webapiutils.cpp | 2 + sdrgui/CMakeLists.txt | 2 + sdrgui/gui/frequencydelegate.cpp | 58 + sdrgui/gui/frequencydelegate.h | 39 + .../api/swagger/include/ChannelReport.yaml | 2 + .../api/swagger/include/ChannelSettings.yaml | 2 + .../code/qt5/client/SWGChannelReport.cpp | 25 + .../code/qt5/client/SWGChannelReport.h | 7 + .../code/qt5/client/SWGChannelSettings.cpp | 25 + .../code/qt5/client/SWGChannelSettings.h | 7 + .../code/qt5/client/SWGModelFactory.h | 12 + 45 files changed, 6987 insertions(+), 5 deletions(-) create mode 100644 doc/img/DSCDemod_plugin.png create mode 100644 doc/img/DSCDemod_plugin_geocall.png create mode 100644 plugins/channelrx/demoddsc/CMakeLists.txt create mode 100644 plugins/channelrx/demoddsc/dscdemod.cpp create mode 100644 plugins/channelrx/demoddsc/dscdemod.h create mode 100644 plugins/channelrx/demoddsc/dscdemodbaseband.cpp create mode 100644 plugins/channelrx/demoddsc/dscdemodbaseband.h create mode 100644 plugins/channelrx/demoddsc/dscdemodgui.cpp create mode 100644 plugins/channelrx/demoddsc/dscdemodgui.h create mode 100644 plugins/channelrx/demoddsc/dscdemodgui.ui create mode 100644 plugins/channelrx/demoddsc/dscdemodplugin.cpp create mode 100644 plugins/channelrx/demoddsc/dscdemodplugin.h create mode 100644 plugins/channelrx/demoddsc/dscdemodsettings.cpp create mode 100644 plugins/channelrx/demoddsc/dscdemodsettings.h create mode 100644 plugins/channelrx/demoddsc/dscdemodsink.cpp create mode 100644 plugins/channelrx/demoddsc/dscdemodsink.h create mode 100644 plugins/channelrx/demoddsc/dscdemodwebapiadapter.cpp create mode 100644 plugins/channelrx/demoddsc/dscdemodwebapiadapter.h create mode 100644 plugins/channelrx/demoddsc/readme.md create mode 100644 sdrbase/util/aprsfi.cpp create mode 100644 sdrbase/util/aprsfi.h create mode 100644 sdrbase/util/dsc.cpp create mode 100644 sdrbase/util/dsc.h create mode 100644 sdrbase/util/mmsi.cpp create mode 100644 sdrbase/util/mmsi.h create mode 100644 sdrgui/gui/frequencydelegate.cpp create mode 100644 sdrgui/gui/frequencydelegate.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 88619d1bc..1836dc7e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,6 +84,7 @@ option(ENABLE_CHANNELRX_DEMODFT8 "Enable channelrx demodft8 plugin" ON) option(ENABLE_CHANNELRX_DEMODNAVTEX "Enable channelrx demodnavtex plugin" ON) option(ENABLE_CHANNELRX_DEMODRTTY "Enable channelrx demodrtty plugin" ON) option(ENABLE_CHANNELRX_DEMODILS "Enable channelrx demodils plugin" ON) +option(ENABLE_CHANNELRX_DEMODDSC "Enable channelrx demoddsc plugin" ON) # Channel Tx enablers option(ENABLE_CHANNELTX "Enable channeltx plugins" ON) diff --git a/doc/img/DSCDemod_plugin.png b/doc/img/DSCDemod_plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..e79449ba6745c98ea5893fbef337910250f03ead GIT binary patch literal 11045 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 NOL;Z9$`=+P{~yDx7U=*0 literal 0 HcmV?d00001 diff --git a/doc/img/DSCDemod_plugin_geocall.png b/doc/img/DSCDemod_plugin_geocall.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f3745bfa274476a722f537a206112705b533e7 GIT binary patch literal 333280 zcmV*5Ky<%}P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D|D{PpK~#8N?7erG z7FE{nO-F)(9GeW? z8_v1TIp1}y@4naGt7<>h^>jC;*O}=*?yIWyUOUzU``2rSs`B^0{hR!l`VZ(o|Gl*S z>u>*_p=9`f|NU=S^_mHY>afJ%ocEdBSZMsUek{(j6xTh4f?k3gR_C$OSDL{My;?y4DRa@iQ z3Sq6fB29P1F)hN{AWs#ZVOKyKTnl0E~Y86Rt z%|?=QWJ9TPL?AvRTvfXX?2C}DspQthmCv=1rgjnH@LZ>vd*}7>?(4UaoCa+nT-o

Qnh(ITuUI>>lOLo{|x;?L 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