From e72ec4c879a219797612d67dcdb12d98b5b2279d Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 15 Jun 2020 12:40:59 +0200 Subject: [PATCH] DSD demod: implemented DMR basic privacy followinf dsdcc v1.8.7 changes --- external/CMakeLists.txt | 2 +- plugins/channelrx/demoddsd/dsddecoder.h | 1 + plugins/channelrx/demoddsd/dsddemod.cpp | 4 +++ plugins/channelrx/demoddsd/dsddemodgui.cpp | 6 ++++ plugins/channelrx/demoddsd/dsddemodgui.h | 1 + plugins/channelrx/demoddsd/dsddemodgui.ui | 35 +++++++++++++++++++ plugins/channelrx/demoddsd/dsddemodplugin.cpp | 2 +- .../channelrx/demoddsd/dsddemodsettings.cpp | 4 +++ plugins/channelrx/demoddsd/dsddemodsettings.h | 1 + plugins/channelrx/demoddsd/dsddemodsink.cpp | 6 ++++ 10 files changed, 60 insertions(+), 2 deletions(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 34a0ac226..b62c85aa1 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -12,7 +12,7 @@ set(CODEC2_TAG "v0.9.2") set(CM256CC_TAG c0e92b92aca3d1d36c990b642b937c64d363c559) set(MBELIB_TAG 9a04ed5c78176a9965f3d43f7aa1b1f5330e771f) set(SERIALDV_TAG "v1.1.4") -set(DSDCC_TAG "v1.8.6") +set(DSDCC_TAG "v1.8.7") set(LIMESUITE_TAG "v20.01.0") set(BLADERF_TAG "2019.07") set(LIBIIO_TAG 826563e41b5ce9890b75506f672017de8d76d52d) diff --git a/plugins/channelrx/demoddsd/dsddecoder.h b/plugins/channelrx/demoddsd/dsddecoder.h index ca2f84ebb..8be149902 100644 --- a/plugins/channelrx/demoddsd/dsddecoder.h +++ b/plugins/channelrx/demoddsd/dsddecoder.h @@ -50,6 +50,7 @@ public: bool getVoice2On() const { return m_decoder.getVoice2On(); } void setTDMAStereo(bool tdmaStereo) { m_decoder.setTDMAStereo(tdmaStereo); } bool getSymbolPLLLocked() const { return m_decoder.getSymbolPLLLocked(); } + void setDMRBasicPrivacyKey(unsigned char key) { m_decoder.setDMRBasicPrivacyKey(key); } int getMbeRateIndex() const { return (int) m_decoder.getMbeRate(); } diff --git a/plugins/channelrx/demoddsd/dsddemod.cpp b/plugins/channelrx/demoddsd/dsddemod.cpp index 60196861a..75e9ceeed 100644 --- a/plugins/channelrx/demoddsd/dsddemod.cpp +++ b/plugins/channelrx/demoddsd/dsddemod.cpp @@ -156,6 +156,7 @@ void DSDDemod::applySettings(const DSDDemodSettings& settings, bool force) << " m_slot2On: " << settings.m_slot2On << " m_tdmaStereo: " << settings.m_tdmaStereo << " m_pllLock: " << settings.m_pllLock + << " m_dmrBPKey:" << settings.m_dmrBPKey << " m_highPassFilter: "<< settings.m_highPassFilter << " m_audioDeviceName: " << settings.m_audioDeviceName << " m_traceLengthMutliplier: " << settings.m_traceLengthMutliplier @@ -217,6 +218,9 @@ void DSDDemod::applySettings(const DSDDemodSettings& settings, bool force) if ((settings.m_pllLock != m_settings.m_pllLock) || force) { reverseAPIKeys.append("pllLock"); } + if ((settings.m_dmrBPKey != m_settings.m_dmrBPKey) || force) { + reverseAPIKeys.append("dmrBPKey"); + } if ((settings.m_highPassFilter != m_settings.m_highPassFilter) || force) { reverseAPIKeys.append("highPassFilter"); } diff --git a/plugins/channelrx/demoddsd/dsddemodgui.cpp b/plugins/channelrx/demoddsd/dsddemodgui.cpp index 4058f9604..309d47828 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.cpp +++ b/plugins/channelrx/demoddsd/dsddemodgui.cpp @@ -263,6 +263,12 @@ void DSDDemodGUI::on_symbolPLLLock_toggled(bool checked) applySettings(); } +void DSDDemodGUI::on_dmrBPKey_valueChanged(int value) +{ + m_settings.m_dmrBPKey = value < 0 ? 0 : value > 255 ? 255 : value; + applySettings(); +} + void DSDDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) { (void) widget; diff --git a/plugins/channelrx/demoddsd/dsddemodgui.h b/plugins/channelrx/demoddsd/dsddemodgui.h index fa7251d1d..a66a307b5 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.h +++ b/plugins/channelrx/demoddsd/dsddemodgui.h @@ -132,6 +132,7 @@ private slots: void on_highPassFilter_toggled(bool checked); void on_audioMute_toggled(bool checked); void on_symbolPLLLock_toggled(bool checked); + void on_dmrBPKey_valueChanged(int value); void onWidgetRolled(QWidget* widget, bool rollDown); void onMenuDialogCalled(const QPoint& p); void on_viewStatusLog_clicked(); diff --git a/plugins/channelrx/demoddsd/dsddemodgui.ui b/plugins/channelrx/demoddsd/dsddemodgui.ui index d1628e340..87cdbcc43 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.ui +++ b/plugins/channelrx/demoddsd/dsddemodgui.ui @@ -1228,6 +1228,41 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + 10 + 170 + 21 + 19 + + + + BP + + + + + + 40 + 170 + 50 + 19 + + + + DMR Basic Privacy key (0: no encryption) + + + Qt::RightToLeft + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 255 + + diff --git a/plugins/channelrx/demoddsd/dsddemodplugin.cpp b/plugins/channelrx/demoddsd/dsddemodplugin.cpp index 8998fa49b..7701ae141 100644 --- a/plugins/channelrx/demoddsd/dsddemodplugin.cpp +++ b/plugins/channelrx/demoddsd/dsddemodplugin.cpp @@ -30,7 +30,7 @@ const PluginDescriptor DSDDemodPlugin::m_pluginDescriptor = { DSDDemod::m_channelId, QString("DSD Demodulator"), - QString("4.12.3"), + QString("4.14.9"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/channelrx/demoddsd/dsddemodsettings.cpp b/plugins/channelrx/demoddsd/dsddemodsettings.cpp index fff5f20a9..9a03e5bdd 100644 --- a/plugins/channelrx/demoddsd/dsddemodsettings.cpp +++ b/plugins/channelrx/demoddsd/dsddemodsettings.cpp @@ -46,6 +46,7 @@ void DSDDemodSettings::resetToDefaults() m_slot2On = false; m_tdmaStereo = false; m_pllLock = true; + m_dmrBPKey = 0; m_rgbColor = QColor(0, 255, 255).rgb(); m_title = "DSD Demodulator"; m_highPassFilter = false; @@ -102,6 +103,7 @@ QByteArray DSDDemodSettings::serialize() const s.writeU32(28, m_reverseAPIChannelIndex); s.writeBool(29, m_audioMute); s.writeS32(30, m_streamIndex); + s.writeU32(31, m_dmrBPKey); return s.final(); } @@ -180,6 +182,8 @@ bool DSDDemodSettings::deserialize(const QByteArray& data) m_reverseAPIChannelIndex = utmp > 99 ? 99 : utmp; d.readBool(29, &m_audioMute, false); d.readS32(30, &m_streamIndex, 0); + d.readU32(31, &utmp, 0); + m_dmrBPKey = utmp < 256 ? utmp : 255; return true; } diff --git a/plugins/channelrx/demoddsd/dsddemodsettings.h b/plugins/channelrx/demoddsd/dsddemodsettings.h index 0180193c1..16c6d860d 100644 --- a/plugins/channelrx/demoddsd/dsddemodsettings.h +++ b/plugins/channelrx/demoddsd/dsddemodsettings.h @@ -39,6 +39,7 @@ struct DSDDemodSettings bool m_slot2On; bool m_tdmaStereo; bool m_pllLock; + uint8_t m_dmrBPKey; //!< Basic Privacy key index - 0: no encryption quint32 m_rgbColor; QString m_title; bool m_highPassFilter; diff --git a/plugins/channelrx/demoddsd/dsddemodsink.cpp b/plugins/channelrx/demoddsd/dsddemodsink.cpp index 91f08f08b..9d8d23c4b 100644 --- a/plugins/channelrx/demoddsd/dsddemodsink.cpp +++ b/plugins/channelrx/demoddsd/dsddemodsink.cpp @@ -334,6 +334,7 @@ void DSDDemodSink::applySettings(const DSDDemodSettings& settings, bool force) << " m_slot2On: " << settings.m_slot2On << " m_tdmaStereo: " << settings.m_tdmaStereo << " m_pllLock: " << settings.m_pllLock + << " m_dmrBPKey: " << settings.m_dmrBPKey << " m_highPassFilter: "<< settings.m_highPassFilter << " m_audioDeviceName: " << settings.m_audioDeviceName << " m_traceLengthMutliplier: " << settings.m_traceLengthMutliplier @@ -392,6 +393,11 @@ void DSDDemodSink::applySettings(const DSDDemodSettings& settings, bool force) m_dsdDecoder.setSymbolPLLLock(settings.m_pllLock); } + if ((settings.m_dmrBPKey != m_settings.m_dmrBPKey) || force) + { + m_dsdDecoder.setDMRBasicPrivacyKey(settings.m_dmrBPKey); + } + if ((settings.m_highPassFilter != m_settings.m_highPassFilter) || force) { m_dsdDecoder.useHPMbelib(settings.m_highPassFilter);