From 421ff46c6618c6834358d184e36851c9ac9e1658 Mon Sep 17 00:00:00 2001 From: srcejon Date: Sun, 21 Dec 2025 16:35:00 +0000 Subject: [PATCH 01/31] Add Inmarsat Demod swagger files and regenerate. --- sdrbase/resources/webapi/doc/html2/index.html | 102 ++- .../doc/swagger/include/ChannelReport.yaml | 2 + .../doc/swagger/include/ChannelSettings.yaml | 2 + .../doc/swagger/include/InmarsatDemod.yaml | 67 ++ .../api/swagger/include/ChannelReport.yaml | 2 + .../api/swagger/include/ChannelSettings.yaml | 2 + .../api/swagger/include/InmarsatDemod.yaml | 67 ++ swagger/sdrangel/code/html2/index.html | 102 ++- .../code/qt5/client/SWGChannelReport.cpp | 25 + .../code/qt5/client/SWGChannelReport.h | 7 + .../code/qt5/client/SWGChannelSettings.cpp | 25 + .../code/qt5/client/SWGChannelSettings.h | 7 + .../qt5/client/SWGInmarsatDemodReport.cpp | 131 ++++ .../code/qt5/client/SWGInmarsatDemodReport.h | 64 ++ .../qt5/client/SWGInmarsatDemodSettings.cpp | 605 ++++++++++++++++++ .../qt5/client/SWGInmarsatDemodSettings.h | 188 ++++++ .../code/qt5/client/SWGModelFactory.h | 12 + 17 files changed, 1408 insertions(+), 2 deletions(-) create mode 100644 sdrbase/resources/webapi/doc/swagger/include/InmarsatDemod.yaml create mode 100644 swagger/sdrangel/api/swagger/include/InmarsatDemod.yaml create mode 100644 swagger/sdrangel/code/qt5/client/SWGInmarsatDemodReport.cpp create mode 100644 swagger/sdrangel/code/qt5/client/SWGInmarsatDemodReport.h create mode 100644 swagger/sdrangel/code/qt5/client/SWGInmarsatDemodSettings.cpp create mode 100644 swagger/sdrangel/code/qt5/client/SWGInmarsatDemodSettings.h diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index 357da29b9..a593406fc 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -3981,6 +3981,9 @@ margin-bottom: 20px; "ILSDemodReport" : { "$ref" : "#/definitions/ILSDemodReport" }, + "InmarsatDemodReport" : { + "$ref" : "#/definitions/InmarsatDemodReport" + }, "M17DemodReport" : { "$ref" : "#/definitions/M17DemodReport" }, @@ -4169,6 +4172,9 @@ margin-bottom: 20px; "ILSDemodSettings" : { "$ref" : "#/definitions/ILSDemodSettings" }, + "InmarsatDemodSettings" : { + "$ref" : "#/definitions/InmarsatDemodSettings" + }, "InterferometerSettings" : { "$ref" : "#/definitions/InterferometerSettings" }, @@ -8447,6 +8453,100 @@ margin-bottom: 20px; } }, "description" : "ILSDemod" +}; + defs.InmarsatDemodReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power received in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "InmarsatDemod" +}; + defs.InmarsatDemodSettings = { + "properties" : { + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float" + }, + "rrcRolloff" : { + "type" : "number", + "format" : "float" + }, + "pllBandwidth" : { + "type" : "number", + "format" : "float" + }, + "udpEnabled" : { + "type" : "integer", + "description" : "Whether to forward received messages to specified UDP port" + }, + "udpAddress" : { + "type" : "string", + "description" : "UDP address to forward received messages to" + }, + "udpPort" : { + "type" : "integer", + "description" : "UDP port to forward received messages to" + }, + "udpFormat" : { + "type" : "integer", + "description" : "0 for binary, 1 for NMEA" + }, + "logFilename" : { + "type" : "string" + }, + "logEnabled" : { + "type" : "integer" + }, + "useFileTime" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "streamIndex" : { + "type" : "integer", + "description" : "MIMO channel. Not relevant when connected to SI (single Rx)." + }, + "useReverseAPI" : { + "type" : "integer", + "description" : "Synchronize with reverse API (1 for yes, 0 for no)" + }, + "reverseAPIAddress" : { + "type" : "string" + }, + "reverseAPIPort" : { + "type" : "integer" + }, + "reverseAPIDeviceIndex" : { + "type" : "integer" + }, + "reverseAPIChannelIndex" : { + "type" : "integer" + }, + "scopeConfig" : { + "$ref" : "#/definitions/GLScope" + }, + "channelMarker" : { + "$ref" : "#/definitions/ChannelMarker" + }, + "rollupState" : { + "$ref" : "#/definitions/RollupState" + } + }, + "description" : "InmarsatDemod" }; defs.InstanceChannelsResponse = { "required" : [ "channelcount" ], @@ -59615,7 +59715,7 @@ except ApiException as e:
- Generated 2025-07-01T22:00:12.093+02:00 + Generated 2025-12-21T17:33:51.672+01:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/ChannelReport.yaml b/sdrbase/resources/webapi/doc/swagger/include/ChannelReport.yaml index f2eeb924e..e59ad2003 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/ChannelReport.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/ChannelReport.yaml @@ -63,6 +63,8 @@ ChannelReport: $ref: "/doc/swagger/include/HeatMap.yaml#/HeatMapReport" ILSDemodReport: $ref: "/doc/swagger/include/ILSDemod.yaml#/ILSDemodReport" + InmarsatDemodReport: + $ref: "/doc/swagger/include/InmarsatDemod.yaml#/InmarsatDemodReport" M17DemodReport: $ref: "/doc/swagger/include/M17Demod.yaml#/M17DemodReport" M17ModReport: diff --git a/sdrbase/resources/webapi/doc/swagger/include/ChannelSettings.yaml b/sdrbase/resources/webapi/doc/swagger/include/ChannelSettings.yaml index 47bee152a..a7718035a 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/ChannelSettings.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/ChannelSettings.yaml @@ -77,6 +77,8 @@ ChannelSettings: $ref: "/doc/swagger/include/HeatMap.yaml#/HeatMapSettings" ILSDemodSettings: $ref: "/doc/swagger/include/ILSDemod.yaml#/ILSDemodSettings" + InmarsatDemodSettings: + $ref: "/doc/swagger/include/InmarsatDemod.yaml#/InmarsatDemodSettings" InterferometerSettings: $ref: "/doc/swagger/include/Interferometer.yaml#/InterferometerSettings" IEEE_802_15_4_ModSettings: diff --git a/sdrbase/resources/webapi/doc/swagger/include/InmarsatDemod.yaml b/sdrbase/resources/webapi/doc/swagger/include/InmarsatDemod.yaml new file mode 100644 index 000000000..cb6b971f5 --- /dev/null +++ b/sdrbase/resources/webapi/doc/swagger/include/InmarsatDemod.yaml @@ -0,0 +1,67 @@ +InmarsatDemodSettings: + description: InmarsatDemod + properties: + inputFrequencyOffset: + type: integer + format: int64 + rfBandwidth: + type: number + format: float + rrcRolloff: + type: number + format: float + pllBandwidth: + type: number + format: float + udpEnabled: + description: "Whether to forward received messages to specified UDP port" + type: integer + udpAddress: + description: "UDP address to forward received messages to" + type: string + udpPort: + description: "UDP port to forward received messages to" + type: integer + udpFormat: + description: "0 for binary, 1 for NMEA" + type: integer + logFilename: + type: string + logEnabled: + type: integer + useFileTime: + type: integer + rgbColor: + type: integer + title: + type: string + streamIndex: + description: MIMO channel. Not relevant when connected to SI (single Rx). + type: integer + useReverseAPI: + description: Synchronize with reverse API (1 for yes, 0 for no) + type: integer + reverseAPIAddress: + type: string + reverseAPIPort: + type: integer + reverseAPIDeviceIndex: + type: integer + reverseAPIChannelIndex: + type: integer + scopeConfig: + $ref: "/doc/swagger/include/GLScope.yaml#/GLScope" + channelMarker: + $ref: "/doc/swagger/include/ChannelMarker.yaml#/ChannelMarker" + rollupState: + $ref: "/doc/swagger/include/RollupState.yaml#/RollupState" + +InmarsatDemodReport: + description: InmarsatDemod + properties: + channelPowerDB: + description: power received in channel (dB) + type: number + format: float + channelSampleRate: + type: integer diff --git a/swagger/sdrangel/api/swagger/include/ChannelReport.yaml b/swagger/sdrangel/api/swagger/include/ChannelReport.yaml index 2c5d79550..5afdbafbc 100644 --- a/swagger/sdrangel/api/swagger/include/ChannelReport.yaml +++ b/swagger/sdrangel/api/swagger/include/ChannelReport.yaml @@ -63,6 +63,8 @@ ChannelReport: $ref: "http://swgserver:8081/api/swagger/include/HeatMap.yaml#/HeatMapReport" ILSDemodReport: $ref: "http://swgserver:8081/api/swagger/include/ILSDemod.yaml#/ILSDemodReport" + InmarsatDemodReport: + $ref: "http://swgserver:8081/api/swagger/include/InmarsatDemod.yaml#/InmarsatDemodReport" M17DemodReport: $ref: "http://swgserver:8081/api/swagger/include/M17Demod.yaml#/M17DemodReport" M17ModReport: diff --git a/swagger/sdrangel/api/swagger/include/ChannelSettings.yaml b/swagger/sdrangel/api/swagger/include/ChannelSettings.yaml index acbd7569f..7d35c9fe1 100644 --- a/swagger/sdrangel/api/swagger/include/ChannelSettings.yaml +++ b/swagger/sdrangel/api/swagger/include/ChannelSettings.yaml @@ -77,6 +77,8 @@ ChannelSettings: $ref: "http://swgserver:8081/api/swagger/include/HeatMap.yaml#/HeatMapSettings" ILSDemodSettings: $ref: "http://swgserver:8081/api/swagger/include/ILSDemod.yaml#/ILSDemodSettings" + InmarsatDemodSettings: + $ref: "http://swgserver:8081/api/swagger/include/InmarsatDemod.yaml#/InmarsatDemodSettings" InterferometerSettings: $ref: "http://swgserver:8081/api/swagger/include/Interferometer.yaml#/InterferometerSettings" IEEE_802_15_4_ModSettings: diff --git a/swagger/sdrangel/api/swagger/include/InmarsatDemod.yaml b/swagger/sdrangel/api/swagger/include/InmarsatDemod.yaml new file mode 100644 index 000000000..52cc5cc2f --- /dev/null +++ b/swagger/sdrangel/api/swagger/include/InmarsatDemod.yaml @@ -0,0 +1,67 @@ +InmarsatDemodSettings: + description: InmarsatDemod + properties: + inputFrequencyOffset: + type: integer + format: int64 + rfBandwidth: + type: number + format: float + rrcRolloff: + type: number + format: float + pllBandwidth: + type: number + format: float + udpEnabled: + description: "Whether to forward received messages to specified UDP port" + type: integer + udpAddress: + description: "UDP address to forward received messages to" + type: string + udpPort: + description: "UDP port to forward received messages to" + type: integer + udpFormat: + description: "0 for binary, 1 for NMEA" + type: integer + logFilename: + type: string + logEnabled: + type: integer + useFileTime: + type: integer + rgbColor: + type: integer + title: + type: string + streamIndex: + description: MIMO channel. Not relevant when connected to SI (single Rx). + type: integer + useReverseAPI: + description: Synchronize with reverse API (1 for yes, 0 for no) + type: integer + reverseAPIAddress: + type: string + reverseAPIPort: + type: integer + reverseAPIDeviceIndex: + type: integer + reverseAPIChannelIndex: + type: integer + scopeConfig: + $ref: "http://swgserver:8081/api/swagger/include/GLScope.yaml#/GLScope" + channelMarker: + $ref: "http://swgserver:8081/api/swagger/include/ChannelMarker.yaml#/ChannelMarker" + rollupState: + $ref: "http://swgserver:8081/api/swagger/include/RollupState.yaml#/RollupState" + +InmarsatDemodReport: + description: InmarsatDemod + properties: + channelPowerDB: + description: power received in channel (dB) + type: number + format: float + channelSampleRate: + type: integer diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index 357da29b9..a593406fc 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -3981,6 +3981,9 @@ margin-bottom: 20px; "ILSDemodReport" : { "$ref" : "#/definitions/ILSDemodReport" }, + "InmarsatDemodReport" : { + "$ref" : "#/definitions/InmarsatDemodReport" + }, "M17DemodReport" : { "$ref" : "#/definitions/M17DemodReport" }, @@ -4169,6 +4172,9 @@ margin-bottom: 20px; "ILSDemodSettings" : { "$ref" : "#/definitions/ILSDemodSettings" }, + "InmarsatDemodSettings" : { + "$ref" : "#/definitions/InmarsatDemodSettings" + }, "InterferometerSettings" : { "$ref" : "#/definitions/InterferometerSettings" }, @@ -8447,6 +8453,100 @@ margin-bottom: 20px; } }, "description" : "ILSDemod" +}; + defs.InmarsatDemodReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power received in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "InmarsatDemod" +}; + defs.InmarsatDemodSettings = { + "properties" : { + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float" + }, + "rrcRolloff" : { + "type" : "number", + "format" : "float" + }, + "pllBandwidth" : { + "type" : "number", + "format" : "float" + }, + "udpEnabled" : { + "type" : "integer", + "description" : "Whether to forward received messages to specified UDP port" + }, + "udpAddress" : { + "type" : "string", + "description" : "UDP address to forward received messages to" + }, + "udpPort" : { + "type" : "integer", + "description" : "UDP port to forward received messages to" + }, + "udpFormat" : { + "type" : "integer", + "description" : "0 for binary, 1 for NMEA" + }, + "logFilename" : { + "type" : "string" + }, + "logEnabled" : { + "type" : "integer" + }, + "useFileTime" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "streamIndex" : { + "type" : "integer", + "description" : "MIMO channel. Not relevant when connected to SI (single Rx)." + }, + "useReverseAPI" : { + "type" : "integer", + "description" : "Synchronize with reverse API (1 for yes, 0 for no)" + }, + "reverseAPIAddress" : { + "type" : "string" + }, + "reverseAPIPort" : { + "type" : "integer" + }, + "reverseAPIDeviceIndex" : { + "type" : "integer" + }, + "reverseAPIChannelIndex" : { + "type" : "integer" + }, + "scopeConfig" : { + "$ref" : "#/definitions/GLScope" + }, + "channelMarker" : { + "$ref" : "#/definitions/ChannelMarker" + }, + "rollupState" : { + "$ref" : "#/definitions/RollupState" + } + }, + "description" : "InmarsatDemod" }; defs.InstanceChannelsResponse = { "required" : [ "channelcount" ], @@ -59615,7 +59715,7 @@ except ApiException as e:
- Generated 2025-07-01T22:00:12.093+02:00 + Generated 2025-12-21T17:33:51.672+01:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelReport.cpp b/swagger/sdrangel/code/qt5/client/SWGChannelReport.cpp index f7e5e304a..46d9f65f7 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelReport.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGChannelReport.cpp @@ -84,6 +84,8 @@ SWGChannelReport::SWGChannelReport() { m_heat_map_report_isSet = false; ils_demod_report = nullptr; m_ils_demod_report_isSet = false; + inmarsat_demod_report = nullptr; + m_inmarsat_demod_report_isSet = false; m17_demod_report = nullptr; m_m17_demod_report_isSet = false; m17_mod_report = nullptr; @@ -198,6 +200,8 @@ SWGChannelReport::init() { m_heat_map_report_isSet = false; ils_demod_report = new SWGILSDemodReport(); m_ils_demod_report_isSet = false; + inmarsat_demod_report = new SWGInmarsatDemodReport(); + m_inmarsat_demod_report_isSet = false; m17_demod_report = new SWGM17DemodReport(); m_m17_demod_report_isSet = false; m17_mod_report = new SWGM17ModReport(); @@ -334,6 +338,9 @@ SWGChannelReport::cleanup() { if(ils_demod_report != nullptr) { delete ils_demod_report; } + if(inmarsat_demod_report != nullptr) { + delete inmarsat_demod_report; + } if(m17_demod_report != nullptr) { delete m17_demod_report; } @@ -478,6 +485,8 @@ SWGChannelReport::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&ils_demod_report, pJson["ILSDemodReport"], "SWGILSDemodReport", "SWGILSDemodReport"); + ::SWGSDRangel::setValue(&inmarsat_demod_report, pJson["InmarsatDemodReport"], "SWGInmarsatDemodReport", "SWGInmarsatDemodReport"); + ::SWGSDRangel::setValue(&m17_demod_report, pJson["M17DemodReport"], "SWGM17DemodReport", "SWGM17DemodReport"); ::SWGSDRangel::setValue(&m17_mod_report, pJson["M17ModReport"], "SWGM17ModReport", "SWGM17ModReport"); @@ -628,6 +637,9 @@ SWGChannelReport::asJsonObject() { if((ils_demod_report != nullptr) && (ils_demod_report->isSet())){ toJsonValue(QString("ILSDemodReport"), ils_demod_report, obj, QString("SWGILSDemodReport")); } + if((inmarsat_demod_report != nullptr) && (inmarsat_demod_report->isSet())){ + toJsonValue(QString("InmarsatDemodReport"), inmarsat_demod_report, obj, QString("SWGInmarsatDemodReport")); + } if((m17_demod_report != nullptr) && (m17_demod_report->isSet())){ toJsonValue(QString("M17DemodReport"), m17_demod_report, obj, QString("SWGM17DemodReport")); } @@ -987,6 +999,16 @@ SWGChannelReport::setIlsDemodReport(SWGILSDemodReport* ils_demod_report) { this->m_ils_demod_report_isSet = true; } +SWGInmarsatDemodReport* +SWGChannelReport::getInmarsatDemodReport() { + return inmarsat_demod_report; +} +void +SWGChannelReport::setInmarsatDemodReport(SWGInmarsatDemodReport* inmarsat_demod_report) { + this->inmarsat_demod_report = inmarsat_demod_report; + this->m_inmarsat_demod_report_isSet = true; +} + SWGM17DemodReport* SWGChannelReport::getM17DemodReport() { return m17_demod_report; @@ -1326,6 +1348,9 @@ SWGChannelReport::isSet(){ if(ils_demod_report && ils_demod_report->isSet()){ isObjectUpdated = true; break; } + if(inmarsat_demod_report && inmarsat_demod_report->isSet()){ + isObjectUpdated = true; break; + } if(m17_demod_report && m17_demod_report->isSet()){ isObjectUpdated = true; break; } diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelReport.h b/swagger/sdrangel/code/qt5/client/SWGChannelReport.h index 9db426965..e8008d4ce 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelReport.h +++ b/swagger/sdrangel/code/qt5/client/SWGChannelReport.h @@ -48,6 +48,7 @@ #include "SWGHeatMapReport.h" #include "SWGIEEE_802_15_4_ModReport.h" #include "SWGILSDemodReport.h" +#include "SWGInmarsatDemodReport.h" #include "SWGM17DemodReport.h" #include "SWGM17ModReport.h" #include "SWGNFMDemodReport.h" @@ -177,6 +178,9 @@ public: SWGILSDemodReport* getIlsDemodReport(); void setIlsDemodReport(SWGILSDemodReport* ils_demod_report); + SWGInmarsatDemodReport* getInmarsatDemodReport(); + void setInmarsatDemodReport(SWGInmarsatDemodReport* inmarsat_demod_report); + SWGM17DemodReport* getM17DemodReport(); void setM17DemodReport(SWGM17DemodReport* m17_demod_report); @@ -340,6 +344,9 @@ private: SWGILSDemodReport* ils_demod_report; bool m_ils_demod_report_isSet; + SWGInmarsatDemodReport* inmarsat_demod_report; + bool m_inmarsat_demod_report_isSet; + SWGM17DemodReport* m17_demod_report; bool m_m17_demod_report_isSet; diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGChannelSettings.cpp index a0a78938a..98fb7a081 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGChannelSettings.cpp @@ -96,6 +96,8 @@ SWGChannelSettings::SWGChannelSettings() { m_heat_map_settings_isSet = false; ils_demod_settings = nullptr; m_ils_demod_settings_isSet = false; + inmarsat_demod_settings = nullptr; + m_inmarsat_demod_settings_isSet = false; interferometer_settings = nullptr; m_interferometer_settings_isSet = false; ieee_802_15_4_mod_settings = nullptr; @@ -234,6 +236,8 @@ SWGChannelSettings::init() { m_heat_map_settings_isSet = false; ils_demod_settings = new SWGILSDemodSettings(); m_ils_demod_settings_isSet = false; + inmarsat_demod_settings = new SWGInmarsatDemodSettings(); + m_inmarsat_demod_settings_isSet = false; interferometer_settings = new SWGInterferometerSettings(); m_interferometer_settings_isSet = false; ieee_802_15_4_mod_settings = new SWGIEEE_802_15_4_ModSettings(); @@ -396,6 +400,9 @@ SWGChannelSettings::cleanup() { if(ils_demod_settings != nullptr) { delete ils_demod_settings; } + if(inmarsat_demod_settings != nullptr) { + delete inmarsat_demod_settings; + } if(interferometer_settings != nullptr) { delete interferometer_settings; } @@ -570,6 +577,8 @@ SWGChannelSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&ils_demod_settings, pJson["ILSDemodSettings"], "SWGILSDemodSettings", "SWGILSDemodSettings"); + ::SWGSDRangel::setValue(&inmarsat_demod_settings, pJson["InmarsatDemodSettings"], "SWGInmarsatDemodSettings", "SWGInmarsatDemodSettings"); + ::SWGSDRangel::setValue(&interferometer_settings, pJson["InterferometerSettings"], "SWGInterferometerSettings", "SWGInterferometerSettings"); ::SWGSDRangel::setValue(&ieee_802_15_4_mod_settings, pJson["IEEE_802_15_4_ModSettings"], "SWGIEEE_802_15_4_ModSettings", "SWGIEEE_802_15_4_ModSettings"); @@ -750,6 +759,9 @@ SWGChannelSettings::asJsonObject() { if((ils_demod_settings != nullptr) && (ils_demod_settings->isSet())){ toJsonValue(QString("ILSDemodSettings"), ils_demod_settings, obj, QString("SWGILSDemodSettings")); } + if((inmarsat_demod_settings != nullptr) && (inmarsat_demod_settings->isSet())){ + toJsonValue(QString("InmarsatDemodSettings"), inmarsat_demod_settings, obj, QString("SWGInmarsatDemodSettings")); + } if((interferometer_settings != nullptr) && (interferometer_settings->isSet())){ toJsonValue(QString("InterferometerSettings"), interferometer_settings, obj, QString("SWGInterferometerSettings")); } @@ -1187,6 +1199,16 @@ SWGChannelSettings::setIlsDemodSettings(SWGILSDemodSettings* ils_demod_settings) this->m_ils_demod_settings_isSet = true; } +SWGInmarsatDemodSettings* +SWGChannelSettings::getInmarsatDemodSettings() { + return inmarsat_demod_settings; +} +void +SWGChannelSettings::setInmarsatDemodSettings(SWGInmarsatDemodSettings* inmarsat_demod_settings) { + this->inmarsat_demod_settings = inmarsat_demod_settings; + this->m_inmarsat_demod_settings_isSet = true; +} + SWGInterferometerSettings* SWGChannelSettings::getInterferometerSettings() { return interferometer_settings; @@ -1604,6 +1626,9 @@ SWGChannelSettings::isSet(){ if(ils_demod_settings && ils_demod_settings->isSet()){ isObjectUpdated = true; break; } + if(inmarsat_demod_settings && inmarsat_demod_settings->isSet()){ + isObjectUpdated = true; break; + } if(interferometer_settings && interferometer_settings->isSet()){ isObjectUpdated = true; break; } diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelSettings.h b/swagger/sdrangel/code/qt5/client/SWGChannelSettings.h index 5baf78001..635a839a7 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGChannelSettings.h @@ -53,6 +53,7 @@ #include "SWGHeatMapSettings.h" #include "SWGIEEE_802_15_4_ModSettings.h" #include "SWGILSDemodSettings.h" +#include "SWGInmarsatDemodSettings.h" #include "SWGInterferometerSettings.h" #include "SWGLocalSinkSettings.h" #include "SWGLocalSourceSettings.h" @@ -205,6 +206,9 @@ public: SWGILSDemodSettings* getIlsDemodSettings(); void setIlsDemodSettings(SWGILSDemodSettings* ils_demod_settings); + SWGInmarsatDemodSettings* getInmarsatDemodSettings(); + void setInmarsatDemodSettings(SWGInmarsatDemodSettings* inmarsat_demod_settings); + SWGInterferometerSettings* getInterferometerSettings(); void setInterferometerSettings(SWGInterferometerSettings* interferometer_settings); @@ -404,6 +408,9 @@ private: SWGILSDemodSettings* ils_demod_settings; bool m_ils_demod_settings_isSet; + SWGInmarsatDemodSettings* inmarsat_demod_settings; + bool m_inmarsat_demod_settings_isSet; + SWGInterferometerSettings* interferometer_settings; bool m_interferometer_settings_isSet; diff --git a/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodReport.cpp b/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodReport.cpp new file mode 100644 index 000000000..487478c2c --- /dev/null +++ b/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodReport.cpp @@ -0,0 +1,131 @@ +/** + * SDRangel + * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time --- + * + * OpenAPI spec version: 7.0.0 + * Contact: f4exb06@gmail.com + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + + +#include "SWGInmarsatDemodReport.h" + +#include "SWGHelpers.h" + +#include +#include +#include +#include + +namespace SWGSDRangel { + +SWGInmarsatDemodReport::SWGInmarsatDemodReport(QString* json) { + init(); + this->fromJson(*json); +} + +SWGInmarsatDemodReport::SWGInmarsatDemodReport() { + channel_power_db = 0.0f; + m_channel_power_db_isSet = false; + channel_sample_rate = 0; + m_channel_sample_rate_isSet = false; +} + +SWGInmarsatDemodReport::~SWGInmarsatDemodReport() { + this->cleanup(); +} + +void +SWGInmarsatDemodReport::init() { + channel_power_db = 0.0f; + m_channel_power_db_isSet = false; + channel_sample_rate = 0; + m_channel_sample_rate_isSet = false; +} + +void +SWGInmarsatDemodReport::cleanup() { + + +} + +SWGInmarsatDemodReport* +SWGInmarsatDemodReport::fromJson(QString &json) { + QByteArray array (json.toStdString().c_str()); + QJsonDocument doc = QJsonDocument::fromJson(array); + QJsonObject jsonObject = doc.object(); + this->fromJsonObject(jsonObject); + return this; +} + +void +SWGInmarsatDemodReport::fromJsonObject(QJsonObject &pJson) { + ::SWGSDRangel::setValue(&channel_power_db, pJson["channelPowerDB"], "float", ""); + + ::SWGSDRangel::setValue(&channel_sample_rate, pJson["channelSampleRate"], "qint32", ""); + +} + +QString +SWGInmarsatDemodReport::asJson () +{ + QJsonObject* obj = this->asJsonObject(); + + QJsonDocument doc(*obj); + QByteArray bytes = doc.toJson(); + delete obj; + return QString(bytes); +} + +QJsonObject* +SWGInmarsatDemodReport::asJsonObject() { + QJsonObject* obj = new QJsonObject(); + if(m_channel_power_db_isSet){ + obj->insert("channelPowerDB", QJsonValue(channel_power_db)); + } + if(m_channel_sample_rate_isSet){ + obj->insert("channelSampleRate", QJsonValue(channel_sample_rate)); + } + + return obj; +} + +float +SWGInmarsatDemodReport::getChannelPowerDb() { + return channel_power_db; +} +void +SWGInmarsatDemodReport::setChannelPowerDb(float channel_power_db) { + this->channel_power_db = channel_power_db; + this->m_channel_power_db_isSet = true; +} + +qint32 +SWGInmarsatDemodReport::getChannelSampleRate() { + return channel_sample_rate; +} +void +SWGInmarsatDemodReport::setChannelSampleRate(qint32 channel_sample_rate) { + this->channel_sample_rate = channel_sample_rate; + this->m_channel_sample_rate_isSet = true; +} + + +bool +SWGInmarsatDemodReport::isSet(){ + bool isObjectUpdated = false; + do{ + if(m_channel_power_db_isSet){ + isObjectUpdated = true; break; + } + if(m_channel_sample_rate_isSet){ + isObjectUpdated = true; break; + } + }while(false); + return isObjectUpdated; +} +} + diff --git a/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodReport.h b/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodReport.h new file mode 100644 index 000000000..ae340d2e4 --- /dev/null +++ b/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodReport.h @@ -0,0 +1,64 @@ +/** + * SDRangel + * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time --- + * + * OpenAPI spec version: 7.0.0 + * Contact: f4exb06@gmail.com + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + +/* + * SWGInmarsatDemodReport.h + * + * InmarsatDemod + */ + +#ifndef SWGInmarsatDemodReport_H_ +#define SWGInmarsatDemodReport_H_ + +#include + + + +#include "SWGObject.h" +#include "export.h" + +namespace SWGSDRangel { + +class SWG_API SWGInmarsatDemodReport: public SWGObject { +public: + SWGInmarsatDemodReport(); + SWGInmarsatDemodReport(QString* json); + virtual ~SWGInmarsatDemodReport(); + void init(); + void cleanup(); + + virtual QString asJson () override; + virtual QJsonObject* asJsonObject() override; + virtual void fromJsonObject(QJsonObject &json) override; + virtual SWGInmarsatDemodReport* fromJson(QString &jsonString) override; + + float getChannelPowerDb(); + void setChannelPowerDb(float channel_power_db); + + qint32 getChannelSampleRate(); + void setChannelSampleRate(qint32 channel_sample_rate); + + + virtual bool isSet() override; + +private: + float channel_power_db; + bool m_channel_power_db_isSet; + + qint32 channel_sample_rate; + bool m_channel_sample_rate_isSet; + +}; + +} + +#endif /* SWGInmarsatDemodReport_H_ */ diff --git a/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodSettings.cpp new file mode 100644 index 000000000..755cb9f09 --- /dev/null +++ b/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodSettings.cpp @@ -0,0 +1,605 @@ +/** + * SDRangel + * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time --- + * + * OpenAPI spec version: 7.0.0 + * Contact: f4exb06@gmail.com + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + + +#include "SWGInmarsatDemodSettings.h" + +#include "SWGHelpers.h" + +#include +#include +#include +#include + +namespace SWGSDRangel { + +SWGInmarsatDemodSettings::SWGInmarsatDemodSettings(QString* json) { + init(); + this->fromJson(*json); +} + +SWGInmarsatDemodSettings::SWGInmarsatDemodSettings() { + input_frequency_offset = 0L; + m_input_frequency_offset_isSet = false; + rf_bandwidth = 0.0f; + m_rf_bandwidth_isSet = false; + rrc_rolloff = 0.0f; + m_rrc_rolloff_isSet = false; + pll_bandwidth = 0.0f; + m_pll_bandwidth_isSet = false; + udp_enabled = 0; + m_udp_enabled_isSet = false; + udp_address = nullptr; + m_udp_address_isSet = false; + udp_port = 0; + m_udp_port_isSet = false; + udp_format = 0; + m_udp_format_isSet = false; + log_filename = nullptr; + m_log_filename_isSet = false; + log_enabled = 0; + m_log_enabled_isSet = false; + use_file_time = 0; + m_use_file_time_isSet = false; + rgb_color = 0; + m_rgb_color_isSet = false; + title = nullptr; + m_title_isSet = false; + stream_index = 0; + m_stream_index_isSet = false; + use_reverse_api = 0; + m_use_reverse_api_isSet = false; + reverse_api_address = nullptr; + m_reverse_api_address_isSet = false; + reverse_api_port = 0; + m_reverse_api_port_isSet = false; + reverse_api_device_index = 0; + m_reverse_api_device_index_isSet = false; + reverse_api_channel_index = 0; + m_reverse_api_channel_index_isSet = false; + scope_config = nullptr; + m_scope_config_isSet = false; + channel_marker = nullptr; + m_channel_marker_isSet = false; + rollup_state = nullptr; + m_rollup_state_isSet = false; +} + +SWGInmarsatDemodSettings::~SWGInmarsatDemodSettings() { + this->cleanup(); +} + +void +SWGInmarsatDemodSettings::init() { + input_frequency_offset = 0L; + m_input_frequency_offset_isSet = false; + rf_bandwidth = 0.0f; + m_rf_bandwidth_isSet = false; + rrc_rolloff = 0.0f; + m_rrc_rolloff_isSet = false; + pll_bandwidth = 0.0f; + m_pll_bandwidth_isSet = false; + udp_enabled = 0; + m_udp_enabled_isSet = false; + udp_address = new QString(""); + m_udp_address_isSet = false; + udp_port = 0; + m_udp_port_isSet = false; + udp_format = 0; + m_udp_format_isSet = false; + log_filename = new QString(""); + m_log_filename_isSet = false; + log_enabled = 0; + m_log_enabled_isSet = false; + use_file_time = 0; + m_use_file_time_isSet = false; + rgb_color = 0; + m_rgb_color_isSet = false; + title = new QString(""); + m_title_isSet = false; + stream_index = 0; + m_stream_index_isSet = false; + use_reverse_api = 0; + m_use_reverse_api_isSet = false; + reverse_api_address = new QString(""); + m_reverse_api_address_isSet = false; + reverse_api_port = 0; + m_reverse_api_port_isSet = false; + reverse_api_device_index = 0; + m_reverse_api_device_index_isSet = false; + reverse_api_channel_index = 0; + m_reverse_api_channel_index_isSet = false; + scope_config = new SWGGLScope(); + m_scope_config_isSet = false; + channel_marker = new SWGChannelMarker(); + m_channel_marker_isSet = false; + rollup_state = new SWGRollupState(); + m_rollup_state_isSet = false; +} + +void +SWGInmarsatDemodSettings::cleanup() { + + + + + + if(udp_address != nullptr) { + delete udp_address; + } + + + if(log_filename != nullptr) { + delete log_filename; + } + + + + if(title != nullptr) { + delete title; + } + + + if(reverse_api_address != nullptr) { + delete reverse_api_address; + } + + + + if(scope_config != nullptr) { + delete scope_config; + } + if(channel_marker != nullptr) { + delete channel_marker; + } + if(rollup_state != nullptr) { + delete rollup_state; + } +} + +SWGInmarsatDemodSettings* +SWGInmarsatDemodSettings::fromJson(QString &json) { + QByteArray array (json.toStdString().c_str()); + QJsonDocument doc = QJsonDocument::fromJson(array); + QJsonObject jsonObject = doc.object(); + this->fromJsonObject(jsonObject); + return this; +} + +void +SWGInmarsatDemodSettings::fromJsonObject(QJsonObject &pJson) { + ::SWGSDRangel::setValue(&input_frequency_offset, pJson["inputFrequencyOffset"], "qint64", ""); + + ::SWGSDRangel::setValue(&rf_bandwidth, pJson["rfBandwidth"], "float", ""); + + ::SWGSDRangel::setValue(&rrc_rolloff, pJson["rrcRolloff"], "float", ""); + + ::SWGSDRangel::setValue(&pll_bandwidth, pJson["pllBandwidth"], "float", ""); + + ::SWGSDRangel::setValue(&udp_enabled, pJson["udpEnabled"], "qint32", ""); + + ::SWGSDRangel::setValue(&udp_address, pJson["udpAddress"], "QString", "QString"); + + ::SWGSDRangel::setValue(&udp_port, pJson["udpPort"], "qint32", ""); + + ::SWGSDRangel::setValue(&udp_format, pJson["udpFormat"], "qint32", ""); + + ::SWGSDRangel::setValue(&log_filename, pJson["logFilename"], "QString", "QString"); + + ::SWGSDRangel::setValue(&log_enabled, pJson["logEnabled"], "qint32", ""); + + ::SWGSDRangel::setValue(&use_file_time, pJson["useFileTime"], "qint32", ""); + + ::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", ""); + + ::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString"); + + ::SWGSDRangel::setValue(&stream_index, pJson["streamIndex"], "qint32", ""); + + ::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", ""); + + ::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString"); + + ::SWGSDRangel::setValue(&reverse_api_port, pJson["reverseAPIPort"], "qint32", ""); + + ::SWGSDRangel::setValue(&reverse_api_device_index, pJson["reverseAPIDeviceIndex"], "qint32", ""); + + ::SWGSDRangel::setValue(&reverse_api_channel_index, pJson["reverseAPIChannelIndex"], "qint32", ""); + + ::SWGSDRangel::setValue(&scope_config, pJson["scopeConfig"], "SWGGLScope", "SWGGLScope"); + + ::SWGSDRangel::setValue(&channel_marker, pJson["channelMarker"], "SWGChannelMarker", "SWGChannelMarker"); + + ::SWGSDRangel::setValue(&rollup_state, pJson["rollupState"], "SWGRollupState", "SWGRollupState"); + +} + +QString +SWGInmarsatDemodSettings::asJson () +{ + QJsonObject* obj = this->asJsonObject(); + + QJsonDocument doc(*obj); + QByteArray bytes = doc.toJson(); + delete obj; + return QString(bytes); +} + +QJsonObject* +SWGInmarsatDemodSettings::asJsonObject() { + QJsonObject* obj = new QJsonObject(); + if(m_input_frequency_offset_isSet){ + obj->insert("inputFrequencyOffset", QJsonValue(input_frequency_offset)); + } + if(m_rf_bandwidth_isSet){ + obj->insert("rfBandwidth", QJsonValue(rf_bandwidth)); + } + if(m_rrc_rolloff_isSet){ + obj->insert("rrcRolloff", QJsonValue(rrc_rolloff)); + } + if(m_pll_bandwidth_isSet){ + obj->insert("pllBandwidth", QJsonValue(pll_bandwidth)); + } + if(m_udp_enabled_isSet){ + obj->insert("udpEnabled", QJsonValue(udp_enabled)); + } + if(udp_address != nullptr && *udp_address != QString("")){ + toJsonValue(QString("udpAddress"), udp_address, obj, QString("QString")); + } + if(m_udp_port_isSet){ + obj->insert("udpPort", QJsonValue(udp_port)); + } + if(m_udp_format_isSet){ + obj->insert("udpFormat", QJsonValue(udp_format)); + } + if(log_filename != nullptr && *log_filename != QString("")){ + toJsonValue(QString("logFilename"), log_filename, obj, QString("QString")); + } + if(m_log_enabled_isSet){ + obj->insert("logEnabled", QJsonValue(log_enabled)); + } + if(m_use_file_time_isSet){ + obj->insert("useFileTime", QJsonValue(use_file_time)); + } + if(m_rgb_color_isSet){ + obj->insert("rgbColor", QJsonValue(rgb_color)); + } + if(title != nullptr && *title != QString("")){ + toJsonValue(QString("title"), title, obj, QString("QString")); + } + if(m_stream_index_isSet){ + obj->insert("streamIndex", QJsonValue(stream_index)); + } + if(m_use_reverse_api_isSet){ + obj->insert("useReverseAPI", QJsonValue(use_reverse_api)); + } + if(reverse_api_address != nullptr && *reverse_api_address != QString("")){ + toJsonValue(QString("reverseAPIAddress"), reverse_api_address, obj, QString("QString")); + } + if(m_reverse_api_port_isSet){ + obj->insert("reverseAPIPort", QJsonValue(reverse_api_port)); + } + if(m_reverse_api_device_index_isSet){ + obj->insert("reverseAPIDeviceIndex", QJsonValue(reverse_api_device_index)); + } + if(m_reverse_api_channel_index_isSet){ + obj->insert("reverseAPIChannelIndex", QJsonValue(reverse_api_channel_index)); + } + if((scope_config != nullptr) && (scope_config->isSet())){ + toJsonValue(QString("scopeConfig"), scope_config, obj, QString("SWGGLScope")); + } + if((channel_marker != nullptr) && (channel_marker->isSet())){ + toJsonValue(QString("channelMarker"), channel_marker, obj, QString("SWGChannelMarker")); + } + if((rollup_state != nullptr) && (rollup_state->isSet())){ + toJsonValue(QString("rollupState"), rollup_state, obj, QString("SWGRollupState")); + } + + return obj; +} + +qint64 +SWGInmarsatDemodSettings::getInputFrequencyOffset() { + return input_frequency_offset; +} +void +SWGInmarsatDemodSettings::setInputFrequencyOffset(qint64 input_frequency_offset) { + this->input_frequency_offset = input_frequency_offset; + this->m_input_frequency_offset_isSet = true; +} + +float +SWGInmarsatDemodSettings::getRfBandwidth() { + return rf_bandwidth; +} +void +SWGInmarsatDemodSettings::setRfBandwidth(float rf_bandwidth) { + this->rf_bandwidth = rf_bandwidth; + this->m_rf_bandwidth_isSet = true; +} + +float +SWGInmarsatDemodSettings::getRrcRolloff() { + return rrc_rolloff; +} +void +SWGInmarsatDemodSettings::setRrcRolloff(float rrc_rolloff) { + this->rrc_rolloff = rrc_rolloff; + this->m_rrc_rolloff_isSet = true; +} + +float +SWGInmarsatDemodSettings::getPllBandwidth() { + return pll_bandwidth; +} +void +SWGInmarsatDemodSettings::setPllBandwidth(float pll_bandwidth) { + this->pll_bandwidth = pll_bandwidth; + this->m_pll_bandwidth_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getUdpEnabled() { + return udp_enabled; +} +void +SWGInmarsatDemodSettings::setUdpEnabled(qint32 udp_enabled) { + this->udp_enabled = udp_enabled; + this->m_udp_enabled_isSet = true; +} + +QString* +SWGInmarsatDemodSettings::getUdpAddress() { + return udp_address; +} +void +SWGInmarsatDemodSettings::setUdpAddress(QString* udp_address) { + this->udp_address = udp_address; + this->m_udp_address_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getUdpPort() { + return udp_port; +} +void +SWGInmarsatDemodSettings::setUdpPort(qint32 udp_port) { + this->udp_port = udp_port; + this->m_udp_port_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getUdpFormat() { + return udp_format; +} +void +SWGInmarsatDemodSettings::setUdpFormat(qint32 udp_format) { + this->udp_format = udp_format; + this->m_udp_format_isSet = true; +} + +QString* +SWGInmarsatDemodSettings::getLogFilename() { + return log_filename; +} +void +SWGInmarsatDemodSettings::setLogFilename(QString* log_filename) { + this->log_filename = log_filename; + this->m_log_filename_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getLogEnabled() { + return log_enabled; +} +void +SWGInmarsatDemodSettings::setLogEnabled(qint32 log_enabled) { + this->log_enabled = log_enabled; + this->m_log_enabled_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getUseFileTime() { + return use_file_time; +} +void +SWGInmarsatDemodSettings::setUseFileTime(qint32 use_file_time) { + this->use_file_time = use_file_time; + this->m_use_file_time_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getRgbColor() { + return rgb_color; +} +void +SWGInmarsatDemodSettings::setRgbColor(qint32 rgb_color) { + this->rgb_color = rgb_color; + this->m_rgb_color_isSet = true; +} + +QString* +SWGInmarsatDemodSettings::getTitle() { + return title; +} +void +SWGInmarsatDemodSettings::setTitle(QString* title) { + this->title = title; + this->m_title_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getStreamIndex() { + return stream_index; +} +void +SWGInmarsatDemodSettings::setStreamIndex(qint32 stream_index) { + this->stream_index = stream_index; + this->m_stream_index_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getUseReverseApi() { + return use_reverse_api; +} +void +SWGInmarsatDemodSettings::setUseReverseApi(qint32 use_reverse_api) { + this->use_reverse_api = use_reverse_api; + this->m_use_reverse_api_isSet = true; +} + +QString* +SWGInmarsatDemodSettings::getReverseApiAddress() { + return reverse_api_address; +} +void +SWGInmarsatDemodSettings::setReverseApiAddress(QString* reverse_api_address) { + this->reverse_api_address = reverse_api_address; + this->m_reverse_api_address_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getReverseApiPort() { + return reverse_api_port; +} +void +SWGInmarsatDemodSettings::setReverseApiPort(qint32 reverse_api_port) { + this->reverse_api_port = reverse_api_port; + this->m_reverse_api_port_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getReverseApiDeviceIndex() { + return reverse_api_device_index; +} +void +SWGInmarsatDemodSettings::setReverseApiDeviceIndex(qint32 reverse_api_device_index) { + this->reverse_api_device_index = reverse_api_device_index; + this->m_reverse_api_device_index_isSet = true; +} + +qint32 +SWGInmarsatDemodSettings::getReverseApiChannelIndex() { + return reverse_api_channel_index; +} +void +SWGInmarsatDemodSettings::setReverseApiChannelIndex(qint32 reverse_api_channel_index) { + this->reverse_api_channel_index = reverse_api_channel_index; + this->m_reverse_api_channel_index_isSet = true; +} + +SWGGLScope* +SWGInmarsatDemodSettings::getScopeConfig() { + return scope_config; +} +void +SWGInmarsatDemodSettings::setScopeConfig(SWGGLScope* scope_config) { + this->scope_config = scope_config; + this->m_scope_config_isSet = true; +} + +SWGChannelMarker* +SWGInmarsatDemodSettings::getChannelMarker() { + return channel_marker; +} +void +SWGInmarsatDemodSettings::setChannelMarker(SWGChannelMarker* channel_marker) { + this->channel_marker = channel_marker; + this->m_channel_marker_isSet = true; +} + +SWGRollupState* +SWGInmarsatDemodSettings::getRollupState() { + return rollup_state; +} +void +SWGInmarsatDemodSettings::setRollupState(SWGRollupState* rollup_state) { + this->rollup_state = rollup_state; + this->m_rollup_state_isSet = true; +} + + +bool +SWGInmarsatDemodSettings::isSet(){ + bool isObjectUpdated = false; + do{ + if(m_input_frequency_offset_isSet){ + isObjectUpdated = true; break; + } + if(m_rf_bandwidth_isSet){ + isObjectUpdated = true; break; + } + if(m_rrc_rolloff_isSet){ + isObjectUpdated = true; break; + } + if(m_pll_bandwidth_isSet){ + isObjectUpdated = true; break; + } + if(m_udp_enabled_isSet){ + isObjectUpdated = true; break; + } + if(udp_address && *udp_address != QString("")){ + isObjectUpdated = true; break; + } + if(m_udp_port_isSet){ + isObjectUpdated = true; break; + } + if(m_udp_format_isSet){ + isObjectUpdated = true; break; + } + if(log_filename && *log_filename != QString("")){ + isObjectUpdated = true; break; + } + if(m_log_enabled_isSet){ + isObjectUpdated = true; break; + } + if(m_use_file_time_isSet){ + isObjectUpdated = true; break; + } + if(m_rgb_color_isSet){ + isObjectUpdated = true; break; + } + if(title && *title != QString("")){ + isObjectUpdated = true; break; + } + if(m_stream_index_isSet){ + isObjectUpdated = true; break; + } + if(m_use_reverse_api_isSet){ + isObjectUpdated = true; break; + } + if(reverse_api_address && *reverse_api_address != QString("")){ + isObjectUpdated = true; break; + } + if(m_reverse_api_port_isSet){ + isObjectUpdated = true; break; + } + if(m_reverse_api_device_index_isSet){ + isObjectUpdated = true; break; + } + if(m_reverse_api_channel_index_isSet){ + isObjectUpdated = true; break; + } + if(scope_config && scope_config->isSet()){ + isObjectUpdated = true; break; + } + if(channel_marker && channel_marker->isSet()){ + isObjectUpdated = true; break; + } + if(rollup_state && rollup_state->isSet()){ + isObjectUpdated = true; break; + } + }while(false); + return isObjectUpdated; +} +} + diff --git a/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodSettings.h b/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodSettings.h new file mode 100644 index 000000000..be2c90cc6 --- /dev/null +++ b/swagger/sdrangel/code/qt5/client/SWGInmarsatDemodSettings.h @@ -0,0 +1,188 @@ +/** + * SDRangel + * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time --- + * + * OpenAPI spec version: 7.0.0 + * Contact: f4exb06@gmail.com + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + +/* + * SWGInmarsatDemodSettings.h + * + * InmarsatDemod + */ + +#ifndef SWGInmarsatDemodSettings_H_ +#define SWGInmarsatDemodSettings_H_ + +#include + + +#include "SWGChannelMarker.h" +#include "SWGGLScope.h" +#include "SWGRollupState.h" +#include + +#include "SWGObject.h" +#include "export.h" + +namespace SWGSDRangel { + +class SWG_API SWGInmarsatDemodSettings: public SWGObject { +public: + SWGInmarsatDemodSettings(); + SWGInmarsatDemodSettings(QString* json); + virtual ~SWGInmarsatDemodSettings(); + void init(); + void cleanup(); + + virtual QString asJson () override; + virtual QJsonObject* asJsonObject() override; + virtual void fromJsonObject(QJsonObject &json) override; + virtual SWGInmarsatDemodSettings* fromJson(QString &jsonString) override; + + qint64 getInputFrequencyOffset(); + void setInputFrequencyOffset(qint64 input_frequency_offset); + + float getRfBandwidth(); + void setRfBandwidth(float rf_bandwidth); + + float getRrcRolloff(); + void setRrcRolloff(float rrc_rolloff); + + float getPllBandwidth(); + void setPllBandwidth(float pll_bandwidth); + + qint32 getUdpEnabled(); + void setUdpEnabled(qint32 udp_enabled); + + QString* getUdpAddress(); + void setUdpAddress(QString* udp_address); + + qint32 getUdpPort(); + void setUdpPort(qint32 udp_port); + + qint32 getUdpFormat(); + void setUdpFormat(qint32 udp_format); + + QString* getLogFilename(); + void setLogFilename(QString* log_filename); + + qint32 getLogEnabled(); + void setLogEnabled(qint32 log_enabled); + + qint32 getUseFileTime(); + void setUseFileTime(qint32 use_file_time); + + qint32 getRgbColor(); + void setRgbColor(qint32 rgb_color); + + QString* getTitle(); + void setTitle(QString* title); + + qint32 getStreamIndex(); + void setStreamIndex(qint32 stream_index); + + qint32 getUseReverseApi(); + void setUseReverseApi(qint32 use_reverse_api); + + QString* getReverseApiAddress(); + void setReverseApiAddress(QString* reverse_api_address); + + qint32 getReverseApiPort(); + void setReverseApiPort(qint32 reverse_api_port); + + qint32 getReverseApiDeviceIndex(); + void setReverseApiDeviceIndex(qint32 reverse_api_device_index); + + qint32 getReverseApiChannelIndex(); + void setReverseApiChannelIndex(qint32 reverse_api_channel_index); + + SWGGLScope* getScopeConfig(); + void setScopeConfig(SWGGLScope* scope_config); + + SWGChannelMarker* getChannelMarker(); + void setChannelMarker(SWGChannelMarker* channel_marker); + + SWGRollupState* getRollupState(); + void setRollupState(SWGRollupState* rollup_state); + + + virtual bool isSet() override; + +private: + qint64 input_frequency_offset; + bool m_input_frequency_offset_isSet; + + float rf_bandwidth; + bool m_rf_bandwidth_isSet; + + float rrc_rolloff; + bool m_rrc_rolloff_isSet; + + float pll_bandwidth; + bool m_pll_bandwidth_isSet; + + qint32 udp_enabled; + bool m_udp_enabled_isSet; + + QString* udp_address; + bool m_udp_address_isSet; + + qint32 udp_port; + bool m_udp_port_isSet; + + qint32 udp_format; + bool m_udp_format_isSet; + + QString* log_filename; + bool m_log_filename_isSet; + + qint32 log_enabled; + bool m_log_enabled_isSet; + + qint32 use_file_time; + bool m_use_file_time_isSet; + + qint32 rgb_color; + bool m_rgb_color_isSet; + + QString* title; + bool m_title_isSet; + + qint32 stream_index; + bool m_stream_index_isSet; + + qint32 use_reverse_api; + bool m_use_reverse_api_isSet; + + QString* reverse_api_address; + bool m_reverse_api_address_isSet; + + qint32 reverse_api_port; + bool m_reverse_api_port_isSet; + + qint32 reverse_api_device_index; + bool m_reverse_api_device_index_isSet; + + qint32 reverse_api_channel_index; + bool m_reverse_api_channel_index_isSet; + + SWGGLScope* scope_config; + bool m_scope_config_isSet; + + SWGChannelMarker* channel_marker; + bool m_channel_marker_isSet; + + SWGRollupState* rollup_state; + bool m_rollup_state_isSet; + +}; + +} + +#endif /* SWGInmarsatDemodSettings_H_ */ diff --git a/swagger/sdrangel/code/qt5/client/SWGModelFactory.h b/swagger/sdrangel/code/qt5/client/SWGModelFactory.h index bdface496..6ac923c2d 100644 --- a/swagger/sdrangel/code/qt5/client/SWGModelFactory.h +++ b/swagger/sdrangel/code/qt5/client/SWGModelFactory.h @@ -182,6 +182,8 @@ #include "SWGIEEE_802_15_4_ModSettings.h" #include "SWGILSDemodReport.h" #include "SWGILSDemodSettings.h" +#include "SWGInmarsatDemodReport.h" +#include "SWGInmarsatDemodSettings.h" #include "SWGInstanceChannelsResponse.h" #include "SWGInstanceConfigResponse.h" #include "SWGInstanceDevicesResponse.h" @@ -1232,6 +1234,16 @@ namespace SWGSDRangel { obj->init(); return obj; } + if(QString("SWGInmarsatDemodReport").compare(type) == 0) { + SWGInmarsatDemodReport *obj = new SWGInmarsatDemodReport(); + obj->init(); + return obj; + } + if(QString("SWGInmarsatDemodSettings").compare(type) == 0) { + SWGInmarsatDemodSettings *obj = new SWGInmarsatDemodSettings(); + obj->init(); + return obj; + } if(QString("SWGInstanceChannelsResponse").compare(type) == 0) { SWGInstanceChannelsResponse *obj = new SWGInstanceChannelsResponse(); obj->init(); From feeb757f211f0c3317dfc919bece38e312040177 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:07:52 +0000 Subject: [PATCH 02/31] Add Inmarsat C demodulator. --- CMakeLists.txt | 2 + cmake/Modules/FindLibInmarsatC.cmake | 31 + doc/img/InmarsatDemod_map.png | Bin 0 -> 673659 bytes doc/img/InmarsatDemod_plugin.png | Bin 0 -> 100513 bytes external/CMakeLists.txt | 43 + plugins/channelrx/CMakeLists.txt | 6 + .../channelrx/demodinmarsat/CMakeLists.txt | 72 + .../channelrx/demodinmarsat/inmarsatdemod.cpp | 671 ++++++ .../channelrx/demodinmarsat/inmarsatdemod.h | 180 ++ .../demodinmarsat/inmarsatdemodbaseband.cpp | 184 ++ .../demodinmarsat/inmarsatdemodbaseband.h | 107 + .../demodinmarsat/inmarsatdemodgui.cpp | 1951 +++++++++++++++++ .../demodinmarsat/inmarsatdemodgui.h | 248 +++ .../demodinmarsat/inmarsatdemodgui.ui | 1157 ++++++++++ .../demodinmarsat/inmarsatdemodplugin.cpp | 94 + .../demodinmarsat/inmarsatdemodplugin.h | 51 + .../demodinmarsat/inmarsatdemodsettings.cpp | 399 ++++ .../demodinmarsat/inmarsatdemodsettings.h | 88 + .../demodinmarsat/inmarsatdemodsink.cpp | 521 +++++ .../demodinmarsat/inmarsatdemodsink.h | 198 ++ .../inmarsatdemodwebapiadapter.cpp | 54 + .../inmarsatdemodwebapiadapter.h | 50 + plugins/channelrx/demodinmarsat/readme.md | 102 + plugins/channeltx/moddatv/datvmodsource.cpp | 8 +- sdrbase/dsp/rootraisedcosine.h | 44 +- 25 files changed, 6245 insertions(+), 16 deletions(-) create mode 100644 cmake/Modules/FindLibInmarsatC.cmake create mode 100644 doc/img/InmarsatDemod_map.png create mode 100644 doc/img/InmarsatDemod_plugin.png create mode 100644 plugins/channelrx/demodinmarsat/CMakeLists.txt create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemod.cpp create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemod.h create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.cpp create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.h create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodgui.h create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodplugin.cpp create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodplugin.h create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodsink.h create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodwebapiadapter.cpp create mode 100644 plugins/channelrx/demodinmarsat/inmarsatdemodwebapiadapter.h create mode 100644 plugins/channelrx/demodinmarsat/readme.md diff --git a/CMakeLists.txt b/CMakeLists.txt index fb40e6f46..984eadcf2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,6 +101,7 @@ option(ENABLE_CHANNELRX_FREQSCANNER "Enable channelrx freqscanner plugin" ON) option(ENABLE_CHANNELRX_ENDOFTRAIN "Enable channelrx end-of-train plugin" ON) option(ENABLE_CHANNELRX_CHANNELPOWER "Enable channelrx channel power plugin" ON) option(ENABLE_CHANNELRX_WDSPRX "Enable channelrx WDSP receiver plugin" ON) +option(ENABLE_CHANNELRX_DEMODINMARSAT "Enable channelrx demodinmarsat plugin" ON) # Channel Tx enablers option(ENABLE_CHANNELTX "Enable channeltx plugins" ON) @@ -824,6 +825,7 @@ if (NOT ENABLE_EXTERNAL_LIBRARIES OR (ENABLE_EXTERNAL_LIBRARIES STREQUAL "AUTO") find_package(HIDAPI) find_package(FFmpeg COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE) find_package(GGMorse) + find_package(InmarsatC) # Devices if(ENABLE_AIRSPY) diff --git a/cmake/Modules/FindLibInmarsatC.cmake b/cmake/Modules/FindLibInmarsatC.cmake new file mode 100644 index 000000000..59e4595bd --- /dev/null +++ b/cmake/Modules/FindLibInmarsatC.cmake @@ -0,0 +1,31 @@ +IF (NOT INMARSATC_FOUND) + FIND_PATH( + INMARSATC_INCLUDE_DIR + NAMES inmarsatc_decoder.h inmarsatc_parser.h + HINTS ${INMARSATC_DIR}/include + PATHS /usr/include + /usr/local/include + ) + + FIND_LIBRARY( + INMARSATC_LIBRARIES + NAMES inmarsatc_decoder inmarsatc_parser + HINTS ${INMARSATC_DIR}/lib + ${INMARSATC_DIR}/lib64 + PATHS /usr/lib + /usr/lib64 + /usr/local/lib + /usr/local/lib64 + ) + + if (INMARSATC_INCLUDE_DIR AND INMARSATC_LIBRARIES) + set(INMARSATC_FOUND TRUE CACHE INTERNAL "inmarsatc found") + message(STATUS "Found inmarsatc: ${INMARSATC_INCLUDE_DIR}, ${INMARSATC_LIBRARIES}") + else (INMARSATC_INCLUDE_DIR AND INMARSATC_LIBRARIES) + set(INMARSATC_FOUND FALSE CACHE INTERNAL "inmarsatc found") + message(STATUS "inmarsatc not found.") + endif (INMARSATC_INCLUDE_DIR AND INMARSATC_LIBRARIES) + + mark_as_advanced(INMARSATC_INCLUDE_DIR INMARSATC_LIBRARIES) + +ENDIF (NOT INMARSATC_FOUND) diff --git a/doc/img/InmarsatDemod_map.png b/doc/img/InmarsatDemod_map.png new file mode 100644 index 0000000000000000000000000000000000000000..b2aacc75b11001974448ed1c2aa98ce69f0bfb5c GIT binary patch literal 673659 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 w>4e+n!T6{s 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≧+!&|1rQMh@0lhcRi&VXjv! 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

)?O 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

    wkLxvnTpxGw+4%B`xoj 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

    q2K(E$tUc6ue-;z|BVh^lc+%}pab2}L0e z7H5T=Vt2+F{SHy~(PX2=CrNJSx-i;vLQJWq2dy4Ghb!zegKorTupKv$|8FtIJ)SV6NQ7c^BMW`om|-?}BP{|9VSsPzz5(m$!4~&^-~LF9Ajg5OGy^G!&FV(s zO5x(#s97W}R%8qdi`{YBs{L{pYNVclumrI+(vwO{$5>;}f?;Vm8#eXaTmJMriPML_ zm1m?$VYsio?X>mLz}CJ<^tpA-@iEgh5xKzC-v{hsKC?1m~&)KuQ0 z0B=RJ*9YS0Mm6G@5@!)CkfvL z)8<(G0YcElO#oPYp%o4Fi!>!+fMPt07S24)D+dFh%)jNOSfnV3mVAF^5wcC@^~)n~ztz9U#D{_h=Pxax0CdS#xX>}jM@ky* z)qqm4N-_M4Xb1A4D`dNv1yFd9@@P2@2v**`?=sPC8QpqP9fS=_zb`9fxN~!Qmd7T0 zq@CdYQ(4{zAa7}D7mERlSluThjW}S!_wk#i-c&^I*x(q>phuqALELc4S!z)p#?2GD zNH9}-Sgh>b$+F8r=io*+yd%G8zDe(zPFsl%HXf%9Zbkot=I8Cw^_%DhM zOs?K%fq06yJM~FR(sQ3U2e$xH`zHa zwItK+>2G!Z%@@4kJ!7KHEUXTQ07oVgh%8n^8caTTSF@CRs_YJD{u9B+2LRFKMxJgS1px|ncfG+eSMQIO!lj|(SGqc?Io_bjUKV&yP~5n&Y%H4Z4l4- zX0#8Sb@!*YE=h)CPoRcGmMHcD3UGp*r_~%p@&-TEtXJ5o{bvDru28KI1s^7%nIj$& zco{w?)+bVwF{7?&oR!XEH>%N=+f_osdxM%BOhuLMs zM{IP2-}Q2;vTBtP1o>!rrtONrM<}axfP-C|27ZdSndh=&L?`fp79cNxpxX)nk&?Bb zs-guhX;2S>rcR1Vh=-Mtlh!HM$*Rv<00&;BZa(%{<@Q4*cz5i%dQx9paF-5H)x78R3%fyQjftX>U~`rFqcOX6tj<#A-`(etAF5s{>!ch~Q^ z-(9Lx+pkEIr(8s(#MDhuIn31d%Rb_19%2p2M1WG7gE-l%{6Dhc`1=~GX@Xo_?+2rMfqFKgWN=myjw#F}&sLO?33z~B ze_rgiDK>9TcJP~At4C!c3F{+6Nu28%sMw_4)w+t>x)WZFuQ-e}lbzgpmFMIlIs}s| z2QVf{`lk!aGq(r=E-*NvtJR1NuS`jShs^qQ$<|$in|zYHm^Y3uslVa9J`2L_^LM|D zjCDP4d|K0u&emBN)BeNnlHsPYhiWJDbXk67S!WZcVJa6<`?+&RF+uuPZ4L@PIABFKTtmZVJxfE>?D+Sm-m}p| z>Pt2sZZ-cTbZ~sJ?399p%QIqgf93$(Smt#%>IuNkKs}x>zJ=}|XxKeD6+Nc8&^(?5 zfFe?`xa$J!^tEjF9gBT1g(89s#X!&syOL=xt~h-R1E-IQ+`G{(POC3lQiFI*u1Hj% zY`1*U>l}Ff%75#mXSed;;)Q#`2ux<@5o4Xj?GJ(BBKN^RJL$V>6;Jl`xg*e(84kuQ zHw_W~%eohXuc%S9nK)>5wfRaQ_f6?zB~zoO0@t`;y9C5z_e$pb-iWy8eoD^MoZ-H^ z0H*ify&lj4Jda%AXzymcYll?bf%l@d19|r5wt=&u&Al8MF2ZriBDEP-!N0sa#Lwe! z%{_(qH+SVJ%9yb^!RcHXZ;qv#MN)w!eH)(bPk^s63K)IhZx?(qxh34#A>(29vFv48 zbZ)QtD<%Fi5Bk-hOSoV4O_i%b!|0iRe@lCveVd1VG-H!IwRL!|lvc?rBK0PHRUeo8 zQ(BGKH9I+g#K8ia8=Ry}$F`5_oWT6gxs zf?k%$jbslFfH5KWE`S)yJCLv<$hizG?yO|rp3)O^3FR6u zC(pU`fBC@~IAzB*`s<~X@-P5IqnEh>(Uai>s|3_A3B6=@J0 zvR=*AvO0si5(}iqQlf^g6?76PBvLUNxMQHCKVSr~9A-x(&pS^_gr=m9c77KKTbHk; z!sVvNvf`@=2P@qP?y^rj-kT@UFs7dOj?I3%{KD5 zd~DlJ%SX2`kfd{@wT*`A+SahwHsCuQ0WlPbXJi)@6Nu2Qf06uV-7=bP13-_^?s`&2 zC$XoVROVD*-*(@&^wq`LrQthfulq=ckpksVvpfnhteHBa$Mi4!c6+r^8Z!osx_Qni z^>4&#gGZu5+_u0##9O5XPvlq-D@Ls@@ z)a2gZJWBb3fQ6kl9FAzTnJ7n$lkromo@s?UKN2|!il~m5*3J+{UqFX223;cnw%lYc z*sAndgv(gI;PoC4R*|U;XQyJPF)ApwaUcqi81Xg&*BNS|#x~6nlY2R%K8Lx1Tm$I^_51oaTeKVbnL|b6`dhax3VzDP2RB(B_z5J*8Ff z+R~Lc6Q=R8EQ~NZ7_F9GLdc0Mg7hJUo^oUMeh~tA`ys^nZfWOk)2rwi4)}a*_#GykwbqJ` z7>Wo(4`exRt`FPm#?5te{L?N=VX7)e-ma)I@~=#G8a~1aQg;_57lQSbY;##! zX%k=^;y|(XYkrNU?`9d0f+|+?IOX=k z&Q8&6jw_rjqqK*;+NUFkk2*Km)J8#eiv~&EFh~ghPe|7 zapQ>nvpyTwoj^v_@9cbf)B99f?61UJ+beRgtq~I9Ly1jjO#Sr_NMhHKM^Oo`+!6m) z6TA0>0v^it&_#}(unz!2^&z-6S^Kl!a|)T-o#1OR-y{brbR_#44tQ_6_ zo%(W7n?ryn@_c9~q2piagl>FVyFH%>b+Xu{O|uLuS$0gH4-97-R&KzqR}`@qvI^J^ zY@skKufddJ7EDe{Xs~{5;=X3#slAApkna3NF8z``%NLYD#t#&KV|bSM7!Yh)jC>25 zmj}1R6f%s5a4Y^`hcX^MFN8%;IEUy}QgzDpR2Vu+Me_80#1huD_Vi_+KFX^nZE|Yx z-Vw=e3vC~w3xUk%32S;E!EYwI8iF^7a)a?8{@O+Hy?-_4p6IVep+fiL`P)KD!6pa*pi=zpE z*46GtjI_Nm*$SHDjAnaw5UZ%V?c=_QEqgRlGL|f@vp>kD$4oEuF?WAr3?&32DPVT! za8Ee)L-UW|%meTAn$+<4R82^T4Of;!)m4!bLdOxEMD2VE_E2|{_|P#MRTFS#!DH{e z(ogD(ufugT;(#Rt5t6z1A&BWXDC8I6{EQM0(-ZU>uw|-=MCmP4`?hsU=5nCu_RjC7 zhwxi(Ho4^2F((68UM2cg+Bc*ITz-0im~f00HIhW-4jc+>jv_^@e9c#CQF3JHggG*S ziw(WpvX-|bqq!oj<6>pT{wr#O9vq-2FcCvj25**UohV+Y9zH7V{koO*tH&}o@sjkK zkz{r`aCc8y(1!Fce$|dGgP~?AsyrhGn{#XVzg|BZqEi2=gSqDeueuT%czm1-IazAI=<+-0#7EK^DbXR z*4rvlLSn!hlH{&nDn|nO=NGzFdH%mbF}yyqFqPR4Vb5B#+dvU+)`Sjyy$(i_x@!I! z^+MVmizxw=XN(Jic>N#-+1Bgk7;304052R)oK8k4o>L4^T?wns-wFjo=m6DYoV&A% zPjW&#;{?21%xqTWpJ!@MNQV;z`V9X$CJ(*;t*nsixNh;OGi2Y-W~t1eQ(x4i{*UFl+kxZ_T4==}!brqvvbMN^a?g(mFK436ohgydv6m|qO1P^ndHF`xGj@C!}e#MF{`K~3E z#85%fEHJZG;1~e4zKStH$+G4lmGr^hacJoZvHv)scweWJb#F7(;LCyVjMmBhkVveRa z^uyUqn_o4bY{vW53tP?FioxTehNnM#G{tk$YQB}uxoU|BE09kV7Z6^^X#!rMhbvlq zfBB*et$}dXfa(|>T*ifmzNqYAeZ(-s)qSuUYzCn+q}% z@u?i%n;U)Iwkp!Ei3@3Mg+9!z{wNuz{qV^DQ)3hCwiT7yANwK9TQC7a+l^;#r3+&1 zwyP`0D9f?Ou`m(hVL{~!u|WqNdshFH*g>{MU%vP1nwHxZHMr;u`nkP~6K88A!}}3T ztUQ!?2?H;Rd0g(k77hBTBRJ8j%RsJq%aoP3W7dQ*9?hbB-Dj{6zP1h>Y?5p zPxd~NbSvULqZUUqVgs$r&x-}wKXm@`N6&(F#j z8h(cD8Bd-IjK zU<}>6HAZS&u`<^32DPt??;JY3YLV|_e507Le}0=aOT%gFS$dX;@kkT;kM6n5ioInF z9blPJsz**GaI@Ea5%)|o+sjVxwMAUSu+pz4^HpbPI_?MREcL&K?tbmnz;JW#dI+|LG=Nty9>r#n84kxpD=vIQ_E@l;eq&Ogi4 z(E(x>Uw26kcN+~Pm8;{FhSE+P4QHK-qNZDvgitq(!&N&IOv`WQg7aU!s|k7b0{+Q(OqB7A0$zJ-6$&8 zH<6Va(M|Kb6CcQJKjzlVtMtwv*GZmC8z`~i3a<^EH3!>3x%|6tv`a6}iUSq~BMR1V zo&a5{tSoa0=*=WN+;tf+DvpG^fqQfSXTaaPR@~j^d0|+3L__TU?=HGde%~X!8{d6Z zB2yP%1~Ox}J!J6ps=Bq{-bl`>wmNc*_{^6XITt0~65{pTz4I#Cefy^`xcmSzHhTGa z+xwh=1;7r_OG?_7>Q?`Rw}X^+PRF-I>nlE~A_%^~+$TCGiV9{vw|{>a-|T$-Ra-D0 zeiHv4832>-uRWQivMNGTuc_|NzTy>h+{F7H*Lno>ae5PwV5;rjI$x`=>nvIdJHCnw~jdAve}HPUcDhyr5%Hm%SARAYR>?BAPsvNLpO@+&ke7U15E z{J%MVjZDC=y$+lh87r)`L4OTc=ckv-*&FW91Li_+a`)@NkD`DsjLT?HC|jzT1ltcc zm%(_3#DC|9?4GFn(vFqeRIbzZJHhma_4;n|=Y0QtU~0N63qL3K+^4ef`Ub&1t5F=q&Nyq=BD5$q#`m zmyHV%)g$}|je)HIwX=P}M2l3J9}@wxLF#hGKd@|*(zyeNZ!Z}PtmTpr%z zn#a9a=&dbqalQ(X+laf&fqX9-UGuWbF1WdkXtoYh*jHe3Iodv&d(ar9q6o`+kSCMv z8lVp$K8s&`GPTF|NG3A#;mb_MAC<4#jTswS)<;?*3qkD#s)O^7jBp3Kl||?Kj!~2X z>VEe}dzimTgm0d$Iev=8DnroCAm0W-&Fdc$EtwZVr9NB}XiyjDfb5zn!+~+UEyAxU zl&sC^X*+L5NRt=W57hA7;ZE)2!=rf(Z{{^<^uiB+AdKQ(JJ#;~|rtA?E+CT|*b#*mHg8w@P|NB$BQ~ZAl!wnMUw{X_~Gc=9gUPr?JV`x4wKgHqx z55cT}_y6Sdp@I$X{_xB-+Up)G{KxD3P3&e?``-rH|KGqlU@Ysb7i;U0Y8&T&`rkqC zd87T#A5nYO|1a*s-%sa9O5=|T%OC#JEzRq54tfzh7S=BLAG`K{x`i{D5AfuN1NmE{QVXz*^`xoHGhTOVE>U{Hid)}PU z{noAPJb4+ZH|_>ImpJa^@0#}>?C+;~q3e*MkmKg_+5Ooji(%n`DVAgoCv1}77mr$3 zQ{%9PNWcM*R)%P@CxMZXZDH^GsZ0WS-$Mze@Ua6qorpiu4Gf%%?|=KYxAkpHvu2$0 zseAwMe)*fKpWogV!Za_>t_=&XHsfNh3HFID_qD`ia32Q|OJn}9i713#3wcAj{bZ5Y zlS>&A45xle2RnWpIoj6>|Cz+c?Q%^Crb8Q!R*hDj6aX*%Lbo1X2hrNqO8w8A;<2lb zDsq<wUMm~*WT|as zI;)cE)YwJt%{AoMFElrwPs=QdJM7Ol#UvyIi@0o2oi6%R4=o{`GIHJ)YRXH>&DFaM z0;k98ySQNw=fQz^j8!eqzWyk~p02iySn3EhnJP1)60lT#?LFk>POamL z1A5MFCEaU}7u{;o9Tn+0EatqS3Z(;*rir?Nigl`_jmdWDWZQspuCA`%f#!oL!Htb# zMLJb@WGsq2YpEh)E$6crX_JfdZZozuOS?4-U00Xq<(@~@kcEA5oSDY`=5r{K`x4aw z%^b4!@_6Q;6^rPkZ{F|vl8WCPN^O{)5YgR>(y&_U`gE^9QqDqdSSA?`d9)bb1^~Z8xLe>?=kl$0C(-@AYI0=r3NT81yb` zeXs+wA_wS}Yx;Zl?j;F3W&`D#JdXx|m~}NZJ;z)nfOND+4rg@tB|LXTrn#jYyGPx| z!hXcc+THWK|9XY-8rSjnsyyV1gb8#qv;=*)&1y26T8<|YS_4*d%yOK&ZJcH);SI&S1Tfx>K|cPtYgVD~ znQJ{g;Wp)b%kS&P{XF3{Bywf^s|JXtk98#O2ds;s>pNakNhem3+)$kfcDTjND* zW_gx7Av|ZDzaLO=w2JOGlEqn#A73KtcO=yG0ljVq$ z&4LUbuVXNiY|-_UNp$iRw?X3+?lR22nVMATXPzpg1x**P1X7u!?YEyQYm?DnN9_6j zPNC$|`jGXr_O8~#-5oULV)tw8fVDCX* z0mOyjy;8_)>NW4nqsc+Zr&l>T4X&KNr)!i8LR92Kn8~n}i{rp+2e#BA72yqUlUIP? zn+PIf)e)mKUm-&Bja?)EJ!auRd>$DJK+`^Cam~DS_6NnUX<{DmFn9GGcS$jeAv!X8 zmpy+E$(@I6>4AJ*Ue=}K}cZCKrBo|)M zZEFA!Xfjsiq#n-wHG28WeKWV+W-{Lyh7&u)_PlIbfETIQsc zb#a{1&1YMMEFyh}`m7sk;x%4Hv+&Kvb!BSMdyhFq zCiBXP8ElWMQ{(}{A|sjmc4PM}@)OweS0Bs5l+=O*d3Bn&*H7=9<;Kycuy>EChu_b| z*d~eRN?5cQ^-Ksm>;d?glZ`OVBmH3#9EXsa*e z&-(J?mQTkuRH$Qeh}FDnhdCJx{8I$1V%hs4s&)qMOZS*~?5=))Zb>57O7z;TnuPxH z=wz7&y88}wcyAZiNRud|FTFp3ogjU}qpJA}d=CK|bW(8nFw>{;DE_%SavOKX3RHxU z*|!>MwBWst1&2O|qjJKoJ4w|1cs$XAsX(%ptFuD+&b+4@C8zgp^K%Av74jffZ5%g7 z9`h3-htl{*-$dm!5STlQ7?Oi$ss|g1veTHD;T|1H*Ob>sE!UJ6W0IF~8MOUN^+Ge* zjfEG2h-(7O2f_Up{ra40cI7Q|#ADwU-LB947O%;22D6uY@==5GHFk5KU@+Q)U96U) zsS1l|4+xM>(pPL*sl%S*gvG+AU5cpJd>wVda&4a^SVs6Q0ex-4-2iQC$5Qy^(4q5X zM|7P9Yq&%*e2k=RNjypD3&S_L1ioth52(Fo%1v$MTlye%PFT)DTXQsn)XMbRi|#*x znzZ%CP5I_fE76hwNQ>);o+1&lo)T7*i7>wUqK%T$1-HdE|1 z(G_~ESZxo>Z|0%Iw}|T_`)k&#mL}T8{9x)Oz>H>hq-x{9+h(r`V28?XoXq%~C7wyM4sP#Ga_6akbL@6!xbW z0mLh@#&#WQzh0X(^s@~LM|bI|hCX@8o-^*?yAnk&3Uyb#s~wFVPBoFw%6_VT$QHVH zFTkB}o>FvFCLDk5XWhPQhm##*6=>kG_An0AcW#YG)el5EJdM1whC5s_EMc>5sUAK{ zJCoN4m*|}0gw0Yhdt*!H`+RwfF=<_D1#joU z*c%|W7*2OY`v&wgT15D2r~CI>e`Ewtz`!DE zS2eRK=3TQgG`n6ljy5ml$(HY2DnyS0A;5RaJ-H+qsR!ux8^5x+nDL2;8Nl_x@3nZY zAi;V~eJyts9%GBF?Q7iMS9#)Y7I$5CbzIYu3{3G>JH1`RyNe>o~1ijb6X*YAU9Fe8{RClsT#M#xI$J(5??J`eI$b8i#05xo`18Hf z%Jdhf4g#vnA&DTO;x=-x7ORfU7NEdArL8GGku%#J@#;Go`9-beCde|2D`ElMBiWnM z^&LOP*JEf(#M`}e^1ao2+$9z6XH_~fJna`gPu<8Rn=^fCi;0CGX*LsOS3?ej>D(iP zsW=zmcaM1JH#jGVj(VJ0(zmg$CW=LMM+g}Q7wa5uIzUtNn+M%_nToFULfd7$=Y_;X zt2%0qAEgK0=~*dKk$e>8fVq}4*{RPXCDmrLD5_u3Aaz_LpSgknB$d`v{O+!YFNh1V zSMRbd{Txd}y-tg)JAmX3dP+@i&V_BmdoZA+gA*3SK1#mQ4)CRJ+O?a}W{u;b*jbQ$_`~O#NkZurRK)jUv#j%}WCE|LX4g)a`7B`9 z!Y9}Q(GvIL2T?EP_3(>KdY7l%h?c)ABi$4L!zO|(fL9%ZLyj7qBt5*wg-U#>OmrfU8`b0tHohD1&%aj2`yCbELnv zC0eJH2gt3Y`H1Gf+xD62XemV8&Tvat4BOQGE_@J?^(h*;j?yCU24$Es@G6Y+Y zoZ#V2IYWgUWsS$lm*soX^&&hD`!#!ZnJ@~?_As6f)RuH_;}y>J@E7`w*%t@7BWiea z(ac#N-I-uT+sy^*9_(3A5hn@O;3zb*QOJVkYg~TcBa#_(dLYuw!vKqN$g$(YC$e&9 z&Be7U)#XOB(^r%QKFhCY7^#|LnZB#8K^e}VtVOi3qdel0s|*m2 z8O-#FRZ^j`^?7b>bv269lOLv&QaSBzI+g+IAI$v`VhXv(61+wBJa+SGhsf8eC88&O zG@La(Z>FV9`F|cHedmU`@$_x(<~9|l4_Fq&fwo^aM6$!QSzd2`wAg4IN*!oB8a3Gx z*}kw-gC zk6{H8qvldyLMCG z#wf!QPOZ1_L<z2gJ z-u+0G^}w_VcA>~M-~33YdvC%?W!)!B^v&m)kj74G4Ar}f5;(*C=N^embTUGXT-8c# z%XM0bZCRN5?Z>-BJ_W~cSHk&~hI3_V=O31JP8^JB?Yzr$3gNUl<*B9e3l3XlK7DBr z!W!J)bUWN*mI#LPUU*SAxjvo{qgs39ogr>Kx}{ZNexJnHy`pDy&V-4mC`pZvIbrz~ z2UR($4cjDW;A>St+M&*5UxnI}*fwb^GV&wE-*=?E4^FcoWl0Z){J=w)vw0%J_swmM zzXo?Wh`*}}El_!rp_2GFn3-U1G6M^h5;8@=G*M#^;4+OT|SV}YkX!PTah z2?^?AhaKOMDtK2HJRv)9#%nspFE>WNhOa26qy>1OlC%3;@dKD51!ObWznc2G6m0I1 zlUf2y#)KPtnqpIpn=R@~hsgcpK=KG%saBZCtk0*V|J+0(G(Efb10Hjy4^+M9p$@Ph zx|?1NqCkTN!h1bJq4VV>==qc*1HVfbvg8~G_eL%mw7KBwa4}o7`^}wMKNy@k(+WIuW%5{xGkot;nl`n_VjRM z(D$9@Lhq>moWg#0=@Ot}N3tr&UlAK^opr$*oZu_ny$A%(lfMSh0N1^D?%#{g9)3jq zt}SmvJw>~l`uRR^iqc{hSWW&0-Gy>;(cSL?X3;UCx7Q`)!us;b{4cmmJYdao8LBLP z=$2pCknFVi2}_@7iSnSMmdfxa1^1T|lnALZ_*ccwo=QqestTW)yK<8aFn^l67Um8G z)0E@qjr)eS>^27}6tZOBe)svP*IeuFpyOn7%OFiq{hT3`T!G0?x14F8)D=}rGNlE# ze90^3N%Q&1liW`C!``IesbSor^HJ7n?>*PSUV%HFo(WBlRF~n}7xw}#9$W}N?{<1S z^#b7>mPaxvQ_-Y1_5#Y(J0$0%Y&TuM!7nw1SC>CU;`ZEL(NOUe*c8NFrb9DHUFNieF%FTcz zcZ8p`-&qHbu`^+1_^m%e=rvcrBi-pM8a&o}X#w&}xg$U9XHC|`Ls2vpjPn>%N1b*` zsp@ccrt$SdgiB}4;s<{%OI>fh_NWRP(^lOu?8xpFkw84HuEgdPd85b%tMnx##);s* z#kwW}?~Png|K%a+{h02gy}>a42JsN0*d`+sVW&n^GJV!7`3d$&5-Q`WZ>eqbRP4i) z!M}dRe&{h@O;xI>WAHJiAjVU=Q^la>RO6u+#@~V>WC|+U&)DDm)2(hLtI+Jmur4(N zZRPB|c!oL7R@nD_4#RBL5ZN+-4l_Ln+vHtY5&dWh>I*gr3HZISm&1t4C&^i)sL;jH zXd;t-=N7PL8B;=5K~hoHn|a&GntR8t7RnY{mQB$TVeXA#|7)9R&)rX< z&g52SUBQ~qZwyE_XrjuNJ#@*Jbr;j%@_p~2=~oYOC)#;M(|G7H5{) zth$JabUmLT%A~t=;5Z*7P&rNHVZG!s2;p23;bZo662TS({m6IkC-5BxwR#`#)W^gO zMP?HHa>Jv^Nl^9)=N#@mG_mk!`U&(otNhwAVW{2Z6NPEsK(7RuQlV`8%YBf8S*SUe zPGygb&?X1Djpu{4lxSI_J}%iGqMA|Q`r)<}aA?U2*wE)FA;y{kS#>vWQXQNOr*n>q z?=ja7f%p2a-f}FC-ttSvl4uAird?j3h9l$E0qiM7`^?iAq-s7|GyvJ0VeviwcOP6)*2Q#; zeFZm%$wmt4U^>>M_M~p_0kYYNuIY01iR4hFsKp8pm>zGq4@{lxm?Jc#H8=P@dq@s4 zV$XvivfPJ8O}Y4^Dapx`{Nm{>Ek^!Hbi~<}m{=qIbv1xL zo;rV=k2&FYr?b*)T;@PCVf*N>Fmk{UNv?oLXUB6@z1gn10@vXJ`~Y|lMD)%!^9G&w z4z6sRnlS71E8b;28LnKir?5ulK5FJcdAB@=171dQ{e577X&k)UBPD9q!$^dqV5Y8u zg)Bj--3R(Y<0<IzU(dYu9( z-Nif|1|*9nR$_hKTO@0M6|M0|I|D9HvgR#U;@&S8E*x=D#x)kg{&pVXAb}}2*kkY| z9A~LWT+ne4z2y8pUWlCbDQZkb(sp&yix9mX!P#Ja=P(`eC2dCK>dBQWXy zNYY{1WOoCMG=5DwoP1LL=}qtZi$%uU;y7kwx-DO7haV#jF_~iCwA?hVQ1*b9qB-n@ zQ`X4-PIK#p>q|KMpS|{)HhvHa#fJ>jJY{H{%zN>RAt_oeD+w5VH|x7czbMb6mtPC@ z8>(YqT1d8M^N>oL$)Vg4KEXsac{zc!-$T-Xp(csa$nH7xmGkZVyO1^}yed=@rJSV) zA?OMFwku~eF}%hrzW$y7o^>ZE6d_?-@5v|qO?klvQ-VzAb0!n(SvS+ zH~f=;{rqgB2X0F+8<%&*Z$|U&pT%lTo-Y5Sw;;B+ssI?k*7|!#vgk%rffD&V7C#)6 zWz-t%)B#a-SI1-~rIg$qIt=F|B8T620|T=eHaAkcSm*!&EiT*BSgf7xFz667|!{ z@37x|r7Lo@NShzyHh+94`<1h$L*PGY05c%t6!Q;df$^(XB7f-|%v|{bRmAGEZ{1P! z9m)I_4i_hmD2UiEqdf0c8;mu)S#P@F8;Oo)8ehOpn>u|aYSlok;mZ*F4{&@!Jc$($dK?+Wt8z!OF{UBS8JWwcq zMB->%gXP&)rBT?rj^f}DG`{_yKc>a!_TGTgYB@1govDW$fIZ`0;jhO3JpO9}$6l5? z3^BG6Zl^Bbwln2lRK)S_(m$zs?XD{qU1$;1*>EPN41Bx&_K3r3T)PgjNEuNCvbYn$ zPl=&qu8jdAijH}sG$eCj!EO@KZ|@Z>#?RKAC_DFAT4mUaCDKQV9bbIA12!b);`c?U zrQ&6Tuu6X>Oo@2*cR5Bs>H>Nx4ZZzQ$l->f=k5&{@@24Hdar)vGjioH_~@#~{BE^n zNm@8qZhe4mU@oS;4q_w>-%QKdyqfD-*Vb$IY@F&8k#LwcCr{P4xt6#!2B2KrnJyC( zG2X=8yp>opJo)2rGpH;eG{23QsJ zDz6R~@(OktOEPoA_L{jm)VzMLpMA9a^4CXjh3@yW^!E0)^~SL>nWEZ*AFvEod!W{v zf0t87ubs}6e}DsntSaMMHln5Fo4^zjtYZV)dd0EB6B^^S~5kk=;Gn;~bTpdjY>w7t%aZk!6X`2dm}b;A#%Af9B)n z6<(%{fBhdHBd{H5DKa`35OBwNe_q`6%@~F9jRVc2}hXP*Ed)G`yEL=qn`*# zhW_8hzyuI+#(>fbKpnS}^7wWill$5a<4nExHl7XHiP-OQl>8y7JoXD-=WK;gU6C=6zpEgg*a?_rV)z>BcUIs> zx(vtgZM4o?tiP6Bq&d@y{aiNuSL*zkGiwdC_LwF&ApSOS9sCd+Cf!-=U!Ry6HiJva&@J6b$GB2O zj?^=9&O)NF$!NO3?^~j_PYZoxx)*i4@V_z7hmKI`op(Q(aGTzk%4+&+`;W%z)}|G2 z=kP4wB3a(l)sa4X`x;77WzXlrP96UBx7bFv2o60-eUFPD#)x*wIF zDbscq`(0M~$y69aZ*N2Jr$B03s77T*(&GKf80NnfPWIG|_G6i((?3f;Y)yR2w4V5O zfApJytj6c;ak#R_IGZs>j7qP3smA;v^C;j({c5%N8|#J2Z2!?;n*r-zSM4kq?=e5` zdK-hN<+IM4crlnFNS3Xi^DKYwXwtwWx5|}d=9Q+;@jr5kvkxB&U{C4?0*=T^F)9_E z$ub0P@9?roGp6#MjJZr^x{zQj4+Z(lamSE*shx}c4b%KEPg zYQ2_k@_KB^3w-knCC=3)+y0~J9`CEl<}qy9$o99hXR`EIKao`Ac|=20}}EPiDvn#Clg2y z1jeBMPYV!MvZA@ zzYe2Bd~UP^!M7-V@Jp(?Gj(FNbWI#=V{Q!4xAo|M8DJJpQD3R}GAHC{G*c=tXd~5b zB9DWQUI-pJq*cH3SWk=pwnNf9J^c^b(`noiM#i)sHq@hABSj&b3MTJpeHfYvx+Q5D zC9YGv%F6usE3J1*Z?xDuBM2etj8S29oXGg#;wB_FlOJ>BVNggk!L%*35yY&(2&D_8 z7XLH>cWf2Zqg9oZm_70_`88rIyiOhHhI1F%c9aNKKVv%M0kaXVfuh>ZymT`4D|*h% z@k?5M8n#HWdRMMWrJ|uy1)5j9pZ*p@YTmCS!R9sJB1?*`vmA4aY|jRompEA>dLarDj57rgk=h7;mAVhfVVM zSQ*zGj66WEtUe2W3#qg-PS~~SM~W~h#2m5fV9d?{s4cRP7AQX2Do1w_i1 zA&91fxo)DBSdu~(S3ld+i}%D`RrjO)&uOHO$Xdr+u5_4o_ITZY1)n=CqrA#2Gi~s} zr+R+&B7CzZ@B3M1a3kAZ);wNdpP7|da8Qr{V$(O7yhpc*W5W_9O}jE7+rOx&FhY6u zz_dW@e@nk`m9H^_T*X_Ny4%y1)44G~zo)hbU5z-7fC3!2j?fXk+m?E~FnY|oqXf04 z)%ayiUgCR~zN9lfQz$|`DLCrbgJXL6sE$a>$7Z4Z za1i5Nct=?ZjNU5R>7!(6GcpF~4h{BlwDD-GbEWM%W1#sll`t~dI)imQWUR&lK2n}A zQ3F0+I=PJq<-M$bKF_U>qJF3gY1P5n~YMF4tw0PXr_yxvm|EIJe0&tQjT*;qzQiXrb;@fs&F7Y&+Rs1K$#nB+>k^(tdhn7f>jYexZOmlJK4@Rn7^k;wM6Q&5-LNT?!yQM|Hxr(#( z*nr#YSB25#S(PzRO|#~kv5zS=%9I@Zql0Z!lO;f%DO;Iw^wDF$-r10g*v0atuH zaZ+2DT;l$9&#rK@li1INNxbCEB}^zAVl?y72q6(~Q2Y**1Hz~7YZs@4bT6LSC|#~M zhLl7V9ZS3FUQ==CcWtb{pG_EThe}Z%x9LkRikK{w3^$h%;4R7HEiEQmBIyG|?Q61O z=ql;ZLkAy)+F}V|Gr+8ULYOe}i;*zcw46+&%FY@Sfa8@4B)VH;Ck!^GtLqAe5iIRq zSAmaf8+_dH|Hh-`tvsUib7!1t-^05hN0zh>V!q*QFtReSYXL4}`h0VX>?-6*(AueR zlP9Lw)5RGl$k&B=Zp>G6r3l#sqsN4Woen1M>CyhS z;!mUP8ZEjDpI*6IO^S(OyE5t|@sg{mRnniWI^u6KP}EBdm$nWuA(^6xTu`Iul#G%A z(P+T{z)82@Ux)5S4>g||g|ooO5}B?GCbT}gku*?7z0_rM^6}VS1qur_QNm|VbCi_z`<@_uQvjgo7gynOWmnBVH%9ut`5pJ)Pn@l?iaOvH z|DaK5Czw6aWfz$Jy$;sq^D(la*@b?$2+}Nh*R4uLu78vXs%Jb{oajFHV_3!jmA)A? zWSbJYrBRtG0rd-uQA@Np>!YpHdwF0TdAzA#92`wm-fv05fYm^>X^tO4i_r7)qjd%+ z_zOYxl*>8`fnBu8O%J)teehbgX%sI%Y(wvDYa9w=7DL{C=;I-lFzSkUHVr|_DMuva z)XVG6Uiff&-niFzz9KDVuG-^EGl^XT5vW!&nq!#P-TsRpHVYrHP^jLllIKsr9HLSM z2#JkgYZvn=>Ksse;kzqW`z@n%4=Ahc4gc+UpHk`y2o1Db%H25^iyn4mXbaKK87+-t zO7S>ZJ;>UaPjuO9yD0W5XG(N9tHnXp?6hqmOcY^PD+k0+VTHUiOo?v8Gtfr*I(H{6 zqDoYik=k7Z-N#f;)-uSF@T|nOTVuQiL=}od19abAD$e>=dWh$$A?Et_C&iU2=G&PTGwcDP(zyCX#+rCpF zO>d1I)-i>&O9aC&ql%?X7Mnx-S9S$vai+7$x?5ugk?_$x{Rg^$wBsThwrVh;J3Z|8 z@T0?gifKNBHpPU(v$nkl3I0XKv$*KEDTzu{&&T3#_eJqi2rY7(qE{LQd~{yS?8G@D;J!0-#(=Kz?mTi6(4qy z`V39XZ)Va_Tr*{C^nr>YIkl9N(-1gw{JOziA8gBfZ45e+NLb)?Oa87Kvp;ngXs|$l z>mLZ~me9FSRi6c*$qFWZSK1|qS)mxdC!<4`nu|X0Zt&iMN%~TGrSAvW?dnb+l~#0T zmTU%+7=su@Yh=CbFAsIgpnRf*M4rx;W?QhED%G5@P!KzD(HHds8;;fWVV56%>Qp@; zF|#rI)#Si*%&Q2&q~)}6*R{!wsNS^tunFDt?;>CqSr#xSz0B@kpQkUew7^%?*|i>E z7$Zt+?9MipV znT<5JZ^VoeH%$w@=s#RvXOSdTm}P_M&(s{=R1wE))cKLTiQqjy04-wo2iA%L^2sOa0WpDxcIZBb2XasiXfUh7dl zueX^L8r5$gN(9eGphK%e9!q zru?Zd_ZI+nd)99?HnTHYG+#Zi>ka3=l=>U;*T#^i!)2%*>;W3v-Ym(;>S&S?CL~ek zV;DyR*7NyS0zStK12b@veFg%fjh4y*>SP`RXtN9DaLczx5yitraojt{&FZ9k31t z4b>f{jzKsahRiE^Jknx(ju{oMQU~*?e&LR3?Uy69K#6FE2PqZ3+qoQewHXjDainup z@@bN$&qC^;`I1Lk&0VO}Ns{2cFaiQ#)ONyUb?y8tvHiEwXX}`P@TR$ZAoQfT{e;Em zcoqG4)cIJBi`W@AW8e%|7j4%m7u;(elby1&4LNb{*7PQS3_BP^>|D+koNPKUIAzd< zFznu$R(=D(SqHa;Wh^)jjy_!irVdFqMwJ4%D@rurrY4F>t$2%Cj{SY zNR6+I2mj=!=N-RE80N3;6@zB(Dm4UC-VWCz`3xaR>kQO+H1~F)iN+CU!QAUOTOX~_nz`AzTv8^VMbBBGo9&t;y1ly)K#D-YCO9mpOdTXP(z`UGL>*3C(X`J?1Ul@e_Yh!${6)V6rZ35!!?LN45hf zJ|On6>Ept;zo=@rE4YYHPM%vBI_Y^;c z_i*yRdo!NhIG56vJsKwV7+dG+)gM*iyUhh6nLZJqX26y6oFGWu`-oa!j~{!u#wLW~ zHj-6wCU?UHY|wF-7giYAOtfGg#M>CVN7cA!)&Hma#q^zW_<~N#>SOqkd*xYUUA57h?J_Pe;52yz}F*saiosl=0-@fTTK~!@lJQHJy z8VgV?SdP*N)s)XK{f<~1$9aBidaSNYjdHUw9b!wj)CYGw{vuj> z9zpNYBjM^rZoH3B=knh6k~E#k9h;+ z0eNx+$CmdXF@}y8^S65Lx(IVK;U@kL%qw5FiLEu`pWr#F_;1()Y7XZzzruLq4H~3OD|O^0?*2T=2Y@$R zWd$|AeH5_ud5w2toR?nZQju>iO&Sl1(qn7Zb zW~p@HPU(QhEz$hSmoOF=AD3Cv`mGA?BeI=9jg0J0K)CvXICj`ijFG-nMSNMfFX(mWxGO!Rp6_3Qw8-%d=KTvzOwnqSpE24%;W?E8s+Y|fOQ_aY>!LtPFIlyjLQ6M zy3%rDii(W_d&{54pM34J2bPQ)smIWI_nj!apAUgQBU7+UP=gF;u=Sd7i}Z z_Tiu5|L)_J`V2x@-l{feD&^+oG0T8fzU6b7RoHgG)CxY@k~c^&7qkuLbB9$gVUp{_ zqXUVcuGYPm*+*%B*tadUCL{T{J`PE0HMnCd#3ydvR@Q_b*^uOz^LiG^$!#U5!- zsve$AW}40Y?xey}0NlV{x+d?B{#Zeq{y!kvXAFo|y!H0QcKw=aRo@`yZ89h6+(~x( zEp>qIc>Vo}|6Au?8mvBZ)YEb9Eh^!5{dfss6V+Lpo~;pszmT#FFS|HgyXKD0MBV+j zb|pct6G(GpcVUY9;hLyQ+Q6Atg~7a+DaPKVB9;cb=5GisnanSxE!Ad7#ede6CnZ8JLFE&eewQjyt^+8ire&qY#=#9Cc{fi2k$sFlAn8TP-*l6w9 zQU0FGKY_>=&kRhk~RAd9vPd3Y5GdT*I3Fs42-n^X{6gq+vbU^3ATuxriM; zW2q)t4x6ypb*4GheB~WGE=Ii@XMeJ_@aEp-nLt~I>!s+7CMW@K&HJdBx9p5qdqEOg z=}z|}Z%jZuAojwyPU3a{E{L5#Mi>x4sSWHWy~lQx}ke<{kOl#2=Ctj z@mR)@T@Wshu+clBnLR;DE~)svhGM@h;dLo(S|_qpMcCyyRh2Cs6@_81_2oc5ce#I& zQxf2C!?MG*WXkq!^)Oy4+1Hb+a5ZY9{kZ{p^X1(G^r4OQrT0q*pYX)7P@2K5rRFOo z&Ni?<$-~08-CvrOc%md14lN9Q(m%KBVK%T&%9P2ckdU?h9Ehul*i@h-PPCNFO^+Jf z(CmdzhY>r)5ZJ6#oMDe&GR*66rkZ0VK5G-*reFL#TfJ(F3eimy_}Ve*c0XU80Ue^~8QJ0E`*cKK>FZLZ44>l6zr@7AETfJPiQzb~!M#@i zjR;fzqkj%nm_xKF|IOh)gQ#b6@MN8*u&;j)vhZY2%o*nJKZEaXxiz}svJSx>-)Z)w z)AEo^nJBel+z{NR4m zrVj*i$}2+WJY|&jk(S~06Hj5malyz*`mV3P7K6JS+IrT%yc>M>`RGD~&J}N0|JFrp zpxWSeR*EUVvR$XB$EmOl_Ai@T&kvkoEMIIHTaMDiPz=L0c()8CBLPa*Fq7Cp>5UWo zpF5KNhPU+aoBYsAY30SA#;QnZG%f1NwSM)JcwOv1_N~Tb{unTeOlX1HR~y3SS=|p4 z!&P!9krES=h4$gl;i;U4p~mivez1Ri?BL19FLKQ_dPq~K{}H#djHmwgNz$q4fW`N= zv8=!zYwcmWI536s`pWYWK_umlh-Vu^D}no01=?A|ucTWrz8s$OZXe+_nri}X7b)0T z?4S%4uStbR#vbD8_TKjF9jm>SUDl@07P$rTfC$Ad6D|1e`|nA< zhpIxA-yUi!!?hFZR>a@b`!N%8W)R0JgtJ~}ab}F*AK7S17ks6S$q?;j&UAZ!kj2Pj zqh$hNa%M4vQ^(CvF15nt22X$i@~3*omJf;=TS#g0&6a`*yb9e86J?jJqND*N^7W2!n397V6QW?+7fO0>x0(`Jg#lrC%(s8mDXBw(-wD+$i!ks@#UVv9Qi2hch7L2pDxt%YXN&> z2Ft&^+4OBZLb)aR=+X*&Q@c-}e)XfV8}0l1DWC3m0=UZ*O5JiQ3NRX?-yNw9VNSo8 z)jx6}?5ea0pfOoD>8^ob){Oq5NgYS5?imrIWSW@-lQLsGxa%p(u}CW}(9pNH&6YkT zE1xsN#>uXO8>l~;rL6=_xnyci_NqArzOk5e5}U~*IF<)I2#&2o-Yvs?at9*U7Fcd523xzq|A>erWH6jDRoJ+*;(7P0(cv4J=8zQ z3!+~ER*(S5ScSvBx|n$cGgFGUB;!z8fM&c(BINGj3?06W0b}S>*y!d-5p`h|Ere(G zV{Qw6P72H-8jyjrNdTtK{xE$fxZ*T+P)ijMU2Bqv4{i=DFQ&=1$$S09E<0txjTqlQ|u<;K@`b>oDHD_v&2xsV!IwLvPhNQzgWzc?=mr0{0!C&`RXH*S&rDp-FUq^OHVx)4^H$hII#lc z;#hXQWBWsz-1!7q2^-6{@8`hBFP(nP#k4F@UIchBg*-xv_U6C*iQ48gsvLWd=AsH) zKl*krzT&%+#!%Uaqs2lEu!DyKsY`b@BL<~O3@p)y{3(!wT7sOu}W3ZjZwzDix8$s4q1*BTP^jbv1Q?k0fQW#Q(QO+JRvwub{$mh zemB$}X8N1I`fW!;+2UvBq$#^6i5E_HpKG5ZT$5^L;MDCDUHZy2JN3wsW)I=lV#l1H z^*sIDOi?-VJ*kHzz7hk62>IHUAD1Vu;MB$g7iq$)xvhK;j!zxJ!MGrvWYz}znCIbE zc_Y5UbvdWdq>Cj&I=$07a27u{1oS=mI(Wvupv{gagM{0>rdq?4Da&&2>_pqyN<;FE z+i^7G``4e@PZqm_PWUfP6hs-^~zFIePwx8t5)Wb(yJi%G%T3d|B z0IZ~)cWa|N4POBwf|y{>A(($I0Mx466>U5pnfsYkf>~0jr!aO*K2ygeGSHuV#*WEn zPXC-?2J;^Du1`e9ff|4opS16OeA0Icd!55cqsXd(4T#oBh#V$#@T$RTf( zCGMj~s`$Y`3PBI`SApp#qf1s5k3M-V(OBrB^;lBSa7qH5j6k*5IZA{>se_Ht2hQEj zhn`Lkn}?`#1g4GK(1!2CnvE%|8+TJ+R*YWWoiwYn`Irwd-!@GEB@G8sFSLZR#)Du_ zLtwmV)sDRBjg3~7e<&(Vl|hiX&3^ew47e+E>-l&vL1py(w&n z(kmBoyas=-DpuLPmzzG^h+BT&%Ph&HEWA`xnsHR5SSXkAl+0eISSnhAok1Dz|4{bU z0a0&XyZA8>1Q8IF2Bicu`mXeYNX@)Kd>2A1t&~wiB z{k`|z_x}EIWag7Q)?Rz9XFX4W)j)<)Wb-H9(emkYWqi-^t;plZ4%wWc45i?=B_sv5 z<40;vy&U`6B=s2;*V3m+g$qev7OEO3uCkL+vZ}3c+1}&(|>cE zP;M0JOImjXFDts1Vq(byjoHKC=Q)P^D~-k_#J3b3574E!Y5za|*59Z7hZ7b_12T|j zqZVtroOdPUxPtlRpEfjUrdDmD1A0*ZX2WmDAxPJIqe z1z@9PfZ(w8wV>riSfnT9ZD}vbmxhnJ-nGJtFR4my9Y3Odj?iHLPcQV!C;hLksT^21 z8Xd^^Ye}9@B8W#o)Rw3hV>w{|V?q+hWV+B^&G3JH)c;MJ0jv;TZfRaJPPknx7m~>; zS^~)=7Y+Uwg8Juw_!Cs5y#>`#ZKkE}@aXO=sf`wr(AFQsBWZ`7ms&ItN{Z6~1{_6) z>xAvI^Uqxq4mY+me0NYj{c*cJ5!-2R-8mI6)6+`wjK!&Cl=B`rUlHFM)VFJcI%qb- zr~(*L2h>4p?b9wV+ZHd&)-M}{t1eC*4^q5MRQ-NC?Vu4#+OTdS^ZJrIo6_wy+N2N5 zpCIMABD)8vkn)1RKc0dQYNR~slRrb`KtC3u`7S)G* z==Sxb=~kn=AF8=SxJ#_EvQb!PM8z9=v?cMP?(hL>>!s<`-Hh$suaZ+Ry$e_`uKf=$ zK!vR7__u-oOB?>(>JQo%UxxqQmi^Z$05)lVZ`qZ`|qFd03}hw(g*v_t9mKaQ{u7w z9Zmy4>;D5(@jr2v)K@V>*^i(=2W~P)%4NC0PY15koGu%~xM(Zg^bXs*m5kBkMPvQm z8R1#n)Fs;G;Ax8Lcj3chGwp$6l0l`S&D9&f1Ix5`OdPvDvYC&U7i@k+JquRH;unLa z>y%ug^a=H=yZmQM_?Pb)Ir376YcxM`)GMmy3Kl^udvf2C>eb?18g*TM<3ctx{>Hw^ z5}`sHLFuX=p%!RLH^)bAWM1Px1__ zUo+?UgzEPz{m1!M6}~MB&uvAUa7fZm(1%oxYdaV+8X|8=!&6Mt;ar*{Tl*4MA-HJP ztJagCr9kFy8KMn(7cqaXRl|-URJ)t`%kyPKod7wGwHHR--NMGcT`BvWIT z#NeJMeAMf2IrRj&%Y^g8#%zbbZ+<^h{C&||SKS^gD}d10ZVCQWUCI3UY2mw$5JvQV zX9+d0tyOd$`|X>|7w1&rNy4W7yAxTCN9&vQvvBI^nc=dE^d59)FK2Q~U*++x*|QX* ziyY$t?4n{&6(ubvCkB|D3>(?YtVSfyPxkvVW$^X1z)%yXx=Ml&#DFrFh;F`+U#Y*+ zKUW@4!o4|9KH*JW?t3SGb;ESe+1(oMwKX{VzFq0tbnf=ERqYD^lJ;DS zhLf|-bREYh}h->4HPc_!tXXI5T}1LH8rEcluy9F5>tI?EM<*Y@?%21Tf(J zvL~p)`tL3EKE39{0=H}gFPj9Xmez`Xcj)Uro!MPivPxd6F?K6vI+si(`=okkyX&x5 z|1$o3)C9WUg0pN#zBoA6R;l+QaXxyubdr(!HS@uT-c1 zfgZ)tJ@j6R<|FKR6;~A9yss#07-z*}(_O2}T{pzPl<0>%6_SufktI@+;@1 z45ssEHPL;`AyI@(#2T{1ERFRmuieZueB=U_c7`N2bpaT6vJ|EtZ(bGzbxn$SI3{6Y)QPz#d`tFSui_+nF_ksGbxdD#knF2KDHIl)?;D&X^xqXBCte(&q!`-nUS##y;1P!8~hz<%tk5tdY zjQ~*wa#sD<5#0cJ3ty&N@&V*t^csmV&BvF(KJ9Sf zY04rfkAIY&*4#4x#(P7))5$ly&D8K>s;oc8SQnXpZfgA^S&#Vs(#tz+<}DBN1-}dn z3@`KxGtcg|4Dk3|RN^VIJZ4Ge>>W4el@v)q?%g3_g5vh+j=d>e=*af%S>#jd$WM~3 zc6{{Rq)hCqOpKu4%U&~T$0JTT`OQ*Qi*A9Q$&kjKm4-Ick_2@-SMtP^my{nh&_1eE zsVBN+QGr+Tb6FpYFI5jV2K-T&0eH&Hbj`)H+^aRS79gAqrq;b|;Pjim+{y$b3Z@SC z7Ja;qo*iODggy+0CY)$ZAG9qNd@R36r7hIC(fsmi7!ozp!h2)6d+YNBir5)@3Wy9x z&6>U(FPln);YlKbmbbll&?tFs{x}T1_~)BAXZHA97r3p?!k|mLE1*RMzab zVr{1{xqY+}5AhsPRnidT#2zM#TQ(G6!awuxH+>~)Q=3wEuM_do} z2@7*KvxjK%L;iFPGt%p8jXRCZPu>_6dzTj6rdM~G7O8!Z#{Q1`bweKyE8Nvx?UIfs zYl)F(7cAy`E*U`w{fjwiuM}lX24u2y0+s-cnA|g07Lvg6rAu=u-h$;U4ewZnGNUDZ zIT4gtyymcyS+FTQc8%0zVa^e_`ha#uM# zMXS^-vox*4wRHmPLNwFa8Ew1o;Q^7J@gyML7Ny#gF7uL50nZ23LSDFn z2u-xaD^DqX84SCh$;^S8j#jgaNbZcre9TAheE0~aDUYWf!>taAL=I^uRjh5e?wlDv ztP?zY3f64HWw(Za>ot3ma^{t(2I8JvOC#c%ikdQQ*`8CT9P;|XYrk?oem&tVuO>u8 zELnh}W6~uT=FkMu)n~KDW0qj~j=ZiG0g{{+1K$OD{Hc&tj!U8jH={#ta+&}5R@xx6 zEhz=o^Y*5C?DqQ#_rxIhIuG00R%E=+Eh(M$%dV;#RGj8wyLrp(cJtvX2B5S?%<-+s z?%NdMXQwUeDi*J3jlDkvupIdK?Z)*;bu4Db{n#pahqpeIsD^Jbpvnk8(C(>`I3QE- zte45k!uF(eZQMhykJfJ9+j$_Vl%{aM1_I!o=d4d-sp4Z|?ni;OpBTA7B~sI#R!Ya> z3`jb~WyE9zTp&AD3Bw$mO{Wu7?el8=^8A>0dSIJd#4vUYGS{zNb(X?m# z`aLYfTSzD(ZcOg9V0pNpYdy?#$H{>5L5nna%rm+~3-xG;>=uVvO52WnLMhJUl9D~2 zoq83N$%$0&9do)Y#{Qrb2i0_5d!bRX4#Slxf+j%rmhpiG@rkqcUdK{24%@=~BR_=u z>?R=-GI8WDr6OOFz+SR&o{cs-lfg;dFeI1q?mpncGYoQnA%7v>dBt&;*GC}GX$ z{6gPyv2v)w2@_eq$&u=bzOBNh8p~rVxn)_$h};t~F!qnyQ74jzn`lUIf{W8!)w%?w z->ZNwW~TL%#wcIx?>tIxr>ihp3O88VPU5k@xOuS++wxMdd4xwh*2pP(-1YTDe}e1qM& zAst08C9Bjrvix_7qNS3Eot2NXI*vA*E~~H7i}cukT;xXM-RbHx{)-g;OUkIJF}GJn zoQX(WY*S8YK4^7A*R4vI{<5Q#8<&s&_q&ViGTEk0n`3ex?nT$5L-Y&sk+Ax^BTAJ* zD`&G2!ZW^;`}JGCcaMbajTXbq2OH}@{?2aF8~j=u()O*g7>}BV{EP=~JWstiY86fp z&O|*Kb7Ad)=8Hn@DrsMItC2!$#pi5eszC54CUwlVu!^)s^wFcg8!K1%Q!sE%r$0{%{?512Er_>3* z-nN?$4jr!7A~1 zDNXYh*=5$pe1orh;3nM8@)3ng*H@maD zzHD{37|)S<%qs8dYbnu|>c1T&#B43So(IL$VVnvdvD%qRP^Ho!En6L3+xRs?acXhXQ{3ELV>e`aaquV>0Qss{DPwa zN0V!J>kMBx+1=!~DLA$`w{vI{s+2|6z1(S&CHtlBh(GXHBN)BGTYwdN;z=kBd zxI0x1ro$vP+XCu@cbEmI>q zaT-U~#kGkbi|F?9sIBAVrytkxIvYw{4d+WAJrYs4UyPbL{trQgboVX8vDoWt+U8PB z8SUBRNNs*DQt~mkae5J?lQc{ZqEPBMzNgGsaHtNo2))*H ze>cXn%10SO2VxM_|ISiD9UE_L*n`xjl;D)f1+%$rF{PnH>T^aq%TH&XDc(vnTXDIR zvQEIxAXBUJ4n2w^sU_)3?#U*o& zEk+5oCeITV2O`>+KXHe}=2m!y&!^kknC&q1sDo%+B_BO4f*2Rc?4Mk^)@O%)~j2Xg$E6#W^<7Zmyn@xcRXmvv1MRp^1ckNzn95zqw-$r)ZeN zl+gj8?SS*6g;`4SN=4HDc@ODl5V%3(j**KvqHJmOCR49)*wFKm2xP+UQxKTHj&-vo zowGd~uREm?#=kwpwI8obsy!{Iq4AL39~d(G0ATAFwIS<6rc0iS7GJ+CI@J*?*6y>r zDL%^UzWW^t_=2JxX+q{gua<(h{>B6DKBiMtu1*8NmdTx3{`MN{A1D}?;=26?%4eFZ zKue3P$W*7Ka#)8+Lm(M(v8>?JfU$4ccb(cH4uD5X|^Xaw3GbO z2{rbg_^V%!`EgwYFXWoWoVky12_0G4o&aXc$@v|?^=U5kvsmcVxhkmU zO7Ya{Ut4G?8Sxf^&j)q*8x7U^FJLAPn!<%HgcAW@^Im@@jPc%Hp~HyE>XG0_uVCsQz>9qeAYXAo@XhgdK(|Xum9@y8rYZY9S}# zvixXkRqOi#taIAOc3BP=9Ha48BY`kLWB}?aF5H7}5IU&i#6ZSV_~Z_4uS) z`_-K(8089}2jg3eeo5Q36%*j`6|Nkss`yVg!SpWx0Tl(D`KW743>N9tkE-xpoM$?D zjMw!`f4`b{JAWX}z!Lozijn_}d^bOZ$1uJGECTnh{3h^E5C%Xj&p5VKnt*`%X0!L< zvD@_Cj*9M-pvPSG0g8&}>_Wz}}*n98M-2BOEkyK0Y{qC>`|K~w- zO>k$-DbSQ`hRqmvh}mzxMaNO(1IdJ@PbwK7l9H@1&OJ7dS)_#NHAK!+wYSe``(VsE zUyn{yNKTX^&!q_tj27A=7HdUC3e}2|m7?44KZ5%nHBoL+UT#wYVv4hi!}?Yr;b5LA z%N^*$!;E6l@Sdmh-)ic`$9$ZTD8fxB8q}M-Ko)?gcv~{V zO;0ECT;GZ5m9Tnt=81@g!{J-+<-yzmlXWqfLu!>#N=#Ohqu>~YF(F&r<3J@0Jh<@X zaql9I=8wRJAw>YF-q)ZKzpf2f(do3(nI<_fR5WL&7YlW&4QIajp)#?X*;8p|y~&b% z$=(MV`MR|vAmrBq5Q$%$S6_7{aA8$U`&8q}*a~vrxOInh1>Q#k!z*t*iMW&KBaY8x zD}3ZD*(V93NMbem9@?-q+jOIqPE+{J$p^+nAutbw?U;zJF~9dAKnu45Bqs9HZ#P(g z&C`~UhGc+2NyP>xKMf8bq#-Ae?disP!+o$>vwIiC-aNb8E8M!bGO+zCuW0Tqj?g!l z@I?^NrkM3Zr(nf%6OvFTaP8 z7K6C5C=y|U1(@ug2%PT?NRH9V1ng6P!qKI_0Adqd-i}S)Q@hQLD`HH@&>@)HEH6=6 zb}0@CXIoodg?u_IwmMkuS^vx9URY<3D)Z6PYrD~6bo^ZGhKK2^l5A9O3WZV%PX*n$ zR4Uf|>XaLy3Z4;DDt~Xt?W(ohXnR-C(K;t#K#+k99f#s(1&~G{MjCS-viKg$-DIgh zV|Q?HV0GQlmWM;S&*}h=IvKA+v-B^}5VqnU(h2e?MZE3A`n-O|sG)QYC~a%^V|lrk zIQf>|OOy&#o~mdgjb9w*<|H?IZq^3=?2LnN8_?8LUL~pgKR_jcp%FI(211%b1aS-$ z5{Ma&)=GN2dJ{=or75W4H4RH)LIHkM61fI~!2}t}Fo7M6jmr7EOepR-eg+8wrixL5 zmk{#yt&Kxf^(wcU;8h+cyESIsapd>CsHuWrR#fPeAEVSE#C`OzU< z2qB9h2->;rv_BTh%avS}Ql^{;CFQ=$VcNxN{d{af`Ip8Z83NbFZqZD*Mu_mvyewoXKQ(T+(3c1b}>>0E;gTF#_JvzoQAA zAPS^;41htV^QbUxzZXTqZ$Br_!MzI@=ebnBvD?<4LtYhXTfE}-1tVpNBCO^a3i`vT5M4#q+Os>K;h;}P8r@nFK)h%^hT?)|o zX5SZpS_d~Momif}ym0jbFG+Vo`n$8@bDB%MH`(fR`CT`ffhLIpad3J?DBRrJ4oqDn zP#+k%1id>Crp>MJ6w(c&<~U)LHboG_^Dnj5EvS$L#v^1XV0sB^25Vh}0HBUrLCE80 zac;Rv&ifqAqECQ@YmqMH6vg;i0*heCmQfXD$OSA)+<1bqX_=~C>b*}P@7w5lTlol> zB-eq)3U5^7YG%gQPL)@c4|}5-p34ueHK0>+ii)bpzW5T%2uBHSpcKTXFgz}eoTCaIY6$a^2UixraMbCRokB=KF2 zrS`=qB2NP+UIs*b$xosljUuJ3a$CHsh<1+dXRs9F39Fdw&cf`z%m{qB^qv^!0yVIg z!?$YQ*}{^)+b+7HUv5A73+#2?qdL}o%a$YHO{0jxyrBrt@StLr=+}}Cftmob(KtAYXMTSzLs%|BIB0F@vpp)?H zmujE;TuPvnlQh>sM;)VWw*+KcfOG`TaG{RXqTh}H5VC2RYY9>CrH}NY!5VejwzD@>sDC2G!kIz}9OnlbaZW)jzNx?gadaRVdf_=oHCly=@ z-kP2bRK^NW=D40_z){Jy=Bl!fd^Xq0OL_(aM%_=y5+AOdpi*!6%)-g*+Fx+STKOx( zJ+B5#v56xW1j+;3&C`=SR9x3?rTi|1USY8RP9Sl5zfcZ>`V;dRdRaNPTb0z~QpaDs zeLsF|pSxX76@sFFzKbm>bS6LSm%hY;eEdt^M3j=H-A#f&s&p!Q&-KQGsB@Br>l-=` zYr`mEUg3nEPUWXRD2uEG-YDZGU)I^A?V=tcf(X^@=$DY^^z>xW(%A@hQ5mFh>4*9# zLS458>ET3PNBI{p?$ZgSz6^5}<*L`X1CS)X#CaJc@R%*YqfZd0MSz8v`WCYOM)w zOa(v&BNOwe9>*SJzbiKx%lb`G&`(uG9LD{%F#z zu?ilK6DuvAg84kX4L`;5hwosn-!U#~j3O-ZVt8S+aj!fJwzdM%mA{P9rr`Jn-9W3} zy6`T~f9F&2v-r|#)Xm@UG|Zwti8?{AJ~X)yazN=iwCxp(TJTV%C+$Fb2NNAFQbkY- zLfkjE>E9^gp7uk9DPFb%V;pQrLbX+Ph%6k(9s*4%jCMNToV5t^NU37`!?&su#Iv%M z+T!2wxP>JB?=`g%Wd*N0(rPau$}w-GHUOQUxq{0Vhlw7uj_h9a9I+H0Mvi}V=;yh~i$b9;~OBicujjlLBx zS+zu)$_h`jcujAGgiKbu#$5v(aXS-Zxothrb;b(JUNf_F?3V3j-u$p2V-(g9O?_YB zFsyawY+YSHB*(FEyK~3hazCVPf=To0T{PZb<=Z;}TXTViV6$n}kn`N+EW76?WcF`Yqa_{M0EM z^pA^g?&U}vrfCJfssmC;e;Sus7fB<~(`uzmQFpq*Pp#_}iZ)=PG5v(SB}SoqHMaYC zj$#1K4j^U&O*`Pk0M|Z`1v(uT`P!8^m5BCeB_Z2E4b~i1A{ArOP-gc1L*R7EB|sf~ zel4^|v03!fa6BHWmB#ID71~XRcj;vBnG=bAUVb0YW}BEu>{08EK9+(UXNiOOwEbSW z3Xwb>^CKkmohd$1u69^1GTwYWbGR_utGqZp+9m0Wye6W`aW?7ILdnBKUDD#Jj5G@1 zg*GeAB9OPKb#pLO89DkKzO5b&hdXKZNy|Y3Khm4xj26DQ!iz&IEzQLFFj;W zZ-1C&yx%i|Kfl_LtDfqPzi+gc0LJLLt{Wca@9|(?Rr>yD#_!p966m zbfZ~R2@HU%77;*LsOsa`G>wBa=Es%kx#gwj-DHYSNLC`dm1PSqr%h;HISsny)P7SI z=Nt%1%ZiDWA4?}@4IFq6{r(t!&|7zL^B*T4*3SfIS_Mq%OU~@F?YuCpawwZ49Rq_r zsR=;@)|@hgfn~!%J0dm&ZQGt~!v%juiW6xJFHQxDBUyk7-*+iPjEK!7*oMi?29uBW zLxjQ-SFjo+2^g}XDj>xq`_-$KXC!WJ**b&uh_4iQf0@Puy13>`qM@EX_Z0#4q%JEx zD+q^``~ zmj*=wbN-c{_H8}keMxc#vS{Xup3?q@RaD{nRi_O;_RN%7{!ifSVKI$T?uH&um%^^p zwlrHW*n`_!GnDJp!!0TZ6fhqUj@qBZm?h0l+EzE6;>zaMj0#hdT0i;U97-VUXz^@Bj82OS z`)WF|d<~DMcoh5U#je!a*d^&s;&JRYGj8;ukDG3e&f;qQL8$uBFzV93wmu85?(@f=M=MW7M!AO#NJDj1ne^O$#(Yv1I`$PZi-b+v zfmq(@&%LH6?tLc>yf7QEphlio0cAo%(e{O72Hg!_0N7PO$M|)l$ZwYwxGbTn5aLIf z-#l9Su_*Z)1EPowm^(mSzRt(01j3PkMH`TT5X7{XAW{8xZC&@PzdSkk)(h( z6M5Z|nLQqq-iE?s&9R+ryzs(#y8h(?(&Oc*iz4q;kNn$9o-W@BBssz^H5-Yym!r-% z=j#ZCTO)!7H8wMpcyu__IRP2@Ki>UrUQr!;ql}8%X6@niG|uhg7)qa`w9St=%MTRtEXDvA zZKx8{+ZoFm`Dzo-_u&$t?DB?QRAUew+)EqFBxI_n_@=8Yu< zhZyxuHgx8(CJbtmfOYnm7zcbgl(#$=6V|vj>}q#{C--IIJe3E`viE!Llr4BS$MvHJ zA`}Xz!>7gNzKk2KG@6tX=k%YU?4P@b?65rd zWa1+fILvk@#@ariVutp}DnsJ|nfKUPWA9S(h>OjYum8J1fodneK1Q=*(#>LX0yRjK zgut7ZAE6#Cj~}#uP$+L2)CuPw*WZi3r$Gcz?;NlXv+2*K?1P2^&Ci1fg*M*x8iUPb z-pY-o*qv?8HU1Rd4kJCl-x#4RlpX+!+6IeG{&RMO1%;=fsimQcvIo#`2=aa-YVnIPg4%trirnCk}1i)t|+__ zki&{(%BO7qwj#yU;BYvPihRJZ4Wd8v@dZ;93F}tc;ZX|i0H6E@*kD6K_L_fzjWtF9 z%=tL6$89$5n%8=b(T6s50trY}B%4WOWV@3d^G0*)mqa1&v9qp##LARBG)HC|PU3Kh z_Vz^+u-z0t(^f&m8>50U@4yQz;1xmHO@J6psQ5NiNun7aJ9#A54(nvU*2ohG zfcF!hXUGd*p6!0*b7lled;$LYNZx8IYF5Y z3Yg$uIs1;32Ci~tZb!5o!@!f$G}Lzk(q-&!G3a!iw`}U@78${vDKYf-3Nrgm8e8vt zeczt+0h-eR9La~Z`%x14KGE-lc+T}fWnFE$N0q_njr&jGXRYnFYPG&M18^hGmV7TB zGrstwFVvO*vHo>h;Z&9ZVu$zUfpq6!oSG=jZ7Fu5$vHBfsc()OCJ6g68zdqtLSa+z z^5-&oFYzGk9X6@%uurrTB|UUX2zLqVuO6iQPr|<>{P5HcY5}^8j*)clFtw|b?&(($ zUj?yLd{J>f$`_#UpF~?DhzmI5;G=023x8anp9EcL8&1_E-*p9l-PknW^ z!hb0TiDta0{yEKmF}dq=obTg*3SyGajm+HUnTGIWZ2fCH#u zXcVVIRasb8jMDA$J4>T`s3XnsgtA%q(og?$eUhiGK_egy?OaLqPbGArIDH}kpK0z( zU`+fhgr*8s#CN}M)ZKK=~|Q&HI@d+o^V ze(ME%*++_hb3o5^WGf?~BZcHZa^aQ@A&YJ^*l5koQC=RQzsgtl1Msp_MGtpkn2D5< z!G4I&kF>Bub#|iH7I2u+Qe*WGh76N$+mQy}NT=tIdIBo*96d|#@ch-(m6?q2Va$9n;3IU=V{0Ua0gtY+n(t9Y*6GLl_O)LwB%IdOy=Ixpq2YSLKoSM8 zNBnNHpuB`i<0w?b7ZA7Zc$mycBFO+*idCH{6Y!-$k}FkzXt%AWl-BAh@l6{ zr0gxr$W1cIZk67Dz^ZjmEKskxF)1hbA-tPaKY=>v)#>74Ng>g4T?@rA>1*yf;c&Z% zeYadIsnYjU@cB53hIXveFGqzv=F`9iA#F#n$wvbZH(WX>n}}Uqr>aSl#?iGiP_Pq_ z$@%=)2HDls)$DfzUETwl52S&8nzU?dO%^@gt+oO=DdT|$-DS^9#2gvJ)Hm*8vFz0opc0MUx?$qGrRStk~0VhuFW~H9HjGAD8;% z4DvNDJ?MHwf#giD8jpCHQxMmv@(ox zd%%o09ad=|LixL;*`%c*T4k02DZUrP zzL%%dwaLciAih0YPtaKYwM%g&(G@tX8YpLVej#uK{tX4^zRpJ89K1nIEbMH|3 zqOgf!bPQARj(qZ5CsnKNVs&d?@An_N(|eG6^KuzK7c=`4q!)fEkL4E?MzoZvr?_4t z+!0u*$hIlPD)9%ED~dD&E8QMfFfdflqn@W7C=`blo|>=;JRS&>$tWAp z&lrYDCt*u*r0BiGeH6D5tyyG8eBFd2nN!o2Tv%SqL~p_(&oqT&vmfkLmYgK#l&S2$0CPe`GVFN{7p*OqN@d^0}-nKe577 zfFvz125i+Rc>1LZjAST>zE0M%diocECTm++W4^{i^NKR6bzCczl$sX#0Ow!Tgx7aE zvY*D}4JTlvde)bye;A6b#ZVI0YS(^9ANfUn?8!jgwxG{we4t$1@ED%VC6(|i&H+B5 zM(U7Zw#TZLBhEP^9{!xFkXECWh^SHW;*&LMb&n&OS5J~&{Wj-#&mxSY^3{v4gLD|y z?WIXqP~!0P#zF_K80ty0Q1yKlS;yc1o<*&KIOG zl|v65x8TViv3I;Ms!r1sA#arA12s8FhqA#Ww`2dNXSa7&HAd2)g5B}eyk19krRIH& zuG+s}03@Vkij6q{ucE*r%}#v6-wRTqOYk3o8SsrbYU}xD=Eyw$3?0r>!zr^I`qNn$ zkLI!gMTa>^jXEJ0M0#3&)3Af{<^q_BIS{kf6|1TL~CJ`Q$*gTGxMY`lbAB8QC(>`Cq(gLJX&7FUua^=&tMPa|^HdU20MDD}M z{wnG0N`DsCEgTBy1A}|CQoz#++X8tV{!-D{KSy#AFv0=KO$0d0DkY{0DtCz5O9XeDC~z;-Cc(tYXJ(4$=nM!Y&0* z0ALrt&KiuY^Y)DTDzgF|$i}{Phv;En%^g-myUEADTQn0;Uq<2aO1?eWTQN!(i>AR7 zCQu9~zf`if1r=V#yX<|{uC{w?$bWctZYu-54m{GSOfwUc_~mTrL{Pp;G@Dr|2VtT7 zyK7{_!9|64>5_6&b>H9H7DFyfs9i82YXpGHdiA>WyqGZxQ_*se5EwN)6nd~ZJ>B)w z*aJb&TS*`F#~TWY6hUZ!{1l7uKbO7RZhHF>vgYjH%h14S{f&2b{?5{;F92uCu{pnh zr`U>ZV>2SG>-Bt=pD{q?JNk+@RLOnI=4P$5b)DYsQ7U|Pk&89F?Q^ZQ2o$jYZo_D@ zTtGioveoq7vC{wbI=ntztztnyF>4gTYe-ja<4JmWu&i2oV*h~?IZ=y)&f@)64gFB! zFlfHQum^_5)7cOUz4f~=4It_l=&vCs0$L7TrChR4M~xRK_`^bE?)8Ao#Dez1CZZMZW7+=AMv1xxJx^z`R|Lq!L^!BVI-Gxd>iLj=0Od*yapmUrT%dcT z$}M7aO=!+A_HGEgrqE$OA0c`S>Vt5?zT98)!ok0_C#kkHnnI2%%jYx2)+@)*o+>q|3@@JA@E9_oZ_O5wyFVl0}&pd@`~EfGU@TD3{^jMVWt zzPGWKx(euzj%$^T9q+9cnH(z~ICnJfj#CSjV%4g%c=li<|QC+z2EM%Uxb0DaD_KVnPyt4+ij*m(iX-N77LG( z<>w`ARV>2J>b^BRSw=CvRuvTD3H%AVV0Sizj@jw=NYx@JUxa)PH)#l7pOamuDcB(a zI7k>MDWLVoYto@K6us14HeA&72~b1dZ`n-&Tr!^cKkC&81-5f(;crh=A?rIgJksQz zc}7eG^J=Z5y}QfA<^1(4jGy5PD0x#UlNit?9${P(r*ikox3DE#iaq#6VrjOPSin=a zDki{}O1NQnPG(>DY;5 z@>-M%&)3pBE1Ux*V}qwed%K0F(W zB;8fKeraT4=!6%u?!tpk8Pn-8!_0wfQ3!dw_Tl%3T1PbqVrKkgHTQ?2%(h&j%ZhsC zFw!clk5Mc4#N_BEcLn47tptB9d{dRGWSNZV3J+)Obq`n4w2pW<~~O& z=zX>}Cb5zEw^2SoV{z5;ps{rSIf& zk!bHLvr@Z5!ifO@To5-s(%=4-cprf68T1)HSE*e1CSi$kJHnPsz7e0IFlS(cQU@U8 zs3U{Y`|5o!=h{s{%t9FyYW_akAD8N8&gc7D5R3dNI}3LGQ+fNn4MK^f!s?Ai!NUn7 z-6MoRdCgtj8`M!I$9#sfJ_Usft4vQSryUa{ao^21GWkaAfK%LDaxQ_~aC>~yC&3@k#L zU!%ntn{FC@BMtYxI(N7T-tB7Ytc+;9nlYo$3qetDgzI$MX&(_i4hx}Y+&IKFDdDV- zBWoD+)CD(b>a7NNu3K}`xg~%>-8=7wjtas(h6>5V5BifZvRj`9o?eOaM$-3Y+pBDJI|O=%?@xyGQ-!$D_}hF^tD^g^A$Lth1hK|Hn$Pii{3VB#}=irCXW1) zt?xlJzP@&&%c_B8q^7mdl!rOm?mr)9RLzHZRglHMvVV3d$@n=Yyzvo4 z+~}a8Y&Rt~+LQN6@x2vi_m> znxJFaQGClzG+3UV^sI5y?gsm^6(KTV^qJ}vBDU1(O`cYtl{zC<3DeMTuW4ZCF>g?w zoGfKzcQorQM;{(P$2iT!C!CuRZHNL~UgD120 zlwrivE7l~eu7@sbd8y`o*#T;6~Y=*DK6%10AmF|_4dh#r~Mh#v{&HP%JU4?Z;rNyqo>t& zN1^)%69P*vch-Meiv=M>n2>8jd4#$E=oL!L@tw@*IJ(1BQc`mHrU|_7qjl$^9}cBx ziWVR8l(IFaRk6vdoa_h}XTJ(9$;WIgbW?^V8^bYfhRI(E1?=-W(1QMzw0v)e?tizJx`80N9BztQSJqzs0K=Uoy;(uM&+`TRqd0jfX~p9{PgU z^V&#)rV7DJOi3wZkfmD3hT;9y9VW$oJTF#fK)N6qb6`i_X)tj(*bg5>F|n+`71ME#D@(wU603lxc#V z|0zjkc0B+(U8bQ;jNrY;J5BLDclz#J_2$9c1n(1P_qmy=!c~_J9_mAKfQlgNsWNdi zzFQ~g#VAlW?H#xY0vzp&Z*6@-nsN@__2NbT_!9k&TT<;bquOyJEHD(es^V?uV}l^P zx%cW{N3>F`ITC)=4);s-8JFCUR6M&G!!93>!PG?Sg?-kkU|o6amP5+4O~e3Vk4S&I z2-|o6$pSf6-003q&ZzSm5wjuI;uPDRT0W<5{w@4=KL*}Eb=>^+MR&>`SM7!fLZ%NS zpT6QLOtIh<*~vnT?#V&;_4n2&?Hc*a)8R@gB*&XB8MG1P6qf|Yrmfe!jsQ}$pMfb+ z(U^lK0bQuM$@^=@z_P|s+Du}V0n6=KCI%$uctw%Hvm!IGeI8~?!G6O3#nxK@wb_5` z+HaL2h2l~?6qjPbp*R$`;vPJ>dy6~8C0KC^MS@eLKyiW=3GVLhd{5v1-sd}e&zWHc zG7}!cPnX>5TJzaXzfW|V!8wFYArc8ax8J-sRZ?ratU1#ilKGK)@6kBxNdq+m`9=|I z{TuXybI|kQx5zUboZrvn-hWw#HbOK&8LJ&_Fpg(lE1x31@$mCohX^U*PM;m%+Ig2$@Rc}dvDWDSulyKYl2RZ1>WM=f3WX=!XE4dA+i(h<8;QyU^xl#6Fx_V3!Tia z6It<**>`}0mfL5}3-@%mhG6VF+t7>aaB;sn`4pn&n%{k_bAQ(WwvPhg*fya@t_6 z3kR#*|0H6VH$_wB?J-@L5h~1bZtl!GT;3F~5k^~g@u}*;QIQq~?JNpEIc9NQhce+s@?0$dRJpNsTWgMq?%_cP~g7j6w>7^DQ^w; zL&^0EC9d!P5%y`|vFn5HDD)xfH>B)*Uf+AUpl)fNEK#_&x@~W7Z(tQ%dbkuW;p&p` zxz}0{TKMNfFFcKdtg)W^}ZKV1+r4b#UI4?)zhY3Gv^+cB~jP+UbB&IiE zS72=gvp$&;HCEgs!2yYZZ{4JeULp4)4>G9-oQ3lz)~DDjHIEIYH)}sGxGHu#=}vdR z-VH6=IQA=}-F^#g@jr3W{m|z7EbzdelO}EvI73^0HtjkdSlhd-U-3QtNacG)c4x%) zrUoMBFMt2X`tVmg>egbXA3{8;BkJ%}bPA*1zP=|DC7A^EVC`q?Rn7-R82B~Nxf_47 z!jJ;r&m)G2y<Su`eadAkXR$fW_We*0w3Bf;wPscfbQkT)AFjE5+=ELZ#pE*mrM? z7e$lWWjQmw6tOuJNsKJg8mc*^Czy>JL^uO#eBBN>A3Xc=!T2e`p-aE2L5nXMB~3)) zfQpAv2un6zpUOQ#NJC48$Mj&og37%|G^5U}rp-5&$2g892e!F#@lEJ{6I+wZ4!H+3 z;FjSMx!vQ;hQ?zFU;TPTw<`b%r1uy^^1pAKDVlsW<$PaxybOk>+oXTUOXznpXU!(o}nD}09O z=MtW$DZ?UK6EsTFin`@LoH1fuBS$M38`+@G6qL65&M; zq^P`ei#?BE0)nBKTiY#@4t&z!A5N36?Si1fCzy31V|Hl~&lyc0(T`swqqA=`UZ;Mdsv>_?fefLP;*SIM_)=HU$ zIh%{9W$#kP3Q&Bxpqt?3MwDoR+d8A-o{3ec`T@ZEV6Ii&LPW%o9u4BPUG}K^n z!m=U*Yi=4&949q<`@&}Bd);B&TBL?Hj zefcO%HXR=ZlbmjKPVfWatgztz1$a2opWVJc1LhJCPJWOxc!r^_&|SDBqv3Zx zUTs`CW`I?OQYyLdYF+yNeKan?p~SR+kZKwqX~hgfwYe!QVX<9Gmn%(bfJ@IF0(6It zih@Rz!c^bEfYK#So=&rDmDKg#4HT?&>7=08;I2{9pU$j)yvE_HC|DO_Q!)Fae(JnV zjmJr?TUkQHjn{QKEjy1b(sh@2C87R*t~VSXa=c@uEu6H#3`5^qV}Hv_gGGFZTC%YQ z3d0}j>|^_=kUseL-jKZe-n0vl1pU14(Om?{P2wv@I+=r=NHZpyv&qy~B9H~Nie~SZ zv`79hOD_o@hz3S0$vdFochd9iMSwibq;FXmZ-vJ9it77bVmGdY*eXxdY=PX%n-6C@ zIO=|0GNd9VXm(pV(k4ye=H!4PKgFRh&3U#oQh&3CW#|4VAXDlsKe;1jDOm!$&2OQB z#n6F&LBQ*jX~9V4N6O zgY}Z5y+F4|leC_UVj57XTZ`#4rT1kMU;WwqM-(jt4Vv+aIEFprxY;CAC3lBh>Zr?hv z;S4)o{)0r;n>b(%9~)N$K{zfuqj}x_So;tC2pkRU>0zsr9Etg%ORwsVm$ z4W2cHbBZKzOr~&viLU($8lv$t6^4pl(}$-Qn-0EFkJht>z=uxLw5K)M%e z8}#BAE}k4vsEq>zl2Q1hb9iT*xfpV!Xd-E0`wF_tN$SKeT!X*_W;$STF)L|LkVH3r z(jaj}iik78tCbEp;I>zvN=CE}2lWfA+@#`OM*$m>0v$075$L>eb4H~f_b}{C3GG0~ z(l*(S?~@!j8bD>rCBzxP9^b3cWqQqf()5v{FG=C&oK{g*EpeO=Ehdum@+Fv5(3q_i zGO!uOQ@Q-lCE4$O!o%+AZ}A8~%m{UJ^V|Fx#liP#epV?g5pjSkcFI`=G=#)Fh`GQe zeIgX3WX{}v5tv*FNGMVh2)tiq`&450oY*@0IMLi3KiJ%v?A5$*8_KBV-NG60GbO{W z1%qOTc~u5;I6j@75nK2b-h0PhtXB0BjEFZXnX0#41w2{l|Dr0pnCIX{%mE4eGEC;S zl$(qhk0=f@(1 z(a`uxu5=CiTi1F6kqRhW@q_Tp9)_oldf>&=+$#^W zYM~h=2ZERB(N%#>c`Zs{?csMB-}c`KdpbS8k?J*F+vwe_)NJb@pE8vzLlE@rT@bZR zD<-(ctPQot@1rcMe{+b*-t{{}CFGq6Gwp#Ib2}l)SH(Ms7Y5N9aS)|A{l)-??P-Z_ zy`4Nz6bM2#>o7DylUYBCf!TOuQxsH~fexW&;g!(tw-YpGnqWyQszPWo$Fyc&VFNW0 zMOO88Z(&7L!}nzi(#@jNQ&ts^w%^hcD*W$Ynt-(m4}?^^I2H_;TMn5&RZ#%Kk$)qP z5)r6~W0wsGW+#*3x^|q>l%OKjoHD_+_7tEc1bE0`D$-?$iy9D3rTVXEs^)iSOfNDB zw49+M|8@*T|5?8zPy!GU31}2?DDnEDdgHp(@^0R_qJ3>}qSt`;DISSyCi-3NefTJU zx`9Bz+P$00e(f$P$ZEHSbT}B4GTrkJp!tA{4A4b}8nzBU(=+;D9Tx^2ej9tJ5BGI# z-TODh`))OVBpD4^2GDIj=BQ{^7|hojzCw8r2TGVj>>rc5C!8|Pp0p6OA7P;rK0P`h zq&Bz$Voy7ZDL}cp!PPsbl6ZxW-!5tX4TXn)Kr;771F8S8HP!EsYX8TFZ<{}8B5P{6 z0Ac3Jj7>$?q5q?I9E9l0)hfl~)~w-VgKBx+`|{*n=Kc389auv)<&E9$d)88`)bTGC z<;<3Sf0r@MX9HLpb)xyT6#oJ#Fhj7mwzh1rzXJfjUi}!C!nDqhwrbrtG!~Q3NE96@ z^KY`V0Z5QbRyC@wt$%Ec>5#d0#q`GY9u!}0`<+)?x+HbzX#7?EMV=#e-@oLh6bc|h z3}#44!CCqH_AtN9&ZEf%(;QkUsG)GgOp^U8dI|}2!Q%<4yZ6-;*6IzcOCJBQWc|`y zYz{EsW?bSwWT#*`y3#~(JmFay=-J8XkB;jJZA}Zko9j_7>W{wijqIt~Sd!(%S~;>U zr4Y~5HHgxG`C(!1p;()J$VT=bS&jE3gmM33a~*+l_Qm9E>fVhJo~q4To)I=tBxLQZia#z+4FKqUPP@0sU2$D- z3$QxAA|bsqroEXeBa$|Z2>l-;l*o@<3ltG>+e=lyLJ8g9=@jICJ|Kr&{W}D&num<- zjSs8z1a(R|>|PbGnosL`8^Ix&(Q(6!Q9hWRFz>lI6}sq29A&vTjqApCZ6w7G^M|7= z;S~<_E|gdlzBTAYN)^9N7tVCitR9q7XWMuTkPdG|27NF%{d;?`IB)Ypn0Dxq%(s?$ z67aw2_uqdrLlFu&&55GriM#YszjmR=&nL57svNiP zObTo}swYd;GHM;T;;~mGvwUX^P+3SLcrMpKmsK;^3~=$qIa3otn(KT(yDGc=p)?i>s zOE7{4BmfmtvIs)*ktF6wa`Iz*yyHdIcDl91EACRU;mxD zCxfXT!;}hBh5mxr0j&`0}7 z^%r7~Hv8N`*j83k6ePg|B>!u%q%^=g7ZVdU5DR2dV87Q2 z&YTMLq>X93GFh^;BE<*DrS|*DqGTR;J6p!eycNwqL({otDBh3b6Q8f7C|HQ*=m}0f zzV>lw!xbj>BvIjX|73;*xOb23Ez5(uqZIyXpi9IssfBD?ntWy6Lc zD5aXevs-#T5{LK8S^c|pUo`;>alfl7`{{<|%ytbE#d@9+bDT?V#-|pctA`@NySjn6 zE_(Fm`{{4fXuY@ctrAB2KOkL1R@UUCc=x-4b9)OD6m4+a+T_cjFZbnMzN69*-?$IR zv)~hTrQXr_+2`KOrHZpk{qb2KyZ0v5nxa)u`nq52zaSizYW93PGrdD5U9NaWfG1>P zwtyoz!~1%@r6&R?ym;mK4umAFdK0Rs_i7lVd;aRX##KVw+@XK$SrHHAGBqoa+oN&c)VY&70&g?wDD>uGz>%&m;UVvUf|)dl$iE|1zxF zlzP;5PnWI7YP1V7N)gM4OH1LW%TEoXVxcJ~UT0i-EggFc8p=Z~J)Mi)UjiK7whbMS zdB)H`?~8;j+f#gKzh-;iD)laww`jG*RoZc;C18MXRi!%KUyxe1Ct){c>8u>NrB*9g z{+fToYp{DyctTk?hV2R3&lqF$i{-0EHg>B0jozL>4BgMZJ@=RTwf3#TD_W<0hDM8%+C=KN=CQ>X?Q`?e4lixqm-xBP zt?kXaKA+vhI;k}sB~56X4hx z;0QX?iG`?-YQ3)XB>f>cTt_Qo2Cw#{X|{a z&YflqUf%VC-A1}+X!va#|DjC@<+CyxQaA{*Qk#wYH(%kg!Vv6^X5=x3cWAMM)Nu&9 za*2gxB#}qUE?C&`NzC$!W^A6Uj_2d?KR~`cj47>D7pyBB{kmspsapE`w}7~w zWDl=Sb|`ECH_86w?#oAilD8+rMB1nQ8)5F4%Mu5m;!np)bsh)5%9IlmREBYTee?Ml zACU8t;Jur399CZf8d$QP9Zc~X)Fyo6qb48jxnN+DB5dPwe0fpfK5rU4pDd}%r5RHZ z^U;lhzFJzT0t4NsSpIcs)TR6I+a3ijPe+K;Y`LN1cKohhxoMGRjCAx@Jg;<;TZ~ppYr5+R-A(H?f4Pviw9%$%Ev1uM^uZlU5}Gp(3PVmx!ADiZBm%0Yxfsu9W7HtH6nV-@T$4uLkbiW}D|nyGR-x51xmxH` z@Av-7wsU*&8O3lu2&w;BTw>ZEtEhZ(uml zaep|6&ABoo2VLa~0$ED31$v^Oc3oxduGBXa=pR?=8*M6g2i?@zzRwXe%*R}dnx!jo z#NS@8g%qm{5hwxrudh8N55d6q0$p<~$reUYLuFnr&h?ly;HDCLCHgV*uTCNdsQ57^ zH~g|{p||+V-Ur{;+a;V??bTgir&|lf221wBXVU?Suqa5nj0NvUtNo%N)d%xs&IPDM zuXz(+-JPfnMVIryZd{x^?lvS5exgA8@%l_)I8Ut$_I@KXP)hY4-dDUy&^$VT>*>Ni zr!gfVnj%Dm!~|u&Xe6TGe(lb?AgugZPnTBVjD3p5?-*CXU@Y6~?XdgzASY8IcEsy2 z=ne71h2J<9QN|*VBc`<9S+Ds`f|mQ5^x&2nw-|FM%XBQl z{)}Bk>hO9_q9uloaH(;KC-06(>ODi)6L{kuRsKA*Aemt3eRJ(0uhV{UVH~nHv}(_I z)1B>K^Q`wg%~yoxh2}542R} zc6q4aO&7p+EhV5uinBjXDR-qxOXO@29y|Vha#zp&Ob5F)95EFp&x)Zi$f{9$|o5K6ei+x0zPtFaX zncPIKjM52YOihhub#3yevZc&vWu|?mV`k1r&^^J#NCxpj=6w5IpfDr46{gpQH&>JqI-#Tury4X?GSrg zo4Tbj%Ub1sMF}$7$p8Y7r*(`_sL5f`a`54pX2{k9{~qVfkP-4f^g7$rq24v_N#Tzr z?;_oog>Va8`U=BUS$hJd6f@}yMGzO1FD5~LcE(X2#`F=o3zce?_iQ@KYvVUaS6^C= z#@FL5CGamjpssPvx;JP^gb7)1L!pHt!LHIo3a)EoY%t7i)c%d*Y`xJTdOR;OTK!2j z7%k8bMr;mF%t#S0QQ_kiP6aFa6q1+esJi89pqQKg#~@rH;X6TWMfVrnpLcNzSi%fs zI5A=AGKD;FtH_N_T%fNXix!om3+m>iwi{&pl?^NHWa&o4!|V2D!x-wR2`M-*Z!yrx z3csJS(TGfS5t@iEfYBA9%RV4M|HDPcoeY#TD`ZurNHfOr4WJI%NQ#1HTy6-&!I8vB zsIVvg1<)EzHaA@FKcG26<;lb%bpoFQ2G0Lr6HhyF(n*klrs&^TYO38=M%*^tnIanR z5md#yXJ2~K$Vh2m3m3%NcRpA#{=zS!ZC)0kqG0QT_2c@z35Z*^WJnSu0U{I z8cT)v?sC=(k>#Af^Mz5M1Ew%^B(-Sud&d#a=LPl?Y<$Ufx%-9ni3zcU82tJcTg$_; zw00T`kW{AG4{X-@rA0;Q+{C_(`g%in3lzkSUI?VhY@{XCH8*vQ`}(@Ma4Ca-aLqcP zm4aZaak|Q%N6HXvE0Hb)jBLTZh1^96qj*E@QMA)>&-=}lNo;Qtu5Nm*?z-#L7+@mn zREPD89oTtndA)SE&K|_%;O*)mKRKXb;*tF_afqSftAPTx=t+VRXNSYcSg{JV#8;#F z5kzq=FKACUUVqT}R`Nq!KA+RwL|^W?5WMd?6(u<)HcEZQ%=|S35G2l+H2P*S{YZY= zWTn%en@%&+5M*{r%OsTi)N;5JDEtdMdD14`U#!uysL0E2U9jZkZ;__u3>IQ&3m!!3 znHDwb?CZp*zMa{;7Yh5#@gyFYlerk4d8=B*nran=M9%e;C6x!#(QZc{pn8AdG%Znc z(*tAq^o;@-v|)&uu3rqrOt0Qc%SwL$gA?u_W4+6a{B#tOjam?4ml!_q#-YEV^;M(JKW@@ zfAR#uob{Z+p)J8JJ;N_v6*=qPyd(GJBJ8=skn1x~qe)lytfJ1mc*~!7(Qo>|rDG>w z@H!qb(qHpr)*83ute^J9x!m3&|3LBpLF$Rw+Ohf@TRmzs_U14w|4X@Ck@)QtxkIrJ zPtZ}Wccy{HZ@QMP7J$;%;aBT(5bR03C3T8o{ogw z_9^eYVAM(OeG*t1oOz~A_pVME2|?QzT@zj)vI1;n=8QA#ex{+x;MiJZ7#pW5Fnu_;VC`EwM|G2M^DY|a_^q}}%thd?NZ7=Sj zBTQnn zXUs0Ep@?a-yn#ZB1b_qiggcNrniZ`jh8|8VW2F6Y>(V37emN2!yZ_xSnXMwwbbh@< zVuA^e|D_#Ti=qlOaNZOLjTtpk|6oZkop%;6l?F#cH*PkKLXHP$XRn;vGQDQMh_H2C zh1JZg;o9m2fD+_Af5eir0bX0}Kgtew4zaql^9=BVZ1K&xU{E`ioK2E82rddIHV6t+ zC5hSSVgd}lw0I&9RPO-7Cuo_0kxy*fp~+UeH%N`vngMfNQ2I}5>Vm#-=u74^wNxm< zMK5lB^Nj!HU)un?&}E`A`dH0M{5oDCLF%?s zUK8?14)6d^`JL%ZmTDBH4;4BUo{V;P(ZN{10Ua6z(8S=xi96P-`HNB#@A6n4aDB1A z^~zXRLitA(q&^~6KFkqTK)dNT@g+r;g9C0_PF#O?d>EZ+V1^TeqTTQ|oi`LkK~r~w z0H}4^`9mZXObVkj63??<$o@tX#?4SKM;@InW)lNjw+O5g^02YI{~9Fq7q{II&u|al z?#drM==KJ3K=oyxSD#2EC_LsVrHXk!6)^Wyvmv7frC`SjI`#v+O%oB0_3F#)Dq4&S55Ra z+&b&=DXujEt4FYbbPn@L6@93qwdS%_jS59v{6oHHR9`ufRn0=z=dwk2Nx@J~17KLO z`$n#NZ|!tYg)GJ+wCpxX6^3`}r3jRKV#0mSWF-<4dWa|Hg7!VzjHl$i{VWn+1h_SB z_=n7JjrJQMU4Rm;wc0V;`>A;OfSz|+VDXa5<|+5AFIGVuC!_C-GtOozKZH=&z{$p& zPkHi$$h&@CDd#}>ZTA43-?$w{xC^dg@VW3fCvVFn%7BlJ(8)XZ0RI?^@B#AxV4)x} zSXd#F+*5YQ;7EW(kl4)~2#R`g1>p=!jYE8vu_UGcThnLUp8<`@x(6v{>BedT8U?ps z$CSDKv{k|5s74PY8eBjXVqX3r4k+WBnOoVWla!z-r%&tA1(UhZd$L)y)Q;T<;hEt- zXDRi0rHX$>35G^o8)!zo3eAns;}~kC&^qrgie_KpGP7Mcb3IcWa4SuB+viy3b{x!= zNVbH(2DUuM4kP(@@Hbk!x@>k5b_?9&aPzX=B~GwX^!%n^6 zpexziiw$zpTPxO^iK80R@xO7et+kJWIzJ=sn|r@`I4iYk?`>6$v>x%1KkiT}zKjy7 zZ*II-0nwO=ADffUhQrqp=jf*Y2@Bp4xD1+a-3hL33Wx9q3rEnf=gMl-G^WO#a+9gJ zyfm+k8=2h?4jv2;Lk>$t`-Ox$yZ*MWhB~)djkheOmwK9L?vT5$0DW?v518|2UgX9h zSUtMAQ^sfAipee+Yp~Bj6wx^B{+v%OS~nqFOFIoJknwQ4ETn0qDHZzjCpParkGOnx zy=V&`=N=}^?zPN@DqH?xVDSWmIvky`!o&d?(cYD7Ds52y(kXu8L2vpJ{p`A3fBbp} z0$p&+sX$9l-d9qf%r`vy-dd=7yn5f$hG<9A)wd7fnHTFDV(1%ux%9*MTxDV|kE_$v z&D&6D6t7nBR0#z!7xS!9DaY!^$(3()Pvy!KB9*i3i$0IROOuU7%q15IipiC5^IDa5 zHM?%$wYmf!fiDiiM)Rn4c5hUvO5pM71uM~)kcqNgw+qR|3zPORsbT{6M--!**joqd zeKna1HTIS1&)XtK*%j5^#}~!j#pLVgcZImZ?ZeW~ZZ6NqEw!h{{f0j632n1%LA@Uz z_wG?$G^Wyuu(E4!7AG`H)C=N2e*Y+ok@f2p7pG~@X9>Ys$Bf_LQ+iR8A~AP5jd0uN zVZ?h40=1JCJ=5uFvhEr1h3ot<#QT5Q^J*KtYJzH z_!HeM@m)s;`-(?gdeDv_j+JD{~*Ksctk03w*YREPITdXjLw+>ZP44{~j) zJ}-BNgEf@E)Z_bIpoX2HYSna|D=O~5r$32G;)P8pvudY-Z@yczAsKvI4hyD9EHjRc578Pukz|CJh zVbr@7eRLeCc=!Hi6mn{$O)gbrZNg`V>h`DBWGbS{uAQ1H{b!{~8P#BQgyUW2)K?z< z*Y%cg)V;3$s!l=QpNz0ow1wY2EZHW9{fJku`o6haI+9Ek#bN5!vqQ$v~ob+<&cWpdc{q_D@AiWw!pPcNgojo!u2c#Z+hzC@0NCxwJ!B6Hs$ zJ_`C*K$S=$@Am0N^sWUD$PfnuLpDbbO%$ejpY9eJt!9`!MD(H)=qhsDG8tg*rtNjB zmgPQAE~AM%Djef{?1diqyo>cQitb4cCp1=h9y6l9HUG-}Ixxa^*pn$9G~McVCsg(* z3l7n)hjGT`YF|^6H!w-+{k-M7d(guDZs7BedqJz@-RNU}ijBG7mTTjTVDqHDN5MNt5Y(GOc zY|EsX5(W+L2+pB{N9ykKtdVw3Pq=fx$TOQ6Vz=Xsjsh;{`|Sev5tsbwurMj$FGYHf zHV9FGu6+3!VQ~*_S3jZ*(uW5?*|T3os1aceZkY?z8V3d$Q*+ge4rD)%b8(wU4{jp3nf7@<=TCc%ioTnVQHIj zV!hqf#nurdWvG`78pZtq{c)T>#aIQc7@NP)j8Kf&l zPZSq1+o(=1dVI!AVq^!7XLiR5}#5g^W=Q$Y1M@GHxWQ1`ld#urjmEzLDnES5)2*E$=98JX8(4i$2gmNf^5YI^ILQS zk(kR#^lxWC@}^7O)T4$o$dIG`kN>_mrYIDNH>yaRw4groQx?qf6^f(Z{r|7?B3f8I zdmPk=n&I-QrkB>xy+o1<;VfjbjaDqp+$CuKJTbHSl_?E1i7&!D3Ft&nfrRV|1Sj@; zUcL&)pBi-5rFg90L!;4f+xqz?JeRGv(4LqUs#;Ri+i$=$=$e)eEu8OoQFUNMe3DP; zrVTb^`_*9laGw0h!$nQ^Ir3L-R^bN@cKs+3KbJRVrw4d8YzXIi`^$lis*smHH&&3^ z)mEYtVhwPD`BH7CJSp7~Uv4=P!cZ;vv>)OONY2h-nHJ0^i@aYrlQ^uc@&}vl3oE+X z>(Tb%eLY-xC!X(8#K5J10w;+nt}FW1upvd7@_smH92+U$QKPwVDarQY3A{v_(=44u z&OKUi!|(3oi_tY#<89;Os+JnQfzJ|azQ>FV*!F*qnlv~~@IXA_yWehtLZl4s`f+V4 z^H>_=)Q8mI&kb5$Xei<5FrO$KsdxF~oMu6z1jriwgww9K$QntGa~TWe?B`;tW}&U< zar8F<&>L!)Y_+meGdAI6`LF5EPbK6@-)bb0PsXC=Q^BBFE2~A0&^+ElIG`3lav49p zc8p}!>5RCMkQgKA`vc01^DO@YwVRxT4tczmRy6q9!S}3!jE|VX?QGI|ElU2N0ZPjO z?^Cs|WfZX&vX4oN(Zrg}yJuk$s>_4-ja$rCF5)Y&v!x(@%%mf>E0zKsbV)lr_svdu zX3`bN`=F6Zyq-6E*Yzy9eU!)=Ko;*pT-tmlcGK_uyW=J+1nTr{Zi?pO*ym2u0691t zb|a&$cc@Z;k9N|VZ^#@RH6xxJ$5{Quq_3;;<$8Hy|7{lotnqD!<#CcXevh37Mlq~T zQ01#S^4p;pO++gLj2hondVZJwNRs!p)|Z@aQ#kbx1{nOF%Z4J*A7}-Fluy@Yo-)Ra zv?nXXS9w)zmV(olM*m%Sy+Ugs)>rCV&OxGr0H=Wf_07vyChEvNb&`E8=DT66V^L31 z4U0VXdkxYud+E;PBKA*gE4Y-fIxd}0j&-f~G>XUMGdnvrmQVg+oedQEyc&?K!4_0I^2Jr#oW<*`?9z2W5th=$Qyu8*M5IR zf&g{tz0cO6=)SFRQ$k}2%q5r2Sp^LwN;|GP?xBenT96+%qWdDxdnjls8epqznk>&PAq#_ z3Syj)iuQ3DE!&vQyi#*qWqR{_xU^+9^LH*2oLK1#rE_`eivXWX0%xfd1*-Ikx_w2# zuh1DvBu!J4hJhEA@4AqQv9A&g+O%E6d_yEfoX~rls%)?{n|^ejk=4lZw8S=6wHo~C z301HGJ-rNA!{roSXUC~U?b@JRrztUJ<~sKW=>xT?vGp`Tq6J4U-)c*Z*&>A$DHyt= z=v7qW83oSt!z4y|%+$(<%jW6pxRzItJ4iIi_HnD&KEGBjoe8D<@sqOImdqpt{Q2gv zm*TvLA4=u~WS!fl$=vBaLgwgh$JW*6iR0dEJS`Wj+|oS#8`F|k;``cvUKWntY#L9S zIWrU7Z)Q7Qj1SrQ0+bO8Vc!9!jAN)TwVH+YI+Bw3+}5{4)pEBKge~t^&NzJ2bGlVL z$Hb{(Ra5svNej)k!K;)hMmUbEUU-?IMxi)yRIv)h!uAiB4j^LtW4N1Sfv~u2mA-@X z;j=w%n+6&9yodYt&kwJ-PaK+b-k}n)X73+Z_=oPe^B6tUhoXcz4TnM!wmAN;3+@?Y z94N47gq&Km8Sk|;g>#5&t9~$D9M0-zP(|U$lXGRZ?nCjnKItlW# z?(%U1R#gq*Yh=wJN{&JKG1sCfC3S{%BfW^$F@-4$9igJ3Us;_2aL>hhPTG4Ng_U^J zD-O^unx2;FaqjqLAw=#7I8q_9%TZ^eGlSPOdf?$3i!NQik|-U@u&GyGXzn&8)&K2i z#MG{b+eY!9CF)RRd^dbn*H8j?QbNegQ|ynZS{FD-HD&&uq=>~*tY7zr)_I!a_V_g~ zNpTi9e3w;{0_ww-6BLBmaEE%EZ=-8;z#Cc#7aUU7WzyjFtn>@bl+`P8*e2rBKlZC# zD7H2N#5AyDptb4rfBOVH{oWTYGT-+`+^KLR50e!FD8pKx^wEx*-9$A1wJW-!PqKu_ z{%ZjO=iHm;j`!P+@IG4Kr7tKrXt(I0Eu{Cx3qoi3p4&`^*pYA7g}nLy>*5Q5Bv8Iu zxfx%DBnUl^w4=qjARGdUZpHmm-En;-4gMaMD^i}rS(vg(WPc|D*iWwl8XnGgkq}kO zh5XV=kzQnT%Q9Q$f{bBY%3lk#L1m%3Nc_Jp2^lbI0A;y|kRllQ%oRl*3;+}RC=w}O z1^nl0%g-wjs+cWI=DaZ|OAjROy2P=Bf+p7=UwbT2;S4@=FUs@mGrTIl1e24(VhRHm z9?7dbJfQrFi~k%V$FGMPxE@e8`?}6HaPA`eyD!T=|R+wW^aMC{4qn0rgnv4 z_32~3dnVus6_L&J8#eCH`ytsDN_= zqtE;>08(x70d55>a~V7u*mKc0QvkXoci`_YHR*%>w{ji{$#`P|S1ibUOzLn+;}ryG zVE<>7{@%SIkZN~;0ObE*hGOUvMBfDAziRlk$P+fDO1d_;xpb!L4@MEZ^hGDr ztil4e9) z>hl8#cd~c|Y5>-U^ITNV-zx(ue6~h*7^LlmNwYA_P7q9wE7Yc>!3i_g0W(Yj?0;;A z;wcruOsK~Y2Nh;bdsIv4n~3uR9{cwH`B++UDW3VTbso~a2vDs?cuu@*EEIm8YUl*? z2vFbgl?Ond^E(QqW>1@RJ{B;+Zl>>gwba0YlctJ39e_9ia(W{Um!(0A|GO`DvHtE$ zU^x+fftPgB9NU9(lOI7S`#NVM2~sxsV_p!oQu$r+7HAGk_$@m&8B^rd zG$er<7|H*~M+}n#b8CH}OnO-=p{A4{rM>628|ohlii7pN~7WgVZ?NS}s`C;g$|Zy1*8Jnt*~ znB6kb9Q7kYB%*R7+AmSRcJk?eRNH;A6D}X2X zWfw^l(i8>*xufUv`j1zQgtIhVG&l&#h8To@?Ac2R#RAp^E2CGbIrE?|*n7#!pr$fDF^x*TN> z^I!cLtLLOq2WPt;tt|@B-xHz`4%V>(XXhIU!w`sbR-pe4lPwu?Wa<8iP21s;jsLb$ zKMl&Jrq`y-O+cU%L&*2+bmuK0%pumx;hyK`=-Lky>BJPii|rzF2S&pt$Iq^q0?F?7 z{f~z{rLuv?RoLjt@M>c!vX0IaG(QB_ncKxN^mLQ9dOv>yKmnuNk1qX}bD&=W2c%|a zs4!deTL`@mUfwr8Gg^HpZwve``S29ntN?RfR>NfdeH{Bw6(pghNAs~mblbVxd(hco z+|cGQr**NOjElv&5;WUB_0X|6l*%AkvP3pTiNv$Ya$G=Sr5DY@-fgpJACg?6b8l>!*xg+)Fs{^9m(%-#!k za>o%PzgZiZuh4^xCCY6!GROvRG0#KP)fFnrJqrKT>eI)=QD;NfqxzUYP5*J-CLB%3n8gxQ8C=pj&XOx_1E{kZPLFc9927l(rbEIQbC!w_8imS{!#}f#Lp# zOBG{eq)CfBfQsk2=$YByWAo_OGmop~(AS@q5YB|h#Q)rFo5}m0cxPP{eT>cBKiMps z5K??R;FI^eQ&|{-Bp`MZ5Ei6@XH%Hw3NgK_OnsQ$B1UoIlb4a052dRq2%etsKSB?k z6?ns4>AmbFgX29i$8YZyQ2g0DPQ(G=z50LozpkFJzDNFpqm`G zDVY80Yk&4kv)&FD;VOWq;G0{AOKcC3hTuj^%*+1uHlM!s`Ac5Q82Ej68(esARvR)- z_wAI_=d@xKcgPZcz4Hcz??gx*39%}atrsY+3A3jZ!3)so*oe>NbIzqrDZ7uvB-qKN zTR!Q}f8P#AjxWI(#@!KhHV8IVvSw$1tsAl7TuAfLQ}0n;B0YBu6$yzOK_TBm!u#^~ zkd2r_R)=`>FcBvQZ+IZxtpJg?y#%Z0W7`EsRJqoIx?EHJZIe4`~g*77b_EU}@6D8B(jVlT@1`rZ2k~VKU4sw5&7Yk5) zlbfQHBIA`yAYUv^*+Ud3Pq2L#5a^2DvR$etcIf^-^1jlzmlpRYg#!Lms)ye#RYe&` z)$Pna=EZmVbzYRv6#lC~){<^}`LY_lcMb9%8hK+zA?mFtk*ePn*;E74=h9n0$x9O-UfSCuZyMlpnI@Tb4K~eZsIH!F|Fatkzz4CFceO^I_Xf9GvZV zl-cH3IR_jU8w;TliKETgieI58msi=CGp9k6I%dvMfet9G^KB2AJ{9yTj07!^TLrIN zn3H$>oxQ*n2ku-eBg_d=NIcQZdN)=8Si|(Zk5{nbL)_o{dG8q`(j^ zzhfZp=rG(e`j}xns-R1uMvlw+cUknLkT%C}E`6)uy<)mvoLW`2J7@ROCBHotqKy7T zC^|GHkY(~#18k`A9)pHt0Hnvwj&ZEpq5^bZVTdO#Ii-kcdq|6e)Yv zkfmTX2c;}Fy*fw?ftGtzCmBwG((Lk2&km2~)_T~PKY)Lz$P@4D9j}IMIWm~RwU(CJ z9-~D*_EBe9+ZM1z^t~SgDkGI7)E}db?@^>wEro1%kkP$GZ@d011WMATprDqHmPZy< z*kc4h#?1^e;MY-s(hpJ+SAU#S;Uz`^Q`pG6ogWYM#j;4x1+OZYn&1*_9hS>jLgYl|#kuy%HF z7~BfqIF&Rbgv~=(V>rh8@^ZQ}c94UO`b|Vg$f4`$2NWt=Uye+-{Wksv%kABZ$J{oo zNXnRjm^fZdm-kzTCcPW6q!=Wmpx{r1!>mKDM~6sEJL}7G605-awEEckdrPO3NUk7teXMvy&MsQg)6%sG zMi_?^F&>$jsTNvk1cVVecpDJd_USPmT7HX>QwlGcbm3ogsT2r#!&nBllFLhadPBH) zcFDaR4_(+X+VUTr{B8cCH(x$&-m?5Q@u)U6Ca}z2z>Z9uJ^g<$|YkfuE#%qbM zP>#6{;ghzaGE}Jzv44i&W2{Ux#9QPLD$<@`3{x$aai*Iw&qdXvL zs7p2+uP13?=0RhEJZ6dd&YPn&kv|q8qbf-OHd&mxKaf6Bgabr2;A~~p?;A;0g*)l| z?s>rk>ek<9r3bii(fjCGIM%wIh3Ep)~79RwCuKCofkGVy80 zB;)l>x<3BY-Vq4Xuko}a#Dv0d}o&5nx(_?#QY ztZ)%YupCAAy-zt#!5vX3pREz62-ti|T*yBvaf%O%oO0e1lQHR5H5fcelV26oj9jyP z#3UFMkdVs*9!lyIb8q)IDbRjAWCbSSiDiO6kR?vj504p^o5PfdL1Iz-d2TvDJ;Re!P;Tg+`@RiY<>%HJ&`#vdABjhnKM z;nCt?Z8Y13%fPAR?`PWh*EE0EX4o%C0v~zc{r!T4};sh=3?!G5| z*IIl1-!13U8E1?$Mn9zxk~yFG$bJ2;>()0jugnX*NQ3*xf;|1b4B;ll%<`2-npJ5r zcY}%IK@1{_Qo<0(A5HywtrHm+H|h(v?;tfMv~oa(s*cZQ`4Cd%mC6i3Mtmcc_D=Pn5c7lss8ns*oQJFyHYI^gwwQzKh zDJ)sZ&9^AjgVmDd!Z4)pL_CA<_x&;2`#5>LE*3CfPN52wWbSb=aA{FR$4ry$56@+h zDv!U2^SB%eqh9xMOeYPK)p1}y}`ky?K zy=Zkl;|89I4?@2m`#@lYS&0{8v`lvACGOXSRZjprN{kq8heM5E6n$kypPA`r$YfTm z+p^}N>)ZGe`92&C?WG}Kn(U(5a2|;lz<5!+S}hIpvuzx1jRDSBadlptX6~`CIs$MQ z>es(dg(`zo8H%}e$6zSKsGBiczk_ZT20ZP0*Q`+KhNbIeg71ISRsy-;~i+XNEc6!Xp?-va%gEiJ! zzF)jI$vjhhpD(AkZzP{L^WJhywI*exyE5TW@tjE|`##5WDOI1@{Eg>HY7ZYU;W2xb zD8xS~4BI{*B5FKMsoCARB$_6S3~D`Fm)Z4fiy^`^d0ba1Xl|5!`w(Z92X**X@mufw z+p}~|VlH$03e!4W_xLUnM}_=r&mTJiqAkwRzPFdGQ8JAJr|w;hH(i*hVfW{x1g84D z?bt4?FNL<48sM$tmFG9(Kw8|J)n91xPLU_hQ8$IouW!9QCR+nbUDNlyukH6zj$?>( zypgwh5nf%wB{vbt13Za`j;Pr!%fHK(1*}yZkRDh2U3G_!egvE*I{L^^QFi1QZOopp zw;FvV#pL;t(ewQh`C=G6vJHMR0KT2a453KI)CHB$S76eoYzT=DG^Z#D&WLajhUD{h z-}ppbFo+F}rHiT0#A;=yr!jnc^5nep^>yqgt*NXRR8S_Z3uE)M8a9{H4uPH z1j%g<0O;w#MV}0+K2h#98x3PmKV|_{;8muX2`By6GS$tl`MyE7vN`FKo!1MDtya3^k|2WWs>BsH*#Rv%3A9B}9Sdg+ z`tmJWxYx#Gi&(Q{`wdmI^J=>5h8kd;XTu7A?y>@ltzmIH*S=~dcjvd$!;(3!-{#-j ze}d?Mqx8!8(3_mMopdjLYCuDAiCJT^-daiY7A09WA&aRRg8{G zKsZ{#n^d=QC(Bq}wl{2Nhi8t4QYz%`Q=cb)} z{L2P=2B=f%SaU#+rpr8&x$iwR?qBbFQ;MGCoSdRUYi{w0uD*fru@U==*P1VLHJ^E1 zwfi(DfJLzV0vH+>&!36Y@|?9Pv_RsYI)1vXAx>HQ zF|7kad3$zA1$2unootk%P$q7C%@wf4dE9{I zs=w<+4t$Bg(!vhi-D&-jBtMv5q1Zd&;S8qhCcRC5y^zs{??#pnX_Sqn` zYTy*@TezXqLlrYjHa~s&*_Th8XW}-r1+m=qO#H^zSA_x5?Bu3-EhNb8l+sje3Rs+PaShfV!Ic1|0d9k3%R5?#78L<>Zk&W zleBK)BXgstOy5l3m(XdD;zDkjvmrg)>`o=P3GOP&#MCUvt@{p=Am(wzA(=``hjZX< z$>@c%Dk$mQ3PDz(0qjivniz8F?<=2f7kOZewO#ok`#CcG!;1W}03p-qS}-IYn1AQ^F>;s5$&DVcbnQ;ommodAojpj)IO3tIXIsfeA6_6%?mki;0Vl}`xHr= zov`_p=WMmBDXMRVNr|VYH9cqT+-0)$SLu`c#?hTX9b?}XHSHtv`kA1Yn&h%?9z<}} zKrPx=Jxnr>B_huQwzhG)b9!U+JOK_yZ8=Z!?d2$14+@vMugf;mx*qrJ9oi7#ut&uz!PDPg&P$02 zdcI7)=N1Av;D*-dK?`Vn@5=L@N+4r!Oi+e)WMI&O{&{vBjYae1ElJde0isj@h8S&Z zZv_zub59BIZyFqo6NOfbf~?AL#-I{BZ!6#B_0P`#cBCm0Z~5Mx=ab*71svGMR|Mh# zox_lGo0Nztb`SwH(-Y%9#+p^K?Hxw%?kE0wGH7LiDC>$kAoh_sB6gkZ%GR>L{VUPq}|DzO0 zgESw><9~ocU|h4M&jX8hxdt>z)!&Vho+&XUm_M)(e}}N=mj9KE2>Plau3cgNeb<9o zRkFC=Bn?$p8b?4EbY4wsw;h(IG&KXf=O3=Y3XvzvfM^!_H3T^pWXOUm+w2DBOaMs3 zuHB~z*z8bns9OE*kz>O<26kO8ZNaXJXL;R+oSpWLHIQ&q`f7;Kr}MtK5b|_I}5V@KzgRsu=jn6QgSrb%Q9G_y?D?GBLd8+DA$s<7B1%V$ql1)p-P#tcTJ>>wqr#&a$dKH8yItjQ)KwA|Q6I zSB$RKQL<{Uy0PJ0k5zMPi+CP9K|QC463>aztq=qGQvG_P|Dswlk7ONlBj%l3Jw%W7 zPR1F;2M^;TJ!V_mydCzI9q7NtpR44=+$t0w4;w2ZIISE1#uB1L&L5vYRY8B*L76fx1M;PSDvm)okXu43+7<8>G`dHku=T%n zlMokhjP7EbNdR8~)TTR6ChGVagNbtZb==7E0FJO~+}N9dP!Wc@N;nOEJ0O)9DFo6BAx|-8GQ8LMRHRKlFs?Ovs&ejKgaeD zHdIRuLy75X!5_7ZSU&^~lFVW8rHfaVsJFmEeK6DhIcWZ~VibjlFu)ufb7|R=e1lk+ zS59e&4l8Y$x(fBy((OH|fX{*t=uC|%p^iR6@TE=PbX!C+`nn&`J@@e_$>h$9?g%Q5tyd4le-TRlCFON`RT= zu}|~T?>Ut!4d28ld4hee8a~CJ%4C7*bJjr);+c#S8#`Kk0yGE>?p5>m95*KEy6f?NW| z8MCgMgmkKBuvLQ*mJ)T5g}1bJeF;m6FhCFd^?kkp4N6T<5;mEcwKM5rB{zWmIIz(+ zuVXSSP_pJDhceVBS)=9G9it1iASlv+Do=8;nWZ?7BV@g5h6ZY(9ZP3kxxya`Wd4$F z{C@2{cn-+^4l!Y;Xr}zy=>eO$D!oh>Z}8dnzY45YU$uW` z*Ru1w&it8Np(%8Mj1t)zpWay$rZ4Yz2L=F|TS#~}jc@+&jkgHs)+j~8xe))s(0=i8 z?6}KgEzqn+z~0CUC{Ii>AOlJhF=i73Z_WELl9*^_4@SiNfg?ntSXB1K0BSN}95_oafpwR2Nm zsKv(S8-Z>S;bD>xi0_a&GM1xoEOg@v67S2Yq}C@`%&e73!UFZ)Ophs9=gQ@<_(CR; z)3{Ms!O&KC8uUl_7i^I#RBbDqJW|nY&d*ajljz!}^;e#Ie(l{CxaGY5ey7~Lzw2yH ziz@~rzur0eP01K7)J~5k#p3&JGL|%8i@ZKMPR;|C>Q5Heq}SmzL3RkeqWZ-C{t0eCBd|I}*pyWli2B6u@0R5GC5x>b^Bgf+19aRz>v6TqYXB^t{AVNRLq zlO#DfH~;_x3n=nDhMNq01`j`j(?kLD&EJ~-@X%2G<7mVV5bN^4e;>pSK>SU-hmjio zt@x7#?&M3rSB}<)*-iUX{5Txe6!?#Ry85KNW^~M;Ddd#=Et9OF#;rUweoEVxPZp;t3s~6`ZB+deCN;wR{3TcSJJ< z>mBuDo84$CAMh8J1U$cY68W8|JgmNyTiPhWRDUgS2+C+a=J?FOM3NRfg>druZ}=M?UT(m+`@}GUZvSVb6dh7#nV%M08SgpQ_zw-BXT0O<+(~N z(?jHUV*-tU6i-YAo_u?!+KQGlyJIyl^Fmy@;2x!tjfB$4lPz;dm+GPCNO{9ON|IaE zBf)!Z%fnG|M5_%B_x=;C_!k`Crx)ZYi?6U50wG+o5*3IUnwOF~ zEGuuuwh95TIusgpgFspPmbT;Q0JF34o~ z<21?Knh14JuEtobkz3wNL7I$RBjyCDDDiI;$wH?V8?+k!2~+`ZIdGGzawDV+9Vt=twaD=rdw?_OViguUb7Z<1Q<(l(?TGbXRYNN1 zVRcsF_HZ{ZO!r)p)FGrrU+JaY7}2}l+yTX;^zbF^BcAGvLT10KBk*+Av9g3NoGJ&C zZC3zan{et=E(a+AyyjxJ>cXm01>aC<pbQ?;KaI$@y^*5EGkFI3$%FdsG`&Nt z$wzuw1pM^G`*}i&>V)@7mf8_@=n%bm?R)o#I;h-y$_+i9@kdD_chOF_h(=jj+Z{Vx zyr;wqGbB_t*m7xyrP7!{md*w7_0ro4RU*}puNSAKV1KuM-IYa76oNT@y!}Eg{yrfV zIiFcz?c3!+x*aLytti^XE5=b4mYSFDPxx-|B5o@{854a8|?Og=`HiuEyXWspC=fM z?U8>i=o3DdF#Uw?UgqF{f>K~vW%|kEnrV*TXJ13j_2sHFOGhFm{n}ze=E0Jyhg!?5 zSHz@=4u^NeQn@Me6&N$t6X;s^{p;ab-&RhzK<_8hm3O;`eJt(iP*&trrKw*1xBIKk zD5pufC#GDa`VmM5 zv_O-{uIOO4e$Q%rMnlP^GiqEkQU^`14G>?{RPg0Qd+sf=7Nl^${bd)_n@kT3Os-7k*odPg?Hrf1 zcR{b0!HNSQzXQ%lk8gtN+!mXHU8{T$82u8gJ`#P|Q-q7L(u;q?6&=??&dZD4uD>f? z%rP@oj6N9`gOg1|@L>$H0-urM!P*HN$Ft9VQHUs&%vF&?Q&&4+Kxlj?w@SBIBTz=2 zW!3Po@UVbB)u)n=$$MXFuvjC}pL|0=ZM!Qe1Xm-L+i##G-JZNp)4!&lNNh0HAtG`z z@Py>sEU#~N)kmEst@#*4imFZKxfxbo-rN_j=JNYXRzKnP z>v0cp!qB3I%_gT8eZq8V?~droJNh&rhK6i_{Wt>fBuhPyTQO8A+9svLS#)Vp6QsVo zwU6E>Ao`;fkRAZJxwqH;{B`jU=qk%Xg-{b9{CN!w-LR=OB7;NHuhCiM-CxdePX1Y< z51${RTRzJ;4l`|xk|9|S6{YWRq{)=Ikt*}OE}M@+5Y3)+RxA)=54AhfS4=YLXvt+~t3G~_Di=l{jL*1r7w z$ki_gz#fbw@mtQ&qZ3j9JI+G3FZ-T39{W>G3aHnLwO~j3d(k)k9$)cH#IR=TCLA`1 zM3~%MEuX1v3;AvjxKbv$G7S-E`4y8>9CHT#IMt{^Z@JoeF}=?fV!$C>*}ZbI%Er}s zh2^L4l}QoN7)EQ$qVg4%jPX`02X4|Y1-V*wj^bFOhd|843QBuv^ef=OH*1QBP0<~< zt@Bar#>tY>5{yS5RCg|TQ=T%nc2{adr-mFmnr3zhxh};7{Yr5>(})Ny;?iQtu!=IX zaUnLrB<>qdPuLao2aUe)A}$@*`{AE@bEKV??CwEq^2}(l&vb)Vc+MY)EToVB+P`;8 zT#^<31x8O18z61+aYOnt%n57eD1@>>o;iIk%)-Jm{o1)gwhFbICZ^*+tMPIJ5^9h& zrHFL6ly8@|;r{&z4hfY+k0!>N;aAz%<@8!-A&;T-=e>v@aK-g55?U3v zK3$`Lcdc3VVp%+q%U)j9d9x(dUl zzdGAbWc&DFr|DF0+Ih~C*e9$P4xbl#?cjTN58sT>1N}$BM{UyDJ8G_A=PK(^jniS; z{j-fXgKqmJ-+N7l_#sxjOu^S|NbmuYV!0w+pQcGs+M6!`qp)Q{9_R$5tG*|>lKX_d z6e#2E(q?C?A#u#Bqj1!yp%_@a-XuGAT|H+MsqD+tUm?NVsZ7aA!Sv?BK34BVIat-o z3YJUs_DAM;fK3Cj&Qudj6MJR7#QJ9e!#hDuEt^9pCN#-(+`)dL;zmW|Llg?hqE|Xp zRX@NkGnklRNt3(*61?xF#h+mP*;?~AS!KRaqQ8vo1AAg3V+~zBQsdQnA00KRH!v5$ z(Jol9kVIrdMoIU291}svqobM>cVm^%{Q>Nt@L(LB!<6HoYLj8f^RRLg`v@6(+`}gy zFzW!v*Xwveybs$XNdEArZdxV5PP1|TUm9;WHTt}O8J@^#5`yECJ7SQ zWHpWJj74Zt)7J8PF)EOVT@*`JG(E16`f~ur5zqlq7NbSVCg9Ehbs0~!+>T@pdL=X8 zDQbYlR(#uC(K$?HpQ{uS?W6))HMC!J)!7fsi9|5|3ONh3#hgDic= zAZ{<#E7Tcs%?|d*l|j9g+)&qvpJTdOew=hg^h2hjj?swMU&snMu%hJ72VPlEGFl$y z55jzNhky@VB4f$pbSRli50z2)_G#l&P;4)Rsq~=Q8C7_$gE1tELU3!EHRwh%PoD)L z@-DtjxS1WmhL#YzyXGN~{%V~~1Mo0K5Wig^MXHH+kRICF%I7xW8A_-U)6DAlcjTmz z%3W{?EZeuRQti&i!$1wngTQbm#r@PgFy8O7O+8}pjE6I7djV&f7mu(qCH^5+v~6wY zdJ`{x8a0FZgN3q=7X%ymkJ0%}D$83w?X=w9oPm|4vptW*1T5f_vPoPu{OrKR`;d*$ z#4cM7D%R6hH_RCa>_*ICPCF)CX)T6@9G3Fg%VK^-80D3^#H~Kd5W_M#m!~i zwBLEsmKTfCZQ`6is8xPq{PN=dm>hR7?s@RzD99`tuq=>S6Ec01WE8WnX|CpU1IP55 zbhn^z`sjm@M5_7VjqUcW@u{+3F=|j3pXLw&4!Dw@#3EeZ)mRzl9<1y6reo5GGWb}( z;k3Aez`a{ZC25($G6o@uMM0ArWu^!89wzBcq|(yQoYi~O-Gs`B;((T0Jm5K53bY2$ z1??_oX>JC^(f|pY^hemzAR{Z+tln=|?tdsBingar(DEmbJfGh>{b-m8Ts0Uv-Fj`t za}-RIy^n(yJUvGP<*{Vy@X9e8OPoqAUS6NYZE}n9upe^g8TMskbM4w!;$mb)63*pp(1jY78>0C`&aVx+{XBL5D z8KsCF0x5D#&7@8|-*A6xoHy_E5EwqR(Bxkw`rbsVy2#4hdMTBQ5?TfVl`GoXz{oez z772in2^^)QM--?F$WPfvoMMCWISRij6J`%^P@W_&)_0r40?C)<$0?c1wbI(@JPk*F zIu9owBbN+c(JO&Tj$dDmnz;6CZ-zWnHgn};6|&^pC}(%BWXu%4J9`c$)MXkEw;ZEO zXIixfz2vM?n-9}*16+5WeI@cs@$`I5=H*_7XE#!q7FPWRR<9&Q23D6+{i$#FmeZsj4VgaeqtF91Nr{HFIXX zQz)sv8BUFnVB7}45GYfWdd}3v9Cg%0ONcILMn&VKqIvRR3`VZ=W;7Z@6Nn-*%1SnT zQPuw1KsYcUE(io&v$w6v2WEz;tF2E*QjUlg~51C}gMVx|{A zjfa_8sIrnTpN%e53^*B{*TA;0#4!Ysl~~+B^B2F)`(k&6ISQb^0U+WRK1g)@k_G=| z%t>Y(-|9ciTtRuVtYVk5J-#lmp>QBWUNlgFqsM$fcRF%(nlPw}>loX%-W)&^WGFAY zi8&jq#o`~e3gm}OmiLBCOAOm-gKP-X)lY1{Z3JeCif|!`^pH3dh0ftbZc-&R`fphV zLr+K`5eSUY)VB(a zXYXcIZ4}v3#F6d&Nha?&@~4c3q25k6K6wBd$*#&H8s-Rdr9v{EW)(I)2nopVxu&o$ z&uo62py>bLRBMTZ@dT7LbFi_6mLM;Y$7ozP@xtWr5z)L|3!6#lkF-uFovNx2cH;qq zFByIWCTd4Hgpw6L(F$4DEiDvP^h})55n1hR6KTx&WyJbOT!=E=z9xT?33`Z=uH3>h zW>G!rH0MMMZ2vk~pivH!1GNyZ=L43OJczm(*CU3?wEfuuKbj zu}_7ygI)X!nZfgTgct6vg}dR!?sh55ro>U*&y@ctCn4S!WaG zI!FBNg2hB{hz^zJJU>A2S?`nXEB5A_O>jMT&I>tJ8~2Gofh0TQ z4=sA#5YX|vy~IB$5$_KK%TI;2QNCSwpFn}!4Aw+q?LD6}!oR-nEokZ5Tr+0SCTVmt z{wzClW~(3^1>(A44YoKXXxMw|;nKK%8V`nXejN*m$_0L`6NFI5^S(o7>Cl zyT3S|tY|#G5_lz`(cpaJlwuZsl@b`Ey?<28^d^$ca~l<{Ml9Kw7IMAsGT`Yk-E?ot zB3ZHFxa*bB$Q6M(p`NQyXm{o1ew(Ke+s~Bui#v}?7hRN>c;s(Z(xXZS__oJgO6A;t zUAO#v==^LSf&Gy|&+F7EB_i|(eD3NIPkX3o6A;6&qk(PVeTXf?Hf3#aS0nzHMOGP3 zb2@I`{VGSI`T;mbe=a<@sJE6#D|Ei_;JI3z=Z6l%sWEC9CT&G!!KXDn@t2c-YOzxcWtTDX4?33(n^KfTUtmi_ zsvPtCL9DeWt`%j0)JGOkdD=UC0Pqp|8oRzqEecw$rJhh657uSutbZKhXSUN8T>h19 zfT45WS?~Sq8rO6doTdz)vFq94(Kdi}GrC}t)_4RrF?M~N$ml*!>gf7(A@UG}P_;)N z1M6J9HZHtO|x z@~iy*I*T%>%W#m?Vqf?i0Ea?faRA5fLtneAHEn`4YGDzkqyq6r(fSwwJTlFQc$V6W^fRD^+`PxJfLJ08JmCu3OO}%Ujxq1E8Ht*%Y94Db~oTSC-2cyIC>z|hz zr$=vDf`O{U{#6r9z?|uzCjFiL@?otrR|6|wY3t>tSE#M#zW28r^U~kfpSb1H8hs`m z^B}WfkEg=3>kb}IzY*^y!-t=aEv8olOeS#IMiqD3-0-}9?}{=3*rJaUMJC~ggY20tKOXDk{ZT*)&ZJ)GwI#D#=c1I}KRX$B%9;_H{@x%ktI?&PsuKn9d z#%=?6qR@&DhA{4om>8Sxc1X;R`wK6$khdF~q7T8GHbw$kN#L7>ngUa!ule;xcA5?` z7zJ2Q!G`pg!DxAb;Ux5FUq7%m`Q}k}h>LP1LpU_2Lprz5U$yQIDhRi(ROKW#KUMXC%*7v_HNYNdWlfT#bgWZtal zZ0X#4-L-^TeSB$_h?e$X)Sac%q?1i&SJDO#4!?}%8a?zimByto=l$v3pTIU7 zO+Xuj{RnVO8vajryfS>H45x2y;)j@R;$&I}1F$*Q7#Ir&ikntgACE*CwJrJAtE8Bw z7`f1w?Ma2%cWH;r-#>P{yFX6su%w3j^YJg9i03RgvBUwTO92dcvO-9=saKn_8G(Rq z(OETZbL`|!e!e$;*6A-=z_S8MLMuAbh_7}h3d28b!$)$hC@b-3%#ogweF;aa=NH+j*usXwoZ67wo)b-MLDLw2`;?Y zGh4ab*^_mROW{|U_`DR*CwQ$#y(=>q)#x9HN+sBLJAK9@7MqSm=$c^WqU@uu zND!Fw38!;G=U-q*zaD+TA6*@>h(gxInTUvmH$w1MHu>w&|3jchl2{-UAc5;zC`umc zL}=7M*uauzk07{jyvo$}DkxA~zd~~vt9Q*3guIX=&$XKs5HalFKAaxwx@B&7@RvpT z&MU6{6&Hu7~$N*_*dPhG=Yi!<-1dl71G*Rp=~0I-N00+($z>@IYV@B&MaW)D-u zXAb0agb0AZtP+G=y^;GZlN+ii_@qbbeZUUP0KEHDy|4S4*0;)}2o@Vt5Kv zC?pmnbohBl#HrDBQ^t6e<8W9!*Ay@6LkXnDZzqgxP-57{&xfp7qh)uf@2C1k);9|PtD-^+dOWQpK91Hmf6 z&{O^GG#o9IzaO+I*t%|wd4L$}T&v}ssnj&W>Sw2JiP?5Br00Qfaa*xqO zbgBa^j=FmdUyztOm^1Bx@QMy_Mn*DB*x5pgezF27A{8?zaFeSw7?L2-3@`)z{?|iM z3D1Md^=3tUjAajMj6h$0++2dLKd_!OMG-l9LdR`sg!@8i&EE%TJT3Ny)p8T$ORW@u zVeBqOrK{E@n~LbF7N3fzjW1D{c-5S4Of?ffvv?F`*cbQ`m%0#WmjMXWp30!*i@wP) zLuqW5w34(E1swj=lf1@?&QC{YO`k5(Bq{<*7#Ei{vc=`ftGRU4HXrh@7A2+Ht zz%K;>*iO@_-LU1ZlD$JVBwW`|Xe3R{%7C!Mo8+tR-R8>shQL&4duxoAqTY37xTdj< zU|@`v!!cep?P;{)9N<6juWsgj*}Ak^bWrTg9}(UIfIM;HjNjdB1V7SO&To`_e|sT1 zG=1Th{|mMt#4)+fhu`sKVm8sj5*vt1k#0Cn_Lx00wr9}08SX-BIy0ccJ>49yaDi#U{Q)kLS_s8b+s`gW#6Qp6h$J^ zufLWwFmYDX1{r)Gc3}La_tetR96)@2U_2fLH1ZWA7l6N>SrArLBFe@`Gi=jgq2^F( z9c!$idotp6_G)ka8O~WXKRI&C`tMk#mUodl0fnXG!1;7@*%MA61KvdWv3Qk=? zw|m;%2GP|1oI?_poU1XPko=qJxHjj1xF0>rHTvn2-2QOgGZaDo#Z{9da3QrFZgyQez%-JlaGMsWbyHvWO{#PSvL-f zWXQ90$bl<@JE^*IQu6Y{d&28cv;2i+XQ574XFv9@yXA#7MT=IAXTNnN+2^zot`Fff zhwLlvb#--uD}71rNdoTGy~UapI*E+1bc~6CQYz>hy1%nl{v-5bu)+AwD`xWpY=5u> z7lZ@ur-i)IZt1&lpJ_TEDuev5LHk#Pg)WHH`^t95BSP?^px3$ikhmYP zE;ZTZj->g+6rJEd`{pGIgn>N&e+mQX&VmN{UHjV)2%P>RU6~R6zo&sD;Ur&vbHF`8 z<$>0`xyl`Wz0P>>C;#x@StoymOx%G>?io9u;Va!yl;`aLzw_e1{>?v&zg$}=gd<9&?L0u}s+BVNaCKnSvmT%(0jy>4FW%_SAN?yh>aWxYp!&`*@3CDq zUi&FI>jUgV?cY%?*4_h+PYZ0CFf*P2)sF?Iiqzl#?KioQV3}kt^p=a!(!HZ$`NL{! z))%5M52ocmBButn z;wHu&?pFcbnS^J>M>y$;zvpn>1^+23f2T+SOu)e=kFkfQI*4S5v@ILkfB;XRU&39D zE7NB_4F@^>^jL=?AYZT#h&kaPb-(XkCu362@d3EQcfn(SjUV7a0F9`{RhSMqC2?EE zW58)XCj6D{^{AOP!rFqo_Y*;$@lQFc<*5G1U~6E9G-d>{>UtobGc?u32$cFQd)Nh( z(Mhp?otDQ-=SpU)Vj;G0-39E{5)i+S6C0Q<1wVjF|NSjL!g%bKBtr?gd!AT^bOvHk z0wEm^50-Ni2JhG-+ot?bhbM{{*)rnfno!oTcw%dY5^^Yiu(?w_Dye;gJg6?i0!vz* zuFk{FI3~ob_AxgsFhUqH@Y$>UV*h(gByUE#&1{`E;h@vwg1&)w2PLzXtr7rKM75}P zNZ^~;K#)J6FTC6)gBgGNqOW6Rcy+!(RhOP7|LIY4g7h=BU7?VW6%1HD4B_3w(Zbu7 zn;7jB;FL~OJn4;sU+Tu2=^#b8vt}w7AUsQx!ka%=_#_1O^*6|Kr>6h651;cZW91=% z!xbyuAp3-4dc2QokyBuI5>P5XYEu#^fZ@rG&$Y_;7kQdBD}=xb30{GlC1%CBDlID1 zm^;gG9OYl%;gHBnl3@**Nmqi^TRsdG8dQNlk4cnCOg*TNlQgR z=3#pw#=6%EyPjw`nDQOlCPJe%%N%zMX43TBTv}|%(|J6dX9-4bY8)4q(&U{Us^r+k1{B(kC@TLLuqqfV=_W353UI4*+)P^~O z{`!b>{u9bjN6vtcWvfZB^2QCE$?ubsTr0)x5~ks(r*OUSB4w+IItQ*H(vK~Ip)bcy zO~wRKHwAfpe+>%b({1N2jZ)WezeZD53gadtz4SElnh@-TDXxAHC5|3%DE0)((jf zxio%)yS<7A7JtVUvVy0=1YwuNV^8DUX&s5Mz#%l``H0{%YpQ&RF%-)tH8@><&)nB~ zzmMI<68l*T2NwN9>me}qkMABi?iWtFpj9h#k*PS|SQ)9-d+K<0Wh?J6SUmNDJgB{t zxSY)v=n_Mi!ve~jlo(Ll!0&aQtBx&5$&%CLPCkk_{y1RMPe97^ZLSl!p*7-p!^0p$ z(5D$zGoY6J33jeC_yVS>`GSF# zCZ!X;os=C;JgTR^Vdw_V_r>#Oc9Mo!ph%7KORnne=`eXg^p8P|g$r&|{nVZO4_M;6 z96x{$TLOOVXnEK*PEbZ%A(J2^`}(Gz>PA);Rx<%;@_P;=iq6ZLkE=WKdmlz@m81ZG z&P+NT;40ga7B|`KCk&2O?eA`DYz5Dz;;kmLlngQ!R%^eW*qstbTg9`Q(HK9YT-D{v z6M&Svo09#a5nZI-M03|W&iiZG5%nIcd~>$0K!(}d=R#Lyy|MJl-%}wM-=V83{FAj0 zi|2eqRBFm^=(TQHdT8*wEpXgKIXT{7w=%|^cS|WV^RNrClQC z+G#v>BM~X16ITn_ulV=OS$qKT&AO{1$#*d#8l{KkJ({U(p#`91iisYYMX7V)+9%QJ z6>?F;u^ZUAtk4D5eqQ-FT`84|@xIgsS%G`YhdBl8x~aKT!Vi+2 zi0G>UN?7u%f}WnQlP+c*#9HDe@UvMVN`mS(2?=sKJ^~Bxd=WU|_$>Gs5}EV(ED+RB zpa8#OzybF_xm9!?o7$;HX64K_f0vPSMYpLiO=KUz76=8xo2BZXVo2l~y`u#WZ{PNL z|28^lv?Hk?4Ul;AUW0dX3p)z#K;sk?iQrkLOHcn2Dv_u{assD`aIx0T5#vw=$QgH0*^)pFjMY!A+yDRRN{QdL4gSxMg{Ky5&Q4K{>T?9*W+5GKxJ~h5T?h!ElxGE z^*W9S3Q49YynvbIZ&)6&XC>~~Tlf&*AXPXR{8Rzt`iq1jPQ*KgkD>Xc=<;z-U6sve zEF%`x-Cr{U09Z62;J93=i{mIsnF%uiw35IV{cWsM1)$uU_Q4E@E>4N^@6wx~T#}Ps ztO72K!dKCw==@~#2K(Z1+6>#v!tK+Y@=4pV~)fEdTNkQXQ=l4`~920s}J8175e*$ji;&p(X79)>V zguzd#IPs`-{fNxCV(d^45-LW=#|))Vt?pNbp^EIx1tBJ%Q4^l=Me9#3QixsftE1DzQ6aTb|jNlgzLjB%nR0CQwj+Aw8? zUis3Y8I}Tzg?;Fuh9$_^y@O*T8Br!<@3>mhR@hFx1JsN!FD*#3hb#r6-I~D45hhZ| z;*wj;^g0aA&238|*B)!;S&k%=#9m0WSxgovX{%7Sfe}(B-F# zk@F6S_3IlRae6>~)wl^Ga0U;Hit~14mTaqteddpnvB}}&kU#A;DXccJ-&q-c>n-*q zpNT2wnc}^IMOacdkX`M*E*MQ+6`wz#CtC7S)~UqzF5lQyn3Q>YELOfILjlM&ern7K zbmFNsiNT=KenY5P0mryse)=XC#tGy_S7yft(L@vnZ&G+x-)mP+ngFuE0(F4WSY5SA zOz%1^*8GTZ+#C?#J)8A@6FDhIokD_)eK}!Aw0t$q3f&@TqF4`e2;Oadq{8?p2ltth zIjor-kGx6@faPE9OMsZ8*ZzdDxRH~Mb*a5A=<3dE&f}CSC*KtKvwtodbO$Tv4mIzG z3bmR4c=D(!oepaqc2^$-&E6-Bm;%By@$SD|Q5z5I)}EUrm*|5^0AnIVhtL{`>kT&O-M8!Oz96UuZevdOk@@Qu^d+{vD*#0LmhO>-sI;sLdqyN3PR{M*wtW+Lcv8JfkOg*QpJ9yo zXJ^k_4z?f4`EWK`>g7**d)C!>ebJj|I%9GVAY#wr-rb>8v{F)Ki$l3`y(T$r5Z-9! zK{ao`p=X=UW+i_LrKK0evP@Rvyi!bGwj}57W`+mC_>6cImVwKB{Z+kL;V%%up9KLH zC|WyPbuJ>6x>0ZO!^)sL(a*DQE6(?IKSWyk8_=;Hzhv5c`Fdrz?nFQi?5kHz zW4W~E1o)$5ZD;kSzHn)A#;YSW*?Ckl-u2w63*=N=Za0<~#|e{4ICNx$-|ajt+&4of1AlSSTM3(OoR+X(_x zk;A0CEV448c)us-OXw%Jw4dr%66gi9LCy~2mInnZxy11z?_RRxaVyCntNMHMB0tQv z-*e1OWXdjT7A!`@iMMJH7G;))Bgbtyfh)TYWD(*3Mmtsa=bVP? zR;IduBXVWzZf-&`*x&0;@raP!bZ3gUWNF$(P$Z1qKmwDLde>_q|AV#n4r+SqyS|T# z3Wy4VR7L3>rA3h{y@d|aYv`djk*4%2y@uX<2^|EENQZ!Q0s_)INEZ-%cQ~HwzV4ZK z-g)PlXU0DmL&+rh?cd((`&nx>f;!!~`?`;ya_BIf1NqFF+aRJe|3a*H#iMdZxn!Ap z*Ge-iigSjH6tRH&jz|cz%)u~FJlHM%^+h2-N038H_fE?d7L45Ck5FE zkF{15OCMCURn1$b6^5KrA`<%ZZ&#QxNfcwAvfA%_z2LlLN!)zMI6VfVHD5lhq$d0tfiQ|MQU4OBslxqoZek5?7bW@fJEov&yugKZW-y$?10!=k%#i|#b-w%q&T$MqS> zdtVzdO`sJS@VZWHKuG+t4E?>&?-7SBgcU2P7;8y;l>SSwNu%Z>L8s+;mq!$YGl}HFj%#=RN_Tp z_Uv7&7H~V|+}m1pUmZIiY+DQI^-m)8DE8Ld+d|l%@t?=viQ@gK?#-8efXA+PG!SgZ zl$SH}!Hc)J;&;DzBI=Cb>af>uM)&7MT6i}c3X36A#G$`O_8#%A1*EB7w~$%~cY4d; zM9y@CQEg|H;3OB*vyiDsXIY*iJfA~^r#Ni(z1R31k{$`XYlU~;)IZ-arg2D)@+ih{ zkNjD~TYj58nMdywwp7wN%{IMPLRBp-?O2(+$1ie+%jc%zW)rYd=oGSaERB9x%OCVS zrWTyI$zjHGjF`yMP3WKTAisTDSMqvjiF=oi5x8f9SdF)Uv&+t|RG-=rpT@ctsBxQJ*C}eS)gvtxOM1a~5DK}?^i7AVL zING!ADji&Fk-{7vn8eG5AWHF}C5FA>CNukLbI##Ib0#YxM{xd?!@2uM4Fj+5yW7oD zkdf!+m+IVgffY}ox$Q2(5Y4$8SGti ziW^E9JGVbJCjc^(m=Jq86>I5W9L{*DDfk8&+G^}v| zS%wu;ZJv#;D}zOw2;_n|EH`W`hAyf~b*00$j%ab|B#p*{O-`#cSx^_EAEO!Uuc@?i z#Yg}16nyj;5JlKu?|G#epsU3=n>p9hRl<0w#?5B)@8msDh=;H!n=8bMQD^K)K%ind zD(Y*6EJsp>88k?XC?Sf}C}iR@9)oqN5R`&c9L zSm2j7=!s<92RxwN!X@=Ts}*>sl_6?pTe*+v z7DekR{e^`2jijF3%hlxoxu_APc)s|FSDa+wS zYzoZRspH=*Rr%iZd25(qDSM=;B7<_{#t1aNR-VdWB=Tp8Z1&Xy)kIEO#QetE$)J!> z{V@M%cvT5gXi)0_HGx?@45n)ypBso4LSZu!wu-(~I^nepFRBGKnNqD7^XL+&3}Eqa zcLVt>pyFX+HBN7SYhj#0htW!AdmX9uZd)9x5&wOwBKWU6 zO_1M+qsd64*$O+W)WJ?d;qg@U69;dUoA%J?Wg(goEbbM}5L+bw4ax0Hi!hF3lw5M% zO{g{1oFGCPqdzY{5HveC%EJ?GZP5POeP)8une~*WMq5(iPRXQdw}k$E^Rb3v)}oMw zSPm0D+<1+2XU<-wjrfFtcz;9V8(!)FYU-Uh553OQ@{BUr1La$XpSGg&u!vJNeDvPq+l6}x9XO`{fKSMKk@KNTH<e>dYve^CXt{zjk zTS{OlY8zXcEPSRl25Hfo9r37y_p8r_2vhbuZ?eBaC^ryfz$XP_)6ec)4a(IyUfF~zm6#5^w8WlNBJ54d=`AxJ{;af zZv}LluEJuZVRZWpr5%~^vIR9bX55<9)u%K`vr_q|a)0hNuki&wP%x8D39-!O)G`mpGWfN%}C>$0y3xF#Umg6BTR|Xt03pc#IxP7h5&z zKc5Ht$Kdn8gujlQMG7{33(DJ=C`I;wv*#?im@|Q!)2?9xGys2K&_Ct!aBeXg6{w+l zpzPnAK3#V!7funI|36p6n&zRwe@%nlvHWK}1@C6t|Hozazb=FSS>Ul=(}FID|6Fd= z^Z$MA;N;)#TLES)o38w?5xN?Y5bU}FLEs^85Ljx?tKq4vb@HD6R0=geCz^}{_TIX; z)AS|0@8f0D-FG%9o#_%|IsdwdUNMwap(sn-K2u7H2wT!VP2nBq-BjdcdU)e3X_u{A z^8%s;Y%)yFPtOWL9Wtc65A3YqcMJ_BIBjbBI})232v(17m+1ucf9~W5n-k2Aq_Q?? z$>8X+s=lCE9ka{2yJcn_`p7U=UjB>lNwel0SG|TduzZ2&=%YDV{^>lG)$1*8bi^ii zKU z)Z%`)?i%E3whH$c%gQ8mK-789cE-FU0YAWWP`S6ni^U)QvWVDNBjlt7wZvfRPP;h&+yA+HOY)Is<6Po*gH-_?JHWT|l| zFbH!Z&D5>=c_>Cjp9fZsH1{X?(OtR2e5;?>pyqs;ek!dK#N0Lhk?Cn$?)RvY`66vY zo)Wf;T5&Lqc|Q>ZRUr*srcY1RjmsE8QDapeQOvTA46~IC15I2XRZR8R+jICo#_ETa zFqPh%*=Jy1m);x{0=B6oLI{b0jfrYiDJyh~_ne#qEK1~#=36p>J8HuB6IHbt*IXVbV zJ{SW+IaWn9xLG?!gxDR_jr0$Ir2_SL#wExI(bfmN)O&i^_ z+ee)$sl-k9*i|E|yV4}~D9Xot+c*K0Egq`qbeQ6zI}m3FEI_@U3zwgx`hb6A!Y^B# zXy(sgx9l zOVXOqj|;TI0D7Wcs};8r9z@)! zltL~48=z4SK|N*k$xHkV(2s(=SeI*Z$^B!L#bYb7k-V;4^6BNT*I~SRR$x!JPlN`p z`$UkIh_~f+d%|+P>ay~29B|m5+nb&{a(b%kRQ2Uah0k23Fd<$~jOj3ZPH+wA`xK@8 zLlwAfuCL7E9zT? zFbwZ4F}{xGte!j)g7vWO;_}IeMl)`->cMDi$icmCdWH064XcOHOOMn@sNjlBt}eH+ z7!TRw1SqD9lnRZ>nU0J?P2DR)houzrq^m^POSby;=24D?oz1+39dH(zqyFrK?C*lI zBQmw8(5xdK6UR34N9N5~R{hAbb~Ykd47B!RtXjH&(u0a)O192@Cc9bK% z4v61SRC$F{D0I{f9gdyT0y*WV(Zu%9s>H#W_{580-N~MS#VWIMP%~t-YK1%ZYaG0WCsHO%tK$ zA^~Y&rEHs$@5_5IP97Vt{(Ygt93-`KnZ}_%cAMs8Su3_j&zB2t=4T_KE)dD}&%UC5{7@JjR?<mBMB`OCe8G%Z&EN7C*@eZD>`r+{`)m@ zqwd|YS}k2G;=j4F23l%Wb_&;b2LslaYKF$GLIfbzgK7=WS?tOOGLDi7{OlSJ)RQf0 zD#xvGUq3vD_0lMEtNnfpcKZv`>duVUkYt|Cd6QN#p{4w7GTfSc|4<;HbnEWg=l`5j zK%t2G|Iyyye@j6BYa6ou8Od~l{#Jt-qgPf>C%)&|tzL+Bz9HpS(fmr~*7tR=XSlOW zGsAiEi4Dnyp6)ECpb#C8lN0Iv%kjSSUAPnHC8h@8pYD zw8#5S)76eojCN6qqn;4!C4;d`uKI%A@Zje%`8kXC93vEuw~A-ml0x4Qup^AncN}9T z?~J?yx2~_&}wur(SpEBE&P;5{dI z>;-RmedYl#9~j3co<80foubrhxDS0jh>CdL%j#}tTKr8kG`mIc#8^XS@v?UIpUuo2K#pEjGmECvnW32e|W!2A2j$K_QPi1RNv&6 zt$#F9B_`zA^6jo+wTF>Q>c%nmktXqoDc%_Q#$a&W zMW@4tC`|6lc8hCw$5~_5Ppqa&vD($L@-Lc;WYm(Ro2GcnC#n}1{$tJH;uN4K9xtw1 z12ZG${b%xrh<}j%{0I2xv*iHfM*JWb^Wz)*gUR8`YWa5cF!}(plPa3CD)(JIPTchy z{l~QZnkNJU9@n?@UQJC4nmraYx_hS7dXFpcZYS#Orvpce*Nhwc0CpKUfJtYbld0O8W}gf zD48d9sG2=_E@K*jKhX)oZ*D^S1!>LCv&AjbLZ4-T?m|oCW z{8HX35eiK0+ZBnwq-3vBIx{5vSamt4|KJ$0j7@=LarxQ+E@&IL8j=ZW{lJ z#`PNOXgp!~%mzAD%eyhWJIGFIG0pOH6|Sm#CKAesB_cp^L#-GfD#u*3B-)r72F?uBQ`0(O=K)53ZJ=EO>a?-^%D=G2BVyp5xl= zXD#Y1yfc;PS^V7V=To#Gq4-#S#*2e&L&BArI7(+dpo&onsQklkjTMxhKT6*Pa=_Ut z?^mtxwqPbwyO=s_JurVUyL+!%r)@PZ;QcM#lcz8)SWIsU&)cTu2QC^@D>fGGS8C*F zhMjWJn>C*^DCEo@U2?2{g0Bmq*)JH3@&)4P!osSIM$M{{Lox*aLau>(&=W+%t=hB| zIs)Y7C?xwqZ?Cu}*meuj-^OI`Y(G@1_u%yt*CcRTvP0v!T>~uMcdcd=})`Mg7;(E`>+w5mQ9rT@ORV5N?^bENDLM2 z%vg*5Ot&v(pYiD3nKXgw^^IC9q?|eSRVFy(atFM(c zv+tO(L!N&)lr8|RK~O~X6zl-o^2-~gD4_=yoqRArvyA-WBL$MDPn1P~A7b~rOdYh<0f8^qo+v}SjPAw3sBkbGlZ4+kC!$d>Dez+H$Ds-Q!)VN3J z`{1(I&WXfB%j)3)6~DAK^@4{D9sTZSatkvna8rJfD79Aa!Qs{`Ing1UNYd!ttTUhZ zIF{W~OT^_7{qhbSPq+ayi7rIE)%fV>XGv{81L$aX$tZIsQ4f2}JZrCW&1Dqh4>r%~ zS^e?1NlZ<|Uaf2;Y;XaWwv~8aw!r_&DQX0qqGPL%1ASfyN%ZBPS2%pL!$XF%yb4h1 z0w4NRnMeLQl+zf~@SIPMedu0S#Jw!|Y^qdU^ZnQO%^{SG2*L`}&EIXVw<_0+xu!%X zwEsCcuy14I_hLvymz!~?>r%CsnWW;7IM%XMKUINOy|k5>{cPIbvb!~a_=wiU^1Q$^ zlmq9IYy6&+Jh?GZc~g$+#=p_qjI5=fJGKX@94kT!aB)l=_geCFl2-*me>ruQTeUgv za6dL3$tRVUuDQc3v2Jqmz+CyLmCyMem5M}mH+|@Hn^$i5R{0@87J#EB=&MVvGycG* zKnY3X47(`V&vh1PtPz&ebtjO?LF?()nkBpvL0#BNWMq629LO}toE@`1C_B1X#i(7`nGaneY|8*DxAbH#~2Ys%O#6Th(7pf>dhdF8i zhm4^u;YT6`(Y)m8NGMet4`X_KVQz`3amTDg^&2tTY8vEvoGd{zY#1aV_pa(zN+M)I zu5=DcKjJyzECI9lI6I<)Yrk^)@cgZFK)g%ebS;&)G&VrP^&paYsMW&yOuDFUi+tF~ z2tBZ=rX5bm_nP*|v3_&G-EA(4Ahez)W*1+>BZL54`(01YP?!&MXO;PyAywH6NtmNk zr$?+e?TS)iDezHdY?3?nTAf}rgh^~Zc>_~P@!mbvHGiq&gQig>F9(Sr(gyrt`i*z) zu3FuI@rYEPw?9M7cIP1+nqqQ4TOJIscLXYvo^m;hLC^=WY4`*qN`>{d(lj{3aVtRnu=ng{lO! zSOp1Q>&Y{*X@$3ZFdK=v@P6MV4ib2r8IxiyrAnCcSKO+-ld{6QNeD97YwyJz zg*Td3SrP=?+sp4ysdM>z zdsa9n^evZczUC;$pr(@!{oR(Fu@b&KMfbN2){gIa$x!QRdaMX3nqhtl+R~!@DP2;= zal#$sV!;PAPdL&Qa+{J@b)!&*LeoAGg8>z)r8i908_h&CUY!BjBewnU+FrlV?agnO zjqrQI!zm6P?W_IYPu7s|0VYW{gl$;j;BVGW0Ziq+6$cl!6;pQiN+hDo7+rP?>_Ec_ zeraAHPj`xoP`~B&o(@~nD717_cIo8bfPz4Qs~u6mn(@Q?yVLP^Spm^bAbg$X9jp0Av2^9A3X zgg)cRoMF>tH_{sR^+Yz#TFw8x2Pi&!8zLfXW62gOCsVoP2?zFSNHc-V zDZg$klq0Q_#bos}GU?aoyU|MCdVFM?Fo<<3Lm<(hKPyrv{`z#SN{Xuvge^*LJVBB` zZSE~hQF8ZpY@&BzVtQ~%kdt6;k1_v&WE7NbJ1$ipB&n@b>W-9ao2caU?n^NWo%H1? zT=%@`y}(MeB=IU&dCb;s#J2P#3Y5iCpsRINNQdOL=QHj}KzM=gk@}ew5vynPfCNCs z8mSSYPd-OKHe!vD(IX9#d^HA&;}H|=7^Y3zk|qm0$NhC;BI9Zzo-)6CM_#(o6>?FXmFGdu>3vL*4lgnirqW}S z`dtGtdxR{+y{yO*iNdYY1r8aD;*!*!A3+R1ib2@+vk7yg$m@fN?464@9pv&f%xGS; zDm6L)pROq8d7e>mfS5zFx|P?LF4;s_R=Vvo`s0}$)=#!{qlY1qyT=GSK;c< zh8-#S5h>hHw`bH@4)6%`xl6NGQ9L(YGyv-#(~h_(y%yJT$r89$p6< zg8h^5SKh5K`kH94Hc5w%bsjjUu#P#yaCb($9-j&Vh3(-C9y4yv2r#7jzyE0c{h{gD zfeR!&{$$mPTVHf%?TNwB$LD&_3`Ba1`swu`<<8{W^*%55_C6yM)y#a!0z15k{QVXP zrIf@Nt1bBh?sHCK`>geRtH6lu*Q(V?_N^6d_QMe0VDS! zJAQ7%kwH}t{awS`rJdD{pCDQcXT~wvWTRoKb3q@LZ*!-!*r2z}KV-nSzXdIrRBg+D zBsSCvU<#QK0kdfM-QGTyud_BF^`CK#r1gmCmcwe8EX0{3ENoZj!&7g=jN=f8*oo@f z-FfvV>(-}?*frlT-k1dm21i5Rkh>bqG%lKlYC~xJKlHPyzHMZ2hooIjfrN}PvpU21 zVf=wlC(O_GN9KZ5U226R%b$M*X`!u`F9%%3A%vhI4d(}^<|CAYBz3mjq}e>BIR;c zQ6MToQWB#XK3lNNjmIrkHk~O|@KeNPI=Yj_&LQVY`+ym%Gp8T_0&rqw60(R7+5*Qir=PByq{3 zRipa*&KjYcm{FlMl1w_^Wbd`Bt-L6t^xOvADQBFtF7eMUlQziMKm@>kz3n;Chcvxu zadhmeb$Vr~ylP_^6=H>$Vd?prg#jvn?BuQ0_8aK8d36a&n$6~i*p+nH3*w_dO!1Ld-`@$ z%Tj89#W*45cTUksr3!DIs+Lu@j|hK?(^{dE zRYCw}>QP%R2M4mpK&fBdcB+U-#Y{oc-fE7^`F1tneY+gXtM61dcW$PU} zr6BlPeALURIC@l4UoHjS=x&AN*44CDuMKV!PCq~XcGyEF^g<}(C3AxTF1q@-K*u~n zuh(pmKwcp)qjni5!g4%A^%+*qmpeCgg*(8^j#EeqLet@!_`QmY zJX?naZ)uj#24k8pp0v&xDB3)m56M0bQ%8?>-UgvHV$F(?Y7k#sEc?Ke51Bm|ATK9c z-kpaXNZCh++rCWm{yrbezw~F$eL0XLwr*{ncjitF0$=M3vH(0<>}gwW!6(yC$U?${_9CII18 zrWRQAOFX|B7Yy^Q`>D{}pkPXbb_%`C!OP>P9Kv{vB`)X-8dtt>&hf;8)%F*B7uQ2p zA$55|JN&oJi~U$_-9*4I65WdS_c7`JKSN|2D z!CY@>^Z)j&`hV-u0zgnIP{qH&+MAjQM~(e@(s3n+S_9ob^5*6te|6EM&&lH;?*p>*_yX_ z57KHzx6c)AUu?G1FgZL4%!{|8ZFzQ!QJ$9}$I5XUi5!z$3IiK;_Qys`ciyn~w|~z# zojgb>m6%^r#oJ;SI7x5rPPaA8bJaWcKq#b3c0>F;+;Ggsv0i%6lH!y-bWcroHqFcQ>KzDCVHq`Icm8-qVYF$L_I# zPzLlQW@P>I$mBwOMX3f`Wr9-dz+WpC%Cl;^`w7?fANiWM^>kq26mqshC;>)8c*CoG z(?J2_8TplmZ(!x^EqQl>Jdn?O^GpmBy=_}Dv!eFdFTkJawpS*({zWjymt2}o?xXjVbp1HRm`O?H`!0k zU294R6FGZNON-JBj2PTdSP}qgx6!1*^lqmA)^fqCu{>*9{fH|Q@R?ChabHc-)eBwu3NGG9Yfa?_{PEkC-xoWSB95vgpDvr04*txY z9J3SLXFFm2l6vM*)%Ro7bnuP=IyH%OttnyPD!eyM2`JEc=f4&!oy-IV*3%sa9lpgq zJf!Tbzfzw4f43CW?#a4l&2nWXAG5x#j$3PdCnn@;seO-l$}o>m3yAs6GgJ4(_as#|&mgRlO4$&?))5jg`Ja zgkRulOq|;4^E_dw`=np9qf=L$E=G3t1pv$ydVpouE6`=v9BIMt4NSWHByCxlqIQVA zEjNVxf)11{?+lQ6{vqO|ua+RYIy)&8_WR#V{QB~!MH7_h<2TNpx~2A+VuuFi{@i&I zM1;clAF1agrA++I(ymGzaA-Vgh{eG~kOY;?`G#FrsYGKdPIOW881fi%!tMKI`H4LN zV{G(E-e2zqJ|A&gTVpdssG}J=xK_w#vo-^BbjLK znx$v`_ayMjIacf}R$(*QAJ#A!0`ILoq#7%G*k9`OJCe*{d31vE8NkWdA8!lF9`7@! zSWXA$W~0Ah{;R|Mh;{M8SgzijGNPM~gopke5C#JUJD-Uz_k3YY;&~+M^uckpgl8qi zcYliOC8fB0%t~x_Ew7)6G3Rqdfg7#`0{dDywyfxs|MUkeT{OH5;MOEke(P}oLc3x8vr^JG%K+S3i5{d2^eE{UcR9> z=ECgiRY~^OmZ1l=8S7tJW~EH;g*pK@t#Zg4{8G>Z#@9voc3og7ZNtJ0sTtn(3**J~ zYQ*Y{gi=sy_JjJ0!K_9*PUYLT#HX^t-(bGQ-@ia`uq@v#4K&_`R7xr>k$vg@ym29N z<|hTpN2rsdTy{SJ2&S!pB~Bx@L+mR%B2zpR|5d(z!U4T7WUQW?%_pg9gN<9i0DJ9O zXGIV_#UcSz9OJJQ455BlxfKT2>iNo(wUslgjV}u=j4vzUFkgqoX07~rahfT>I zO#P8KYp@4aO-2Qx*LEuL=mHU*Cn4+zxwF}h;wnjVYF6shKv_RI2YY^u#P(@nWg$l8 zA&!8bGM5PXL#o6;8DA65c-8@SwvJyVto&`%iGiRfGJnEnl>x)Ht+^k{U=riLUeCFU z8^pQq^bG^;SN0a%rQD8z<6#(>%27(j=JQQlh%wGC}y zW=4|%PKGReRg^kzoJg{&{H|kIG^)qq?P15oOKsf(ab{!CsNP#uuVE-A<~E9ykPYO4 z#nc7DMn_UcXr&-k&taGJDMoGGxvKmMMlh9{i6Ez`bB!}rLUCEk(&=<@9<;~n{Y2lm z^JM#KDTx<^bO`<_i>Tg=P5Y?8yGNx3I8ssJ>{-|9qx$Emqk&n|>84`LmoB}pw5o^U z%m{vg34Be6Y4f9);|fWB&&A~fEgFOzkuTO*NRUpzTjo-!;N=A}+5md~<#-&MNO&iQ znQJe7gbSraFhiWW89(@nJvdc{!th?N5bj42iG)srx7A!k(z!g-_57xc^TU3}?t|x9 z1xh9(^dZbsWJZO^2!lfUG~j*9=w8VjHh5jbNn!E?LbW8Fdo*iicEP))%2aOJbW0)O z2oRx3bbsCm5p)V>dY{#(sNJ;go7+)KQ~mU@uTe;5P%NY-RTw8!YnCXMlLc!(+>DO} zk;j_63i5WNq{uFoqNHSh7l70SiQ0S05}a`_0T3bQZ?Y+))@1A9gkBn~(-)H&Svn9; zfX3BQ?3bLRG@TL+1QJvCJyZ;ZQ|g2=S-eZO#0O{(B!2%L?y5*=WQU42AtNZrfm~HB z=sfV9ut0XN3UWVTYa0#w?z*sEn%O}b@1PyVgHW@VF^8z{She}%^5)Nu+^<;z6W_SaQN>t7?6%AT&dg@#GYm z#!1*{cxw^K-DoQ@7Fbk9Mt7c8RnLTx1lGVCEUCP~+A-!Kq6x9eC#|ft+jxu*XhU(f zN5|nIKEgE)AG_bWqUb3ci|*DG{ZObAgNUDPF*Ny#$K(%sA+B-;SZE8KrgV?zI3|O)cMcg`$@*x-w{*d=wCY+u*+~xZCBlC{j zL02jvPkfu9)w*8OH^b)5YL?BCj}xR@?g5QlQ?Z~l4+tFIA-^dC;YF5Jad)^r4V#5z ze;T-R;@58^bj=t5O+=TcOqaI6o7VAufRb%tz3!y4O&CCW9V*=2AT0pXnZy{v4`i?) zDujao9g9RY<0fdN04!RFjRX_!(tzt-5HhaHtpmAB7SH|WqZ)+oea&Bykz?C;V9X`F z^u(5_D?e2G6Eq}fL@%E8# z8#$o>t5b;x>ZFw?1L66D5Xeo2fqv)^r=6C?lwY_l{0!^^G&s zL^VU)^yx#lk^u#x2I@!8qiwqGlS1jqQFdfcHD5#WZf)`=0#TlSs+ruXw zfoaOc!*CjFrKRV3XjKB`V~?Q~6-M6D(K|PoK-_E;f&8G?p;2E&gv#`U z&`W@3Ygy@Tl=AXZ%A-y$(r19FY!$92O$w;Wu<4Un7V{BR*Q&IgOpSK=-yJ%{$vuUe zB8b#4>;?7K29N08#Ape4qv)(|I{#5(h7r7k!Xx*BDVh9RzcjAHB1=^^rQ6 zS%ge6NKyflC)iLL|X@C6UjFR0yC}cCwo8fMyubXNT%b_Frp7b_tTWm zn^#ZMlE*1Ilr2y75N9;w6j@|ycqm9bxw`~*=I)QY(Wwb5P9Jbxj_8FjBk-E*@6Q#F z#ELPc?3_#)hdOQ88YX=?&@uJiw!5iPRypb&JHPeOPA6H7ILK2P=V?< zISkY|WVJSQ1vehbt&|kEm8Vtr(Z6!plwsJ;F^7<4QfeMtIVy>=#{{5S}^~baH{}-49lypknL)7+}d}33@Q|riY zzlU2|SITZ$kUE8$u!p;8BfhRAL7uGpQoEZ0N6cSr35S|To-b}ZKb|OIN%D)m2A`8C zjre9&H9kRqJo(AzRqW5>am=YjTT%BVPT`I4Q;$WO!KUXln$xbzTNda7>%TSMyh3xO zH|)}H$Z+riQ^o1da`P^TzG^-}J=$t|HYYoh>cTmEeNJ>|-fhJQCiMBrc$z8DrPE@T z*Aiz=H!Y;H{iM-SXyEOO`NKz_${V~*Rohz-3B~Yp(-ng;?X$~7xNX1Fx6F&nN>6@7 zjVJpT6P2jXCkNcSG&?m>GkvvPd7tKFTAr9GHc4P`{ucbxj|(e_@dW7I=-tn5)!mM$ z7m_g?fnKU?opz2-20(708NwC`aTMwU33Ssr+e+)aK>mpjejUHfg?zImZhWo=Bqf@W zM(-7qmaf&q64-Bm8ZQFIJt>o$t%LLvY9LH>{dg zH}l*$Uhdaxp~#;Oa}#j4=0sL{oLE%YqzQ2GtdyLSZjFz-wA8KGm)x1;irGHuId1>f z(>V~)a-U&N6xd0dlYO0^r0#94_e9Lda=g-=E9R6Ds>xplqvR#D&WQVHd4jvnz84ki z)tw*xu*0so3yxiK_Ze69x;DdoZR zDZp0oo0VOiRcyt;dG2DN#Uko_XJXel?R+IA6qP@ao#%u*4BCcfJaAV5`0szD-=)RNjy&kl9lDqtA3UFXrVNm4LzxJvW5iz7BS1 zz`f7bJ8t3h86rBOp#jt#%%4OcR&9o(#89!$r;8_iwlw64-8Xv+Jjy^jXEW=0{cvPB zIK0`-TRtSdFFQX-k`AX7S9*^%)jh2kabHBOpjpS)$njAEiso`N>>J3oESzs!kE_4x z$o+#L`pg&V5vU-0T4YY0VC$S4F(~lp2x!o4QhF|u&Ok!Z#`aT;5J(uA*Ta5v>%i+V z5Eh<_hclq$wv-!uq?hGOp*T5AnX{WBe(g0h;Jh%?fS=7z%>c7MS%8DrxLM^amC33qWd8s111ooMB)tqssi9f~ zD^%*uwplKnE7H9zUl*SKg#B~Lyr>bpjsv4bF8nfcuYiNtw2cW@p6*S#pVSkts1cba zuGCxspX`VDcj6Q}f95uQt*|E8ImEVo5N(<;k7<3I%T1GY4**=O>Z{u{r(8dGA2!dy zW4$K*WREDGo8_Eng5@%Z!Z(cp0jW1o&wj2*ziMdZ$R~1V*jVC)bD}}5I*H|V%fGYZ zGyh(rPZ$EOmKd5LrDu+nCVd{X3_^Z9xBXsD!MI}6BNQpl=kREoIEh6eNiSwSbU%YTI?2A-32dcs?lCP0M%7rto0I_>JKEh6&O2rhTqajK_7TyE!Z)dyG z7tu*oxaWh9#G_)R=SYclzj*_B-0wZTJiz-bN1pA?P`Q4$ppT`t*s=FwRePSLMeW+f&Z$nR1-oALhpEo~nMg zyW{W^nP|#}NU=S3^*Q*udw;h(U?Yo5u%(3^~t~E*4_D-=14sfPBYh zcem}Px6b2scn!Q>Xw~SAhbZi-K1%>V)BBh6!MJ9<$blIZk1D0>#Uv(4BB(`vHxf$O zfCo~gc<4*qZkHyw7`$$57Qm+5h9L`bhb0pKzPUI2@o7>@ARAN;zlPEDDK7_%>qgIk zCKk7!#~aG*KG5tJzab*aeaKpLN3&>aWD?lFD4}5w&|%aeEsS}MyI%Hl+%Ec1e$*c1 zlaidXt{9i-ovQ0A1YoZWf|_2U!~Uj8%!4N@$?4CX+7OMz)NXz}2+0xdUCAm0VgFpU z&q(vcg_9V8>nAkSu3D`(M;w@`xM*R+a4zX;5G(gB6x2{8#`9udB+=FeRA@wqNyMPu zcbkHAI(AQ1x`g}@aA6+GL6^8cq_n=q&5{W`>dp(Yq-26*rC-x|hCb{yfv7)sV@>;z znO2bDS$0hZ5^82JUpw-4SIslUe7e>SN5qWBf_pVa*+PQ4D&fsMkvltG!d`ElTyyD> zI3)Whl$v@^2Jng1m!QYI;p&&OCz(V^_H1#ELIPp0tX#YENL^b%Pas~7wn>b*s%zGz zB9r(Fuu-uQe)j<&KyXz|XVS37G*=AC&IuKw-LOhrrII5xX4sujGN#d-7jfzcDCQp{k7Gp!tSp$A=la&5TC6e#l-hdx_<@4m%+HqQKoT1;t=gcrZLrOOKv<1!@~ zQKzvQlO+Y6LhbH~m_s5F6x+gu^@mh25l0vLz`7!`b2H>xfu6JafTPg5c zB|0VgyH~{xYQ0ck z%Bg2+Bp%}6hQNDy5GQUSx5qM_9LOm>IRw#5C(bI?G$%C=aW)d+A)6#t%{TqZTwz>F z$fW&>_sQ2_uGU)`3S=>)9L{xKx_1^EUk+8tC_XjDDpm7d1bRm ziZ-mO>kla9o4%jZj68~`9$s(WK`0EY6JK{wF%55fjmdpj`qrk2$23N^yE{P@99EY; zJ_o8jbVK=&=nEtnAJT$)MX61r^>u=>G#(lcvl3nH!@pG=YM_a(pStO&nUZ}9QtW;f zua_uXyD+@k6#3*$FKC(8bl1Me!re~$m8QVHH!oUBy?}Ai{b$|1KGQAksqR-O$-S)U zH;8l+f+C4b`i$9gaOZF#XM5sW-OW&l*96xZHa~qe5L&O*fUPO|NojbK4G}Dz{cyd? zCU(E6mB^=e+-}2))4KH;^L29CNb=wqXyxoM<=2sa`WCvA_k&^`G+@;?vkoKNRK>@2 z&&CaVsf8cjB;EU2&Tj>AL~&0u>NuifnW{=&Du7(9)e&<|?@Ec7hq%cR&QDsqCO+KT zu`Ou^tHKY!W+`FVtm*tJTz{<$ zaXUiaA2+feQmVGmf0`A?0aK~g7w$0fY&OFZ*iU+n#*37?MJVke)N)rwQ78#hxA5Ek z&W)rF4>4yg;>@M#4A734J6N0j|1|d9;c$IXyOM~6AVm^U5`^fz45F71We{WZ5;4j! zL-ZCxv=Grt%;;tG-l8UIw9!WIiB1qb2<{nv-}8LWz5m?5c;=ja&e{8%z1MozUh93+ z>uH5H0Nx;!4^pK*vd@MGy>@J05Z&h6`Yws}PUb?4q6CnU6m_S!@sQnu)I2wTyVIhl zVv@TXqdGcW#T$s=uZcb_szKzf|6p9LvG2A}yhYgARXX8L2vkAts_}ZWxdfYLe+@mNc-^8H{jh2TtdGJ2_whf;&P zK$dCRrEi3pA6g~*LaZUy^0aU0%6N~N0mlEAehWMvd_KbRMjab6SExRw&8|vlhVc5; z#mqwj`&~z+0y1xn+SmYeV0t$vkNuIZgKI!~G(I4w74|(l)~4IO4T%uzNF6HQW5O2(Q6Vt4E_(O;wDjHJhI}md_eaR^&2pTvZT8 zzVQAPgB>^j>$q!Qa9D^Jsu$yWGig*N3Jmf{N{eO1J~8mIk*S17gP){1Q5t&O*5O^$ zSF1$z<1E~jO0zLlVK_&5P3txQ(HA^C60Cl1e~Tp8uQQD!2GB2fX|RwJ1GT&c!-2C; z#X}JMnQv>m*}0-R0wA7}mBx@db(oRGcUsBJw`+$&jB$n{4TsK*Ns{BRn?R(2qy}Ee zxs!`s6on}x_pZw1%_2+9qqj=o9APc3Jom5*&8tfu+DC(c(1AjfO#amu(WYG(VXnCM zqav{A7WvX~H}9Io;I$U>-4EwvM`CK--&0T00R@MxI=2b^ci+>a3hqSgH^`@@qITdN z?|uhJfaY14peWlIbgeZQRpop*Hu>W_?t0aRW)53l@s3TQ!?6jK$Z zgs_tY?>UFi=6$)nWyzCPZn^r1p(yzfC=wWUA>LoNH2oWaHUlUqgmnY?sO|>Sd_z!D z_nZ}kvw6^#r-rYr$I7bE^}V9ItIC~tmOQeL3I*zlbm>2i-mJZ)cg^o4*k#uXAJm`; z05~u3RoVlV5s}?V-R<(>FYyJv@^t?d)z*?FNOnWsm}Sjf{5<>NvevdXcAPaomaSx; zDG4~c_4Bp=m8%o^_Ww8D!8+c9#cl}xuVPUD8_ehoh0kmEL`6l3i)d=k)2D-5?>Jc|;{;G!3RnLNv92Ou3-r@~MqddP&vahl?v; zBDmm-Fef;Mk1pH77tHoD_@%COR_93q%vGgi3h^DUbUrBMUK>z9xaHnX#0wzVz8k$A z;duV7fBn|=UR6NB4ur2Hg-oBC2;bUzw5CSZ`v1?L8(NQQIV z%oq~Tf%QU9`sRKO;|oQ9k`E{2(S%_ubYA=CAlu8jmJ`p&m}&s9Qf<+3x5eytOqnmYp`O6osRn9c^63t=VJB4p|>i{zpT|+0@cVi?bkP6Gz0OIv<5jm z0eH3aS5k-o5qx*S)J!h_AQ7r7&UwB1XhspB0jERZ(?;9r_reDchT4fL)(-a{1IG>P z)B(1B^fiEh0;nWywEPqGIo1>1&;3p2E07v|WB>4=bK2)Pu3H-F`@Zq_gR#l6u>2g^ zrjJ@vn+alghJi|*;DLbj|I5@v z!2&4PtEa+#-O>5GghVQw1m9Do1>y_|r-iEDQLg&-tGfVgNRi4KKq6w@k`1I)eRFuFz7UP21&uy?XMB-d#kk9R7g3i^Y;yr-r2x?P z>zx$?Kaove6K?>&K3W}=Wd(#4Fnn78<(U234S)tjkST%@R?bYTfENmpFK@ zrCg6=CLpg_L$kK+okLO?Zv$wrQFNYG+7|&fk?Z@-@K7LM0bptaa-tS{6Y3a3<1SN4 z`V#AACVz+vFaH;)ysD(4GC$+G)o}Q$@nmzImx5XKyTsvCwDfodpDEc4yb$juz502f zofla{USTYY?3B+W{W$f0W`wzduk+vNY(_4Z|Gzz0pDqxzc()KVAuk110FP^VNu=i< zHfV7K2pQuYycAn}CDPc|C#QBl01}%&D>5WDH63|9l~>sZL~?G(#pX0<`aNZf6wN=F z$E&6*31s*iyM6og;EF68Y{y~vDeUNJq|8kv34JC)LCawStC_Pz;i%34LH`$WZ4$d6 zWb;1;xj($?-Gu#&=%;zWh6YV1z6|BXBlg7s`S?z6e0iI@*h9Cc3Cg5Fdab-D4F#J| zPtoG(R67cy55_r4t8*V$R#|0*6O1qLyA!tISbk<*`z)d<{y3pC?f}m*ZF=fN9Lj(O z0j1HmztN#tXgCf&dRnX={x_D-U*KWy25DP@GDkXUIKVg|H0+~WAV5d=?$gWcLhe0G zH@mN@dU80It;xVrB%tC`ppbU=w1T2ozJ0P!y}ARV98|cc2+CkIcl-$}kZ^lAnbO_- znk&mq;FA_NXY;_Wq7i`AdzDRK5XH<{cD}u8SE9RFq}wk6S~ZD~+;lvf2vk98(U}_~ zIZhgeDD(WAsa7dm5z?`o>TSI3bn?-PC0_T_-1S@L6;<@(q<31?Oj9^K+l&SAShfeY zx4c@xaG!K^(9nnq+iJ%1`>q#M3(vxvk;D+Gyna_*#pE)&oi4X`b^L+>O5_#)UAbRT ziVSEw@#ruaO(HWse1eU#9xS)=_mrU@RV3CRLeTCL%ke6nMI0nCPElD-0ce}4RD&0D zG1Je`l&0J@p|sAdWcb|Dp&vSLOfkZmtBRc#%#G)E>~GjcT$c*smem{mUHh!cRu#A^ z1HxiCWplrUM}V1&lZE1p=n)0>V?P_JD>y{Qu%OvV z>EbbJHen7a*!}l!!CcBeSd0Q(h??Y&pb7C#>gP;BR_ z4lk}NvkhJnfecW2Q~_MvdXYQSDOUW?smEcFs^#b6CVPX70Ml3cmws~l&3J6%lX1aU z0q-+!m0gt|Sq|-B=Fq4xQC|G+jUda3XluG%Dugl~-{aNcAz&IYouR%n4jWvK9QsOf zowyWs-TSE*1tVG}5?pD4JLfEWq!Fu|F%E&@LKR%dyA9*;z^k*!9fmUu8ovU_Om}K} z3q{6^76n$~x7n{hAigB0TH%$@1`=8EQ5VS{z`lXKBI^Uhskx_>jP$VHwW`K)Y>sYz zSXak{YB5l9O7X(SWg&as^BkinEA*<8Bwp=u?HpAA?VlvIAE8o1Do}_S_ED=MKuJK+ zr1eZ-a+}tmrSsO+7m;8jxABmoc4kuD>V1=wM-|M`pIAO6Dnx_h9(pcaEjk8JQHO=% zpq0CP^gfpNnBAAujk{3|5_+=9gDi9B!dWGZjbz}9AhJFV;! z$JM-ij0v`;^bl2d=ZTm8gDhy<(v-)nY@)s@0N9{-)>x<^lH6hWUr+Tx8*d z(C;Lcnksd5o$fDJO9gQrgaU}-9;GUGzAAxxtH6B?dRFrBm~^UK&^jGmzH~&kop8re z>dA9s`i~Fx;IFTHaZYBGd<5#QpyMFf5=6*V8Nf0CdlHS#pE1%36J3N;G{ z;vZ1*Gif&E;T*=z0Loq<+dqg)@r9?S7M|7k=j5h5w%oWY?@8O`ZY{8DNGqWZn$HpM zu9hX{l18z8OqK*&ou5~`7MDVGjGp|kWKQVmIdK==eUnafPir&v4Zk0~6B+&X zfhyUx?gOqHOQOf}qdFskze9C1sH7%f;BLi~uckNz$$cqToa<098G74M*tOU7Lyjva z1^4-;Sop3|p{?;y>AzTo!{6Ah-{ij}bux)%dtu&wno{#TCsk~e8CNxc8iUnE5ECx?%Ts+CZG)%e1FeaHJD-tm9E2nYz6oTmf86im@hl@oCjRsP@>Es;~d$A`4;Z}Lzc-j;uQup$OE zL!W&t6a&Eqx&P!)eodNwGZ@@&S3gVWex2%%j zadkN_?w7Ff*tT={+dw=xUj;J*$NySu*_rX5T&y}LowA#$;fs30etSeFBdiM zYaf}*Mt}EK2IP+S*I7BUTV0c`W_D^U;6` z|3xRPG9nLWx#Wn>U3W^3WZJ)V3zwh0BJVl7fqy!JiG}xcjo>G=9(Fq=RGhvSA5XtF zk_7E{<2HH2P5dd+{Dpy7VhZM$Mn*|7@$ub>qK>eY{kV@hSo zhlRTuKa}z}2i6`x$8GkZ3R^Wh9K2|L3ozXx(J6^@E@wz z>`CU^KDnlQ^}?YRtsLROym^jp1~BlWLe>K)-*k!S`~0C5w`7t`sfg#MkZZQ-BviN2 zGdB7{5(W%y+kaNyZBg$w>?gdvm^waam97@dbmhTNE`;B4sYhO=FjrSw8PUrMlz9@V zs{f(gESN6{eKuh&hpad*Ev)d3(*s_kBhTNw-BPZ?vl4jT7u!3P=So%1pu4Y=QjpgN zO)3RP^@-7-?-N@Xu4*ko{4|?V)qDu54A6GXovyTr@A<;VSZ^!P$e>}42sd>6RhiY3IS;2@O|0&9S9HWZcqyajN4sxJa^EDI>JwBsgGM$fB%7$N zbxEdIX!bd{8g+#EU9=mhVyA-S{j2}jCIbu~t2h@foWjq19~z~gW=v5h!qzqpknZd1 zisdi|o?0nfVw*2bGvBRgUaexyU5i~Eq!LTR-J+Ok^FYAAu!IJfDUAJu8xAH_UE@EV-J9~aJ2u$WH;du}P=uBz=bocb(QfFVqw_7P5W46>2MP3c! za9MV?n(j(i4xsm5)jzUTNM$o=!uAAR8-!YX#ig@ zD_{P)KVl&Fo)_OFb@v$=8d%NZb0OKNy!ni9Nz}dPGnq=!nd&K$%m|kQ+Dlve6%-W+ zCbI=B^wO;26L+R(7}bQQ(JbmNEf$u2mzKoGCZnw+w+VbLQJcPS6_<_nY_d^_(RGBls3sA&OWd5)TLn&@?u-&5N9|0W4Mg+L|@o+B%9ur|8Rj8ylO&xhB7zvy&|q z7ndrkY%WuXAI#gk@!iQrwZqyF8yta%!CM4pXJ?1sV|?Qka0qM1rKd4>Jn&|0Xby8l z?b=Vk3@%pBdPh4h_bO>?$8G6*c{Lzr>h+Ah_Ms5>cdJ?Ps?W+Wn07+>hHRQEF9N_~ zKU!`}A)50WvzwqTi&-l1nPp{zgob1(&*O|o34oVs+}YV_KU?YapAj}RP{O|ypy}E7=hObZ#ox{*40n5v#>~QP;cgA0{Jd5aZhQOrzY=53S zsVTM2{l@C69$V1;h+d*@Rp5Q(ziX8{isj2LddXAM)j_-7ovR-YlhpNQBnGP$-PAa^ z-hUecX>}ck`VN+R&Uvc^CmxU+R%vXmde$u`(6Wgdu>`Yp!G213EgpPypE`=$j7J5w z(rH#oLWmA_XvLzdv<^lEKc2`Bdvw<4$2%Q{Mnc{xue~#|iP)=?5T^vbJD+tOeSH+5 z`v4&#ee~MfP6#1+IOV7bg+2rN)R3!h{r6KXMn>KBgV*W)C^)BL)Tykjj2}{HSnpO! z9Mn{jdu|QgTj-3&Sl5_$KXjCMWE>kfY~CH0km^47{mS7O1zADTLy)7HrjZE)6pGc< z8`2+h`mhk09?I0$=C@QN|FwQG&X6s)C_cowb7o*GRi;#HXLFT9;=|!D2f@rI`B8aG z%4{To*ot@KCX@7aLIo)LcxIKu(T>QcG~`LMG%hSxbBLo9Lzo;>rD$s%LKd~A`Semm zH9Qh(95VlECB@X54ji3+Vevt|)~nSZ+AnvEQ31Eu>WSo}P*~&Ql-;r6Wz4%pf4|^o zp)DcmXT|F=>#?DdoF;Jo=USJYjp|vDVoWHFu$tuY3ZvsjlIx6pG23*1c3N7Kcs^H| z2l(0?ja@y%w|_gI5VMWbgmPO0EYE|8`uikLdJ6W3T=a~>bAJwm(ZEJ6*r#9SWM;}Q zVbPYd`GEt#LW$u;EGct>)Q|V5SdM^rcO)nf%kyxG%S%5;nrJajOT{Z!*vDg0xpUQn z4Vjyl0D1as_gHz>o|-+}zZsM3=3V;Tq;p8w(kK_wAo!qz2j*KGwWn>SLPvGyq7$8Y&vOy6e`CeD?m4`BXBOz={p@n($n`lJi&lK zS;WwKZJefSx`h2Ne|LqJ6r%RQK}`yIAvdBHjO|{=x>T&TOr-;SdC)qSXc7>0Mr%*e zPy6T8)Ql4j15WRh)(eQic*O)Ih$Anr=g?u4L4i;Sf*q<1fvz)|Nvp3ur0ymTzhRve zVpeuAKDUb`M`Ik^b+v(2UCqX}!~;J2nG{_mixNb5 z-Y=EOwR(|(lQxqIG=+;o3808L<(cUj5=_ysIA^{Sz&y%O z@IKwwaea&-`c6gz@-G75mVVNZb(Za&3gjfHv!ml?0GRBf$HQ!GmP+b8WaZ2qn#{wB zr`CRJVUNWY0w|4n=i&YJ@Ma4dmsGM~QZ(WY9%0R`S)mJD3au@z&(BW9W)$*i&aJF) zpM5Ky=Ke@r36!ROvOlps|6>u5pAnE+uY8rEkWi(M^c-Hx!msWU$MUYl!=4Aa_sGyL zmXL___h}6lVj=duSCjs*~Ugui;d$PK(C)XDj2q_H716()X47GIqH(tn! zUOpB|iDl~vz+o8`q<<1I!T7>L!m^|}zM=u7G)7A2^^35xwUp^+hI&On)#jLoFlS(x zEb$Ysdr}Zb*TD?+dyY&J$E}Z}Gt}_|wH{oJ)NZi|nzY*gc$W;R&t+KSkOhYhYwIG7 zh6U@ahuO>9cK|&mKCU9_JwU8?H5$MzCf-L`L!+bJ7%*CuwL(Ut1(PHvmw8raKd&I_ zx|v9vSlccjQbg2WX)}tdMAd?{My;%M_j_|qwX!%7C;^Z&Wy)N(>dxjSqr?YO$ZYV9 z-qr(YXqlRUY2CQ}yd{$PN&jPiS!iFTFaNJ(Q8R%Zn>B%L5>xTF6YzZTWs~Q>OnJ9` zirJ}1&|Us5t*z!wRTFM=PAROnbU2f~A6fqMr69zE=(*=HJ0)<@$r^K@3-41!6${bGa0^u4?iW4WQLjfz2-$&YYe4~7Ms|$5AnLM z4n8|t%}!Ch4)L=EFlx=r*chwl!Ee3?S|_&I0obaJ&z-)D6k2a?L>i% z9COpa*QNk%YeW6vp|>jym_^O$2imStM&%Zt;dR4c-?H*@uf8=(oR4*jMVaXDFSj0Y zM!3#;jaKyL{rmS0*PhQH^!MEmt7}|Ijmqa`cmO~Q`q2kg#+*< z+fjhTJjpNP2Zl6CElYrthK*#Z^(@f7RU8+Vq2vlc`N4c09tw~%dBcpJg8M3%-GBy=`(pTob_N|L${G14Xnsg8nea5p>ZF%15 bk3GM^{>9;lqtqUbKcw_RO}^@slhm~x$H literal 0 HcmV?d00001 diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 887286bdb..e32c02ffa 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -915,6 +915,49 @@ if(ENABLE_FEATURE_MORSEDECODER) endif () endif() +# For Std-C decoder +if(ENABLE_CHANNELRX_DEMODSTDC) + if (WIN32) + set(INMARSATC_LIBRARIES + "${SDRANGEL_BINARY_LIB_DIR}/inmarsatc_demodulator.lib" + "${SDRANGEL_BINARY_LIB_DIR}/inmarsatc_parser.lib" + "${SDRANGEL_BINARY_LIB_DIR}/inmarsatc_decoder.lib" + CACHE INTERNAL "" + ) + elseif (LINUX) + set(INMARSATC_LIBRARIES + "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libinmarsatc_demodulator${CMAKE_SHARED_LIBRARY_SUFFIX}" + "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libinmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" + "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libinmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" + CACHE INTERNAL "" + ) + endif() + ExternalProject_Add(inmarsatc + GIT_REPOSITORY https://github.com/srcejon/inmarsatc.git + GIT_TAG "msvc" + PREFIX "${EXTERNAL_BUILD_LIBRARIES}/inmarsatc" + CMAKE_ARGS ${COMMON_CMAKE_ARGS} + BUILD_BYPRODUCTS "${INMARSATC_LIBRARIES}" + INSTALL_COMMAND "" + TEST_COMMAND "" + ) + ExternalProject_Get_Property(inmarsatc source_dir binary_dir) + set(INMARSATC_DEPENDS inmarsatc CACHE INTERNAL "") + set_global_cache(INMARSATC_FOUND ON) + set(INMARSATC_EXTERNAL ON CACHE INTERNAL "") + set(INMARSATC_INCLUDE_DIR "${EXTERNAL_BUILD_LIBRARIES}/inmarsatc/src/inmarsatc" CACHE INTERNAL "") + if (WIN32) + install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_demodulator${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") + install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") + install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") + elseif (APPLE) + set(INMARSATC_LIBRARIES "${binary_dir}/src/libinmarsatc_*${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + install(DIRECTORY "${binary_dir}/src" DESTINATION "${INSTALL_LIB_DIR}" + FILES_MATCHING PATTERN "libinmarsatc*${CMAKE_SHARED_LIBRARY_SUFFIX}") + set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src") + endif () +endif() + # VkFFT (header only library) ExternalProject_Add(vkfft GIT_REPOSITORY https://github.com/DTolm/VkFFT.git diff --git a/plugins/channelrx/CMakeLists.txt b/plugins/channelrx/CMakeLists.txt index 3b9f2129b..59783572c 100644 --- a/plugins/channelrx/CMakeLists.txt +++ b/plugins/channelrx/CMakeLists.txt @@ -1,5 +1,11 @@ project(demod) +if (ENABLE_CHANNELRX_DEMODINMARSAT AND INMARSATC_FOUND) + add_subdirectory(demodinmarsat) +else() + message(STATUS "Not building demodinmarsat (ENABLE_CHANNELRX_DEMODINMARSAT=${ENABLE_CHANNELRX_DEMODINMARSAT} INMARSATC_FOUND=${INMARSATC_FOUND})") +endif() + if (ENABLE_CHANNELRX_CHANNELPOWER) add_subdirectory(channelpower) endif() diff --git a/plugins/channelrx/demodinmarsat/CMakeLists.txt b/plugins/channelrx/demodinmarsat/CMakeLists.txt new file mode 100644 index 000000000..5c5c931f6 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/CMakeLists.txt @@ -0,0 +1,72 @@ +project(demodinmarsat) + +set(demodinmarsat_SOURCES + inmarsatdemod.cpp + inmarsatdemodsettings.cpp + inmarsatdemodbaseband.cpp + inmarsatdemodsink.cpp + inmarsatdemodplugin.cpp + inmarsatdemodwebapiadapter.cpp +) + +set(demodinmarsat_HEADERS + inmarsatdemod.h + inmarsatdemodsettings.h + inmarsatdemodbaseband.h + inmarsatdemodsink.h + inmarsatdemodplugin.h + inmarsatdemodwebapiadapter.h +) + +include_directories( + ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client + ${INMARSATC_INCLUDE_DIR} +) + +if(NOT SERVER_MODE) + set(demodinmarsat_SOURCES + ${demodinmarsat_SOURCES} + inmarsatdemodgui.cpp + inmarsatdemodgui.ui + ) + set(demodinmarsat_HEADERS + ${demodinmarsat_HEADERS} + inmarsatdemodgui.h + ) + + set(TARGET_NAME ${PLUGINS_PREFIX}demodinmarsat) + set(TARGET_LIB "Qt::Widgets") + set(TARGET_LIB_GUI "sdrgui") + set(INSTALL_FOLDER ${INSTALL_PLUGINS_DIR}) +else() + set(TARGET_NAME ${PLUGINSSRV_PREFIX}demodinmarsatsrv) + set(TARGET_LIB "") + set(TARGET_LIB_GUI "") + set(INSTALL_FOLDER ${INSTALL_PLUGINSSRV_DIR}) +endif() + +if(NOT Qt6_FOUND) + add_library(${TARGET_NAME} ${demodinmarsat_SOURCES}) +else() + qt_add_plugin(${TARGET_NAME} CLASS_NAME InmarsatDemodPlugin ${demodinmarsat_SOURCES}) +endif() + +if(NOT BUILD_SHARED_LIBS) + set_property(GLOBAL APPEND PROPERTY STATIC_PLUGINS_PROPERTY ${TARGET_NAME}) +endif() + +target_link_libraries(${TARGET_NAME} PRIVATE + Qt::Core + ${TARGET_LIB} + sdrbase + ${TARGET_LIB_GUI} + ${INMARSATC_LIBRARIES} +) + +install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER}) + +# Install debug symbols +if (WIN32) + install(FILES $/${TARGET_NAME}stripped.pdb CONFIGURATIONS Release DESTINATION ${INSTALL_FOLDER} RENAME ${TARGET_NAME}.pdb ) + install(FILES $ CONFIGURATIONS Debug RelWithDebInfo DESTINATION ${INSTALL_FOLDER} ) +endif() diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemod.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemod.cpp new file mode 100644 index 000000000..19401d045 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemod.cpp @@ -0,0 +1,671 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2021-2026 Jon Beniston, M7RCE // +// Copyright (C) 2021-2022 Edouard Griffiths, F4EXB // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "inmarsatdemod.h" + +#include +#include +#include +#include +#include +#include + +#include "SWGChannelSettings.h" +#include "SWGWorkspaceInfo.h" +#include "SWGInmarsatDemodSettings.h" +#include "SWGChannelReport.h" + +#include "dsp/dspcommands.h" +#include "device/deviceapi.h" +#include "settings/serializable.h" +#include "util/db.h" +#include "maincore.h" + +MESSAGE_CLASS_DEFINITION(InmarsatDemod::MsgConfigureInmarsatDemod, Message) + +const char * const InmarsatDemod::m_channelIdURI = "sdrangel.channel.inmarsatdemod"; +const char * const InmarsatDemod::m_channelId = "InmarsatDemod"; + +InmarsatDemod::InmarsatDemod(DeviceAPI *deviceAPI) : + ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), + m_deviceAPI(deviceAPI), + m_basebandSampleRate(0) +{ + setObjectName(m_channelId); + + m_basebandSink = new InmarsatDemodBaseband(this); + m_basebandSink->setMessageQueueToChannel(getInputMessageQueue()); + m_basebandSink->setChannel(this); + m_basebandSink->moveToThread(&m_thread); + + applySettings(m_settings, QStringList(), true); + + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + + m_networkManager = new QNetworkAccessManager(); + QObject::connect( + m_networkManager, + &QNetworkAccessManager::finished, + this, + &InmarsatDemod::networkManagerFinished + ); + QObject::connect( + this, + &ChannelAPI::indexInDeviceSetChanged, + this, + &InmarsatDemod::handleIndexInDeviceSetChanged + ); +} + +InmarsatDemod::~InmarsatDemod() +{ + qDebug("InmarsatDemod::~InmarsatDemod"); + QObject::disconnect( + m_networkManager, + &QNetworkAccessManager::finished, + this, + &InmarsatDemod::networkManagerFinished + ); + delete m_networkManager; + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this, true); + + if (m_basebandSink->isRunning()) { + stop(); + } + + delete m_basebandSink; +} + +void InmarsatDemod::setDeviceAPI(DeviceAPI *deviceAPI) +{ + if (deviceAPI != m_deviceAPI) + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this, false); + m_deviceAPI = deviceAPI; + m_deviceAPI->addChannelSink(this); + m_deviceAPI->addChannelSinkAPI(this); + } +} + +uint32_t InmarsatDemod::getNumberOfDeviceStreams() const +{ + return m_deviceAPI->getNbSourceStreams(); +} + +void InmarsatDemod::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool firstOfBurst) +{ + (void) firstOfBurst; + m_basebandSink->feed(begin, end); +} + +void InmarsatDemod::start() +{ + qDebug("InmarsatDemod::start"); + + m_basebandSink->reset(); + m_basebandSink->startWork(); + m_thread.start(); + + DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); + m_basebandSink->getInputMessageQueue()->push(dspMsg); + + InmarsatDemodBaseband::MsgConfigureInmarsatDemodBaseband *msg = InmarsatDemodBaseband::MsgConfigureInmarsatDemodBaseband::create(m_settings, QStringList(), true); + m_basebandSink->getInputMessageQueue()->push(msg); +} + +void InmarsatDemod::stop() +{ + qDebug("InmarsatDemod::stop"); + m_basebandSink->stopWork(); + m_thread.quit(); + m_thread.wait(); +} + +bool InmarsatDemod::handleMessage(const Message& cmd) +{ + if (MsgConfigureInmarsatDemod::match(cmd)) + { + MsgConfigureInmarsatDemod& cfg = (MsgConfigureInmarsatDemod&) cmd; + qDebug() << "InmarsatDemod::handleMessage: MsgConfigureInmarsatDemod"; + applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce()); + + return true; + } + else if (DSPSignalNotification::match(cmd)) + { + DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + m_basebandSampleRate = notif.getSampleRate(); + m_centerFrequency = notif.getCenterFrequency(); + // Forward to the sink + DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy + qDebug() << "InmarsatDemod::handleMessage: DSPSignalNotification"; + m_basebandSink->getInputMessageQueue()->push(rep); + // Forward to GUI if any + if (m_guiMessageQueue) { + m_guiMessageQueue->push(new DSPSignalNotification(notif)); + } + + return true; + } + else if (MainCore::MsgPacket::match(cmd)) + { + // Forward to GUI + MainCore::MsgPacket& report = (MainCore::MsgPacket&)cmd; + if (getMessageQueueToGUI()) + { + MainCore::MsgPacket *msg = new MainCore::MsgPacket(report); + getMessageQueueToGUI()->push(msg); + } + + // Forward to packet features + QList packetsPipes; + MainCore::instance()->getMessagePipes().getMessagePipes(this, "packets", packetsPipes); + + for (const auto& pipe : packetsPipes) + { + MessageQueue *messageQueue = qobject_cast(pipe->m_element); + MainCore::MsgPacket *msg = new MainCore::MsgPacket(report); + messageQueue->push(msg); + } + + // Forward via UDP + if (m_settings.m_udpEnabled) + { + qDebug() << "Forwarding to " << m_settings.m_udpAddress << ":" << m_settings.m_udpPort; + m_udpSocket.writeDatagram(report.getPacket().data(), report.getPacket().size(), + QHostAddress(m_settings.m_udpAddress), m_settings.m_udpPort); + } + + // Write to log file + if (m_logFile.isOpen()) + { + m_logStream << report.getDateTime().date().toString() << "," + << report.getDateTime().time().toString() << "," + << report.getPacket().toHex() << "\n"; + } + + return true; + } + else if (MainCore::MsgChannelDemodQuery::match(cmd)) + { + qDebug() << "InmarsatDemod::handleMessage: MsgChannelDemodQuery"; + sendSampleRateToDemodAnalyzer(); + + return true; + } + else + { + return false; + } +} + +ScopeVis *InmarsatDemod::getScopeSink() +{ + return m_basebandSink->getScopeSink(); +} + +void InmarsatDemod::setCenterFrequency(qint64 frequency) +{ + InmarsatDemodSettings settings = m_settings; + settings.m_inputFrequencyOffset = frequency; + applySettings(settings, {"inputFrequencyOffset"}, false); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureInmarsatDemod *msgToGUI = MsgConfigureInmarsatDemod::create(settings, {"inputFrequencyOffset"}, false); + m_guiMessageQueue->push(msgToGUI); + } +} + +void InmarsatDemod::applySettings(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force) +{ + qDebug() << "InmarsatDemod::applySettings:" + << settings.getDebugString(settingsKeys, force) + << " force: " << force; + + if (settingsKeys.contains("streamIndex")) + { + if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only + { + m_deviceAPI->removeChannelSinkAPI(this); + m_deviceAPI->removeChannelSink(this, m_settings.m_streamIndex); + m_deviceAPI->addChannelSink(this, settings.m_streamIndex); + m_deviceAPI->addChannelSinkAPI(this); + m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent + emit streamIndexChanged(settings.m_streamIndex); + } + } + + InmarsatDemodBaseband::MsgConfigureInmarsatDemodBaseband *msg = InmarsatDemodBaseband::MsgConfigureInmarsatDemodBaseband::create(settings, settingsKeys, force); + m_basebandSink->getInputMessageQueue()->push(msg); + + if (settings.m_useReverseAPI) + { + bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) || + settingsKeys.contains("reverseAPIAddress") || + settingsKeys.contains("reverseAPIPort") || + settingsKeys.contains("reverseAPIDeviceIndex") || + settingsKeys.contains("reverseAPIChannelIndex"); + webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); + } + + if ((settings.m_logEnabled != m_settings.m_logEnabled) + || (settings.m_logFilename != m_settings.m_logFilename) + || force) + { + if (m_logFile.isOpen()) + { + m_logStream.flush(); + m_logFile.close(); + } + if (settings.m_logEnabled && !settings.m_logFilename.isEmpty()) + { + m_logFile.setFileName(settings.m_logFilename); + if (m_logFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) + { + qDebug() << "InmarsatDemod::applySettings - Logging to: " << settings.m_logFilename; + bool newFile = m_logFile.size() == 0; + m_logStream.setDevice(&m_logFile); + if (newFile) + { + // Write header + m_logStream << "Date,Time,Data\n"; + } + } + else + { + qDebug() << "InmarsatDemod::applySettings - Unable to open log file: " << settings.m_logFilename; + } + } + } + + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } +} + +void InmarsatDemod::sendSampleRateToDemodAnalyzer() +{ + QList pipes; + MainCore::instance()->getMessagePipes().getMessagePipes(this, "reportdemod", pipes); + + if (pipes.size() > 0) + { + for (const auto& pipe : pipes) + { + MessageQueue *messageQueue = qobject_cast(pipe->m_element); + MainCore::MsgChannelDemodReport *msg = MainCore::MsgChannelDemodReport::create( + this, + InmarsatDemodSettings::CHANNEL_SAMPLE_RATE + ); + messageQueue->push(msg); + } + } +} + +QByteArray InmarsatDemod::serialize() const +{ + return m_settings.serialize(); +} + +bool InmarsatDemod::deserialize(const QByteArray& data) +{ + if (m_settings.deserialize(data)) + { + MsgConfigureInmarsatDemod *msg = MsgConfigureInmarsatDemod::create(m_settings, QStringList(), true); + m_inputMessageQueue.push(msg); + return true; + } + else + { + m_settings.resetToDefaults(); + MsgConfigureInmarsatDemod *msg = MsgConfigureInmarsatDemod::create(m_settings, QStringList(), true); + m_inputMessageQueue.push(msg); + return false; + } +} + +int InmarsatDemod::webapiSettingsGet( + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setInmarsatDemodSettings(new SWGSDRangel::SWGInmarsatDemodSettings()); + response.getInmarsatDemodSettings()->init(); + webapiFormatChannelSettings(response, m_settings); + return 200; +} + +int InmarsatDemod::webapiWorkspaceGet( + SWGSDRangel::SWGWorkspaceInfo& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setIndex(m_settings.m_workspaceIndex); + return 200; +} + +int InmarsatDemod::webapiSettingsPutPatch( + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + InmarsatDemodSettings settings = m_settings; + webapiUpdateChannelSettings(settings, channelSettingsKeys, response); + + MsgConfigureInmarsatDemod *msg = MsgConfigureInmarsatDemod::create(settings, channelSettingsKeys, force); + m_inputMessageQueue.push(msg); + + qDebug("InmarsatDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureInmarsatDemod *msgToGUI = MsgConfigureInmarsatDemod::create(settings, channelSettingsKeys, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatChannelSettings(response, settings); + + return 200; +} + +int InmarsatDemod::webapiReportGet( + SWGSDRangel::SWGChannelReport& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setInmarsatDemodReport(new SWGSDRangel::SWGInmarsatDemodReport()); + response.getInmarsatDemodReport()->init(); + webapiFormatChannelReport(response); + return 200; +} + +void InmarsatDemod::webapiUpdateChannelSettings( + InmarsatDemodSettings& settings, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response) +{ + if (channelSettingsKeys.contains("inputFrequencyOffset")) { + settings.m_inputFrequencyOffset = response.getInmarsatDemodSettings()->getInputFrequencyOffset(); + } + if (channelSettingsKeys.contains("rfBandwidth")) { + settings.m_rfBandwidth = response.getInmarsatDemodSettings()->getRfBandwidth(); + } + if (channelSettingsKeys.contains("rrcRolloff")) { + settings.m_rrcRolloff = response.getInmarsatDemodSettings()->getRrcRolloff(); + } + if (channelSettingsKeys.contains("pllBandwidth")) { + settings.m_pllBW = response.getInmarsatDemodSettings()->getPllBandwidth(); + } + if (channelSettingsKeys.contains("udpEnabled")) { + settings.m_udpEnabled = response.getInmarsatDemodSettings()->getUdpEnabled(); + } + if (channelSettingsKeys.contains("udpAddress")) { + settings.m_udpAddress = *response.getInmarsatDemodSettings()->getUdpAddress(); + } + if (channelSettingsKeys.contains("udpPort")) { + settings.m_udpPort = response.getInmarsatDemodSettings()->getUdpPort(); + } + if (channelSettingsKeys.contains("logFilename")) { + settings.m_logFilename = *response.getInmarsatDemodSettings()->getLogFilename(); + } + if (channelSettingsKeys.contains("logEnabled")) { + settings.m_logEnabled = response.getInmarsatDemodSettings()->getLogEnabled(); + } + if (channelSettingsKeys.contains("useFileTime")) { + settings.m_useFileTime = response.getInmarsatDemodSettings()->getUseFileTime(); + } + if (channelSettingsKeys.contains("rgbColor")) { + settings.m_rgbColor = response.getInmarsatDemodSettings()->getRgbColor(); + } + if (channelSettingsKeys.contains("title")) { + settings.m_title = *response.getInmarsatDemodSettings()->getTitle(); + } + if (channelSettingsKeys.contains("streamIndex")) { + settings.m_streamIndex = response.getInmarsatDemodSettings()->getStreamIndex(); + } + if (channelSettingsKeys.contains("useReverseAPI")) { + settings.m_useReverseAPI = response.getInmarsatDemodSettings()->getUseReverseApi() != 0; + } + if (channelSettingsKeys.contains("reverseAPIAddress")) { + settings.m_reverseAPIAddress = *response.getInmarsatDemodSettings()->getReverseApiAddress(); + } + if (channelSettingsKeys.contains("reverseAPIPort")) { + settings.m_reverseAPIPort = response.getInmarsatDemodSettings()->getReverseApiPort(); + } + if (channelSettingsKeys.contains("reverseAPIDeviceIndex")) { + settings.m_reverseAPIDeviceIndex = response.getInmarsatDemodSettings()->getReverseApiDeviceIndex(); + } + if (channelSettingsKeys.contains("reverseAPIChannelIndex")) { + settings.m_reverseAPIChannelIndex = response.getInmarsatDemodSettings()->getReverseApiChannelIndex(); + } + if (settings.m_channelMarker && channelSettingsKeys.contains("channelMarker")) { + settings.m_channelMarker->updateFrom(channelSettingsKeys, response.getInmarsatDemodSettings()->getChannelMarker()); + } + if (settings.m_rollupState && channelSettingsKeys.contains("rollupState")) { + settings.m_rollupState->updateFrom(channelSettingsKeys, response.getInmarsatDemodSettings()->getRollupState()); + } +} + +void InmarsatDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const InmarsatDemodSettings& settings) +{ + response.getInmarsatDemodSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset); + response.getInmarsatDemodSettings()->setRfBandwidth(settings.m_rfBandwidth); + response.getInmarsatDemodSettings()->setRrcRolloff(settings.m_rrcRolloff); + response.getInmarsatDemodSettings()->setPllBandwidth(settings.m_pllBW); + response.getInmarsatDemodSettings()->setUdpEnabled(settings.m_udpEnabled); + response.getInmarsatDemodSettings()->setUdpAddress(new QString(settings.m_udpAddress)); + response.getInmarsatDemodSettings()->setUdpPort(settings.m_udpPort); + response.getInmarsatDemodSettings()->setLogFilename(new QString(settings.m_logFilename)); + response.getInmarsatDemodSettings()->setLogEnabled(settings.m_logEnabled); + response.getInmarsatDemodSettings()->setUseFileTime(settings.m_useFileTime); + + response.getInmarsatDemodSettings()->setRgbColor(settings.m_rgbColor); + if (response.getInmarsatDemodSettings()->getTitle()) { + *response.getInmarsatDemodSettings()->getTitle() = settings.m_title; + } else { + response.getInmarsatDemodSettings()->setTitle(new QString(settings.m_title)); + } + + response.getInmarsatDemodSettings()->setStreamIndex(settings.m_streamIndex); + response.getInmarsatDemodSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); + + if (response.getInmarsatDemodSettings()->getReverseApiAddress()) { + *response.getInmarsatDemodSettings()->getReverseApiAddress() = settings.m_reverseAPIAddress; + } else { + response.getInmarsatDemodSettings()->setReverseApiAddress(new QString(settings.m_reverseAPIAddress)); + } + + response.getInmarsatDemodSettings()->setReverseApiPort(settings.m_reverseAPIPort); + response.getInmarsatDemodSettings()->setReverseApiDeviceIndex(settings.m_reverseAPIDeviceIndex); + response.getInmarsatDemodSettings()->setReverseApiChannelIndex(settings.m_reverseAPIChannelIndex); + + if (settings.m_channelMarker) + { + if (response.getInmarsatDemodSettings()->getChannelMarker()) + { + settings.m_channelMarker->formatTo(response.getInmarsatDemodSettings()->getChannelMarker()); + } + else + { + SWGSDRangel::SWGChannelMarker *swgChannelMarker = new SWGSDRangel::SWGChannelMarker(); + settings.m_channelMarker->formatTo(swgChannelMarker); + response.getInmarsatDemodSettings()->setChannelMarker(swgChannelMarker); + } + } + + if (settings.m_rollupState) + { + if (response.getInmarsatDemodSettings()->getRollupState()) + { + settings.m_rollupState->formatTo(response.getInmarsatDemodSettings()->getRollupState()); + } + else + { + SWGSDRangel::SWGRollupState *swgRollupState = new SWGSDRangel::SWGRollupState(); + settings.m_rollupState->formatTo(swgRollupState); + response.getInmarsatDemodSettings()->setRollupState(swgRollupState); + } + } +} + +void InmarsatDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response) +{ + double magsqAvg, magsqPeak; + int nbMagsqSamples; + getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples); + + response.getInmarsatDemodReport()->setChannelPowerDb(CalcDb::dbPower(magsqAvg)); + response.getInmarsatDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); +} + +void InmarsatDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const InmarsatDemodSettings& settings, bool force) +{ + SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); + webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); + + QString channelSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/channel/%4/settings") + .arg(settings.m_reverseAPIAddress) + .arg(settings.m_reverseAPIPort) + .arg(settings.m_reverseAPIDeviceIndex) + .arg(settings.m_reverseAPIChannelIndex); + m_networkRequest.setUrl(QUrl(channelSettingsURL)); + m_networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + + QBuffer *buffer = new QBuffer(); + buffer->open((QBuffer::ReadWrite)); + buffer->write(swgChannelSettings->asJson().toUtf8()); + buffer->seek(0); + + // Always use PATCH to avoid passing reverse API settings + QNetworkReply *reply = m_networkManager->sendCustomRequest(m_networkRequest, "PATCH", buffer); + buffer->setParent(reply); + + delete swgChannelSettings; +} + +void InmarsatDemod::webapiFormatChannelSettings( + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings *swgChannelSettings, + const InmarsatDemodSettings& settings, + bool force +) +{ + swgChannelSettings->setDirection(0); // Single sink (Rx) + swgChannelSettings->setOriginatorChannelIndex(getIndexInDeviceSet()); + swgChannelSettings->setOriginatorDeviceSetIndex(getDeviceSetIndex()); + swgChannelSettings->setChannelType(new QString("InmarsatDemod")); + swgChannelSettings->setInmarsatDemodSettings(new SWGSDRangel::SWGInmarsatDemodSettings()); + SWGSDRangel::SWGInmarsatDemodSettings *swgInmarsatDemodSettings = swgChannelSettings->getInmarsatDemodSettings(); + + // transfer data that has been modified. When force is on transfer all data except reverse API data + + if (channelSettingsKeys.contains("inputFrequencyOffset") || force) { + swgInmarsatDemodSettings->setInputFrequencyOffset(settings.m_inputFrequencyOffset); + } + if (channelSettingsKeys.contains("rfBandwidth") || force) { + swgInmarsatDemodSettings->setRfBandwidth(settings.m_rfBandwidth); + } + if (channelSettingsKeys.contains("rrcRolloff") || force) { + swgInmarsatDemodSettings->setRrcRolloff(settings.m_rrcRolloff); + } + if (channelSettingsKeys.contains("pllBandwidth") || force) { + swgInmarsatDemodSettings->setPllBandwidth(settings.m_pllBW); + } + if (channelSettingsKeys.contains("udpEnabled") || force) { + swgInmarsatDemodSettings->setUdpEnabled(settings.m_udpEnabled); + } + if (channelSettingsKeys.contains("udpAddress") || force) { + swgInmarsatDemodSettings->setUdpAddress(new QString(settings.m_udpAddress)); + } + if (channelSettingsKeys.contains("udpPort") || force) { + swgInmarsatDemodSettings->setUdpPort(settings.m_udpPort); + } + if (channelSettingsKeys.contains("logFilename") || force) { + swgInmarsatDemodSettings->setLogFilename(new QString(settings.m_logFilename)); + } + if (channelSettingsKeys.contains("logEnabled") || force) { + swgInmarsatDemodSettings->setLogEnabled(settings.m_logEnabled); + } + if (channelSettingsKeys.contains("useFilTime") || force) { + swgInmarsatDemodSettings->setUseFileTime(settings.m_useFileTime); + } + if (channelSettingsKeys.contains("rgbColor") || force) { + swgInmarsatDemodSettings->setRgbColor(settings.m_rgbColor); + } + if (channelSettingsKeys.contains("title") || force) { + swgInmarsatDemodSettings->setTitle(new QString(settings.m_title)); + } + if (channelSettingsKeys.contains("streamIndex") || force) { + swgInmarsatDemodSettings->setStreamIndex(settings.m_streamIndex); + } + + if (settings.m_channelMarker && (channelSettingsKeys.contains("channelMarker") || force)) + { + SWGSDRangel::SWGChannelMarker *swgChannelMarker = new SWGSDRangel::SWGChannelMarker(); + settings.m_channelMarker->formatTo(swgChannelMarker); + swgInmarsatDemodSettings->setChannelMarker(swgChannelMarker); + } + + if (settings.m_rollupState && (channelSettingsKeys.contains("rollupState") || force)) + { + SWGSDRangel::SWGRollupState *swgRollupState = new SWGSDRangel::SWGRollupState(); + settings.m_rollupState->formatTo(swgRollupState); + swgInmarsatDemodSettings->setRollupState(swgRollupState); + } +} + +void InmarsatDemod::networkManagerFinished(QNetworkReply *reply) +{ + QNetworkReply::NetworkError replyError = reply->error(); + + if (replyError) + { + qWarning() << "InmarsatDemod::networkManagerFinished:" + << " error(" << (int) replyError + << "): " << replyError + << ": " << reply->errorString(); + } + else + { + QString answer = reply->readAll(); + answer.chop(1); // remove last \n + qDebug("InmarsatDemod::networkManagerFinished: reply:\n%s", answer.toStdString().c_str()); + } + + reply->deleteLater(); +} + +void InmarsatDemod::handleIndexInDeviceSetChanged(int index) +{ + if (index < 0) { + return; + } + + QString fifoLabel = QString("%1 [%2:%3]") + .arg(m_channelId) + .arg(m_deviceAPI->getDeviceSetIndex()) + .arg(index); + m_basebandSink->setFifoLabel(fifoLabel); +} diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemod.h b/plugins/channelrx/demodinmarsat/inmarsatdemod.h new file mode 100644 index 000000000..7498e9cab --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemod.h @@ -0,0 +1,180 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany // +// written by Christian Daniel // +// Copyright (C) 2015-2022 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_INMARSATDEMOD_H +#define INCLUDE_INMARSATDEMOD_H + +#include +#include +#include +#include +#include + +#include "dsp/basebandsamplesink.h" +#include "channel/channelapi.h" +#include "util/message.h" + +#include "inmarsatdemodbaseband.h" +#include "inmarsatdemodsettings.h" + +class QNetworkAccessManager; +class QNetworkReply; +class QThread; +class DeviceAPI; +class ScopeVis; + +class InmarsatDemod : public BasebandSampleSink, public ChannelAPI { +public: + class MsgConfigureInmarsatDemod : public Message { + MESSAGE_CLASS_DECLARATION + + public: + const InmarsatDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } + bool getForce() const { return m_force; } + + static MsgConfigureInmarsatDemod* create(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force) + { + return new MsgConfigureInmarsatDemod(settings, settingsKeys, force); + } + + private: + InmarsatDemodSettings m_settings; + QStringList m_settingsKeys; + bool m_force; + + MsgConfigureInmarsatDemod(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force) : + Message(), + m_settings(settings), + m_settingsKeys(settingsKeys), + m_force(force) + { } + }; + + InmarsatDemod(DeviceAPI *deviceAPI); + virtual ~InmarsatDemod(); + virtual void destroy() { delete this; } + virtual void setDeviceAPI(DeviceAPI *deviceAPI); + virtual DeviceAPI *getDeviceAPI() { return m_deviceAPI; } + + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); + virtual void start(); + virtual void stop(); + virtual void pushMessage(Message *msg) { m_inputMessageQueue.push(msg); } + virtual QString getSinkName() { return objectName(); } + + virtual void getIdentifier(QString& id) { id = objectName(); } + virtual QString getIdentifier() const { return objectName(); } + virtual const QString& getURI() const { return getName(); } + virtual void getTitle(QString& title) { title = m_settings.m_title; } + virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } + virtual void setCenterFrequency(qint64 frequency); + + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + + virtual int getNbSinkStreams() const { return 1; } + virtual int getNbSourceStreams() const { return 0; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } + + virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const + { + (void) streamIndex; + (void) sinkElseSource; + return 0; + } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage); + + virtual int webapiWorkspaceGet( + SWGSDRangel::SWGWorkspaceInfo& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage); + + virtual int webapiReportGet( + SWGSDRangel::SWGChannelReport& response, + QString& errorMessage); + + static void webapiFormatChannelSettings( + SWGSDRangel::SWGChannelSettings& response, + const InmarsatDemodSettings& settings); + + static void webapiUpdateChannelSettings( + InmarsatDemodSettings& settings, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response); + + ScopeVis *getScopeSink(); + double getMagSq() const { return m_basebandSink->getMagSq(); } + + void getMagSqLevels(double& avg, double& peak, int& nbSamples) { + m_basebandSink->getMagSqLevels(avg, peak, nbSamples); + } + + void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq) const { + m_basebandSink->getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq); + } + + uint32_t getNumberOfDeviceStreams() const; + + static const char * const m_channelIdURI; + static const char * const m_channelId; + +private: + DeviceAPI *m_deviceAPI; + QThread m_thread; + InmarsatDemodBaseband* m_basebandSink; + InmarsatDemodSettings m_settings; + int m_basebandSampleRate; //!< stored from device message used when starting baseband sink + qint64 m_centerFrequency; + QUdpSocket m_udpSocket; + QFile m_logFile; + QTextStream m_logStream; + + QNetworkAccessManager *m_networkManager; + QNetworkRequest m_networkRequest; + + virtual bool handleMessage(const Message& cmd); + void applySettings(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force = false); + void sendSampleRateToDemodAnalyzer(); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const InmarsatDemodSettings& settings, bool force); + void webapiFormatChannelSettings( + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings *swgChannelSettings, + const InmarsatDemodSettings& settings, + bool force + ); + void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); + +private slots: + void networkManagerFinished(QNetworkReply *reply); + void handleIndexInDeviceSetChanged(int index); + +}; + +#endif // INCLUDE_INMARSATDEMOD_H diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.cpp new file mode 100644 index 000000000..9196f4389 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.cpp @@ -0,0 +1,184 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019-2021 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include + +#include "dsp/dspcommands.h" +#include "dsp/downchannelizer.h" + +#include "inmarsatdemodbaseband.h" + +MESSAGE_CLASS_DEFINITION(InmarsatDemodBaseband::MsgConfigureInmarsatDemodBaseband, Message) + +InmarsatDemodBaseband::InmarsatDemodBaseband(InmarsatDemod *packetDemod) : + m_sink(packetDemod), + m_running(false) +{ + qDebug("InmarsatDemodBaseband::InmarsatDemodBaseband"); + + m_scopeSink.setNbStreams(InmarsatDemodSettings::m_scopeStreams); + m_sink.setScopeSink(&m_scopeSink); + m_sampleFifo.setSize(SampleSinkFifo::getSizePolicy(48000)); + m_channelizer = new DownChannelizer(&m_sink); +} + +InmarsatDemodBaseband::~InmarsatDemodBaseband() +{ + m_inputMessageQueue.clear(); + + delete m_channelizer; +} + +void InmarsatDemodBaseband::reset() +{ + QMutexLocker mutexLocker(&m_mutex); + m_inputMessageQueue.clear(); + m_sampleFifo.reset(); +} + +void InmarsatDemodBaseband::startWork() +{ + QMutexLocker mutexLocker(&m_mutex); + QObject::connect( + &m_sampleFifo, + &SampleSinkFifo::dataReady, + this, + &InmarsatDemodBaseband::handleData, + Qt::QueuedConnection + ); + connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); + m_running = true; +} + +void InmarsatDemodBaseband::stopWork() +{ + QMutexLocker mutexLocker(&m_mutex); + disconnect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); + QObject::disconnect( + &m_sampleFifo, + &SampleSinkFifo::dataReady, + this, + &InmarsatDemodBaseband::handleData + ); + m_running = false; +} + +void InmarsatDemodBaseband::setChannel(ChannelAPI *channel) +{ + m_sink.setChannel(channel); +} + +void InmarsatDemodBaseband::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end) +{ + m_sampleFifo.write(begin, end); +} + +void InmarsatDemodBaseband::handleData() +{ + QMutexLocker mutexLocker(&m_mutex); + + while ((m_sampleFifo.fill() > 0) && (m_inputMessageQueue.size() == 0)) + { + SampleVector::iterator part1begin; + SampleVector::iterator part1end; + SampleVector::iterator part2begin; + SampleVector::iterator part2end; + + std::size_t count = m_sampleFifo.readBegin(m_sampleFifo.fill(), &part1begin, &part1end, &part2begin, &part2end); + + // first part of FIFO data + if (part1begin != part1end) { + m_channelizer->feed(part1begin, part1end); + } + + // second part of FIFO data (used when block wraps around) + if(part2begin != part2end) { + m_channelizer->feed(part2begin, part2end); + } + + m_sampleFifo.readCommit((unsigned int) count); + } +} + +void InmarsatDemodBaseband::handleInputMessages() +{ + Message* message; + + while ((message = m_inputMessageQueue.pop()) != nullptr) + { + if (handleMessage(*message)) { + delete message; + } + } +} + +bool InmarsatDemodBaseband::handleMessage(const Message& cmd) +{ + if (MsgConfigureInmarsatDemodBaseband::match(cmd)) + { + QMutexLocker mutexLocker(&m_mutex); + MsgConfigureInmarsatDemodBaseband& cfg = (MsgConfigureInmarsatDemodBaseband&) cmd; + qDebug() << "InmarsatDemodBaseband::handleMessage: MsgConfigureInmarsatDemodBaseband"; + + applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce()); + + return true; + } + else if (DSPSignalNotification::match(cmd)) + { + QMutexLocker mutexLocker(&m_mutex); + DSPSignalNotification& notif = (DSPSignalNotification&) cmd; + qDebug() << "InmarsatDemodBaseband::handleMessage: DSPSignalNotification: basebandSampleRate: " << notif.getSampleRate(); + setBasebandSampleRate(notif.getSampleRate()); + m_sampleFifo.setSize(SampleSinkFifo::getSizePolicy(notif.getSampleRate())); + + return true; + } + else + { + return false; + } +} + +void InmarsatDemodBaseband::applySettings(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force) +{ + if (settingsKeys.contains("inputFrequencyOffset") || force) + { + m_channelizer->setChannelization(InmarsatDemodSettings::CHANNEL_SAMPLE_RATE, settings.m_inputFrequencyOffset); + m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); + } + + m_sink.applySettings(settings, settingsKeys, force); + + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } +} + +int InmarsatDemodBaseband::getChannelSampleRate() const +{ + return m_channelizer->getChannelSampleRate(); +} + +void InmarsatDemodBaseband::setBasebandSampleRate(int sampleRate) +{ + m_channelizer->setBasebandSampleRate(sampleRate); + m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); +} diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.h b/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.h new file mode 100644 index 000000000..e69277a72 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.h @@ -0,0 +1,107 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019-2022 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_INMARSATDEMODBASEBAND_H +#define INCLUDE_INMARSATDEMODBASEBAND_H + +#include +#include + +#include "dsp/samplesinkfifo.h" +#include "dsp/scopevis.h" +#include "util/message.h" +#include "util/messagequeue.h" + +#include "inmarsatdemodsink.h" + +class DownChannelizer; +class ChannelAPI; +class InmarsatDemod; +class ScopeVis; + +class InmarsatDemodBaseband : public QObject +{ + Q_OBJECT +public: + class MsgConfigureInmarsatDemodBaseband : public Message { + MESSAGE_CLASS_DECLARATION + + public: + const InmarsatDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } + bool getForce() const { return m_force; } + + static MsgConfigureInmarsatDemodBaseband* create(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force) + { + return new MsgConfigureInmarsatDemodBaseband(settings, settingsKeys, force); + } + + private: + InmarsatDemodSettings m_settings; + QStringList m_settingsKeys; + bool m_force; + + MsgConfigureInmarsatDemodBaseband(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force) : + Message(), + m_settings(settings), + m_settingsKeys(settingsKeys), + m_force(force) + { } + }; + + InmarsatDemodBaseband(InmarsatDemod *packetDemod); + ~InmarsatDemodBaseband(); + void reset(); + void startWork(); + void stopWork(); + void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); + MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication + void getMagSqLevels(double& avg, double& peak, int& nbSamples) { + m_sink.getMagSqLevels(avg, peak, nbSamples); + } + void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq) const { + m_sink.getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq); + } + void setMessageQueueToChannel(MessageQueue *messageQueue) { m_sink.setMessageQueueToChannel(messageQueue); } + void setBasebandSampleRate(int sampleRate); + int getChannelSampleRate() const; + ScopeVis *getScopeSink() { return &m_scopeSink; } + void setChannel(ChannelAPI *channel); + double getMagSq() const { return m_sink.getMagSq(); } + bool isRunning() const { return m_running; } + void setFifoLabel(const QString& label) { m_sampleFifo.setLabel(label); } + +private: + SampleSinkFifo m_sampleFifo; + DownChannelizer *m_channelizer; + InmarsatDemodSink m_sink; + MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication + InmarsatDemodSettings m_settings; + ScopeVis m_scopeSink; + bool m_running; + QRecursiveMutex m_mutex; + + bool handleMessage(const Message& cmd); + void applySettings(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force = false); + +private slots: + void handleInputMessages(); + void handleData(); //!< Handle data when samples have to be processed +}; + +#endif // INCLUDE_INMARSATDEMODBASEBAND_H diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp new file mode 100644 index 000000000..b0dc1fb18 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp @@ -0,0 +1,1951 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2021-2026 Jon Beniston, M7RCE // +// Copyright (C) 2021-2022 Edouard Griffiths, F4EXB // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include + +#include "inmarsatdemodgui.h" + +#include "ui_inmarsatdemodgui.h" +#include "device/deviceuiset.h" +#include "dsp/dspengine.h" +#include "dsp/dspcommands.h" +#include "feature/featurewebapiutils.h" +#include "plugin/pluginapi.h" +#include "util/csv.h" +#include "util/db.h" +#include "util/units.h" +#include "util/osndb.h" +#include "gui/basicchannelsettingsdialog.h" +#include "gui/dialogpositioner.h" +#include "dsp/glscopesettings.h" +#include "gui/tabletapandhold.h" +#include "maincore.h" +#include "SWGMapItem.h" + +#include "inmarsatdemod.h" + +MultipartMessage::MultipartMessage(int id, std::map params, const QDateTime& dateTime) : + m_id(id), + m_icon(nullptr), + m_latitude(0.0f), + m_longitude(0.0f) +{ + update(params, dateTime); +} + +void MultipartMessage::update(std::map params, const QDateTime& dateTime) +{ + m_dateTime = dateTime; + m_service = QString::fromStdString(params["serviceCodeAndAddressName"]); + m_priority = QString::fromStdString(params["priorityText"]); + m_address = decodeAddress( + QString::fromStdString(params["messageType"]), + QString::fromStdString(params["addressHex"]), + &m_latitude, + &m_longitude, + &m_addressCoordinates, + &m_icon + ); +} + +void MultipartMessage::addPart(const MessagePart& part) +{ + int i; + bool insert = false; + + for (i = 0; i < m_parts.size(); i++) + { + if ((m_parts[i].m_packet == part.m_packet) && (m_parts[i].m_part == part.m_part)) + { + m_parts[i] = part; + break; + } + else if ((m_parts[i].m_packet == part.m_packet) && (m_parts[i].m_part > part.m_part)) + { + insert = true; + break; + } + else if (m_parts[i].m_packet > part.m_packet) + { + insert = true; + break; + } + } + if (insert) { + m_parts.insert(i, part); + } else if (i == m_parts.size()) { + m_parts.append(part); + } + parseMessage(); +} + +QString MultipartMessage::getMessage() const +{ + QString msg; + + for (const auto& part : m_parts) { + msg = msg.append(part.m_text); + } + return msg; +} + +// Cordinates of the form: 61-02.04N 059-32.47W +QRegularExpression MultipartMessage::m_re(QStringLiteral("(\\d+)-(\\d+)(.(\\d+))?([NS]) (\\d+)-(\\d+)(.(\\d+))?([EW])")); + +void MultipartMessage::parseMessage() +{ + if (getParts() == getTotalParts()) + { + QString message = getMessage(); + m_messageCoordinates.clear(); + + QRegularExpressionMatchIterator i = m_re.globalMatch(message); + while (i.hasNext()) + { + QRegularExpressionMatch match = i.next(); + if (match.hasMatch()) + { + int latDeg = match.captured(1).toInt(); + int latMin = match.captured(2).toInt(); + int latSec = match.captured(4).toInt(); + bool north = match.captured(5) == "N"; + int lonDeg = match.captured(6).toInt(); + int lonMin = match.captured(7).toInt(); + int lonSec = match.captured(9).toInt(); + bool east = match.captured(10) == "E"; + + float latitude = latDeg + latMin/60.0f + latSec/3600.0f; + if (!north) { + latitude = -latitude; + } + float longitude = lonDeg + lonMin/60.0f + lonSec/3600.0f; + if (!east) { + longitude = -longitude; + } + + QGeoCoordinate coord(latitude, longitude); + m_messageCoordinates.append(coord); + } + } + } +} + +void InmarsatDemodGUI::packetsCustomContextMenuRequested(QPoint pos) +{ + QTableWidgetItem *item = ui->packets->itemAt(pos); + if (item) + { + QMenu* tableContextMenu = new QMenu(ui->packets); + connect(tableContextMenu, &QMenu::aboutToHide, tableContextMenu, &QMenu::deleteLater); + QAction* copyAction = new QAction("Copy", tableContextMenu); + const QString text = item->text(); + connect(copyAction, &QAction::triggered, this, [text]()->void { + QClipboard *clipboard = QGuiApplication::clipboard(); + clipboard->setText(text); + }); + tableContextMenu->addAction(copyAction); + tableContextMenu->popup(ui->packets->viewport()->mapToGlobal(pos)); + } +} + +void InmarsatDemodGUI::messagesCustomContextMenuRequested(QPoint pos) +{ + QTableWidgetItem *item = ui->messages->itemAt(pos); + if (item) + { + QMenu* tableContextMenu = new QMenu(ui->messages); + connect(tableContextMenu, &QMenu::aboutToHide, tableContextMenu, &QMenu::deleteLater); + + QAction* copyAction = new QAction("Copy", tableContextMenu); + const QString text = item->text(); + connect(copyAction, &QAction::triggered, this, [text]()->void { + QClipboard *clipboard = QGuiApplication::clipboard(); + clipboard->setText(text); + }); + tableContextMenu->addAction(copyAction); + + QString id = ui->messages->item(item->row(), MESSAGE_COL_ID)->data(Qt::DisplayRole).toString(); + MultipartMessage *message = m_messages[id.toInt()]; + if (message->getCoordinates().size() > 0) + { + QAction* findAction = new QAction("Find on map", tableContextMenu); + connect(findAction, &QAction::triggered, this, [id]()->void { + FeatureWebAPIUtils::mapFind(id); + }); + tableContextMenu->addAction(findAction); + } + + tableContextMenu->popup(ui->messages->viewport()->mapToGlobal(pos)); + } +} + +void InmarsatDemodGUI::resizeTable() +{ + // Fill table with a row of dummy data that will size the columns nicely + // Trailing spaces are for sort arrow + int row = ui->packets->rowCount(); + ui->packets->setRowCount(row + 1); + ui->packets->setItem(row, PACKET_COL_DATE, new QTableWidgetItem("Frid Apr 15 2016-")); + ui->packets->setItem(row, PACKET_COL_TIME, new QTableWidgetItem("10:17:00")); + ui->packets->setItem(row, PACKET_COL_SAT, new QTableWidgetItem("Atlantic Ocean")); + ui->packets->setItem(row, PACKET_COL_LES, new QTableWidgetItem("123456-15-")); + ui->packets->setItem(row, PACKET_COL_MSG_ID, new QTableWidgetItem("80555301-")); + ui->packets->setItem(row, PACKET_COL_TYPE, new QTableWidgetItem("Multiframe Packet Start-")); + ui->packets->setItem(row, PACKET_COL_FRAME_NO, new QTableWidgetItem("123456")); + ui->packets->setItem(row, PACKET_COL_LCN, new QTableWidgetItem("888")); + ui->packets->setItem(row, PACKET_COL_ULF, new QTableWidgetItem("15,888.888")); + ui->packets->setItem(row, PACKET_COL_DLF, new QTableWidgetItem("15,888.888")); + ui->packets->setItem(row, PACKET_COL_PRIORITY, new QTableWidgetItem("Urgency")); + ui->packets->setItem(row, PACKET_COL_ADDRESS, new QTableWidgetItem("90S 180W 1000 nm")); + ui->packets->setItem(row, PACKET_COL_MESSAGE, new QTableWidgetItem("ABCEDGHIJKLMNOPQRSTUVWXYZ")); + ui->packets->setItem(row, PACKET_COL_DECODE, new QTableWidgetItem("ABCEDGHIJKLMNOPQRSTUVWXYZ")); + ui->packets->setItem(row, PACKET_COL_DATA_HEX, new QTableWidgetItem("ABCEDGHIJKLMNOPQRSTUVWXYZ")); + ui->packets->resizeColumnsToContents(); + ui->packets->removeRow(row); + + row = ui->messages->rowCount(); + ui->messages->setRowCount(row + 1); + ui->messages->setItem(row, MESSAGE_COL_DATE, new QTableWidgetItem("Frid Apr 15 2016-")); + ui->messages->setItem(row, MESSAGE_COL_TIME, new QTableWidgetItem("10:17:00")); + ui->messages->setItem(row, MESSAGE_COL_ID, new QTableWidgetItem("Atlantic Ocean")); + ui->messages->setItem(row, MESSAGE_COL_SERVICE, new QTableWidgetItem("SafetyNET ")); + ui->messages->setItem(row, MESSAGE_COL_PRIORITY, new QTableWidgetItem("Urgency-")); + ui->messages->setItem(row, MESSAGE_COL_ADDRESS, new QTableWidgetItem("90S 180W 1000 nm")); + ui->messages->setItem(row, MESSAGE_COL_MESSAGE, new QTableWidgetItem("ABCEDGHIJKLMNOPQRSTUVWXYZ")); + ui->messages->setItem(row, MESSAGE_COL_PARTS, new QTableWidgetItem("8/88")); + ui->messages->resizeColumnsToContents(); + ui->messages->removeRow(row); +} + +// Columns in table reordered +void InmarsatDemodGUI::packets_sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex) +{ + (void) oldVisualIndex; + + m_settings.m_packetsColumnIndexes[logicalIndex] = newVisualIndex; +} + +// Column in table resized (when hidden size is 0) +void InmarsatDemodGUI::packets_sectionResized(int logicalIndex, int oldSize, int newSize) +{ + (void) oldSize; + + m_settings.m_packetsColumnSizes[logicalIndex] = newSize; +} + +// Right click in table header - show column select menu +void InmarsatDemodGUI::packetsColumnSelectMenu(QPoint pos) +{ + m_packetsMenu->popup(ui->packets->horizontalHeader()->viewport()->mapToGlobal(pos)); +} + +// Hide/show column when menu selected +void InmarsatDemodGUI::packetsColumnSelectMenuChecked(bool checked) +{ + (void) checked; + + QAction* action = qobject_cast(sender()); + if (action != nullptr) + { + int idx = action->data().toInt(nullptr); + ui->packets->setColumnHidden(idx, !action->isChecked()); + } +} + +// Columns in table reordered +void InmarsatDemodGUI::messages_sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex) +{ + (void) oldVisualIndex; + + m_settings.m_messagesColumnIndexes[logicalIndex] = newVisualIndex; +} + +// Column in table resized (when hidden size is 0) +void InmarsatDemodGUI::messages_sectionResized(int logicalIndex, int oldSize, int newSize) +{ + (void) oldSize; + + m_settings.m_messagesColumnSizes[logicalIndex] = newSize; +} + + +// Right click in table header - show column select menu +void InmarsatDemodGUI::messagesColumnSelectMenu(QPoint pos) +{ + m_messagesMenu->popup(ui->messages->horizontalHeader()->viewport()->mapToGlobal(pos)); +} + +// Hide/show column when menu selected +void InmarsatDemodGUI::messagesColumnSelectMenuChecked(bool checked) +{ + (void) checked; + + QAction* action = qobject_cast(sender()); + if (action != nullptr) + { + int idx = action->data().toInt(nullptr); + ui->messages->setColumnHidden(idx, !action->isChecked()); + } +} + +// Create column select menu item +QAction *InmarsatDemodGUI::createCheckableItem(QString &text, int idx, bool checked, bool packets) +{ + QAction *action = new QAction(text, this); + action->setCheckable(true); + action->setChecked(checked); + action->setData(QVariant(idx)); + if (packets) { + connect(action, &QAction::triggered, this, &InmarsatDemodGUI::packetsColumnSelectMenuChecked); + } else { + connect(action, &QAction::triggered, this, &InmarsatDemodGUI::messagesColumnSelectMenuChecked); + } + return action; +} + +InmarsatDemodGUI* InmarsatDemodGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel) +{ + InmarsatDemodGUI* gui = new InmarsatDemodGUI(pluginAPI, deviceUISet, rxChannel); + return gui; +} + +void InmarsatDemodGUI::destroy() +{ + delete this; +} + +void InmarsatDemodGUI::resetToDefaults() +{ + m_settings.resetToDefaults(); + displaySettings(); + applyAllSettings(); +} + +QByteArray InmarsatDemodGUI::serialize() const +{ + return m_settings.serialize(); +} + +bool InmarsatDemodGUI::deserialize(const QByteArray& data) +{ + if(m_settings.deserialize(data)) { + displaySettings(); + applyAllSettings(); + return true; + } else { + resetToDefaults(); + return false; + } +} + +static QString formatFreqMHz(const QString& freq) +{ + if (freq.isEmpty()) + { + return ""; + } + else + { + QLocale l; + l.setNumberOptions(l.numberOptions() & ~QLocale::OmitGroupSeparator); + + double d = freq.toDouble(); + + qint64 f = (qint64) (d * 1000000.0); + + int precision; + + if (f % 1000000 == 0) { + precision = 0; + } else if (f % 1000 == 0) { + precision = 3; + } else { + precision = 6; + } + + return l.toString(d, 'f', precision); + } +} + +static QString formatFreqMHz(std::string string) +{ + return formatFreqMHz(QString::fromStdString(string)); +} + +static const QStringList navAreas = { + "0", + "I United Kingdom", + "II France", + "III Spain", + "IV USA", + "V Brazil", + "VI Argentina", + "VII South Africa", + "VIII India", + "IX Pakistan", + "X Australia", + "XI Japan", + "XII USA", + "XIII Russian Federation", + "XIV New Zealand", + "XV Chile", + "XVI Peru", + "XVII Canada", + "XVIII Canada", + "XIX Norway", + "XX Russian Federation", + "XXI Russian Federation" +}; + +// We use flags from ADS-B demod +static const QStringList navAreaFlags = { + "", + "united_kingdom", + "france", + "spain", + "united_states", + "brazil", + "argentina", + "south_africa", + "india", + "pakistan", + "australia", + "japan", + "united_states", + "russia", + "new_zealand", + "chile", + "peru", + "canada", + "canada", + "norway", + "russia", + "russia" +}; + +static QString decodeAddress(QString messageType, QString addressHex, float *latitude, float *longitude, QList *coordinates, QIcon **icon) +{ + bool ok; + int messageTypeNum = messageType.toInt(&ok); + + if (ok) + { + switch (messageTypeNum) + { + case 0x31: + { + // Navarea + int navArea = addressHex.left(2).toInt(&ok, 16); + if (ok && (navArea > 0) && (navArea < navAreas.size())) + { + if (icon) { + *icon = AircraftInformation::getFlagIcon(navAreaFlags[navArea]); + } + return QString("NAVAREA %1").arg(navAreas[navArea]); + } + else + { + return QString("NAVAREA Unknown %1").arg(navArea); + } + } + break; + + case 0x13: + { + QByteArray addressBytes = QByteArray::fromHex(addressHex.toLatin1()); + // Navarea - TBD B1/B2 + int navArea = addressBytes[0]; + if ((navArea > 0) && (navArea < navAreas.size())) + { + if (icon) { + *icon = AircraftInformation::getFlagIcon(navAreaFlags[navArea]); + } + return QString("NAVAREA %1").arg(navAreas[navArea]); + } + else + { + return QString("NAVAREA Unknown %1").arg(navArea); + } + } + break; + + case 0x04: + case 0x34: + { + // Rectangular area + QByteArray addressBytes = QByteArray::fromHex(addressHex.toLatin1()); + int south = (addressBytes[0] >> 7) & 1; + int latDeg = addressBytes[0] & 0x7f; + int lonDeg = (addressBytes[1] & 0xff) << 1; + int west = (addressBytes[2] >> 7) & 1; + int latExtentNorth = addressBytes[2] & 0x7f; + int latExtentEast = addressBytes[3] & 0xff; + + if (coordinates) + { + int lat1Deg = west ? -latDeg : latDeg; + int lon1Deg = south ? -lonDeg : lonDeg; + int lat2Deg = lat1Deg + latExtentEast; + int lon2Deg = lon1Deg + latExtentNorth; + *latitude = lat1Deg + lat2Deg / 2; + *longitude = lon1Deg + lon2Deg / 2; + coordinates->clear(); + coordinates->append(QGeoCoordinate(latDeg, lonDeg)); + coordinates->append(QGeoCoordinate(lat2Deg, lonDeg)); + coordinates->append(QGeoCoordinate(lat2Deg, lon2Deg)); + coordinates->append(QGeoCoordinate(latDeg, lon2Deg)); + coordinates->append(QGeoCoordinate(latDeg, lonDeg)); + } + + return QString("%1%2 %3%4 %5%7N %6%7E") + .arg(south ? "S" : "N") + .arg(latDeg) + .arg(west ? "W" : "E") + .arg(lonDeg) + .arg(latExtentNorth) + .arg(latExtentEast) + .arg(QChar(0x00B0)); + } + break; + + case 0x14: + case 0x24: + case 0x44: + { + // Circular area + QByteArray addressBytes = QByteArray::fromHex(addressHex.toLatin1()); + int south = (addressBytes[0] >> 7) & 1; + int latDeg = addressBytes[0] & 0x7f; + int lonDeg = (addressBytes[1] & 0xff) << 1; + int west = (addressBytes[2] >> 7) & 1; + int radius = ((addressBytes[2] & 0x7f) << 8) | (addressBytes[3] & 0xff); + + if (coordinates) + { + int lat1Deg = west ? -latDeg : latDeg; + int lon1Deg = south ? -lonDeg : lonDeg; + QGeoCoordinate centre(lat1Deg, lon1Deg); + + *latitude = lat1Deg; + *longitude = lon1Deg; + coordinates->clear(); + for (int theta = 0; theta <= 360; theta += 10) { + coordinates->append(centre.atDistanceAndAzimuth(Units::nauticalMilesToMetres(radius), theta)); + } + } + + return QString("%1%2 %3%4 %5nm") + .arg(south ? "S" : "N") + .arg(latDeg) + .arg(west ? "W" : "E") + .arg(lonDeg) + .arg(radius); + } + + case 0x11: + { + // System message address + QStringList systemAddresses = { + "All mobiles", + "AOR (East)", + "AOR (West)", + "POR", + "IOR", + "Inmarsat-A MES", + "Inmarsat-C MES", + "Inmarsat-B MES", + "Inmarsat-M MES", + "Inmarsat-B/M MESs", + "Inmarsat Aero-C AMESs" + }; + QByteArray addressBytes = QByteArray::fromHex(addressHex.toLatin1()); + int address = addressBytes[0] & 0xff; + if (address < systemAddresses.size()) { + return systemAddresses[address]; + } else { + return "Unknown"; + } + } + break; + + case 23: + case 33: + { + // MES Id + QByteArray addressBytes = QByteArray::fromHex(addressHex.toLatin1()); + + unsigned address = ((addressBytes[0] & 0xff) << 16) | ((addressBytes[1] & 0xff) << 8) | (addressBytes[2] & 0xff); + + return QString::number(address); + } + break; + + case 73: + { + // Fixed area number + QByteArray addressBytes = QByteArray::fromHex(addressHex.toLatin1()); + + unsigned address = ((addressBytes[0] & 0xff) << 16) | ((addressBytes[1] & 0xff) << 8) | (addressBytes[2] & 0xff); + + return QString::number(address); + } + break; + + default: + return addressHex; + } + } + else + { + return addressHex; + } +} + +void InmarsatDemodGUI::updateMessageTable(MultipartMessage *message) +{ + QScrollBar *sb = ui->messages->verticalScrollBar(); + bool scrollToBottom = sb->value() == sb->maximum(); + + // Find if message already in table + + int row; + bool found = false; + + for (row = 0; row < ui->messages->rowCount(); row++) + { + if (ui->messages->item(row, MESSAGE_COL_ID)->data(Qt::DisplayRole) == message->getId()) + { + found = true; + break; + } + } + + QTableWidgetItem *dateItem; + QTableWidgetItem *timeItem; + QTableWidgetItem *serviceItem; + QTableWidgetItem *priorityItem; + QTableWidgetItem *addressItem; + QTableWidgetItem *messageItem; + QTableWidgetItem *partsItem; + + if (!found) + { + ui->messages->setSortingEnabled(false); + row = ui->messages->rowCount(); + ui->messages->setRowCount(row + 1); + + dateItem = new QTableWidgetItem(); + timeItem = new QTableWidgetItem(); + QTableWidgetItem *idItem = new QTableWidgetItem(); + serviceItem = new QTableWidgetItem(); + priorityItem = new QTableWidgetItem(); + addressItem = new QTableWidgetItem(); + messageItem = new QTableWidgetItem(); + partsItem = new QTableWidgetItem(); + + ui->messages->setItem(row, MESSAGE_COL_DATE, dateItem); + ui->messages->setItem(row, MESSAGE_COL_TIME, timeItem); + ui->messages->setItem(row, MESSAGE_COL_ID, idItem); + ui->messages->setItem(row, MESSAGE_COL_SERVICE, serviceItem); + ui->messages->setItem(row, MESSAGE_COL_PRIORITY, priorityItem); + ui->messages->setItem(row, MESSAGE_COL_ADDRESS, addressItem); + ui->messages->setItem(row, MESSAGE_COL_MESSAGE, messageItem); + ui->messages->setItem(row, MESSAGE_COL_PARTS, partsItem); + + idItem->setData(Qt::DisplayRole, message->getId()); + } + else + { + dateItem = ui->messages->item(row, MESSAGE_COL_DATE); + timeItem = ui->messages->item(row, MESSAGE_COL_TIME); + serviceItem = ui->messages->item(row, MESSAGE_COL_SERVICE); + priorityItem = ui->messages->item(row, MESSAGE_COL_PRIORITY); + addressItem = ui->messages->item(row, MESSAGE_COL_ADDRESS); + messageItem = ui->messages->item(row, MESSAGE_COL_MESSAGE); + partsItem = ui->messages->item(row, MESSAGE_COL_PARTS); + } + + dateItem->setData(Qt::DisplayRole, message->getDateTime().date()); + timeItem->setData(Qt::DisplayRole, message->getDateTime().time()); + serviceItem->setText(message->getService()); + priorityItem->setText(message->getPriority()); + addressItem->setText(message->getAddress()); + QIcon *icon = message->getAddressIcon(); + if (icon) { + addressItem->setIcon(*icon); + } + messageItem->setText(message->getMessage()); + QString parts = QString("%1 / %2").arg(message->getParts()).arg(message->getTotalParts()); + partsItem->setData(Qt::DisplayRole, parts); + + filterRow(ui->messages, row, -1, MESSAGE_COL_MESSAGE); + + if (!found && !m_loadingData) + { + ui->messages->setSortingEnabled(true); + if (scrollToBottom) { + ui->messages->scrollToBottom(); + } + } +} + +// Add row to table +void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTime) +{ + inmarsatc::decoder::Decoder::decoder_result decoderResult; + + memcpy(&decoderResult, bytes.data(), sizeof(decoderResult)); + + std::vector parserResults = m_parser.parseFrame(decoderResult); + + for (auto& frame : parserResults) + { + if (!(!frame.decoding_result.isDecodedPacket || !frame.decoding_result.isCrc)) + { + // Is scroll bar at bottom + QScrollBar *sb = ui->packets->verticalScrollBar(); + bool scrollToBottom = sb->value() == sb->maximum(); + + ui->packets->setSortingEnabled(false); + int row = ui->packets->rowCount(); + ui->packets->setRowCount(row + 1); + + QTableWidgetItem *dateItem = new QTableWidgetItem(); + QTableWidgetItem *timeItem = new QTableWidgetItem(); + QTableWidgetItem *satItem = new QTableWidgetItem(); + QTableWidgetItem *lesItem = new QTableWidgetItem(); + QTableWidgetItem *msgIdItem = new QTableWidgetItem(); + QTableWidgetItem *typeItem = new QTableWidgetItem(); + QTableWidgetItem *frameNoItem = new QTableWidgetItem(); + QTableWidgetItem *lcnItem = new QTableWidgetItem(); + QTableWidgetItem *ulfItem = new QTableWidgetItem(); + QTableWidgetItem *dlfItem = new QTableWidgetItem(); + QTableWidgetItem *priorityItem = new QTableWidgetItem(); + QTableWidgetItem *addressItem = new QTableWidgetItem(); + QTableWidgetItem *messageItem = new QTableWidgetItem(); + QTableWidgetItem *decodeItem = new QTableWidgetItem(); + QTableWidgetItem *dataHexItem = new QTableWidgetItem(); + QLabel *decodeLabel = new QLabel(); + ui->packets->setItem(row, PACKET_COL_DATE, dateItem); + ui->packets->setItem(row, PACKET_COL_TIME, timeItem); + ui->packets->setItem(row, PACKET_COL_SAT, satItem); + ui->packets->setItem(row, PACKET_COL_LES, lesItem); + ui->packets->setItem(row, PACKET_COL_MSG_ID, msgIdItem); + ui->packets->setItem(row, PACKET_COL_TYPE, typeItem); + ui->packets->setItem(row, PACKET_COL_FRAME_NO, frameNoItem); + ui->packets->setItem(row, PACKET_COL_LCN, lcnItem); + ui->packets->setItem(row, PACKET_COL_ULF, ulfItem); + ui->packets->setItem(row, PACKET_COL_DLF, dlfItem); + ui->packets->setItem(row, PACKET_COL_PRIORITY, priorityItem); + ui->packets->setItem(row, PACKET_COL_ADDRESS, addressItem); + ui->packets->setItem(row, PACKET_COL_MESSAGE, messageItem); + ui->packets->setItem(row, PACKET_COL_DECODE, decodeItem); + ui->packets->setItem(row, PACKET_COL_DATA_HEX, dataHexItem); + ui->packets->setCellWidget(row, PACKET_COL_DECODE, decodeLabel); + + dateItem->setText(dateTime.date().toString()); + timeItem->setText(dateTime.time().toString()); + + typeItem->setText(QString::fromStdString(frame.decoding_result.packetVars["packetDescriptorText"])); + frameNoItem->setText(QString::number(frame.decoding_result.frameNumber)); + + satItem->setText(QString::fromStdString(frame.decoding_result.packetVars["satName"])); + QString lesName = QString::fromStdString(frame.decoding_result.packetVars["lesName"]); + if (!lesName.isEmpty()) { + lesItem->setText(lesName); + } else{ + lesItem->setText(QString::fromStdString(frame.decoding_result.packetVars["les"])); + } + QString msgId = QString::fromStdString(frame.decoding_result.packetVars["mesId"]); + if (!msgId.isEmpty()) { + msgIdItem->setText(msgId); + } else { + msgIdItem->setText(QString::fromStdString(frame.decoding_result.packetVars["messageId"])); + } + lcnItem->setText(QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); + ulfItem->setText(formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); + dlfItem->setText(formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); + priorityItem->setText(QString::fromStdString(frame.decoding_result.packetVars["priorityText"])); + + QIcon *icon = nullptr; + addressItem->setText(decodeAddress( + QString::fromStdString(frame.decoding_result.packetVars["messageType"]), + QString::fromStdString(frame.decoding_result.packetVars["addressHex"]), + nullptr, + nullptr, + nullptr, + &icon + )); + if (icon) { + addressItem->setIcon(*icon); + } + + QString message; + QString decode; + + switch(frame.decoding_result.packetDescriptor) + { + case 0x27: + decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + break; + + case 0x2A: + decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + break; + + case 0x08: + decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + decode = decode.append("ULF " + formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); + break; + + case 0x6C: + { + decode = decode.append("ULF" + formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); + decode = decode.append("Services"); + + std::string services = frame.decoding_result.packetVars["services"]; + for (int k = 0; k < (int)services.length(); k++) + { + if (services[k] != '\n') { + decode = decode.append(services[k]); + } else { + decode = decode.append("
    "); + } + } + decode = decode.append("Tdm slots"); + std::string tdmSlots = frame.decoding_result.packetVars["tdmSlots"]; + for (int k = 0; k < (int)tdmSlots.length(); k++) + { + if (tdmSlots[k] != '\n') { + decode = decode.append(tdmSlots[k]); + } else { + decode = decode.append("
    "); + } + } + } + break; + + case 0x7D: + { + decode = decode.append("Network Version " + frame.decoding_result.packetVars["networkVersion"]); + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + decode = decode.append("Signalling Channel " + frame.decoding_result.packetVars["signallingChannel"]); + decode = decode.append("Count " + frame.decoding_result.packetVars["count"]); + decode = decode.append("Channel Type Name " + frame.decoding_result.packetVars["channelTypeName"]); + decode = decode.append("Local " + frame.decoding_result.packetVars["local"]); + decode = decode.append("Random Interval " + frame.decoding_result.packetVars["randomInterval"]); + + decode = decode.append("Status"); + std::string status = frame.decoding_result.packetVars["status"]; + for (int k = 0; k < (int)status.length(); k++) + { + if (status[k] != '\n') { + decode = decode.append(status[k]); + } else { + decode = decode.append("
    "); + } + } + decode = decode.append("Services"); + std::string services = frame.decoding_result.packetVars["services"]; + for (int k = 0; k < (int)services.length(); k++) + { + if (services[k] != '\n') { + decode = decode.append(services[k]); + } else { + decode = decode.append("
    "); + } + } + } + break; + + case 0x81: + decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + decode = decode.append("DLF " + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); + decode = decode.append("Presentation " + frame.decoding_result.packetVars["presentation"]); + break; + + case 0x83: + decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + decode = decode.append("Status Bits " + frame.decoding_result.packetVars["status_bits"]); + decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + decode = decode.append("Frame Length " + frame.decoding_result.packetVars["frameLength"]); + decode = decode.append("Duration " + frame.decoding_result.packetVars["duration"]); + decode = decode.append("DLF " + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); + decode = decode.append("ULF " + formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); + decode = decode.append("Frame Offset " + frame.decoding_result.packetVars["frameOffset"]); + decode = decode.append("Packet Descriptor 1 " + frame.decoding_result.packetVars["packetDescriptor1"]); + break; + + case 0x92: + decode = decode.append("Login Ack Length" + frame.decoding_result.packetVars["loginAckLength"]); + decode = decode.append("DLF" + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); + decode = decode.append("LES" + frame.decoding_result.packetVars["les"]); + decode = decode.append("Station Start Hex" + frame.decoding_result.packetVars["stationStartHex"]); + if (frame.decoding_result.packetVars.find("stationCount") != frame.decoding_result.packetVars.end()) + { + decode = decode.append("Station Count" + frame.decoding_result.packetVars["stationCnt"]); + decode = decode.append("Stations"); + std::string stations = frame.decoding_result.packetVars["stations"]; + for (int k = 0; k < (int)stations.length(); k++) + { + if (stations[k] != '\n') { + decode = decode.append(stations[k]); + } else { + decode = decode.append("
    "); + } + } + } + break; + + case 0xA3: + decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + + if (frame.decoding_result.packetVars.find("shortMessage") != frame.decoding_result.packetVars.end()) + { + std::string shortMessage = frame.decoding_result.packetVars["shortMessage"]; + for (int k = 0; k < (int)shortMessage.length(); k++) + { + char chr = shortMessage[k] & 0x7F; + if ((chr < 0x20 && chr != '\n' && chr != '\r')) { + message = message.append("(" + QString::number(chr) + ")"); + } else if(chr != '\n' && chr != '\r') { + message = message.append(chr); + } + } + decode = decode.append("Payload" + message); + } + break; + + case 0xA8: + decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + if (frame.decoding_result.packetVars.find("shortMessage") != frame.decoding_result.packetVars.end()) + { + std::string shortMessage = frame.decoding_result.packetVars["shortMessage"]; + for (int k = 0; k < (int)shortMessage.length(); k++) + { + char chr = shortMessage[k] & 0x7F; + if ((chr < 0x20 && chr != '\n' && chr != '\r')) { + message = message.append("(" + QString::number(chr) + ")"); + } else if(chr != '\n' && chr != '\r') { + message = message.append(chr); + } + } + decode = decode.append("Payload" + message); + } + break; + + case 0xAA: + { + decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); + decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + decode = decode.append("Packet No " + frame.decoding_result.packetVars["packetNo"]); + + bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; + if (frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_IA5) + { + for (int i = 0; i < (int)frame.decoding_result.payload.data8Bit.size(); i++) + { + char chr = frame.decoding_result.payload.data8Bit[i] & 0x7F; + if ((chr < 0x20 && chr != '\n' && chr != '\r')) { + message = message.append("(" + QString::number((uint16_t)chr, 16) + ")"); + } else if(chr != '\n' && chr != '\r') { + message = message.append(chr); + } + } + } + else if (frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_ITA2) + { + + } + else + { + for (int i = 0; i < (int)frame.decoding_result.payload.data8Bit.size(); i++) + { + uint8_t data = frame.decoding_result.payload.data8Bit[i]; + message = message.append(QString::number((uint16_t)data, 16) + " "); + } + } + } + decode = decode.append("Payload" + message); + break; + + case 0xAB: + { + decode = decode.append("LES List Length" + frame.decoding_result.packetVars["lesListLength"]); + decode = decode.append("Station Start Hex" + frame.decoding_result.packetVars["stationStartHex"]); + decode = decode.append("Station Count" + frame.decoding_result.packetVars["stationCount"]); + + decode = decode.append("Stations"); + std::string stations = frame.decoding_result.packetVars["stations"]; + for (int k = 0; k < (int)stations.length(); k++) + { + if (stations[k] != '\n') { + decode = decode.append(stations[k]); + } else { + decode = decode.append("
    "); + } + } + } + break; + + case 0xB1: + { + decode = decode.append("Msg Type" + frame.decoding_result.packetVars["messageType"]); + decode = decode.append("Service Code & Address Name" + frame.decoding_result.packetVars["serviceCodeAndAddressName"]); + decode = decode.append("Continuation" + frame.decoding_result.packetVars["continuation"]); + decode = decode.append("Priority" + frame.decoding_result.packetVars["priorityText"]); + decode = decode.append("Repetition" + frame.decoding_result.packetVars["rep"]); + decode = decode.append("Msg Id" + frame.decoding_result.packetVars["messageId"]); + decode = decode.append("Packet No" + frame.decoding_result.packetVars["packetNo"]); + decode = decode.append("isNewPayload" + frame.decoding_result.packetVars["isNewPayl"]); + decode = decode.append("Address" + frame.decoding_result.packetVars["addrHex"]); + + bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; + if (!isBinary) + { + for (int k = 0; k < (int)frame.decoding_result.payload.data8Bit.size(); k++) { + char chr = frame.decoding_result.payload.data8Bit[k] & 0x7F; + if ((chr < 0x20 && chr != '\n' && chr != '\r')) { + message = message.append("(" + QString::number((uint16_t)chr, 16) + ")"); + } else /*if (chr != '\n' && chr != '\r')*/ { + message = message.append(chr); + } + } + } + else + { + for (int i = 0; i < (int)frame.decoding_result.payload.data8Bit.size(); i++) + { + uint8_t data = frame.decoding_result.payload.data8Bit[i]; + message = message.append(QString::number(data, 16) + " "); + } + } + decode = decode.append("Payload" + message); + } + break; + + case 0xB2: + { + decode = decode.append("Msg Type" + frame.decoding_result.packetVars["messageType"]); + decode = decode.append("Service Code & Address Name" + frame.decoding_result.packetVars["serviceCodeAndAddressName"]); + decode = decode.append("Continuation" + frame.decoding_result.packetVars["continuation"]); + decode = decode.append("Priority" + frame.decoding_result.packetVars["priorityText"]); + decode = decode.append("Repetition" + frame.decoding_result.packetVars["rep"]); + decode = decode.append("Msg Id" + frame.decoding_result.packetVars["messageId"]); + decode = decode.append("Packet No" + frame.decoding_result.packetVars["packetNo"]); + decode = decode.append("isNewPayload" + frame.decoding_result.packetVars["isNewPayl"]); + decode = decode.append("Address" + frame.decoding_result.packetVars["addrHex"]); + + bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; + if (!isBinary) + { + for (int k = 0; k < (int)frame.decoding_result.payload.data8Bit.size(); k++) + { + char chr = frame.decoding_result.payload.data8Bit[k] & 0x7F; + if ((chr < 0x20 && chr != '\n' && chr != '\r')) { + message = message.append("(" + QString::number((uint16_t)chr, 16) + ")"); + } else /*if (chr != '\n' && chr != '\r')*/ { + message = message.append(chr); + } + } + } + else + { + for (int i = 0; i < (int)frame.decoding_result.payload.data8Bit.size(); i++) + { + uint8_t data = frame.decoding_result.payload.data8Bit[i]; + message = message.append(QString::number(data, 16) + " "); + } + } + decode = decode.append("Payload" + message); + } + break; + + } + + messageItem->setText(message); + decodeLabel->setText(decode); + + QByteArray frameBytes((char *) decoderResult.decodedFrame, decoderResult.length); + dataHexItem->setText(frameBytes.toHex()); + + filterRow(ui->packets, row, PACKET_COL_TYPE, PACKET_COL_MESSAGE); + if (!m_loadingData) + { + ui->packets->setSortingEnabled(true); + if (scrollToBottom) { + ui->packets->scrollToBottom(); + } + } + + QString messageId = QString::fromStdString(frame.decoding_result.packetVars["messageId"]); + if (!messageId.isEmpty()) + { + int id = messageId.toInt(); + MultipartMessage *multipartMessage = nullptr; + if (m_messages.contains(id)) + { + multipartMessage = m_messages[id]; + multipartMessage->update(frame.decoding_result.packetVars, dateTime); + } + else + { + multipartMessage = new MultipartMessage(id, frame.decoding_result.packetVars, dateTime); + m_messages.insert(id, multipartMessage); + } + MessagePart part; + part.m_part = frame.decoding_result.packetDescriptor == 0xb1 ? 1 : 2; + part.m_packet = QString::fromStdString(frame.decoding_result.packetVars["packetNo"]).toInt(); + part.m_text = message; + multipartMessage->addPart(part); + updateMessageTable(multipartMessage); + + if (!multipartMessage->getCoordinates().isEmpty()) + { + QString name = QString::number(multipartMessage->getId()); + QString messageText = multipartMessage->getMessage().replace("\n", "
    "); + sendAreaToMapFeature(name, messageText, multipartMessage->getLatitude(), multipartMessage->getLongitude(), multipartMessage->getCoordinates()); + } + } + } + } +} + +void InmarsatDemodGUI::sendAreaToMapFeature(const QString& name, const QString& text, float latitude, float longitude, const QList& coordinates) +{ + // Send to Map feature + QList mapPipes; + MainCore::instance()->getMessagePipes().getMessagePipes(m_inmarsatDemod, "mapitems", mapPipes); + + if (mapPipes.size() > 0) + { + if (!m_mapItems.contains(name)) { + m_mapItems.append(name); + } + + for (const auto& pipe : mapPipes) + { + MessageQueue *messageQueue = qobject_cast(pipe->m_element); + SWGSDRangel::SWGMapItem *swgMapItem = new SWGSDRangel::SWGMapItem(); + + swgMapItem->setName(new QString(name)); + swgMapItem->setLatitude(latitude); + swgMapItem->setLongitude(longitude); + swgMapItem->setAltitude(0.0); + QString image = QString("none"); + swgMapItem->setImage(new QString(image)); + swgMapItem->setImageRotation(0); + swgMapItem->setText(new QString(text)); // Not used - label is used instead for now + swgMapItem->setLabel(new QString(text)); + swgMapItem->setAltitudeReference(0); + + QList *coords = new QList(); + + for (const auto& geoC : coordinates) + { + SWGSDRangel::SWGMapCoordinate* c = new SWGSDRangel::SWGMapCoordinate(); + c->setLatitude(geoC.latitude()); + c->setLongitude(geoC.longitude()); + c->setAltitude(geoC.altitude()); + coords->append(c); + } + + swgMapItem->setCoordinates(coords); + swgMapItem->setType(3); + + MainCore::MsgMapItem *msg = MainCore::MsgMapItem::create(m_inmarsatDemod, swgMapItem); + messageQueue->push(msg); + } + } +} + +void InmarsatDemodGUI::clearAreaFromMapFeature(const QString& name) +{ + QList mapPipes; + MainCore::instance()->getMessagePipes().getMessagePipes(m_inmarsatDemod, "mapitems", mapPipes); + for (const auto& pipe : mapPipes) + { + MessageQueue *messageQueue = qobject_cast(pipe->m_element); + SWGSDRangel::SWGMapItem *swgMapItem = new SWGSDRangel::SWGMapItem(); + swgMapItem->setName(new QString(name)); + swgMapItem->setImage(new QString("")); + swgMapItem->setType(3); + MainCore::MsgMapItem *msg = MainCore::MsgMapItem::create(m_inmarsatDemod, swgMapItem); + messageQueue->push(msg); + } + m_mapItems.removeAll(name); +} + +void InmarsatDemodGUI::clearAllFromMapFeature() +{ + while (m_mapItems.size() > 0) { + clearAreaFromMapFeature(m_mapItems[0]); + } +} + + +void InmarsatDemodGUI::on_messages_itemSelectionChanged() +{ + QList items = ui->messages->selectedItems(); + if (items.size() > 0) + { + ui->packets->clearSelection(); + + int row = items[0]->row(); + QString message = ui->messages->item(row, MESSAGE_COL_MESSAGE)->text(); + ui->decode->setText(message); + } +} + +void InmarsatDemodGUI::on_packets_itemSelectionChanged() +{ + QList items = ui->packets->selectedItems(); + if (items.size() > 0) + { + ui->messages->clearSelection(); + + int row = items[0]->row(); + // Display decoded packet + QLabel *label = qobject_cast(ui->packets->cellWidget(row, PACKET_COL_DECODE)); + QString decode = label->text(); + ui->decode->setText(decode); + } +} + +bool InmarsatDemodGUI::handleMessage(const Message& message) +{ + if (InmarsatDemod::MsgConfigureInmarsatDemod::match(message)) + { + qDebug("InmarsatDemodGUI::handleMessage: InmarsatDemod::MsgConfigureInmarsatDemod"); + const InmarsatDemod::MsgConfigureInmarsatDemod& cfg = (InmarsatDemod::MsgConfigureInmarsatDemod&) message; + if (cfg.getForce()) { + m_settings = cfg.getSettings(); + } else { + m_settings.applySettings(cfg.getSettingsKeys(), cfg.getSettings()); + } + blockApplySettings(true); + ui->scopeGUI->updateSettings(); + m_channelMarker.updateSettings(static_cast(m_settings.m_channelMarker)); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (DSPSignalNotification::match(message)) + { + DSPSignalNotification& notif = (DSPSignalNotification&) message; + m_deviceCenterFrequency = notif.getCenterFrequency(); + m_basebandSampleRate = notif.getSampleRate(); + ui->deltaFrequency->setValueRange(false, 7, -m_basebandSampleRate/2, m_basebandSampleRate/2); + ui->deltaFrequencyLabel->setToolTip(tr("Range %1 %L2 Hz").arg(QChar(0xB1)).arg(m_basebandSampleRate/2)); + updateAbsoluteCenterFrequency(); + return true; + } + else if (MainCore::MsgPacket::match(message)) + { + MainCore::MsgPacket& report = (MainCore::MsgPacket&) message; + packetReceived(report.getPacket(), report.getDateTime()); + return true; + } + + return false; +} + +void InmarsatDemodGUI::handleInputMessages() +{ + Message* message; + + while ((message = getInputMessageQueue()->pop()) != 0) + { + if (handleMessage(*message)) + { + delete message; + } + } +} + +void InmarsatDemodGUI::channelMarkerChangedByCursor() +{ + ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); + m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); + applySetting("inputFrequencyOffset"); +} + +void InmarsatDemodGUI::channelMarkerHighlightedByCursor() +{ + setHighlighted(m_channelMarker.getHighlighted()); +} + +void InmarsatDemodGUI::on_deltaFrequency_changed(qint64 value) +{ + m_channelMarker.setCenterFrequency(value); + m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); + updateAbsoluteCenterFrequency(); + applySetting("inputFrequencyOffset"); +} + +void InmarsatDemodGUI::on_rfBW_valueChanged(int value) +{ + float bw = value * 100.0f; + ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); + m_channelMarker.setBandwidth(bw); + m_settings.m_rfBandwidth = bw; + applySetting("rfBandwidth"); +} + +void InmarsatDemodGUI::on_rrcRolloff_valueChanged(int value) +{ + ui->rrcRolloffText->setText(QString("%1").arg(value / 100.0, 0, 'f', 2)); + m_settings.m_rrcRolloff = value / 100.0; + applySetting("rrfRolloff"); +} + +void InmarsatDemodGUI::on_pll_clicked(bool checked) +{ + ui->rrcRolloff->setVisible(checked); + ui->rrcRolloffLabel->setVisible(checked); + ui->rrcRolloffText->setVisible(checked); + ui->rrcRolloffLine->setVisible(checked); + ui->pllBW->setVisible(checked); + ui->pllBWText->setVisible(checked); + ui->pllBWLabel->setVisible(checked); + ui->ssBW->setVisible(checked); + ui->ssBWText->setVisible(checked); + ui->ssBWLabel->setVisible(checked); + ui->ssBWLine->setVisible(checked); + ui->pllCoarseLine->setVisible(checked); + ui->pllCoarseFreq->setVisible(checked); + ui->pllCoarseFreqLabel->setVisible(checked); + ui->pllFineLine->setVisible(checked); + ui->pllFineFreq->setVisible(checked); + ui->pllFineFreqLabel->setVisible(checked); + ui->pllFineFreqUnits->setVisible(checked); +} + +void InmarsatDemodGUI::on_pllBW_valueChanged(int value) +{ + ui->pllBWText->setText(QString("%1").arg(value / 1000.0, 0, 'f', 3)); + m_settings.m_pllBW = value / 1000.0; + applySetting("pllBandwidth"); +} + +void InmarsatDemodGUI::on_ssBW_valueChanged(int value) +{ + ui->ssBWText->setText(QString("%1").arg(value / 1000.0, 0, 'f', 3)); + m_settings.m_ssBW = value / 1000.0; + applySetting("ssBandwidth"); +} + +void InmarsatDemodGUI::on_filterType_editingFinished() +{ + m_settings.m_filterType = ui->filterType->text(); + updateRegularExpressions(); + filter(); + applySetting("filterType"); +} + +void InmarsatDemodGUI::on_filterMessage_editingFinished() +{ + m_settings.m_filterMessage = ui->filterMessage->text(); + updateRegularExpressions(); + filter(); + applySetting("filterMessage"); +} + +void InmarsatDemodGUI::on_clearTable_clicked() +{ + ui->packets->setRowCount(0); + ui->messages->setRowCount(0); + ui->decode->setText(""); + qDeleteAll(m_messages); + m_messages.clear(); + clearAllFromMapFeature(); +} + +void InmarsatDemodGUI::on_udpEnabled_clicked(bool checked) +{ + m_settings.m_udpEnabled = checked; + applySetting("udpEnabled"); +} + +void InmarsatDemodGUI::on_udpAddress_editingFinished() +{ + m_settings.m_udpAddress = ui->udpAddress->text(); + applySetting("udpAddress"); +} + +void InmarsatDemodGUI::on_udpPort_editingFinished() +{ + m_settings.m_udpPort = ui->udpPort->text().toInt(); + applySetting("udpPort"); +} + +void InmarsatDemodGUI::filterRow(QTableWidget *table, int row, int typeCol, int messageCol) +{ + bool hidden = false; + + if ((m_settings.m_filterType != "") && (typeCol != -1)) + { + QTableWidgetItem *typeItem = table->item(row, typeCol); + QRegularExpressionMatch match = m_typeRE.match(typeItem->text()); + if (!match.hasMatch()) { + hidden = true; + } + } + if (m_settings.m_filterMessage != "") + { + QTableWidgetItem *messageItem = table->item(row, messageCol); + QRegularExpressionMatch match = m_messageRE.match(messageItem->text()); + if (!match.hasMatch()) { + hidden = true; + } + } + table->setRowHidden(row, hidden); +} + +void InmarsatDemodGUI::filter() +{ + for (int i = 0; i < ui->packets->rowCount(); i++) { + filterRow(ui->packets, i, PACKET_COL_TYPE, PACKET_COL_MESSAGE); + } + for (int i = 0; i < ui->messages->rowCount(); i++) { + filterRow(ui->messages, i, -1, MESSAGE_COL_MESSAGE); + } +} + +void InmarsatDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) +{ + (void) widget; + (void) rollDown; + + getRollupContents()->saveState(m_rollupState); + applySetting("rollupState"); +} + +void InmarsatDemodGUI::onMenuDialogCalled(const QPoint &p) +{ + if (m_contextMenuType == ContextMenuType::ContextMenuChannelSettings) + { + BasicChannelSettingsDialog dialog(&m_channelMarker, this); + dialog.setUseReverseAPI(m_settings.m_useReverseAPI); + dialog.setReverseAPIAddress(m_settings.m_reverseAPIAddress); + dialog.setReverseAPIPort(m_settings.m_reverseAPIPort); + dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); + dialog.setReverseAPIChannelIndex(m_settings.m_reverseAPIChannelIndex); + dialog.setDefaultTitle(m_displayedName); + + if (m_deviceUISet->m_deviceMIMOEngine) + { + dialog.setNumberOfStreams(m_inmarsatDemod->getNumberOfDeviceStreams()); + dialog.setStreamIndex(m_settings.m_streamIndex); + } + + dialog.move(p); + new DialogPositioner(&dialog, false); + dialog.exec(); + + m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); + m_settings.m_title = m_channelMarker.getTitle(); + m_settings.m_useReverseAPI = dialog.useReverseAPI(); + m_settings.m_reverseAPIAddress = dialog.getReverseAPIAddress(); + m_settings.m_reverseAPIPort = dialog.getReverseAPIPort(); + m_settings.m_reverseAPIDeviceIndex = dialog.getReverseAPIDeviceIndex(); + m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); + + setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); + setTitleColor(m_settings.m_rgbColor); + + QList settingsKeys({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex" + }); + + if (m_deviceUISet->m_deviceMIMOEngine) + { + m_settings.m_streamIndex = dialog.getSelectedStreamIndex(); + m_channelMarker.clearStreamIndexes(); + m_channelMarker.addStreamIndex(m_settings.m_streamIndex); + updateIndexLabel(); + } + + applySettings(settingsKeys); + } + + resetContextMenuType(); +} + +InmarsatDemodGUI::InmarsatDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent) : + ChannelGUI(parent), + ui(new Ui::InmarsatDemodGUI), + m_pluginAPI(pluginAPI), + m_deviceUISet(deviceUISet), + m_channelMarker(this), + m_deviceCenterFrequency(0), + m_doApplySettings(true), + m_tickCount(0), + m_loadingData(false) +{ + setAttribute(Qt::WA_DeleteOnClose, true); + m_helpURL = "plugins/channelrx/demodinmarsat/readme.md"; + RollupContents *rollupContents = getRollupContents(); + ui->setupUi(rollupContents); + setSizePolicy(rollupContents->sizePolicy()); + rollupContents->arrangeRollups(); + connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(this, SIGNAL(packetsCustomContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); + + m_inmarsatDemod = reinterpret_cast(rxChannel); + m_inmarsatDemod->setMessageQueueToGUI(getInputMessageQueue()); + + connect(&MainCore::instance()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); // 50 ms + + m_scopeVis = m_inmarsatDemod->getScopeSink(); + m_scopeVis->setGLScope(ui->glScope); + ui->glScope->connectTimer(MainCore::instance()->getMasterTimer()); + ui->scopeGUI->setBuddies(m_scopeVis->getInputMessageQueue(), m_scopeVis, ui->glScope); + ui->scopeGUI->setStreams(QStringList({"IQ", "MagSq", "IQ AGC", "AGC gain/avg", "IQ CFO", "IQ RRC", "TED Er", "TED Er Sum", "CL", "IQ Derot", "Bit/mu"})); + + // Scope settings to display the IQ waveforms + ui->scopeGUI->setPreTrigger(1); + GLScopeSettings::TraceData traceDataI, traceDataQ; + traceDataI.m_projectionType = Projector::ProjectionReal; + traceDataI.m_amp = 1.0; // for -1 to +1 + traceDataI.m_ofs = 0.0; // vertical offset + traceDataQ.m_projectionType = Projector::ProjectionImag; + traceDataQ.m_amp = 1.0; + traceDataQ.m_ofs = 0.0; + ui->scopeGUI->changeTrace(0, traceDataI); + ui->scopeGUI->addTrace(traceDataQ); + ui->scopeGUI->setDisplayMode(GLScopeSettings::DisplayXYV); + ui->scopeGUI->focusOnTrace(0); // re-focus to take changes into account in the GUI + + GLScopeSettings::TriggerData triggerData; + triggerData.m_triggerLevel = 0.1; + triggerData.m_triggerLevelCoarse = 10; + triggerData.m_triggerPositiveEdge = true; + ui->scopeGUI->changeTrigger(0, triggerData); + ui->scopeGUI->focusOnTrigger(0); // re-focus to take changes into account in the GUI + + m_scopeVis->setLiveRate(48000); + //m_scopeVis->setFreeRun(false); // FIXME: add method rather than call m_scopeVis->configure() + + ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03))); + ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); + ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999); + ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue); + + m_channelMarker.blockSignals(true); + m_channelMarker.setColor(Qt::yellow); + m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); + m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); + m_channelMarker.setTitle("Inmarsat C Demodulator"); + m_channelMarker.blockSignals(false); + m_channelMarker.setVisible(true); // activate signal on the last setting only + + setTitleColor(m_channelMarker.getColor()); + m_settings.setChannelMarker(&m_channelMarker); + m_settings.setScopeGUI(ui->scopeGUI); + m_settings.setRollupState(&m_rollupState); + + m_deviceUISet->addChannelMarker(&m_channelMarker); + + connect(&m_channelMarker, SIGNAL(changedByCursor()), this, SLOT(channelMarkerChangedByCursor())); + connect(&m_channelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor())); + connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); + + // Resize the table using dummy data + resizeTable(); + // Allow user to reorder columns + ui->packets->horizontalHeader()->setSectionsMovable(true); + // Allow user to sort table by clicking on headers + ui->packets->setSortingEnabled(true); + // Add context menu to allow hiding/showing of columns + m_packetsMenu = new QMenu(ui->packets); + for (int i = 0; i < ui->packets->horizontalHeader()->count(); i++) + { + QString text = ui->packets->horizontalHeaderItem(i)->text(); + m_packetsMenu->addAction(createCheckableItem(text, i, true, true)); + } + ui->packets->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu); + connect(ui->packets->horizontalHeader(), SIGNAL(customContextMenuRequested(QPoint)), SLOT(packetsColumnSelectMenu(QPoint))); + // Get signals when columns change + connect(ui->packets->horizontalHeader(), SIGNAL(sectionMoved(int, int, int)), SLOT(packets_sectionMoved(int, int, int))); + connect(ui->packets->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), SLOT(packets_sectionResized(int, int, int))); + ui->packets->setContextMenuPolicy(Qt::CustomContextMenu); + connect(ui->packets, SIGNAL(customContextMenuRequested(QPoint)), SLOT(packetsCustomContextMenuRequested(QPoint))); + TableTapAndHold *packetsTableTapAndHold = new TableTapAndHold(ui->packets); + connect(packetsTableTapAndHold, &TableTapAndHold::tapAndHold, this, &InmarsatDemodGUI::packetsCustomContextMenuRequested); + + // Allow user to reorder columns + ui->messages->horizontalHeader()->setSectionsMovable(true); + // Allow user to sort table by clicking on headers + ui->messages->setSortingEnabled(true); + // Add context menu to allow hiding/showing of columns + m_messagesMenu = new QMenu(ui->messages); + for (int i = 0; i < ui->messages->horizontalHeader()->count(); i++) + { + QString text = ui->messages->horizontalHeaderItem(i)->text(); + m_messagesMenu->addAction(createCheckableItem(text, i, true, false)); + } + ui->messages->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu); + connect(ui->messages->horizontalHeader(), SIGNAL(customContextMenuRequested(QPoint)), SLOT(messagesColumnSelectMenu(QPoint))); + // Get signals when columns change + connect(ui->messages->horizontalHeader(), SIGNAL(sectionMoved(int, int, int)), SLOT(messages_sectionMoved(int, int, int))); + connect(ui->messages->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), SLOT(messages_sectionResized(int, int, int))); + ui->messages->setContextMenuPolicy(Qt::CustomContextMenu); + connect(ui->messages, SIGNAL(customContextMenuRequested(QPoint)), SLOT(messagesCustomContextMenuRequested(QPoint))); + TableTapAndHold *messagesTableTapAndHold = new TableTapAndHold(ui->messages); + connect(messagesTableTapAndHold, &TableTapAndHold::tapAndHold, this, &InmarsatDemodGUI::messagesCustomContextMenuRequested); + + on_pll_clicked(false); + ui->scopeContainer->setVisible(false); + + displaySettings(); + makeUIConnections(); + applyAllSettings(); + m_resizer.enableChildMouseTracking(); +} + +InmarsatDemodGUI::~InmarsatDemodGUI() +{ + clearAllFromMapFeature(); + delete ui; +} + +void InmarsatDemodGUI::blockApplySettings(bool block) +{ + m_doApplySettings = !block; +} + +void InmarsatDemodGUI::applySetting(const QString& settingsKey) +{ + applySettings({settingsKey}); +} + +void InmarsatDemodGUI::applySettings(const QStringList& settingsKeys, bool force) +{ + m_settingsKeys.append(settingsKeys); + if (m_doApplySettings) + { + InmarsatDemod::MsgConfigureInmarsatDemod* message = InmarsatDemod::MsgConfigureInmarsatDemod::create(m_settings, m_settingsKeys, force); + m_inmarsatDemod->getInputMessageQueue()->push(message); + m_settingsKeys.clear(); + } +} + +void InmarsatDemodGUI::applyAllSettings() +{ + applySettings(QStringList(), true); +} + +void InmarsatDemodGUI::displaySettings() +{ + m_channelMarker.blockSignals(true); + m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); + m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); + m_channelMarker.setTitle(m_settings.m_title); + m_channelMarker.blockSignals(false); + m_channelMarker.setColor(m_settings.m_rgbColor); // activate signal on the last setting only + + setTitleColor(m_settings.m_rgbColor); + setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); + + blockApplySettings(true); + + updateRegularExpressions(); + + ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); + + ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1)); + ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0); + + ui->rrcRolloffText->setText(QString("%1").arg(m_settings.m_rrcRolloff, 0, 'f', 2)); + ui->rrcRolloff->setValue(m_settings.m_rrcRolloff * 100.0); + + ui->pllBWText->setText(QString("%1").arg(m_settings.m_pllBW, 0, 'f', 3)); + ui->pllBW->setValue(m_settings.m_pllBW * 1000.0); + + ui->ssBWText->setText(QString("%1").arg(m_settings.m_ssBW, 0, 'f', 3)); + ui->ssBW->setValue(m_settings.m_ssBW * 1000.0); + + updateIndexLabel(); + + ui->filterType->setText(m_settings.m_filterType); + ui->filterMessage->setText(m_settings.m_filterMessage); + + ui->udpEnabled->setChecked(m_settings.m_udpEnabled); + ui->udpAddress->setText(m_settings.m_udpAddress); + ui->udpPort->setText(QString::number(m_settings.m_udpPort)); + + ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); + ui->logEnable->setChecked(m_settings.m_logEnabled); + + ui->useFileTime->setChecked(m_settings.m_useFileTime); + + // Order and size columns + QHeaderView *header = ui->packets->horizontalHeader(); + for (int i = 0; i < INMARSATDEMOD_PACKETS_COLUMNS; i++) + { + bool hidden = m_settings.m_packetsColumnSizes[i] == 0; + header->setSectionHidden(i, hidden); + m_packetsMenu->actions().at(i)->setChecked(!hidden); + if (m_settings.m_packetsColumnSizes[i] > 0) + ui->packets->setColumnWidth(i, m_settings.m_packetsColumnSizes[i]); + header->moveSection(header->visualIndex(i), m_settings.m_packetsColumnIndexes[i]); + } + header = ui->messages->horizontalHeader(); + for (int i = 0; i < INMARSATDEMOD_MESSAGES_COLUMNS; i++) + { + bool hidden = m_settings.m_messagesColumnSizes[i] == 0; + header->setSectionHidden(i, hidden); + m_messagesMenu->actions().at(i)->setChecked(!hidden); + if (m_settings.m_messagesColumnSizes[i] > 0) + ui->messages->setColumnWidth(i, m_settings.m_messagesColumnSizes[i]); + header->moveSection(header->visualIndex(i), m_settings.m_messagesColumnIndexes[i]); + } + + filter(); + + getRollupContents()->restoreState(m_rollupState); + updateAbsoluteCenterFrequency(); + blockApplySettings(false); +} + +void InmarsatDemodGUI::leaveEvent(QEvent* event) +{ + m_channelMarker.setHighlighted(false); + ChannelGUI::leaveEvent(event); +} + +void InmarsatDemodGUI::enterEvent(EnterEventType* event) +{ + m_channelMarker.setHighlighted(true); + ChannelGUI::enterEvent(event); +} + +void InmarsatDemodGUI::tick() +{ + double magsqAvg, magsqPeak; + int nbMagsqSamples; + m_inmarsatDemod->getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples); + double powDbAvg = CalcDb::dbPower(magsqAvg); + double powDbPeak = CalcDb::dbPower(magsqPeak); + + ui->channelPowerMeter->levelChanged( + (100.0f + powDbAvg) / 100.0f, + (100.0f + powDbPeak) / 100.0f, + nbMagsqSamples); + + if (m_tickCount % 4 == 0) { + ui->channelPower->setText(QString::number(powDbAvg, 'f', 1)); + } + + bool locked; + Real coarseFreqCurrent; + Real coarseFreqCurrentPower; + Real coarseFreq; + Real coarseFreqPower; + Real fineFreq; + m_inmarsatDemod->getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq); + + if (locked) + { + ui->pll->setStyleSheet("QToolButton { background-color : green; }"); + ui->pll->setIcon(QIcon(":/locked.png").pixmap(QSize(20, 20))); + } + else + { + ui->pll->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); + ui->pll->setIcon(QIcon(":/unlocked.png").pixmap(QSize(20, 20))); + } + + ui->pllFineFreq->setText(QString::number(std::round(fineFreq))); + ui->pllCoarseFreq->setText( + QString("Current: %1 Hz %2 dB Locked: %3 Hz %4 dB") + .arg(std::round(coarseFreqCurrent)) + .arg(std::round(CalcDb::dbPower(coarseFreqCurrentPower))) + .arg(std::round(coarseFreq)) + .arg(std::round(CalcDb::dbPower(coarseFreqPower))) + ); + + m_tickCount++; +} + +void InmarsatDemodGUI::on_logEnable_clicked(bool checked) +{ + m_settings.m_logEnabled = checked; + applySetting("logEnabled"); +} + +void InmarsatDemodGUI::on_logFilename_clicked() +{ + // Get filename to save to + QFileDialog fileDialog(nullptr, "Select file to log received frames to", "", "*.csv"); + fileDialog.setDefaultSuffix("csv"); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); + if (fileDialog.exec()) + { + QStringList fileNames = fileDialog.selectedFiles(); + if (fileNames.size() > 0) + { + m_settings.m_logFilename = fileNames[0]; + ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); + applySetting("logFilename"); + } + } +} + +// Read .csv log and process as received frames +void InmarsatDemodGUI::on_logOpen_clicked() +{ + QFileDialog fileDialog(nullptr, "Select .csv log file to read", "", "*.csv"); + if (fileDialog.exec()) + { + QStringList fileNames = fileDialog.selectedFiles(); + if (fileNames.size() > 0) + { + QFile file(fileNames[0]); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + QTextStream in(&file); + QString error; + QHash colIndexes = CSV::readHeader(in, {"Date", "Time", "Data"}, error); + if (error.isEmpty()) + { + m_loadingData = true; + + int dateCol = colIndexes.value("Date"); + int timeCol = colIndexes.value("Time"); + int dataCol = colIndexes.value("Data"); + int maxCol = std::max({dateCol, timeCol, dataCol}); + + QMessageBox dialog(this); + dialog.setText("Reading packet data"); + dialog.addButton(QMessageBox::Cancel); + dialog.show(); + QApplication::processEvents(); + int count = 0; + bool cancelled = false; + QStringList cols; + while (!cancelled && CSV::readRow(in, &cols)) + { + if (cols.size() > maxCol) + { + QDate date = QDate::fromString(cols[dateCol]); + QTime time = QTime::fromString(cols[timeCol]); + QDateTime dateTime(date, time); + QByteArray bytes = QByteArray::fromHex(cols[dataCol].toLatin1()); + packetReceived(bytes, dateTime); + if (count % 1000 == 0) + { + QApplication::processEvents(); + if (dialog.clickedButton()) { + cancelled = true; + } + } + count++; + } + } + dialog.close(); + + m_loadingData = false; + ui->packets->setSortingEnabled(true); + ui->messages->setSortingEnabled(true); + } + else + { + QMessageBox::critical(this, "Inmarsat Demod", error); + } + } + else + { + QMessageBox::critical(this, "Inmarsat Demod", QString("Failed to open file %1").arg(fileNames[0])); + } + } + } +} + +void InmarsatDemodGUI::on_useFileTime_toggled(bool checked) +{ + m_settings.m_useFileTime = checked; + applySetting("useFileTime"); +} + +void InmarsatDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &InmarsatDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &InmarsatDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->rrcRolloff, &QDial::valueChanged, this, &InmarsatDemodGUI::on_rrcRolloff_valueChanged); + QObject::connect(ui->pllBW, &QDial::valueChanged, this, &InmarsatDemodGUI::on_pllBW_valueChanged); + QObject::connect(ui->ssBW, &QDial::valueChanged, this, &InmarsatDemodGUI::on_ssBW_valueChanged); + QObject::connect(ui->pll, &QToolButton::clicked, this, &InmarsatDemodGUI::on_pll_clicked); + QObject::connect(ui->filterType, &QLineEdit::editingFinished, this, &InmarsatDemodGUI::on_filterType_editingFinished); + QObject::connect(ui->filterMessage, &QLineEdit::editingFinished, this, &InmarsatDemodGUI::on_filterMessage_editingFinished); + QObject::connect(ui->clearTable, &QPushButton::clicked, this, &InmarsatDemodGUI::on_clearTable_clicked); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &InmarsatDemodGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &InmarsatDemodGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &InmarsatDemodGUI::on_udpPort_editingFinished); + QObject::connect(ui->logEnable, &ButtonSwitch::clicked, this, &InmarsatDemodGUI::on_logEnable_clicked); + QObject::connect(ui->logFilename, &QToolButton::clicked, this, &InmarsatDemodGUI::on_logFilename_clicked); + QObject::connect(ui->logOpen, &QToolButton::clicked, this, &InmarsatDemodGUI::on_logOpen_clicked); + QObject::connect(ui->useFileTime, &ButtonSwitch::toggled, this, &InmarsatDemodGUI::on_useFileTime_toggled); + QObject::connect(ui->packets, &QTableWidget::itemSelectionChanged, this, &InmarsatDemodGUI::on_packets_itemSelectionChanged); + QObject::connect(ui->messages, &QTableWidget::itemSelectionChanged, this, &InmarsatDemodGUI::on_messages_itemSelectionChanged); +} + +void InmarsatDemodGUI::updateAbsoluteCenterFrequency() +{ + setStatusFrequency(m_deviceCenterFrequency + m_settings.m_inputFrequencyOffset); +} + +void InmarsatDemodGUI::updateRegularExpressions() +{ + m_typeRE = QRegularExpression(QRegularExpression::anchoredPattern(m_settings.m_filterType)); + m_messageRE = QRegularExpression(QRegularExpression::anchoredPattern(m_settings.m_filterMessage), QRegularExpression::DotMatchesEverythingOption); +} diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h new file mode 100644 index 000000000..b1aea38a1 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h @@ -0,0 +1,248 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// Copyright (C) 2020, 2022 Edouard Griffiths, F4EXB // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_INMARSATDEMODGUI_H +#define INCLUDE_INMARSATDEMODGUI_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "channel/channelgui.h" +#include "dsp/channelmarker.h" +#include "util/messagequeue.h" +#include "settings/rollupstate.h" +#include "inmarsatdemodsettings.h" + +class PluginAPI; +class DeviceUISet; +class BasebandSampleSink; +class ScopeVis; +class InmarsatDemod; +class InmarsatDemodGUI; + +namespace Ui { + class InmarsatDemodGUI; +} +class InmarsatDemodGUI; + +QString decodeAddress(QString messageType, QString addressHex, float *latitude = nullptr, float *longitude = nullptr, QList *coordinates = nullptr, QIcon **icon = nullptr); + +struct MessagePart { + int m_part; + int m_packet; + QString m_text; +}; + +class MultipartMessage { +public: + + MultipartMessage(int id, std::map params, const QDateTime& dateTime); + void update(std::map params, const QDateTime& dateTime); + void addPart(const MessagePart& part); + QString getMessage() const; + int getParts() const { return m_parts.size(); } + int getTotalParts() const { return m_parts[m_parts.size()-1].m_packet * 2; } + QDateTime getDateTime() const { return m_dateTime; } + int getId() const { return m_id; } + QString getService() const { return m_service; } + QString getPriority() const { return m_priority; } + QString getAddress() const { return m_address; } + QIcon *getAddressIcon() const { return m_icon; } + float getLatitude() const { return m_addressCoordinates.size() > 0 ? m_latitude : m_messageCoordinates[0].latitude(); } + float getLongitude() const { return m_addressCoordinates.size() > 0 ? m_longitude : m_messageCoordinates[0].longitude(); } + QList& getCoordinates() { return m_addressCoordinates.size() > 0 ? m_addressCoordinates : m_messageCoordinates; } + +private: + + QDateTime m_dateTime; + int m_id; + QString m_service; + QString m_priority; + QString m_address; + QIcon *m_icon; + QList m_parts; + float m_latitude; + float m_longitude; + QList m_addressCoordinates; + QList m_messageCoordinates; + + static QRegularExpression m_re; + + void parseMessage(); +}; + +class InmarsatDemodGUI : public ChannelGUI { + Q_OBJECT + +public: + static InmarsatDemodGUI* create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel); + virtual void destroy(); + + void resetToDefaults(); + QByteArray serialize() const; + bool deserialize(const QByteArray& data); + virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; + virtual void zetHidden(bool hidden) { m_settings.m_hidden = hidden; } + virtual bool getHidden() const { return m_settings.m_hidden; } + virtual ChannelMarker& getChannelMarker() { return m_channelMarker; } + virtual int getStreamIndex() const { return m_settings.m_streamIndex; } + virtual void setStreamIndex(int streamIndex) { m_settings.m_streamIndex = streamIndex; } + +public slots: + void channelMarkerChangedByCursor(); + void channelMarkerHighlightedByCursor(); + +private: + Ui::InmarsatDemodGUI* ui; + PluginAPI* m_pluginAPI; + DeviceUISet* m_deviceUISet; + ChannelMarker m_channelMarker; + RollupState m_rollupState; + InmarsatDemodSettings m_settings; + QList m_settingsKeys; + qint64 m_deviceCenterFrequency; + bool m_doApplySettings; + ScopeVis* m_scopeVis; + + InmarsatDemod* m_inmarsatDemod; + int m_basebandSampleRate; + uint32_t m_tickCount; + MessageQueue m_inputMessageQueue; + + QMenu *m_packetsMenu; // Column select context menu + QMenu *m_messagesMenu; + QStringList m_mapItems; + bool m_loadingData; + + inmarsatc::frameParser::FrameParser m_parser; + QHash m_messages; + + QRegularExpression m_typeRE; + QRegularExpression m_messageRE; + + explicit InmarsatDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent = 0); + virtual ~InmarsatDemodGUI(); + + void blockApplySettings(bool block); + void applySetting(const QString& settingsKey); + void applySettings(const QStringList& settingsKeys, bool force = false); + void applyAllSettings(); + void displaySettings(); + void packetReceived(const QByteArray& packet, QDateTime dateTime); + bool handleMessage(const Message& message); + void makeUIConnections(); + void updateAbsoluteCenterFrequency(); + + void leaveEvent(QEvent*); + void enterEvent(EnterEventType*); + + void updateMessageTable(MultipartMessage *message); + void resizeTable(); + QAction *createCheckableItem(QString& text, int idx, bool checked, bool packets); + + void sendAreaToMapFeature(const QString& name, const QString& text, float latitude, float longitude, const QList& coordinates); + void clearAreaFromMapFeature(const QString& name); + void clearAllFromMapFeature(); + + void updateRegularExpressions(); + void filterRow(QTableWidget *table, int row, int typeCol, int messageCol); + void filter(); + + enum MessageCol { + MESSAGE_COL_DATE, + MESSAGE_COL_TIME, + MESSAGE_COL_ID, + MESSAGE_COL_SERVICE, + MESSAGE_COL_PRIORITY, + MESSAGE_COL_ADDRESS, + MESSAGE_COL_PARTS, + MESSAGE_COL_MESSAGE + }; + + enum PacketCol { + PACKET_COL_DATE, + PACKET_COL_TIME, + PACKET_COL_SAT, + PACKET_COL_LES, + PACKET_COL_MSG_ID, + PACKET_COL_TYPE, + PACKET_COL_FRAME_NO, + PACKET_COL_LCN, + PACKET_COL_ULF, + PACKET_COL_DLF, + PACKET_COL_PRIORITY, + PACKET_COL_ADDRESS, + PACKET_COL_MESSAGE, + PACKET_COL_DECODE, + PACKET_COL_DATA_HEX + }; + +private slots: + void on_packets_itemSelectionChanged(); + void on_messages_itemSelectionChanged(); + void on_deltaFrequency_changed(qint64 value); + void on_rfBW_valueChanged(int index); + void on_rrcRolloff_valueChanged(int value); + void on_pll_clicked(bool checked=false); + void on_pllBW_valueChanged(int value); + void on_ssBW_valueChanged(int value); + void on_filterType_editingFinished(); + void on_filterMessage_editingFinished(); + void on_clearTable_clicked(); + void on_udpEnabled_clicked(bool checked); + void on_udpAddress_editingFinished(); + void on_udpPort_editingFinished(); + void on_logEnable_clicked(bool checked=false); + void on_logFilename_clicked(); + void on_logOpen_clicked(); + void on_useFileTime_toggled(bool checked=false); + void packets_sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); + void packets_sectionResized(int logicalIndex, int oldSize, int newSize); + void packetsColumnSelectMenu(QPoint pos); + void packetsColumnSelectMenuChecked(bool checked = false); + void packetsCustomContextMenuRequested(QPoint pos); + void messages_sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); + void messages_sectionResized(int logicalIndex, int oldSize, int newSize); + void messagesColumnSelectMenu(QPoint pos); + void messagesColumnSelectMenuChecked(bool checked = false); + void messagesCustomContextMenuRequested(QPoint pos); + void onWidgetRolled(QWidget* widget, bool rollDown); + void onMenuDialogCalled(const QPoint& p); + void handleInputMessages(); + void tick(); +}; + +#endif // INCLUDE_INMARSATDEMODGUI_H diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui new file mode 100644 index 000000000..48457ef1d --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui @@ -0,0 +1,1157 @@ + + + InmarsatDemodGUI + + + + 0 + 0 + 1116 + 856 + + + + + 0 + 0 + + + + + 352 + 0 + + + + + Liberation Sans + 9 + + + + Qt::FocusPolicy::StrongFocus + + + Inmarsat Std-C Demodulator + + + + + 0 + 0 + 1111 + 151 + + + + + 350 + 0 + + + + Settings + + + + 3 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + 2 + + + + + + 16 + 0 + + + + Df + + + + + + + + 0 + 0 + + + + + 32 + 16 + + + + + Liberation Mono + 12 + + + + PointingHandCursor + + + Qt::FocusPolicy::StrongFocus + + + Demod shift frequency from center in Hz + + + + + + + Hz + + + + + + + Qt::Orientation::Vertical + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Channel power + + + Qt::LayoutDirection::RightToLeft + + + 0.0 + + + + + + + dB + + + + + + + + + + + + + dB + + + + + + + + 0 + 0 + + + + + 0 + 24 + + + + + Liberation Mono + 8 + + + + Level meter (dB) top trace: average, bottom trace: instantaneous peak, tip: peak hold + + + + + + + + + Qt::Orientation::Horizontal + + + + + + + + + BW + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + RF bandwidth + + + 20 + + + 200 + + + 1 + + + 40 + + + Qt::Orientation::Horizontal + + + + + + + + 30 + 0 + + + + 10.0k + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + Qt::Orientation::Vertical + + + + + + + RRC + + + + + + + + 24 + 24 + + + + Root Raised Cosine Filter rolloff + + + 100 + + + + + + + + 30 + 0 + + + + 0.7 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Orientation::Vertical + + + + + + + CFO + + + + + + + + 310 + 0 + + + + Coarse frequency offset + + + Current: -100Hz -20dB Locked: -100 Hz -20 dB + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + Qt::Orientation::Vertical + + + + + + + CL + + + + + + + + 40 + 0 + + + + Costas Loop frequency in Hertz + + + - + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + Hz + + + + + + + Qt::Orientation::Vertical + + + + + + + SS + + + + + + + + 24 + 24 + + + + Symbol synchronizer loop bandwidth + + + 1000 + + + + + + + + 40 + 0 + + + + 0.062 + + + + + + + Qt::Orientation::Vertical + + + + + + + CL + + + + + + + + 24 + 24 + + + + Costas Loop loop bandwidth + + + 1000 + + + + + + + + 40 + 0 + + + + 0.062 + + + + + + + Green background indicates PLL locked. Check for more details + + + + + + + :/unlocked.png:/unlocked.png + + + true + + + false + + + + + + + + + Qt::Orientation::Horizontal + + + + + + + + + UDP + + + + + + + Send packets via UDP + + + Qt::LayoutDirection::RightToLeft + + + + + + + + + + + 120 + 0 + + + + Qt::FocusPolicy::ClickFocus + + + Destination UDP address + + + 000.000.000.000 + + + 127.0.0.1 + + + + + + + : + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 50 + 0 + + + + + 50 + 16777215 + + + + Qt::FocusPolicy::ClickFocus + + + Destination UDP port + + + 00000 + + + 9998 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Orientation::Horizontal + + + + + + + + + Type + + + + + + + Display only packets where the message type field matches the specified regular expression + + + + + + + Message + + + + + + + Display only packets where the message field matches the specified regular expression + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 24 + 16777215 + + + + Check to use date and time from input file. Uncheck to use date and time from clock. + + + + + + + :/clockcurrent.png + :/clockfile.png:/clockcurrent.png + + + + + + + + 24 + 16777215 + + + + Start/stop logging of received packets to .csv file + + + + + + + :/record_off.png:/record_off.png + + + + + + + Set log .csv filename + + + ... + + + + :/save.png:/save.png + + + false + + + + + + + Read data from .csv log file + + + ... + + + + :/load.png:/load.png + + + false + + + + + + + Clear packets from table + + + + + + + :/bin.png:/bin.png + + + + + + + + + + + 0 + 170 + 391 + 241 + + + + + 0 + 0 + + + + Received Packets + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Orientation::Vertical + + + + 0 + + + + Packets + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Received packets + + + QAbstractItemView::EditTrigger::NoEditTriggers + + + QAbstractItemView::SelectionMode::SingleSelection + + + QAbstractItemView::SelectionBehavior::SelectRows + + + + Date + + + Date packet was received + + + + + Time + + + Time packet was received + + + + + Sat + + + Satellite + + + + + LES + + + Land Earth Station + + + + + MsgId + + + Message ID + + + + + Type + + + Packet type + + + + + Frame + + + Frame number + + + + + LCN + + + Logical channel number + + + + + ULF (MHz) + + + Uplink frequency + + + + + DLF (MHz) + + + Downlink frequency + + + + + Priority + + + Priority + + + + + Address + + + Address + + + + + Message + + + Message + + + + + Decode + + + + + Data (Hex) + + + Frame data as hex + + + + + + + + + Messages + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QAbstractItemView::EditTrigger::NoEditTriggers + + + QAbstractItemView::SelectionMode::SingleSelection + + + QAbstractItemView::SelectionBehavior::SelectRows + + + true + + + + Date + + + + + Time + + + + + ID + + + + + Service + + + + + Priority + + + + + Address + + + + + Parts + + + + + Message + + + + + + + + + + true + + + + + + + + + + 30 + 430 + 714 + 331 + + + + + 714 + 0 + + + + Waveforms + + + + 2 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 200 + 250 + + + + + Liberation Mono + 8 + + + + + + + + + + + + + RollupContents + QWidget +

    gui/rollupcontents.h
    + 1 + + + ValueDialZ + QWidget +
    gui/valuedialz.h
    + 1 +
    + + ButtonSwitch + QToolButton +
    gui/buttonswitch.h
    +
    + + LevelMeterSignalDB + QWidget +
    gui/levelmeter.h
    + 1 +
    + + GLScope + QWidget +
    gui/glscope.h
    + 1 +
    + + GLScopeGUI + QWidget +
    gui/glscopegui.h
    + 1 +
    + + + deltaFrequency + rfBW + rrcRolloff + pll + udpEnabled + filterType + filterMessage + useFileTime + logEnable + logFilename + logOpen + clearTable + packets + atab + decode + messages + + + + + + diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodplugin.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodplugin.cpp new file mode 100644 index 000000000..cd85c1717 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodplugin.cpp @@ -0,0 +1,94 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany // +// written by Christian Daniel // +// Copyright (C) 2015-2022 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include +#include "plugin/pluginapi.h" + +#ifndef SERVER_MODE +#include "inmarsatdemodgui.h" +#endif +#include "inmarsatdemod.h" +#include "inmarsatdemodwebapiadapter.h" +#include "inmarsatdemodplugin.h" + +const PluginDescriptor InmarsatDemodPlugin::m_pluginDescriptor = { + InmarsatDemod::m_channelId, + QStringLiteral("Inmarsat C Demodulator"), + QStringLiteral("7.22.11"), + QStringLiteral("(c) Jon Beniston, M7RCE"), + QStringLiteral("https://github.com/f4exb/sdrangel"), + true, + QStringLiteral("https://github.com/f4exb/sdrangel") +}; + +InmarsatDemodPlugin::InmarsatDemodPlugin(QObject* parent) : + QObject(parent), + m_pluginAPI(0) +{ +} + +const PluginDescriptor& InmarsatDemodPlugin::getPluginDescriptor() const +{ + return m_pluginDescriptor; +} + +void InmarsatDemodPlugin::initPlugin(PluginAPI* pluginAPI) +{ + m_pluginAPI = pluginAPI; + + m_pluginAPI->registerRxChannel(InmarsatDemod::m_channelIdURI, InmarsatDemod::m_channelId, this); +} + +void InmarsatDemodPlugin::createRxChannel(DeviceAPI *deviceAPI, BasebandSampleSink **bs, ChannelAPI **cs) const +{ + if (bs || cs) + { + InmarsatDemod *instance = new InmarsatDemod(deviceAPI); + + if (bs) { + *bs = instance; + } + + if (cs) { + *cs = instance; + } + } +} + +#ifdef SERVER_MODE +ChannelGUI* InmarsatDemodPlugin::createRxChannelGUI( + DeviceUISet *deviceUISet, + BasebandSampleSink *rxChannel) const +{ + (void) deviceUISet; + (void) rxChannel; + return 0; +} +#else +ChannelGUI* InmarsatDemodPlugin::createRxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel) const +{ + return InmarsatDemodGUI::create(m_pluginAPI, deviceUISet, rxChannel); +} +#endif + +ChannelWebAPIAdapter* InmarsatDemodPlugin::createChannelWebAPIAdapter() const +{ + return new InmarsatDemodWebAPIAdapter(); +} diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodplugin.h b/plugins/channelrx/demodinmarsat/inmarsatdemodplugin.h new file mode 100644 index 000000000..6c52653f7 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodplugin.h @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany // +// written by Christian Daniel // +// Copyright (C) 2015-2020 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_INMARSATDEMODPLUGIN_H +#define INCLUDE_INMARSATDEMODPLUGIN_H + +#include +#include "plugin/plugininterface.h" + +class DeviceUISet; +class BasebandSampleSink; + +class InmarsatDemodPlugin : public QObject, PluginInterface { + Q_OBJECT + Q_INTERFACES(PluginInterface) + Q_PLUGIN_METADATA(IID "sdrangel.channel.inmarsatdemod") + +public: + explicit InmarsatDemodPlugin(QObject* parent = NULL); + + const PluginDescriptor& getPluginDescriptor() const; + void initPlugin(PluginAPI* pluginAPI); + + virtual void createRxChannel(DeviceAPI *deviceAPI, BasebandSampleSink **bs, ChannelAPI **cs) const; + virtual ChannelGUI* createRxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel) const; + virtual ChannelWebAPIAdapter* createChannelWebAPIAdapter() const; + +private: + static const PluginDescriptor m_pluginDescriptor; + + PluginAPI* m_pluginAPI; +}; + +#endif // INCLUDE_INMARSATDEMODPLUGIN_H diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp new file mode 100644 index 000000000..5fe1714d1 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp @@ -0,0 +1,399 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany // +// written by Christian Daniel // +// Copyright (C) 2015-2022 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include + +#include "util/simpleserializer.h" +#include "settings/serializable.h" +#include "inmarsatdemodsettings.h" + +InmarsatDemodSettings::InmarsatDemodSettings() : + m_channelMarker(nullptr), + m_scopeGUI(nullptr), + m_rollupState(nullptr) +{ + appendDefaultColumnSettings(); + resetToDefaults(); +} + +void InmarsatDemodSettings::appendDefaultColumnSettings() +{ + appendDefaultColumnIndexes(m_packetsColumnIndexes, INMARSATDEMOD_PACKETS_COLUMNS); + appendDefaultColumnSizes(m_packetsColumnSizes, INMARSATDEMOD_PACKETS_COLUMNS); + appendDefaultColumnIndexes(m_messagesColumnIndexes, INMARSATDEMOD_MESSAGES_COLUMNS); + appendDefaultColumnSizes(m_messagesColumnSizes, INMARSATDEMOD_MESSAGES_COLUMNS); +} + +void InmarsatDemodSettings::appendDefaultColumnIndexes(QList& list, int size) +{ + while (list.size() < size) { + list.append(list.size()); + } +} + +void InmarsatDemodSettings::appendDefaultColumnSizes(QList& list, int size) +{ + while (list.size() < size) { + list.append(-1); + } +} + +void InmarsatDemodSettings::resetToDefaults() +{ + m_inputFrequencyOffset = 0; + m_rfBandwidth = 5000.0f; + m_rrcRolloff = 1.0f; + m_pllBW = 2*M_PI/100.0; + m_ssBW = 2*M_PI/100.0; + m_filterType = ""; + m_filterMessage = ""; + m_udpEnabled = false; + m_udpAddress = "127.0.0.1"; + m_udpPort = 9999; + m_logFilename = "inmarsat_c_log.csv"; + m_logEnabled = false; + m_useFileTime = false; + for (int i = 0; i < INMARSATDEMOD_PACKETS_COLUMNS; i++) + { + m_packetsColumnIndexes[i] = i; + m_packetsColumnSizes[i] = -1; // Autosize + } + for (int i = 0; i < INMARSATDEMOD_MESSAGES_COLUMNS; i++) + { + m_messagesColumnIndexes[i] = i; + m_messagesColumnSizes[i] = -1; // Autosize + } + m_rgbColor = QColor(40, 180, 75).rgb(); + m_title = "Inmarsat C Demodulator"; + m_streamIndex = 0; + m_useReverseAPI = false; + m_reverseAPIAddress = "127.0.0.1"; + m_reverseAPIPort = 8888; + m_reverseAPIDeviceIndex = 0; + m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; + m_hidden = false; +} + +QByteArray InmarsatDemodSettings::serialize() const +{ + SimpleSerializer s(1); + s.writeS32(1, m_inputFrequencyOffset); + s.writeS32(2, m_streamIndex); + s.writeString(3, m_filterType); + s.writeString(4, m_filterMessage); + + s.writeFloat(5, m_rfBandwidth); + s.writeFloat(6, m_rrcRolloff); + s.writeFloat(7, m_pllBW); + s.writeFloat(8, m_ssBW); + + s.writeBool(10, m_udpEnabled); + s.writeString(11, m_udpAddress); + s.writeU32(12, m_udpPort); + + s.writeString(13, m_logFilename); + s.writeBool(14, m_logEnabled); + + s.writeBool(15, m_useFileTime); + + s.writeList(16, m_packetsColumnIndexes); + s.writeList(17, m_packetsColumnSizes); + s.writeList(18, m_messagesColumnIndexes); + s.writeList(19, m_messagesColumnSizes); + + if (m_channelMarker) { + s.writeBlob(20, m_channelMarker->serialize()); + } + s.writeU32(21, m_rgbColor); + s.writeString(22, m_title); + s.writeBool(23, m_useReverseAPI); + s.writeString(24, m_reverseAPIAddress); + s.writeU32(25, m_reverseAPIPort); + s.writeU32(26, m_reverseAPIDeviceIndex); + s.writeU32(27, m_reverseAPIChannelIndex); + if (m_rollupState) { + s.writeBlob(28, m_rollupState->serialize()); + } + s.writeS32(29, m_workspaceIndex); + s.writeBlob(30, m_geometryBytes); + s.writeBool(31, m_hidden); + if (m_scopeGUI) { + s.writeBlob(32, m_scopeGUI->serialize()); + } + + return s.final(); +} + +bool InmarsatDemodSettings::deserialize(const QByteArray& data) +{ + SimpleDeserializer d(data); + + if(!d.isValid()) + { + resetToDefaults(); + return false; + } + + if(d.getVersion() == 1) + { + QByteArray bytetmp; + uint32_t utmp; + QString strtmp; + + d.readS32(1, &m_inputFrequencyOffset, 0); + d.readS32(2, &m_streamIndex, 0); + d.readString(3, &m_filterType, ""); + d.readString(4, &m_filterMessage, ""); + + d.readFloat(5, &m_rfBandwidth, 5000.0f); + d.readFloat(6, &m_rrcRolloff, 1.0f); + d.readFloat(7, &m_pllBW, 2*M_PI/100.0); + d.readFloat(8, &m_ssBW, 2*M_PI/100.0); + + d.readBool(10, &m_udpEnabled); + d.readString(11, &m_udpAddress); + d.readU32(12, &utmp); + + d.readString(13, &m_logFilename, "inmarsat_c_log.csv"); + d.readBool(14, &m_logEnabled, false); + + d.readBool(15, &m_useFileTime, false); + + d.readList(16, &m_packetsColumnIndexes); + d.readList(17, &m_packetsColumnSizes); + d.readList(18, &m_messagesColumnIndexes); + d.readList(19, &m_messagesColumnSizes); + appendDefaultColumnSettings(); + + if (m_channelMarker) + { + d.readBlob(20, &bytetmp); + m_channelMarker->deserialize(bytetmp); + } + d.readU32(21, &m_rgbColor, QColor(40, 180, 75).rgb()); + d.readString(22, &m_title, "Inmarsat C Demodulator"); + d.readBool(23, &m_useReverseAPI, false); + d.readString(24, &m_reverseAPIAddress, "127.0.0.1"); + d.readU32(25, &utmp, 0); + + if ((utmp > 1023) && (utmp < 65535)) { + m_reverseAPIPort = utmp; + } else { + m_reverseAPIPort = 8888; + } + + d.readU32(26, &utmp, 0); + m_reverseAPIDeviceIndex = utmp > 99 ? 99 : utmp; + d.readU32(27, &utmp, 0); + m_reverseAPIChannelIndex = utmp > 99 ? 99 : utmp; + + if ((utmp > 1023) && (utmp < 65535)) { + m_udpPort = utmp; + } else { + m_udpPort = 9999; + } + + if (m_rollupState) + { + d.readBlob(28, &bytetmp); + m_rollupState->deserialize(bytetmp); + } + + d.readS32(29, &m_workspaceIndex, 0); + d.readBlob(30, &m_geometryBytes); + d.readBool(31, &m_hidden, false); + + if (m_scopeGUI) + { + d.readBlob(32, &bytetmp); + m_scopeGUI->deserialize(bytetmp); + } + + return true; + } + else + { + resetToDefaults(); + return false; + } +} + +void InmarsatDemodSettings::applySettings(const QStringList& settingsKeys, const InmarsatDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("rrcRolloff")) { + m_rrcRolloff = settings.m_rrcRolloff; + } + if (settingsKeys.contains("pllBandwidth")) { + m_pllBW = settings.m_pllBW; + } + if (settingsKeys.contains("ssBandwidth")) { + m_ssBW = settings.m_ssBW; + } + if (settingsKeys.contains("filterType")) { + m_filterType = settings.m_filterType; + } + if (settingsKeys.contains("filterMessage")) { + m_filterMessage = settings.m_filterMessage; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("useFileTime")) { + m_useFileTime = settings.m_useFileTime; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("packetsColumnIndexes")) { + m_packetsColumnIndexes = settings.m_packetsColumnIndexes; + } + if (settingsKeys.contains("packetsColumnSizes")) { + m_packetsColumnSizes = settings.m_packetsColumnSizes; + } + if (settingsKeys.contains("messagesColumnIndexes")) { + m_messagesColumnIndexes = settings.m_messagesColumnIndexes; + } + if (settingsKeys.contains("messagesColumnSizes")) { + m_messagesColumnSizes = settings.m_messagesColumnSizes; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString InmarsatDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("rrcRolloff") || force) { + ostr << " m_rrcRolloff: " << m_rrcRolloff; + } + if (settingsKeys.contains("pllBandwidth") || force) { + ostr << " m_pllBW: " << m_pllBW; + } + if (settingsKeys.contains("ssBandwidth") || force) { + ostr << " m_ssBW: " << m_ssBW; + } + if (settingsKeys.contains("filterType") || force) { + ostr << " m_filterType: " << m_filterType.toStdString(); + } + if (settingsKeys.contains("filterMessage") || force) { + ostr << " m_filterMessage: " << m_filterMessage.toStdString(); + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("useFileTime") || force) { + ostr << " m_useFileTime: " << m_useFileTime; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h new file mode 100644 index 000000000..94c2ff5c3 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h @@ -0,0 +1,88 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany // +// written by Christian Daniel // +// Copyright (C) 2015-2022 Edouard Griffiths, F4EXB // +// Copyright (C) 2021-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_INMARSATDEMODSETTINGS_H +#define INCLUDE_INMARSATDEMODSETTINGS_H + +#include + +#include "dsp/dsptypes.h" + +class Serializable; + +// Number of columns in the table +#define INMARSATDEMOD_MESSAGES_COLUMNS 8 +#define INMARSATDEMOD_PACKETS_COLUMNS 15 + +struct InmarsatDemodSettings +{ + qint32 m_inputFrequencyOffset; + float m_rfBandwidth; + float m_rrcRolloff; + float m_pllBW; //!< Costas loop bandwidth in rad/sample + float m_ssBW; //!< Symbol sync bandwidth normalised to symbol rate (E.g. 0.05 for 5%) + QString m_filterType; + QString m_filterMessage; + bool m_udpEnabled; + QString m_udpAddress; + uint16_t m_udpPort; + QString m_logFilename; + bool m_logEnabled; + bool m_useFileTime; + QList m_packetsColumnIndexes;//!< How the columns are ordered in the table + QList m_packetsColumnSizes; //!< Size of the columns in the table + QList m_messagesColumnIndexes; + QList m_messagesColumnSizes; + + quint32 m_rgbColor; + QString m_title; + Serializable *m_channelMarker; + int m_streamIndex; //!< MIMO channel. Not relevant when connected to SI (single Rx). + bool m_useReverseAPI; + QString m_reverseAPIAddress; + uint16_t m_reverseAPIPort; + uint16_t m_reverseAPIDeviceIndex; + uint16_t m_reverseAPIChannelIndex; + + Serializable *m_scopeGUI; + Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; + bool m_hidden; + + static const int CHANNEL_SAMPLE_RATE = 48000; + static const int BAUD_RATE = 1200; + static const int m_scopeStreams = 11; + + InmarsatDemodSettings(); + void resetToDefaults(); + void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; } + void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } + void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } + QByteArray serialize() const; + bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const InmarsatDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force = false) const; + void appendDefaultColumnSettings(); + void appendDefaultColumnIndexes(QList& list, int size); + void appendDefaultColumnSizes(QList& list, int size); +}; + +#endif /* INCLUDE_INMARSATDEMODSETTINGS_H */ diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp new file mode 100644 index 000000000..bfaed3e31 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp @@ -0,0 +1,521 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2021-2026 Jon Beniston, M7RCE // +// Copyright (C) 2021-2022 Edouard Griffiths, F4EXB // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include + +#include "dsp/datafifo.h" +#include "dsp/scopevis.h" +#include "dsp/fftfactory.h" +#include "dsp/dspengine.h" +#include "util/db.h" +#include "device/deviceapi.h" +#include "channel/channelwebapiutils.h" +#include "maincore.h" + +#include "inmarsatdemod.h" +#include "inmarsatdemodsink.h" + +AGC::AGC() : + m_gain(1.0f) +{ +} + +Complex AGC::processOneSample(const Complex& iq, bool locked) +{ + Complex z = m_gain * iq; + + m_agcMovingAverage(abs(z)); + //qDebug() << "abs" << abs(z) << "m_agcGain" << m_agcGain << "m_agcMovingAverage.instantAverage()" << m_agcMovingAverage.instantAverage(); + + Real agcRef = 0.6f; // Target amplitude + Real agcMu = locked ? 0.01 : 0.1; // How fast we want to respond to changes in average + Real agcEr = agcRef - m_agcMovingAverage.instantAverage(); // Error between target and average + + m_gain += agcMu * agcEr; + m_gain = std::clamp(m_gain, 0.01f, 100.0f); // 20dB max enough? + + return z; +} + +FrequencyOffsetEstimate::FrequencyOffsetEstimate() : + m_fftSequence(-1), + m_fft(nullptr), + m_fftCounter(0), + m_fftSize(2048), // 23Hz per bin - which is roughly pull in range of costas loop + m_freqOffsetBin(-1), + m_freqOffsetHz(0.0f), + m_currentFreqOffsetHz(0.0f), + m_freqMagSq(0.0f), + m_currentFreqMagSq(0.0) +{ + FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory(); + m_fftSequence = fftFactory->getEngine(m_fftSize, false, &m_fft); + m_fftCounter = 0; + m_fftWindow.create(FFTWindow::Rectangle, m_fftSize); +} + +FrequencyOffsetEstimate::~FrequencyOffsetEstimate() +{ + if (m_fftSequence >= 0) + { + FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory(); + fftFactory->releaseEngine(m_fftSize, false, m_fftSequence); + } +} + +void FrequencyOffsetEstimate::processOneSample(Complex& iq, bool locked) +{ + // Square signal to remove modulation + Complex cSquared = iq * iq; + + // FFT of squared signal for coarse frequency offset estimation + m_fft->in()[m_fftCounter] = cSquared; + m_fftCounter++; + if (m_fftCounter == m_fftSize) + { + // Apply windowing function + m_fftWindow.apply(m_fft->in()); + + // Perform FFT + m_fft->transform(); + + // Find peak + int maxIdx = -1; + Real maxVal = 0; + for (int i = 0; i < m_fftSize; i++) + { + Complex co = m_fft->out()[i]; + Real v = co.real() * co.real() + co.imag() * co.imag(); + Real magsq = v / (m_fftSize * m_fftSize); + if (magsq > maxVal) + { + maxIdx = i; + maxVal = magsq; + } + } + + // Calculate power for current peak bin and frequency we're locked too + m_currentFreqMagSq = magSq(maxIdx); + m_freqMagSq = magSq(m_freqOffsetBin); + + Real hzPerBin = InmarsatDemodSettings::CHANNEL_SAMPLE_RATE / (Real) m_fftSize; + int idx = maxIdx; + if (maxIdx > m_fftSize / 2) { + idx -= m_fftSize; // Negative freqs are in second half + } + m_currentFreqOffsetHz = ((idx * hzPerBin) / 2); // Divide by two, as the squaring operation doubles the freq + //qDebug() << "Max val" << maxVal << "maxIdx" << maxIdx << "freqOffset" << m_freqOffsetHz; + + Real magRatio = sqrt(m_currentFreqMagSq) / sqrt(m_freqMagSq); + + // Don't change frequency if Costas loop is locked, unless there's a big + // signal more than 2 bins away. Costas loop locked signal can falsely indicate lock + // if offset is multiple of data rate. + if (!locked || ((magRatio >= 3) && (abs(maxIdx - m_freqOffsetBin) >= 2))) + { + m_freqOffsetBin = maxIdx; + m_freqOffsetHz = m_currentFreqOffsetHz; + m_freqOffsetNCO.setFreq(-m_freqOffsetHz, InmarsatDemodSettings::CHANNEL_SAMPLE_RATE); + //qDebug() << "Setting CFO" << m_freqOffsetHz << "(" << CalcDb::dbPower(m_currentFreqMagSq) << "/" << CalcDb::dbPower(m_freqMagSq) << ")"; + } + + m_fftCounter = 0; + } + + // Correct for coarse frequency offset + iq *= m_freqOffsetNCO.nextIQ(); +} + +Real FrequencyOffsetEstimate::magSq(int bin) const +{ + Complex c = m_fft->out()[bin]; + Real v = c.real() * c.real() + c.imag() * c.imag(); + return v / (m_fftSize * m_fftSize); +} + +InmarsatDemodSink::InmarsatDemodSink(InmarsatDemod *stdCDemod) : + m_scopeSink(nullptr), + m_inmarsatDemod(stdCDemod), + m_channelSampleRate(InmarsatDemodSettings::CHANNEL_SAMPLE_RATE), + m_channelFrequencyOffset(0), + m_magsqSum(0.0f), + m_magsqPeak(0.0f), + m_magsqCount(0), + m_messageQueueToChannel(nullptr), + m_decoder(9), + m_costasLoop(10*2*M_PI/100.0, 2), + m_rrcBufferIndex(0), + m_sampleBufferIndexA(0), + m_sampleBufferIndexB(0) +{ + m_magsq = 0.0; + + m_rrcFilter = new fftfilt(m_settings.m_rfBandwidth / (float) m_channelSampleRate, RRC_FILTER_SIZE); + + m_rrcI.create(m_settings.m_rrcRolloff, 5, SAMPLES_PER_SYMBOL, RootRaisedCosine::Gain); + m_rrcQ.create(m_settings.m_rrcRolloff, 5, SAMPLES_PER_SYMBOL, RootRaisedCosine::Gain); + + m_sampleIdx = 0; + + m_adjustedSPS = m_maxSamplesPerSymbol; // ok: 20, 15, fail: 10, 9, 5 + m_adjustment = 0; + m_totalSampleCount = 0; + m_error = 0; + m_errorSum = 0; + m_mu = 0.0; + m_bit = 0; + m_bitCount = 0; + m_filteredSamples.enqueue(0); // Prev sample for first iteration + + for (int i = 0; i < InmarsatDemodSettings::m_scopeStreams; i++) { + m_sampleBuffer[i].resize(SAMPLE_BUFFER_SIZE); + } + + applySettings(m_settings, QStringList(), true); + applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); + +} + +InmarsatDemodSink::~InmarsatDemodSink() +{ + delete m_rrcFilter; +} + +void InmarsatDemodSink::sampleToScopeA(Complex sample, Real magsq, Complex postAGC, Real agcGain, Real agcAvg, Complex postCFO) +{ + if (m_scopeSink) + { + m_sampleBuffer[0][m_sampleBufferIndexA] = sample; + m_sampleBuffer[1][m_sampleBufferIndexA] = Complex(magsq, 0.0f); + m_sampleBuffer[2][m_sampleBufferIndexA] = postAGC; + m_sampleBuffer[3][m_sampleBufferIndexA] = Complex(agcGain, agcAvg); + m_sampleBuffer[4][m_sampleBufferIndexA] = postCFO; + m_sampleBufferIndexA++; + } +} + +void InmarsatDemodSink::sampleToScopeB(Complex rrc, Complex tedError, Complex tedErrorSum, Complex ref, Complex derot, int bit, Real mu) +{ + if (m_scopeSink) + { + m_sampleBuffer[5][m_sampleBufferIndexB] = rrc; + m_sampleBuffer[6][m_sampleBufferIndexB] = tedError; + m_sampleBuffer[7][m_sampleBufferIndexB] = tedErrorSum; + m_sampleBuffer[8][m_sampleBufferIndexB] = ref; + m_sampleBuffer[9][m_sampleBufferIndexB] = derot; + m_sampleBuffer[10][m_sampleBufferIndexB] = Complex(bit, mu); + m_sampleBufferIndexB++; + if (m_sampleBufferIndexB == SAMPLE_BUFFER_SIZE) + { + std::vector vbegin; + + for (int i = 0; i < InmarsatDemodSettings::m_scopeStreams; i++) { + vbegin.push_back(m_sampleBuffer[i].begin()); + } + + m_scopeSink->feed(vbegin, SAMPLE_BUFFER_SIZE); + if (m_sampleBufferIndexA != m_sampleBufferIndexB) { + qDebug() << "m_sampleBufferIndexA != m_sampleBufferIndexB" << m_sampleBufferIndexA << m_sampleBufferIndexB; + } + m_sampleBufferIndexA = 0; + m_sampleBufferIndexB = 0; + } + } +} + +void InmarsatDemodSink::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end) +{ + Complex ci; + + for (SampleVector::const_iterator it = begin; it != end; ++it) + { + Complex c(it->real(), it->imag()); + c *= m_nco.nextIQ(); + + if (m_interpolatorDistance < 1.0f) // interpolate + { + while (!m_interpolator.interpolate(&m_interpolatorDistanceRemain, c, &ci)) + { + processOneSample(ci); + m_interpolatorDistanceRemain += m_interpolatorDistance; + } + } + else // decimate + { + if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci)) + { + processOneSample(ci); + m_interpolatorDistanceRemain += m_interpolatorDistance; + } + } + } +} + +void InmarsatDemodSink::processOneSample(Complex &ci) +{ + // Calculate average and peak levels for level meter + Real re = ci.real() / SDR_RX_SCALEF; + Real im = ci.imag() / SDR_RX_SCALEF; + Real magsq = re*re + im*im; + m_movingAverage(magsq); + m_magsq = m_movingAverage.asDouble(); + m_magsqSum += magsq; + if (magsq > m_magsqPeak) + { + m_magsqPeak = magsq; + } + m_magsqCount++; + + // AGC + + Complex cScaled = Complex(re, im); + Complex agcZ = m_agc.processOneSample(cScaled, m_locked); + + // Coarse frequency offset correction + + Complex cCFO = agcZ; + m_frequencyOffsetEst.processOneSample(cCFO, m_locked); + + // Send signals to scope that are updated for each invocation of this method + sampleToScopeA(cScaled, magsq, agcZ, m_agc.getGain(), m_agc.getAverage(), cCFO); + + // RRC Matched filter + fftfilt::cmplx *rrcFilterOut = nullptr; + int n_out = m_rrcFilter->runFilt(cCFO, &rrcFilterOut); + + m_rrcBuffer[m_rrcBufferIndex++] = cCFO; + + if (m_rrcBufferIndex == RRC_FILTER_SIZE/2) + { + n_out = m_rrcBufferIndex; + m_rrcBufferIndex = 0; + } + else + { + n_out = 0; + } + + for (int i = 0; i < n_out; i++) + { + //Complex rrc = rrcFilterOut[i]; + Complex rrc (m_rrcI.filter(m_rrcBuffer[i].real()), m_rrcQ.filter(m_rrcBuffer[i].imag())); + + // Symbol synchronizer + + m_totalSampleCount++; + m_filteredSamples.enqueue(rrc); + while (m_filteredSamples.size() > m_maxSamplesPerSymbol) + { + m_filteredSamples.dequeue(); + + if (m_sampleIdx == m_adjustedSPS - 1) + { + // Gardner timing error detector + + int currentIdx = m_filteredSamples.size()-1; + int midIdx = currentIdx - (SAMPLES_PER_SYMBOL/2.0f); + int previousIdx = currentIdx - SAMPLES_PER_SYMBOL; + + //qDebug() << "diff" << (m_prevTotalSampleCount - m_totalSampleCount); + //qDebug() << "m_totalSampleCount" << m_totalSampleCount << "m_prevTotalSampleCount" << m_prevTotalSampleCount << "diff" << (m_prevTotalSampleCount - m_totalSampleCount) << "currentIdx" << currentIdx << "previousIdx" << previousIdx << "midIdx" << midIdx << "mu" << m_mu; + + Complex previous = m_filteredSamples[previousIdx]; + Complex mid = m_filteredSamples[midIdx]; + Complex current = m_filteredSamples[currentIdx]; + + m_error = (current.real() - previous.real()) * mid.real() + + (current.imag() - previous.imag()) * mid.imag(); + m_errorSum += m_error; + + // Symbol synchronizer adjustment + + m_mu = m_kp * m_error + m_ki * m_errorSum; // Positive error is late + //m_mu = std::clamp(m_mu, -0.5f, 0.5f); + + int adjustment = (int)round(m_mu * SAMPLES_PER_SYMBOL); + + //qDebug() << "m_mu" << m_mu << "m_error" << m_error << "m_errorSum" << m_errorSum << "adjustment" << adjustment; + + m_adjustedSPS = SAMPLES_PER_SYMBOL - m_adjustment; // Positve mu indicates late, so reduce time to next sample + m_adjustment = adjustment; + m_prevTotalSampleCount = m_totalSampleCount; + + // Costas loop for fine phase/freq correction - runs at symbol rate + + m_costasLoop.feed(current.real(), current.imag()); + m_ref = -std::conj(m_costasLoop.getComplex()); + m_derot = current * m_ref; + + // Determine whether Costas loop is locked - BPSK so Q part should average as zero when locked, and will be similar to I when not locked + Real derotMag = abs(m_derot); + Real iNorm = abs(m_derot.real()) / derotMag; + Real qNorm = abs(m_derot.imag()) / derotMag; + m_lockAverage(iNorm - qNorm); + float lockThresh = 0.2; + m_locked = m_lockAverage.instantAverage() > lockThresh; + //qDebug() << "m_lockAverage.instantAverage()" << m_lockAverage.instantAverage(); + + // Symbol to bit + m_bit = m_derot.real() >= 0; + m_bits[m_bitCount++] = m_bit; + + // Pass demodulated bits to decoder + if (m_bitCount == DEMODULATOR_SYMBOLSPERCHUNK) + { + decodeBits(); + m_bitCount = 0; + } + + m_sampleIdx = 0; + } + else + { + m_sampleIdx++; + } + + } + + // Send signals to scope that are updated only whenever the RRC filter output is updated + sampleToScopeB(rrc, m_error, m_errorSum, m_ref, m_derot, m_bit*2-1, m_mu); + } +} + +void InmarsatDemodSink::decodeBits() +{ + std::vector decoderResults; + + decoderResults = m_decoder.decode(m_bits); + + if (decoderResults.size() > 0) + { + for (int j = 0; j < decoderResults.size(); j++) + { + QByteArray rxPacket; + rxPacket.resize(sizeof(inmarsatc::decoder::Decoder::decoder_result)); + memcpy(rxPacket.data(), &decoderResults[j], sizeof(inmarsatc::decoder::Decoder::decoder_result)); + + if (getMessageQueueToChannel()) + { + QDateTime dateTime = QDateTime::currentDateTime(); + if (m_settings.m_useFileTime) + { + QString hardwareId = m_inmarsatDemod->getDeviceAPI()->getHardwareId(); + + if ((hardwareId == "FileInput") || (hardwareId == "SigMFFileInput")) + { + QString dateTimeStr; + int deviceIdx = m_inmarsatDemod->getDeviceSetIndex(); + + if (ChannelWebAPIUtils::getDeviceReportValue(deviceIdx, "absoluteTime", dateTimeStr)) { + dateTime = QDateTime::fromString(dateTimeStr, Qt::ISODateWithMs); + } + } + } + + MainCore::MsgPacket *msg = MainCore::MsgPacket::create(m_inmarsatDemod, rxPacket, dateTime); + getMessageQueueToChannel()->push(msg); + } + } + } +} + +void InmarsatDemodSink::getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq) const +{ + locked = m_locked; + coarseFreqCurrent = m_frequencyOffsetEst.getCurrentFreqHz(); + coarseFreqCurrentPower = m_frequencyOffsetEst.getCurrentFreqMagSq(); + coarseFreq = m_frequencyOffsetEst.getFreqHz(); + coarseFreqPower = m_frequencyOffsetEst.getFreqMagSq(); + fineFreq = m_costasLoop.getFreq() * COSTAS_LOOP_RATE / (2 * M_PI); +} + +void InmarsatDemodSink::applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force) +{ + qDebug() << "InmarsatDemodSink::applyChannelSettings:" + << " channelSampleRate: " << channelSampleRate + << " channelFrequencyOffset: " << channelFrequencyOffset; + + if ((m_channelFrequencyOffset != channelFrequencyOffset) || + (m_channelSampleRate != channelSampleRate) || force) + { + m_nco.setFreq(-channelFrequencyOffset, channelSampleRate); + } + + if ((m_channelSampleRate != channelSampleRate) || force) + { + m_interpolator.create(16, channelSampleRate, m_settings.m_rfBandwidth / 2.2); + m_interpolatorDistance = (Real) channelSampleRate / (Real) InmarsatDemodSettings::CHANNEL_SAMPLE_RATE; + m_interpolatorDistanceRemain = m_interpolatorDistance; + } + + m_channelSampleRate = channelSampleRate; + m_channelFrequencyOffset = channelFrequencyOffset; +} + +void InmarsatDemodSink::applySettings(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force) +{ + qDebug() << "InmarsatDemodSink::applySettings:" + << settings.getDebugString(settingsKeys, force) + << " force: " << force; + + if (settingsKeys.contains("rfBandwidth") || force) + { + m_interpolator.create(16, m_channelSampleRate, settings.m_rfBandwidth / 2.2); + m_interpolatorDistance = (Real) m_channelSampleRate / (Real) InmarsatDemodSettings::CHANNEL_SAMPLE_RATE; + m_interpolatorDistanceRemain = m_interpolatorDistance; + + // Limit costas loop frequency range to stay within RF bandwidth - it probably can't track this far anyway + Real freqMaxHz = (settings.m_rfBandwidth / 2.0f - InmarsatDemodSettings::BAUD_RATE / 2.0f); + //qDebug() << "InmarsatDemodSink::applySettings: Costas loop freq limit: +/-" << freqMaxHz << "Hz"; + Real freqMax = freqMaxHz * 2 * M_PI / COSTAS_LOOP_RATE; + m_costasLoop.setMaxFreq(freqMax); + m_costasLoop.setMinFreq(-freqMax); + } + + if (settingsKeys.contains("rfBandwidth") || settingsKeys.contains("rrcRolloff") || force) { + m_rrcFilter->create_rrc_filter(settings.m_rfBandwidth / (float) m_channelSampleRate, settings.m_rrcRolloff); + } + + if (settingsKeys.contains("pllBandwidth") || force) { + m_costasLoop.computeCoefficients(settings.m_pllBW); + } + + if (settingsKeys.contains("ssBandwidth") || force) + { + /* + float kd = 1.5f; // TED gain + float zeta = 1.0f / sqrtf(2.0f); // Damping factor - critical damping + float theta = (m_settings.m_ssBW / SAMPLES_PER_SYMBOL) / (zeta + (1.0f / (4.0f * zeta))); + float denom = ((1.0f + 2.0f * zeta * theta + theta * theta) * kd); + + m_kp = (4.0f * zeta * theta) / denom; + m_ki = (4.0f * theta * theta) / denom; + + qDebug() << "m_kp" << m_kp << "m_ki" << m_ki; + */ + + m_kp = 0.1f; + m_ki = 0.01f; + } + + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } +} diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h new file mode 100644 index 000000000..6c74b7f17 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h @@ -0,0 +1,198 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019-2021 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_INMARSATDEMODSINK_H +#define INCLUDE_INMARSATDEMODSINK_H + +#include +#include + +#include "dsp/channelsamplesink.h" +#include "dsp/nco.h" +#include "dsp/interpolator.h" +#include "dsp/fftfilt.h" +#include "dsp/fftengine.h" +#include "dsp/fftwindow.h" +#include "dsp/costasloop.h" +#include "dsp/rootraisedcosine.h" +#include "util/movingaverage.h" +#include "util/messagequeue.h" + +#include "inmarsatdemodsettings.h" + +class ChannelAPI; +class InmarsatDemod; +class ScopeVis; + +class AGC { +public: + AGC(); + Complex processOneSample(const Complex &iq, bool locked); + Real getGain() const { return m_gain; } + Real getAverage() const { return m_agcMovingAverage.instantAverage(); } + +private: + Real m_gain; + MovingAverageUtil m_agcMovingAverage; +}; + +class FrequencyOffsetEstimate { +public: + FrequencyOffsetEstimate(); + ~FrequencyOffsetEstimate(); + void processOneSample(Complex& iq, bool locked); + Real getFreqHz() const { return m_freqOffsetHz; } + Real getCurrentFreqHz() const { return m_currentFreqOffsetHz; } + Real getFreqMagSq() const { return m_freqMagSq; } + Real getCurrentFreqMagSq() const { return m_currentFreqMagSq; } + +private: + int m_fftSequence; + FFTEngine *m_fft; + int m_fftCounter; + FFTWindow m_fftWindow; + int m_fftSize; + int m_freqOffsetBin; + Real m_freqOffsetHz; + Real m_currentFreqOffsetHz; + Real m_freqMagSq; + Real m_currentFreqMagSq; + NCO m_freqOffsetNCO; + + Real magSq(int bin) const; +}; + +class InmarsatDemodSink : public ChannelSampleSink { +public: + InmarsatDemodSink(InmarsatDemod *stdcDemod); + ~InmarsatDemodSink(); + + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); + + void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } + void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); + void applySettings(const InmarsatDemodSettings& settings, const QStringList& settingsKeys, bool force = false); + void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } + void setChannel(ChannelAPI *channel) { m_channel = channel; } + + double getMagSq() const { return m_magsq; } + + void getMagSqLevels(double& avg, double& peak, int& nbSamples) + { + if (m_magsqCount > 0) + { + m_magsq = m_magsqSum / m_magsqCount; + m_magSqLevelStore.m_magsq = m_magsq; + m_magSqLevelStore.m_magsqPeak = m_magsqPeak; + } + + avg = m_magSqLevelStore.m_magsq; + peak = m_magSqLevelStore.m_magsqPeak; + nbSamples = m_magsqCount == 0 ? 1 : m_magsqCount; + + m_magsqSum = 0.0f; + m_magsqPeak = 0.0f; + m_magsqCount = 0; + } + + void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq) const; + +private: + struct MagSqLevelsStore + { + MagSqLevelsStore() : + m_magsq(1e-12), + m_magsqPeak(1e-12) + {} + double m_magsq; + double m_magsqPeak; + }; + + ScopeVis* m_scopeSink; // Scope GUI to display baseband waveform + InmarsatDemod *m_inmarsatDemod; + InmarsatDemodSettings m_settings; + ChannelAPI *m_channel; + int m_channelSampleRate; + int m_channelFrequencyOffset; + + NCO m_nco; + Interpolator m_interpolator; + Real m_interpolatorDistance; + Real m_interpolatorDistanceRemain; + + double m_magsq; + double m_magsqSum; + double m_magsqPeak; + int m_magsqCount; + MagSqLevelsStore m_magSqLevelStore; + + MessageQueue *m_messageQueueToChannel; + + MovingAverageUtil m_movingAverage; + + inmarsatc::decoder::Decoder m_decoder; + inmarsatc::frameParser::PacketDecoder m_parser; + + CostasLoop m_costasLoop; + Complex m_ref; + Complex m_derot; + MovingAverageUtil m_lockAverage; + bool m_locked; + + static const int RRC_FILTER_SIZE = 256; + fftfilt *m_rrcFilter; + Complex m_rrcBuffer[RRC_FILTER_SIZE]; + RootRaisedCosine m_rrcI; //!< Square root raised cosine filter for I samples + RootRaisedCosine m_rrcQ; //!< Square root raised cosine filter for Q samples + int m_rrcBufferIndex; + + static const int SAMPLES_PER_SYMBOL = InmarsatDemodSettings::CHANNEL_SAMPLE_RATE / InmarsatDemodSettings::BAUD_RATE; + static const int m_maxSamplesPerSymbol = SAMPLES_PER_SYMBOL * 2; + static const int COSTAS_LOOP_RATE = InmarsatDemodSettings::BAUD_RATE; // Costas loop is run at symbol rate + + int m_sampleIdx; + QQueue m_filteredSamples; + float m_ki; + float m_kp; + Real m_error; + Real m_errorSum; + Real m_mu; + int m_adjustedSPS; + int m_adjustment; + qint64 m_totalSampleCount; + qint64 m_prevTotalSampleCount; + int m_bit; + uint8_t m_bits[DEMODULATOR_SYMBOLSPERCHUNK]; + int m_bitCount; + + AGC m_agc; + FrequencyOffsetEstimate m_frequencyOffsetEst; + + ComplexVector m_sampleBuffer[InmarsatDemodSettings::m_scopeStreams]; + static const int SAMPLE_BUFFER_SIZE = RRC_FILTER_SIZE * 10; // Needs to be a multiple of m_rrcFilterSize, so A & B fill up at the same time + int m_sampleBufferIndexA; + int m_sampleBufferIndexB; + + void processOneSample(Complex &ci); + void decodeBits(); + MessageQueue *getMessageQueueToChannel() { return m_messageQueueToChannel; } + void sampleToScopeA(Complex sample, Real magsq, Complex postAGC, Real agcGain, Real agcAvg, Complex postCFO); + void sampleToScopeB(Complex rrc, Complex tedError, Complex tedErrorSum, Complex ref, Complex derot, int bit, Real mu); +}; + +#endif // INCLUDE_INMARSATDEMODSINK_H diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodwebapiadapter.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodwebapiadapter.cpp new file mode 100644 index 000000000..32f6cb625 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodwebapiadapter.cpp @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany // +// written by Christian Daniel // +// Copyright (C) 2015-2020 Edouard Griffiths, F4EXB // +// Copyright (C) 2021-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGChannelSettings.h" +#include "inmarsatdemod.h" +#include "inmarsatdemodwebapiadapter.h" + +InmarsatDemodWebAPIAdapter::InmarsatDemodWebAPIAdapter() +{} + +InmarsatDemodWebAPIAdapter::~InmarsatDemodWebAPIAdapter() +{} + +int InmarsatDemodWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setInmarsatDemodSettings(new SWGSDRangel::SWGInmarsatDemodSettings()); + response.getInmarsatDemodSettings()->init(); + InmarsatDemod::webapiFormatChannelSettings(response, m_settings); + + return 200; +} + +int InmarsatDemodWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage) +{ + (void) force; + (void) errorMessage; + InmarsatDemod::webapiUpdateChannelSettings(m_settings, channelSettingsKeys, response); + + return 200; +} diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodwebapiadapter.h b/plugins/channelrx/demodinmarsat/inmarsatdemodwebapiadapter.h new file mode 100644 index 000000000..bfe4c74e5 --- /dev/null +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodwebapiadapter.h @@ -0,0 +1,50 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2026 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_INMARSATDEMOD_WEBAPIADAPTER_H +#define INCLUDE_INMARSATDEMOD_WEBAPIADAPTER_H + +#include "channel/channelwebapiadapter.h" +#include "inmarsatdemodsettings.h" + +/** + * Standalone API adapter only for the settings + */ +class InmarsatDemodWebAPIAdapter : public ChannelWebAPIAdapter { +public: + InmarsatDemodWebAPIAdapter(); + virtual ~InmarsatDemodWebAPIAdapter(); + + virtual QByteArray serialize() const { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage); + +private: + InmarsatDemodSettings m_settings; +}; + +#endif // INCLUDE_INMARSATDEMOD_WEBAPIADAPTER_H diff --git a/plugins/channelrx/demodinmarsat/readme.md b/plugins/channelrx/demodinmarsat/readme.md new file mode 100644 index 000000000..0ca01352c --- /dev/null +++ b/plugins/channelrx/demodinmarsat/readme.md @@ -0,0 +1,102 @@ +

    Inmarsat C Demodulator Plugin

    + +

    Introduction

    + +This plugin can be used to demodulate Inmarsat C data packets. They are transmitted by four geostationary satellites. + +The packets are BPSK modulated with a symbol rate of 1,200 symbols/s and a data rate of 600 bit/s. + +Satellites / frequencies are: + +| Atlantic Ocean West | AOR-W | Inmarsat-4 F3 | 98W | 1,537.70 MHz | +| Atlantic Ocean East | AOR-E | Inmarsat-3 F5 | 54W | 1,541.45 MHz | +| Pacific Ocean | POR | Inmarsat-4 F1 | 178E | 1,541.45 MHz | +| Indian Ocean | IOR | Inmarsat-4A F4 / Alphasat | 25E | 1,537.10 MHz | + +Messages containing coordinates in the address or message fields can be displayed on the [Map Feature](../../feature/map/readme.md): + +![Inmarsat Demodulator plugin GUI](../../../doc/img/InmarsatDemod_map.png) + +More information about the encoding of EGC (Enhanced Group Call) messages can be found in: +[Safety NET Manual](https://www.navcen.uscg.gov/sites/default/files/pdf/gmdss/Safety_NET_Manual.pdf) + +

    Interface

    + +The top and bottom bars of the channel window are described [here](../../../sdrgui/channel/readme.md) + +![Inmarsat Demodulator plugin GUI](../../../doc/img/InmarsatDemod_plugin.png) + +

    1: Frequency shift from center frequency of reception

    + +Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2. + +

    2: Channel power

    + +Average total power in dB relative to a +/- 1.0 amplitude signal received in the pass band. + +

    3: Level meter in dB

    + + - top bar (green): average value + - bottom bar (blue green): instantaneous peak value + - tip vertical bar (bright green): peak hold value + +

    4: RF Bandwidth

    + +This specifies the bandwidth of a LPF that is applied to the input signal to limit the RF bandwidth. This should be at least 3 kHz. + +

    5: PLL Status

    + +The PLL status icon shows whether the Costas Loop in the demodulator is locked. When unlocked, the padlock icon will appear unlocked. When locked, the padlock icon will appear locked and the background will be green. + +Checking the icon will diplay additional PLL status and parameters, but these typically shouldn't require modification. + +

    6: UDP

    + +When checked, received packets are forwarded to the specified UDP address (7) and port (8). + +

    7: UDP address

    + +IP address of the host to forward received packets to via UDP. + +

    8: UDP port

    + +UDP port number to forward received packets to. + +

    9: Filter Packets by Type

    + +Entering a regular expression in the Type field displays only packets where the type, displayed in the Type column, matches the regular expression. + +

    10: Filter Packets by Message

    + +Entering a regular expression in the Message field displays only packets where the message, displayed in the Message column, matches the regular expression. + +

    11: Use Date and Time from File

    + +When checked, if the source device is a File Input device, the date and time used for +packet reception time is taken from the file playback time. Otherwise, the current system clock time is used. + +

    12: Start/stop Logging Packets to .csv File

    + +When checked, writes all received packets to a .csv file. + +

    13: .csv Log Filename

    + +Click to specify the name of the .csv file which received packets are logged to. + +

    14: Read Data from .csv File

    + +Click to specify a previously written .csv log file, which is read and used to update the table. + +

    15: Clear Packets from table

    + +Pressing this button clears all packets from the tables. + +

    Received Packets

    + +The received packets area has two tabs, which each contain a table. The Packets table displays the contents of all packets that have been received. The Messages table displays only packets that contain messages. +Left clicking a row in the table will highlight it. The highlighted packet will be decoded in the area below the tables. + +Right click on the table headers to select which columns are visible. Columns can be resized and reordered by dragging. + +Right clicking on a cell in the table will show a context menu, allowing the contents to be copied. +If the message contains coordinates, an option to find that location on the [Map Feature](../../feature/map/readme.md) will be shown. diff --git a/plugins/channeltx/moddatv/datvmodsource.cpp b/plugins/channeltx/moddatv/datvmodsource.cpp index e3d43ec9c..9f1d6e739 100644 --- a/plugins/channeltx/moddatv/datvmodsource.cpp +++ b/plugins/channeltx/moddatv/datvmodsource.cpp @@ -684,8 +684,8 @@ void DATVModSource::applyChannelSettings(int channelSampleRate, int channelFrequ if (m_settings.m_symbolRate > 0) m_samplesPerSymbol = m_channelSampleRate/m_settings.m_symbolRate; - m_pulseShapeI.create(m_settings.m_rollOff, 8, m_samplesPerSymbol, false); - m_pulseShapeQ.create(m_settings.m_rollOff, 8, m_samplesPerSymbol, false); + m_pulseShapeI.create(m_settings.m_rollOff, 8, m_samplesPerSymbol, RootRaisedCosine::Energy); + m_pulseShapeQ.create(m_settings.m_rollOff, 8, m_samplesPerSymbol, RootRaisedCosine::Energy); } void DATVModSource::applySettings(const DATVModSettings& settings, bool force) @@ -901,8 +901,8 @@ void DATVModSource::applySettings(const DATVModSettings& settings, bool force) if (m_settings.m_symbolRate > 0) m_samplesPerSymbol = m_channelSampleRate/m_settings.m_symbolRate; - m_pulseShapeI.create(m_settings.m_rollOff, 8, m_samplesPerSymbol, false); - m_pulseShapeQ.create(m_settings.m_rollOff, 8, m_samplesPerSymbol, false); + m_pulseShapeI.create(m_settings.m_rollOff, 8, m_samplesPerSymbol, RootRaisedCosine::Energy); + m_pulseShapeQ.create(m_settings.m_rollOff, 8, m_samplesPerSymbol, RootRaisedCosine::Energy); checkBitrates(); } diff --git a/sdrbase/dsp/rootraisedcosine.h b/sdrbase/dsp/rootraisedcosine.h index 776545640..a5c5d6b64 100644 --- a/sdrbase/dsp/rootraisedcosine.h +++ b/sdrbase/dsp/rootraisedcosine.h @@ -26,25 +26,29 @@ // Root-raised-cosine low-pass filter for pulse shaping, without intersymbol interference (ISI) // https://en.wikipedia.org/wiki/Root-raised-cosine_filter -// This could be optimised in to a polyphase filter, as samplesPerSymbol-1 inputs +// This could be optimised in to a polyphase filter for TX, as samplesPerSymbol-1 inputs // to filter() should be zero, as the data is upsampled to the sample rate template class RootRaisedCosine { public: RootRaisedCosine() : m_ptr(0) { } + enum Normalise { + Energy, // impulse response convolved with itself will be a raised cosine with value of 1 at the peak + Amplitude, // bipolar sequence (E.g. [1 0 0 -1 0 0..]) has maximum output values close to (1,-1) for TX + Gain // 0dB gain - coefficients sum to 1 + }; + // beta - roll-off factor // symbolSpan - number of symbols over which the filter is spread // samplesPerSymbol - number of samples per symbol - // normaliseUpsampledAmplitude - when true, scale the filter such that an upsampled - // (by samplesPerSymbol) bipolar sequence (E.g. [1 0 0 -1 0 0..]) has maximum - // output values close to (1,-1) - void create(double beta, int symbolSpan, int samplesPerSymbol, bool normaliseUpsampledAmplitude = false) + // normalise - how to normalise the filter + void create(double beta, int symbolSpan, int samplesPerSymbol, Normalise normalise) { int nTaps = symbolSpan * samplesPerSymbol + 1; int i, j; // check constraints - if(!(nTaps & 1)) { + if (!(nTaps & 1)) { qDebug("Root raised cosine filter has to have an odd number of taps"); nTaps++; } @@ -57,7 +61,7 @@ public: m_taps.resize(nTaps / 2 + 1); // calculate filter taps - for(i = 0; i < nTaps / 2 + 1; i++) + for (i = 0; i < nTaps / 2 + 1; i++) { double t = (i - (nTaps / 2)) / (double)samplesPerSymbol; double Ts = 1.0; @@ -75,18 +79,19 @@ public: } // normalize - if (!normaliseUpsampledAmplitude) + if (normalise == Normalise::Energy) { // normalize energy double sum = 0; - for(i = 0; i < (int)m_taps.size() - 1; i++) + for (i = 0; i < (int)m_taps.size() - 1; i++) sum += std::pow(m_taps[i], 2.0) * 2; sum += std::pow(m_taps[i], 2.0); sum = std::sqrt(sum); - for(i = 0; i < (int)m_taps.size(); i++) + for (i = 0; i < (int)m_taps.size(); i++) m_taps[i] /= sum; + } - else + else if (normalise == Normalise::Amplitude) { // Calculate maximum output of filter, assuming upsampled bipolar input E.g. [1 0 0 -1 0 0..] // This doesn't necessarily include the centre tap, so we try each offset @@ -102,9 +107,24 @@ public: maxGain = g; } // Scale up so maximum out is 1 - for(i = 0; i < (int)m_taps.size(); i++) + for (i = 0; i < (int)m_taps.size(); i++) m_taps[i] /= maxGain; } + else if (normalise == Gain) + { + // Normalise to 0dB gain + double sum = 0; + for (i = 0; i < (int)m_taps.size() - 1; i++) + sum += m_taps[i] * 2; + sum += m_taps[i]; + for (i = 0; i < (int)m_taps.size(); i++) + m_taps[i] /= sum; + } + /*printf("rrc=["); + for (int i = 0; i < m_taps.size(); i++) { + printf("%f ", m_taps[i]); + } + printf("];\n");*/ } Type filter(Type sample) From ef624b2b0a6425a6c29d67da10106fb59f1e6286 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:13:36 +0000 Subject: [PATCH 03/31] Fix package name --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 984eadcf2..a616e3726 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -825,7 +825,7 @@ if (NOT ENABLE_EXTERNAL_LIBRARIES OR (ENABLE_EXTERNAL_LIBRARIES STREQUAL "AUTO") find_package(HIDAPI) find_package(FFmpeg COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE) find_package(GGMorse) - find_package(InmarsatC) + find_package(LibInmarsatC) # Devices if(ENABLE_AIRSPY) From a6c6f81213f2986ea59fe227e8b70a1fe5f18803 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:34:48 +0000 Subject: [PATCH 04/31] Costas Loop: Add methods to set min/max frequency. --- sdrbase/dsp/costasloop.h | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/sdrbase/dsp/costasloop.h b/sdrbase/dsp/costasloop.h index f641e8d4d..f8371c4c6 100644 --- a/sdrbase/dsp/costasloop.h +++ b/sdrbase/dsp/costasloop.h @@ -38,6 +38,8 @@ public: void setPskOrder(unsigned int pskOrder) { m_pskOrder = pskOrder; } void reset(); void setSampleRate(unsigned int sampleRate); + void setMaxFreq(float freq) { m_maxFreq = freq; } + void setMinFreq(float freq) { m_minFreq = freq; } void feed(float re, float im); const std::complex& getComplex() const { return m_y; } float getReal() const { return m_y.real(); } @@ -81,16 +83,6 @@ private: m_freq = m_minFreq; } - void setMaxFreq(float freq) - { - m_maxFreq = freq; - } - - void setMinFreq(float freq) - { - m_minFreq = freq; - } - float phaseDetector2(std::complex sample) const // for BPSK { return (sample.real() * sample.imag()); From f3a66d257fc49be65ab262f4cb083851dc68c9d6 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:35:15 +0000 Subject: [PATCH 05/31] Sat Tracker: Add TLE for INMARSAT 3-F5. --- plugins/feature/satellitetracker/satellitetrackersettings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/feature/satellitetracker/satellitetrackersettings.h b/plugins/feature/satellitetracker/satellitetrackersettings.h index 8bad64d72..7bc13ccaa 100644 --- a/plugins/feature/satellitetracker/satellitetrackersettings.h +++ b/plugins/feature/satellitetracker/satellitetrackersettings.h @@ -29,7 +29,7 @@ class Serializable; #define DEAFULT_TARGET "ISS" -#define DEFAULT_TLES {"https://db.satnogs.org/api/tle/", "https://www.amsat.org/tle/current/nasabare.txt", "https://celestrak.org/NORAD/elements/gp.php?GROUP=weather&FORMAT=tle", "https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle", "https://celestrak.org/NORAD/elements/gp.php?CATNR=36395&FORMAT=tle"} +#define DEFAULT_TLES {"https://db.satnogs.org/api/tle/", "https://www.amsat.org/tle/current/nasabare.txt", "https://celestrak.org/NORAD/elements/gp.php?GROUP=weather&FORMAT=tle", "https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle", "https://celestrak.org/NORAD/elements/gp.php?CATNR=36395&FORMAT=tle", "https://celestrak.org/NORAD/elements/gp.php?CATNR=25153&FORMAT=tle"} #define DEFAULT_DATE_FORMAT "yyyy/MM/dd" #define DEFAULT_AOS_SPEECH "${name} is visible for ${duration} minutes. Max elevation, ${elevation} degrees." #define DEFAULT_LOS_SPEECH "${name} is no longer visible." From a015ef66506262650b395bbaf216a5f9aa001d8c Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:35:48 +0000 Subject: [PATCH 06/31] Map: Add Inmarsat C demod support. --- plugins/feature/map/mapsettings.cpp | 3 +++ plugins/feature/map/readme.md | 1 + 2 files changed, 4 insertions(+) diff --git a/plugins/feature/map/mapsettings.cpp b/plugins/feature/map/mapsettings.cpp index 7630a67c0..14d8a5fe2 100644 --- a/plugins/feature/map/mapsettings.cpp +++ b/plugins/feature/map/mapsettings.cpp @@ -38,6 +38,7 @@ const QStringList MapSettings::m_pipeTypes = { QStringLiteral("FT8Demod"), QStringLiteral("HeatMap"), QStringLiteral("ILSDemod"), + QStringLiteral("InmarsatDemod"), QStringLiteral("PagerDemod"), QStringLiteral("Radiosonde"), QStringLiteral("StarTracker"), @@ -56,6 +57,7 @@ const QStringList MapSettings::m_pipeURIs = { QStringLiteral("sdrangel.channel.ft8demod"), QStringLiteral("sdrangel.channel.heatmap"), QStringLiteral("sdrangel.channel.ilsdemod"), + QStringLiteral("sdrangel.channel.inmarsatdemod"), QStringLiteral("sdrangel.channel.pagerdemod"), QStringLiteral("sdrangel.feature.radiosonde"), QStringLiteral("sdrangel.feature.startracker"), @@ -117,6 +119,7 @@ MapSettings::MapSettings() : m_itemSettings.insert("Navtex", new MapItemSettings("Navtex", false, QColor(255, 0, 255), false, true, 8)); m_itemSettings.insert("ILSDemod", new MapItemSettings("ILSDemod", true, QColor(0, 205, 200), true, true, 10)); + m_itemSettings.insert("InmarsatDemod", new MapItemSettings("InmarsatDemod", true, QColor(40, 180, 75), false, true, 5)); MapItemSettings *navAidSettings = new MapItemSettings("NavAid", false, QColor(255, 0, 255), false, true, 11); navAidSettings->m_filterDistance = 500000; diff --git a/plugins/feature/map/readme.md b/plugins/feature/map/readme.md index 0141362bc..773fcc6c0 100644 --- a/plugins/feature/map/readme.md +++ b/plugins/feature/map/readme.md @@ -16,6 +16,7 @@ On top of this, it can plot data from other plugins, such as: * Radials and estimated position from the VOR localizer feature, * ILS course line and glide path from the ILS Demodulator, * DSC geographic call areas, +* Inmarsat C message geographic areas, * SID paths, * Pager messages that contain coordinates. From 192cd4e8cd84411630c3be93989a3ae464ea4b89 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:36:47 +0000 Subject: [PATCH 07/31] Freq Scanner: Delete FFT factory. Use settings keys correctly in GUI. --- plugins/channelrx/freqscanner/freqscannergui.cpp | 6 +++++- plugins/channelrx/freqscanner/freqscannersink.cpp | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/plugins/channelrx/freqscanner/freqscannergui.cpp b/plugins/channelrx/freqscanner/freqscannergui.cpp index 02887781d..b0167df34 100644 --- a/plugins/channelrx/freqscanner/freqscannergui.cpp +++ b/plugins/channelrx/freqscanner/freqscannergui.cpp @@ -90,7 +90,11 @@ bool FreqScannerGUI::handleMessage(const Message& message) { qDebug("FreqScannerGUI::handleMessage: FreqScanner::MsgConfigureFreqScanner"); const FreqScanner::MsgConfigureFreqScanner& cfg = (FreqScanner::MsgConfigureFreqScanner&) message; - m_settings = cfg.getSettings(); + if (cfg.getForce()) { + m_settings = cfg.getSettings(); + } else { + m_settings.applySettings(cfg.getSettingsKeys(), cfg.getSettings()); + } blockApplySettings(true); m_channelMarker.updateSettings(static_cast(m_settings.m_channelMarker)); displaySettings(); diff --git a/plugins/channelrx/freqscanner/freqscannersink.cpp b/plugins/channelrx/freqscanner/freqscannersink.cpp index a7069162d..c0bb5cd27 100644 --- a/plugins/channelrx/freqscanner/freqscannersink.cpp +++ b/plugins/channelrx/freqscanner/freqscannersink.cpp @@ -40,13 +40,17 @@ FreqScannerSink::FreqScannerSink() : m_binsPerChannel(16), m_averageCount(0) { - applySettings(m_settings, QStringList(), true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, 16, 4, true); } FreqScannerSink::~FreqScannerSink() { + if (m_fftSequence >= 0) + { + FFTFactory* fftFactory = DSPEngine::instance()->getFFTFactory(); + fftFactory->releaseEngine(m_fftSize, false, m_fftSequence); + } } void FreqScannerSink::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end) From 50a248e792fef6f37cc5106820072b4019027898 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:38:19 +0000 Subject: [PATCH 08/31] Fix warning --- plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp index bfaed3e31..74137060c 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp @@ -403,7 +403,7 @@ void InmarsatDemodSink::decodeBits() if (decoderResults.size() > 0) { - for (int j = 0; j < decoderResults.size(); j++) + for (int j = 0; j < (int) decoderResults.size(); j++) { QByteArray rxPacket; rxPacket.resize(sizeof(inmarsatc::decoder::Decoder::decoder_result)); From de2aa3676a2039a8cd0258695421006a6e3a33e7 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:41:07 +0000 Subject: [PATCH 09/31] Update table formatting. --- plugins/channelrx/demodinmarsat/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/channelrx/demodinmarsat/readme.md b/plugins/channelrx/demodinmarsat/readme.md index 0ca01352c..484b8950b 100644 --- a/plugins/channelrx/demodinmarsat/readme.md +++ b/plugins/channelrx/demodinmarsat/readme.md @@ -8,6 +8,7 @@ The packets are BPSK modulated with a symbol rate of 1,200 symbols/s and a data Satellites / frequencies are: +|---------------------|-------|---------------------------|------|--------------| | Atlantic Ocean West | AOR-W | Inmarsat-4 F3 | 98W | 1,537.70 MHz | | Atlantic Ocean East | AOR-E | Inmarsat-3 F5 | 54W | 1,541.45 MHz | | Pacific Ocean | POR | Inmarsat-4 F1 | 178E | 1,541.45 MHz | From ab728a6d9d3fe71a7906bbcf10fd9b4784ccf453 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 12:42:37 +0000 Subject: [PATCH 10/31] Add column headers --- plugins/channelrx/demodinmarsat/readme.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/readme.md b/plugins/channelrx/demodinmarsat/readme.md index 484b8950b..27d032f6f 100644 --- a/plugins/channelrx/demodinmarsat/readme.md +++ b/plugins/channelrx/demodinmarsat/readme.md @@ -8,11 +8,12 @@ The packets are BPSK modulated with a symbol rate of 1,200 symbols/s and a data Satellites / frequencies are: -|---------------------|-------|---------------------------|------|--------------| -| Atlantic Ocean West | AOR-W | Inmarsat-4 F3 | 98W | 1,537.70 MHz | -| Atlantic Ocean East | AOR-E | Inmarsat-3 F5 | 54W | 1,541.45 MHz | -| Pacific Ocean | POR | Inmarsat-4 F1 | 178E | 1,541.45 MHz | -| Indian Ocean | IOR | Inmarsat-4A F4 / Alphasat | 25E | 1,537.10 MHz | +| Region | Id | Satellite | Longitude | Frequency | +|---------------------|-------|---------------------------|-----------|--------------| +| Atlantic Ocean West | AOR-W | Inmarsat-4 F3 | 98W | 1,537.70 MHz | +| Atlantic Ocean East | AOR-E | Inmarsat-3 F5 | 54W | 1,541.45 MHz | +| Pacific Ocean | POR | Inmarsat-4 F1 | 178E | 1,541.45 MHz | +| Indian Ocean | IOR | Inmarsat-4A F4 / Alphasat | 25E | 1,537.10 MHz | Messages containing coordinates in the address or message fields can be displayed on the [Map Feature](../../feature/map/readme.md): From c86603fb8bc28f266046e3dd320d8cf5e64ab0f2 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 13:47:05 +0000 Subject: [PATCH 11/31] Fix warnings --- .../demodinmarsat/inmarsatdemodgui.cpp | 21 ++++++++++--------- .../demodinmarsat/inmarsatdemodgui.h | 6 ++++-- plugins/channelrx/demodinmarsat/readme.md | 12 ++++++----- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp index b0dc1fb18..9fdb3f0f6 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp @@ -393,7 +393,8 @@ static QString formatFreqMHz(std::string string) return formatFreqMHz(QString::fromStdString(string)); } -static const QStringList navAreas = { +// https://en.wikipedia.org/wiki/NAVAREA +const QStringList MultipartMessage::m_navAreas = { "0", "I United Kingdom", "II France", @@ -419,7 +420,7 @@ static const QStringList navAreas = { }; // We use flags from ADS-B demod -static const QStringList navAreaFlags = { +const QStringList MultipartMessage::m_navAreaFlags = { "", "united_kingdom", "france", @@ -444,7 +445,7 @@ static const QStringList navAreaFlags = { "russia" }; -static QString decodeAddress(QString messageType, QString addressHex, float *latitude, float *longitude, QList *coordinates, QIcon **icon) +QString MultipartMessage::decodeAddress(QString messageType, QString addressHex, float *latitude, float *longitude, QList *coordinates, QIcon **icon) { bool ok; int messageTypeNum = messageType.toInt(&ok); @@ -457,12 +458,12 @@ static QString decodeAddress(QString messageType, QString addressHex, float *lat { // Navarea int navArea = addressHex.left(2).toInt(&ok, 16); - if (ok && (navArea > 0) && (navArea < navAreas.size())) + if (ok && (navArea > 0) && (navArea < m_navAreas.size())) { if (icon) { - *icon = AircraftInformation::getFlagIcon(navAreaFlags[navArea]); + *icon = AircraftInformation::getFlagIcon(m_navAreaFlags[navArea]); } - return QString("NAVAREA %1").arg(navAreas[navArea]); + return QString("NAVAREA %1").arg(m_navAreas[navArea]); } else { @@ -476,12 +477,12 @@ static QString decodeAddress(QString messageType, QString addressHex, float *lat QByteArray addressBytes = QByteArray::fromHex(addressHex.toLatin1()); // Navarea - TBD B1/B2 int navArea = addressBytes[0]; - if ((navArea > 0) && (navArea < navAreas.size())) + if ((navArea > 0) && (navArea < m_navAreas.size())) { if (icon) { - *icon = AircraftInformation::getFlagIcon(navAreaFlags[navArea]); + *icon = AircraftInformation::getFlagIcon(m_navAreaFlags[navArea]); } - return QString("NAVAREA %1").arg(navAreas[navArea]); + return QString("NAVAREA %1").arg(m_navAreas[navArea]); } else { @@ -789,7 +790,7 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim priorityItem->setText(QString::fromStdString(frame.decoding_result.packetVars["priorityText"])); QIcon *icon = nullptr; - addressItem->setText(decodeAddress( + addressItem->setText(MultipartMessage::decodeAddress( QString::fromStdString(frame.decoding_result.packetVars["messageType"]), QString::fromStdString(frame.decoding_result.packetVars["addressHex"]), nullptr, diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h index b1aea38a1..2a509e57a 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h @@ -52,8 +52,6 @@ namespace Ui { } class InmarsatDemodGUI; -QString decodeAddress(QString messageType, QString addressHex, float *latitude = nullptr, float *longitude = nullptr, QList *coordinates = nullptr, QIcon **icon = nullptr); - struct MessagePart { int m_part; int m_packet; @@ -79,6 +77,8 @@ public: float getLongitude() const { return m_addressCoordinates.size() > 0 ? m_longitude : m_messageCoordinates[0].longitude(); } QList& getCoordinates() { return m_addressCoordinates.size() > 0 ? m_addressCoordinates : m_messageCoordinates; } + static QString decodeAddress(QString messageType, QString addressHex, float *latitude = nullptr, float *longitude = nullptr, QList *coordinates = nullptr, QIcon **icon = nullptr); + private: QDateTime m_dateTime; @@ -94,6 +94,8 @@ private: QList m_messageCoordinates; static QRegularExpression m_re; + static const QStringList m_navAreas; + static const QStringList m_navAreaFlags; void parseMessage(); }; diff --git a/plugins/channelrx/demodinmarsat/readme.md b/plugins/channelrx/demodinmarsat/readme.md index 27d032f6f..220a103ee 100644 --- a/plugins/channelrx/demodinmarsat/readme.md +++ b/plugins/channelrx/demodinmarsat/readme.md @@ -6,14 +6,16 @@ This plugin can be used to demodulate Inmarsat C data packets. They are transmit The packets are BPSK modulated with a symbol rate of 1,200 symbols/s and a data rate of 600 bit/s. -Satellites / frequencies are: +Satellites and corresponding frequencies are: | Region | Id | Satellite | Longitude | Frequency | |---------------------|-------|---------------------------|-----------|--------------| -| Atlantic Ocean West | AOR-W | Inmarsat-4 F3 | 98W | 1,537.70 MHz | -| Atlantic Ocean East | AOR-E | Inmarsat-3 F5 | 54W | 1,541.45 MHz | -| Pacific Ocean | POR | Inmarsat-4 F1 | 178E | 1,541.45 MHz | -| Indian Ocean | IOR | Inmarsat-4A F4 / Alphasat | 25E | 1,537.10 MHz | +| Atlantic Ocean West | AOR-W | Inmarsat 4-F3 | 98W | 1,537.70 MHz | +| Atlantic Ocean East | AOR-E | Inmarsat 3-F5 | 54W | 1,541.45 MHz | +| Pacific Ocean | POR | Inmarsat 4-F1 | 178E | 1,541.45 MHz | +| Indian Ocean | IOR | Inmarsat 4A-F4 / Alphasat | 25E | 1,537.10 MHz | + +The direction from your anntenna to the satellites can be determined in the [Satellite Tracker Feature](../../feature/satellitetracker/readme.md): Messages containing coordinates in the address or message fields can be displayed on the [Map Feature](../../feature/map/readme.md): From badee6910f95dfcf9a0ff8c46e2e88400bcc2340 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 13:59:13 +0000 Subject: [PATCH 12/31] Fir for Qt5 --- .../demodinmarsat/inmarsatdemodgui.cpp | 136 +++++++++--------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp index 9fdb3f0f6..8db92d33e 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp @@ -808,23 +808,23 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim switch(frame.decoding_result.packetDescriptor) { case 0x27: - decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); - decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); + decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); break; case 0x2A: - decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); - decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); + decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); break; case 0x08: - decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); decode = decode.append("ULF " + formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); break; @@ -857,14 +857,14 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim case 0x7D: { - decode = decode.append("Network Version " + frame.decoding_result.packetVars["networkVersion"]); - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); - decode = decode.append("Signalling Channel " + frame.decoding_result.packetVars["signallingChannel"]); - decode = decode.append("Count " + frame.decoding_result.packetVars["count"]); - decode = decode.append("Channel Type Name " + frame.decoding_result.packetVars["channelTypeName"]); - decode = decode.append("Local " + frame.decoding_result.packetVars["local"]); - decode = decode.append("Random Interval " + frame.decoding_result.packetVars["randomInterval"]); + decode = decode.append("Network Version " + QString::fromStdString(frame.decoding_result.packetVars["networkVersion"])); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); + decode = decode.append("Signalling Channel " + QString::fromStdString(frame.decoding_result.packetVars["signallingChannel"])); + decode = decode.append("Count " + QString::fromStdString(frame.decoding_result.packetVars["count"])); + decode = decode.append("Channel Type Name " + QString::fromStdString(frame.decoding_result.packetVars["channelTypeName"])); + decode = decode.append("Local " + QString::fromStdString(frame.decoding_result.packetVars["local"])); + decode = decode.append("Random Interval " + QString::fromStdString(frame.decoding_result.packetVars["randomInterval"])); decode = decode.append("Status"); std::string status = frame.decoding_result.packetVars["status"]; @@ -890,36 +890,36 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim break; case 0x81: - decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); - decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); + decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); + decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); decode = decode.append("DLF " + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); - decode = decode.append("Presentation " + frame.decoding_result.packetVars["presentation"]); + decode = decode.append("Presentation " + QString::fromStdString(frame.decoding_result.packetVars["presentation"])); break; case 0x83: - decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); - decode = decode.append("Status Bits " + frame.decoding_result.packetVars["status_bits"]); - decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); - decode = decode.append("Frame Length " + frame.decoding_result.packetVars["frameLength"]); - decode = decode.append("Duration " + frame.decoding_result.packetVars["duration"]); + decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); + decode = decode.append("Status Bits " + QString::fromStdString(frame.decoding_result.packetVars["status_bits"])); + decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); + decode = decode.append("Frame Length " + QString::fromStdString(frame.decoding_result.packetVars["frameLength"])); + decode = decode.append("Duration " + QString::fromStdString(frame.decoding_result.packetVars["duration"])); decode = decode.append("DLF " + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); decode = decode.append("ULF " + formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); - decode = decode.append("Frame Offset " + frame.decoding_result.packetVars["frameOffset"]); - decode = decode.append("Packet Descriptor 1 " + frame.decoding_result.packetVars["packetDescriptor1"]); + decode = decode.append("Frame Offset " + QString::fromStdString(frame.decoding_result.packetVars["frameOffset"])); + decode = decode.append("Packet Descriptor 1 " + QString::fromStdString(frame.decoding_result.packetVars["packetDescriptor1"])); break; case 0x92: - decode = decode.append("Login Ack Length" + frame.decoding_result.packetVars["loginAckLength"]); + decode = decode.append("Login Ack Length" + QString::fromStdString(frame.decoding_result.packetVars["loginAckLength"])); decode = decode.append("DLF" + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); - decode = decode.append("LES" + frame.decoding_result.packetVars["les"]); - decode = decode.append("Station Start Hex" + frame.decoding_result.packetVars["stationStartHex"]); + decode = decode.append("LES" + QString::fromStdString(frame.decoding_result.packetVars["les"])); + decode = decode.append("Station Start Hex" + QString::fromStdString(frame.decoding_result.packetVars["stationStartHex"])); if (frame.decoding_result.packetVars.find("stationCount") != frame.decoding_result.packetVars.end()) { - decode = decode.append("Station Count" + frame.decoding_result.packetVars["stationCnt"]); + decode = decode.append("Station Count" + QString::fromStdString(frame.decoding_result.packetVars["stationCnt"])); decode = decode.append("Stations"); std::string stations = frame.decoding_result.packetVars["stations"]; for (int k = 0; k < (int)stations.length(); k++) @@ -934,9 +934,9 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim break; case 0xA3: - decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); if (frame.decoding_result.packetVars.find("shortMessage") != frame.decoding_result.packetVars.end()) { @@ -955,9 +955,9 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim break; case 0xA8: - decode = decode.append("Msg Id " + frame.decoding_result.packetVars["mesId"]); - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); + decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); if (frame.decoding_result.packetVars.find("shortMessage") != frame.decoding_result.packetVars.end()) { std::string shortMessage = frame.decoding_result.packetVars["shortMessage"]; @@ -976,10 +976,10 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim case 0xAA: { - decode = decode.append("Sat " + frame.decoding_result.packetVars["satName"]); - decode = decode.append("LES " + frame.decoding_result.packetVars["lesName"]); - decode = decode.append("LCN " + frame.decoding_result.packetVars["logicalChannelNo"]); - decode = decode.append("Packet No " + frame.decoding_result.packetVars["packetNo"]); + decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); + decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); + decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); + decode = decode.append("Packet No " + QString::fromStdString(frame.decoding_result.packetVars["packetNo"])); bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; if (frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_IA5) @@ -1012,9 +1012,9 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim case 0xAB: { - decode = decode.append("LES List Length" + frame.decoding_result.packetVars["lesListLength"]); - decode = decode.append("Station Start Hex" + frame.decoding_result.packetVars["stationStartHex"]); - decode = decode.append("Station Count" + frame.decoding_result.packetVars["stationCount"]); + decode = decode.append("LES List Length" + QString::fromStdString(frame.decoding_result.packetVars["lesListLength"])); + decode = decode.append("Station Start Hex" + QString::fromStdString(frame.decoding_result.packetVars["stationStartHex"])); + decode = decode.append("Station Count" + QString::fromStdString(frame.decoding_result.packetVars["stationCount"])); decode = decode.append("Stations"); std::string stations = frame.decoding_result.packetVars["stations"]; @@ -1031,15 +1031,15 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim case 0xB1: { - decode = decode.append("Msg Type" + frame.decoding_result.packetVars["messageType"]); - decode = decode.append("Service Code & Address Name" + frame.decoding_result.packetVars["serviceCodeAndAddressName"]); - decode = decode.append("Continuation" + frame.decoding_result.packetVars["continuation"]); - decode = decode.append("Priority" + frame.decoding_result.packetVars["priorityText"]); - decode = decode.append("Repetition" + frame.decoding_result.packetVars["rep"]); - decode = decode.append("Msg Id" + frame.decoding_result.packetVars["messageId"]); - decode = decode.append("Packet No" + frame.decoding_result.packetVars["packetNo"]); - decode = decode.append("isNewPayload" + frame.decoding_result.packetVars["isNewPayl"]); - decode = decode.append("Address" + frame.decoding_result.packetVars["addrHex"]); + decode = decode.append("Msg Type" + QString::fromStdString(frame.decoding_result.packetVars["messageType"])); + decode = decode.append("Service Code & Address Name" + QString::fromStdString(frame.decoding_result.packetVars["serviceCodeAndAddressName"])); + decode = decode.append("Continuation" + QString::fromStdString(frame.decoding_result.packetVars["continuation"])); + decode = decode.append("Priority" + QString::fromStdString(frame.decoding_result.packetVars["priorityText"])); + decode = decode.append("Repetition" + QString::fromStdString(frame.decoding_result.packetVars["rep"])); + decode = decode.append("Msg Id" + QString::fromStdString(frame.decoding_result.packetVars["messageId"])); + decode = decode.append("Packet No" + QString::fromStdString(frame.decoding_result.packetVars["packetNo"])); + decode = decode.append("isNewPayload" + QString::fromStdString(frame.decoding_result.packetVars["isNewPayl"])); + decode = decode.append("Address" + QString::fromStdString(frame.decoding_result.packetVars["addrHex"])); bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; if (!isBinary) @@ -1067,15 +1067,15 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim case 0xB2: { - decode = decode.append("Msg Type" + frame.decoding_result.packetVars["messageType"]); - decode = decode.append("Service Code & Address Name" + frame.decoding_result.packetVars["serviceCodeAndAddressName"]); - decode = decode.append("Continuation" + frame.decoding_result.packetVars["continuation"]); - decode = decode.append("Priority" + frame.decoding_result.packetVars["priorityText"]); - decode = decode.append("Repetition" + frame.decoding_result.packetVars["rep"]); - decode = decode.append("Msg Id" + frame.decoding_result.packetVars["messageId"]); - decode = decode.append("Packet No" + frame.decoding_result.packetVars["packetNo"]); - decode = decode.append("isNewPayload" + frame.decoding_result.packetVars["isNewPayl"]); - decode = decode.append("Address" + frame.decoding_result.packetVars["addrHex"]); + decode = decode.append("Msg Type" + QString::fromStdString(frame.decoding_result.packetVars["messageType"])); + decode = decode.append("Service Code & Address Name" + QString::fromStdString(frame.decoding_result.packetVars["serviceCodeAndAddressName"])); + decode = decode.append("Continuation" + QString::fromStdString(frame.decoding_result.packetVars["continuation"])); + decode = decode.append("Priority" + QString::fromStdString(frame.decoding_result.packetVars["priorityText"])); + decode = decode.append("Repetition" + QString::fromStdString(frame.decoding_result.packetVars["rep"])); + decode = decode.append("Msg Id" + QString::fromStdString(frame.decoding_result.packetVars["messageId"])); + decode = decode.append("Packet No" + QString::fromStdString(frame.decoding_result.packetVars["packetNo"])); + decode = decode.append("isNewPayload" + QString::fromStdString(frame.decoding_result.packetVars["isNewPayl"])); + decode = decode.append("Address" + QString::fromStdString(frame.decoding_result.packetVars["addrHex"])); bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; if (!isBinary) From 6493921da6e24204269bc0ecef2046ab416580fc Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 14:02:19 +0000 Subject: [PATCH 13/31] Fix warnings. --- plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp | 2 +- plugins/channelrx/radioastronomy/radioastronomygui.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp index 8db92d33e..ce058e737 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp @@ -981,7 +981,7 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); decode = decode.append("Packet No " + QString::fromStdString(frame.decoding_result.packetVars["packetNo"])); - bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; + //bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; if (frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_IA5) { for (int i = 0; i < (int)frame.decoding_result.payload.data8Bit.size(); i++) diff --git a/plugins/channelrx/radioastronomy/radioastronomygui.cpp b/plugins/channelrx/radioastronomy/radioastronomygui.cpp index 6f4ad839f..28356cf8a 100644 --- a/plugins/channelrx/radioastronomy/radioastronomygui.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomygui.cpp @@ -1506,6 +1506,8 @@ void RadioAstronomyGUI::savePowerData(const QString& filename) // Save power data in table to a CSV file void RadioAstronomyGUI::on_savePowerData_clicked(bool checked) { + (void) checked; + ui->savePowerData->setChecked(!m_settings.m_powerAutoSaveCSVFilename.isEmpty()); // Get filename to save to @@ -1799,6 +1801,8 @@ void RadioAstronomyGUI::saveSpectrumData(const QString& filename) void RadioAstronomyGUI::on_saveSpectrumData_clicked(bool checked) { + (void) checked; + ui->saveSpectrumData->setChecked(!m_settings.m_spectrumAutoSaveCSVFilename.isEmpty()); // Get filename to save to From bbf9fb2b8f565c93d6ecc512988680fd98972a04 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 14:11:59 +0000 Subject: [PATCH 14/31] Call FIND_LIBRARY per library. --- cmake/Modules/FindLibInmarsatC.cmake | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/cmake/Modules/FindLibInmarsatC.cmake b/cmake/Modules/FindLibInmarsatC.cmake index 59e4595bd..f2600db2b 100644 --- a/cmake/Modules/FindLibInmarsatC.cmake +++ b/cmake/Modules/FindLibInmarsatC.cmake @@ -7,9 +7,11 @@ IF (NOT INMARSATC_FOUND) /usr/local/include ) + # We don't currently use inmarsatc_demodulator + FIND_LIBRARY( - INMARSATC_LIBRARIES - NAMES inmarsatc_decoder inmarsatc_parser + INMARSATC_DECODER_LIBRARY + NAMES inmarsatc_decoder HINTS ${INMARSATC_DIR}/lib ${INMARSATC_DIR}/lib64 PATHS /usr/lib @@ -18,13 +20,25 @@ IF (NOT INMARSATC_FOUND) /usr/local/lib64 ) - if (INMARSATC_INCLUDE_DIR AND INMARSATC_LIBRARIES) + FIND_LIBRARY( + INMARSATC_PARSER_LIBRARY + NAMES inmarsatc_parser + HINTS ${INMARSATC_DIR}/lib + ${INMARSATC_DIR}/lib64 + PATHS /usr/lib + /usr/lib64 + /usr/local/lib + /usr/local/lib64 + ) + + if (INMARSATC_INCLUDE_DIR AND INMARSATC_DECODER_LIBRARY AND INMARSATC_PARSER_LIBRARY) + set(INMARSATC_LIBRARIES ${INMARSATC_DECODER_LIBRARY} ${INMARSATC_PARSER_LIBRARY} CACHE INTERNAL "inmarsatc libraries") set(INMARSATC_FOUND TRUE CACHE INTERNAL "inmarsatc found") message(STATUS "Found inmarsatc: ${INMARSATC_INCLUDE_DIR}, ${INMARSATC_LIBRARIES}") - else (INMARSATC_INCLUDE_DIR AND INMARSATC_LIBRARIES) + else () set(INMARSATC_FOUND FALSE CACHE INTERNAL "inmarsatc found") message(STATUS "inmarsatc not found.") - endif (INMARSATC_INCLUDE_DIR AND INMARSATC_LIBRARIES) + endif () mark_as_advanced(INMARSATC_INCLUDE_DIR INMARSATC_LIBRARIES) From 68f8220edf3b25da10db8ff422e5dd95529e3329 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 15:04:36 +0000 Subject: [PATCH 15/31] Increase max AGC gain for small signals. Increase PLL locked threshold, as was showing locked when it wasn't. --- plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp index 74137060c..fbc6bcdb7 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp @@ -42,12 +42,12 @@ Complex AGC::processOneSample(const Complex& iq, bool locked) m_agcMovingAverage(abs(z)); //qDebug() << "abs" << abs(z) << "m_agcGain" << m_agcGain << "m_agcMovingAverage.instantAverage()" << m_agcMovingAverage.instantAverage(); - Real agcRef = 0.6f; // Target amplitude + Real agcRef = 0.75f; // Target amplitude Real agcMu = locked ? 0.01 : 0.1; // How fast we want to respond to changes in average Real agcEr = agcRef - m_agcMovingAverage.instantAverage(); // Error between target and average m_gain += agcMu * agcEr; - m_gain = std::clamp(m_gain, 0.01f, 100.0f); // 20dB max enough? + m_gain = std::clamp(m_gain, 0.01f, 10000.0f); return z; } @@ -366,7 +366,7 @@ void InmarsatDemodSink::processOneSample(Complex &ci) Real iNorm = abs(m_derot.real()) / derotMag; Real qNorm = abs(m_derot.imag()) / derotMag; m_lockAverage(iNorm - qNorm); - float lockThresh = 0.2; + float lockThresh = 0.45; m_locked = m_lockAverage.instantAverage() > lockThresh; //qDebug() << "m_lockAverage.instantAverage()" << m_lockAverage.instantAverage(); From 41b59910151a536706d892f7bb02d5b4d7c6b12b Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 15:31:16 +0000 Subject: [PATCH 16/31] Default to 4k RF BW --- plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp index 5fe1714d1..b9d61bbb4 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp @@ -58,7 +58,7 @@ void InmarsatDemodSettings::appendDefaultColumnSizes(QList& list, int size) void InmarsatDemodSettings::resetToDefaults() { m_inputFrequencyOffset = 0; - m_rfBandwidth = 5000.0f; + m_rfBandwidth = 4000.0f; m_rrcRolloff = 1.0f; m_pllBW = 2*M_PI/100.0; m_ssBW = 2*M_PI/100.0; @@ -163,7 +163,7 @@ bool InmarsatDemodSettings::deserialize(const QByteArray& data) d.readString(3, &m_filterType, ""); d.readString(4, &m_filterMessage, ""); - d.readFloat(5, &m_rfBandwidth, 5000.0f); + d.readFloat(5, &m_rfBandwidth, 4000.0f); d.readFloat(6, &m_rrcRolloff, 1.0f); d.readFloat(7, &m_pllBW, 2*M_PI/100.0); d.readFloat(8, &m_ssBW, 2*M_PI/100.0); From 3005a1932f8cccf54b681f1688cc35617a60f38b Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 15:31:31 +0000 Subject: [PATCH 17/31] Add InmarsatC library to snap. --- snap/snapcraft.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 511076aeb..3e83b944e 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -150,7 +150,7 @@ parts: override-pull: | snapcraftctl pull snapcraftctl set-version "$(git describe --tags --abbrev=0 | sed 's/v//')" - after: [apt, libdab, mbelib, serialdv, dsdcc, codec2, sgp4, cm265cc, libsigmf, airspy, rtlsdr, pluto, bladerf, hackrf, limesuite, airspyhf, uhd, uhdfpga, soapysdr, soapyremote] + after: [apt, libdab, mbelib, serialdv, dsdcc, codec2, sgp4, inmarsatc, cm265cc, libsigmf, airspy, rtlsdr, pluto, bladerf, hackrf, limesuite, airspyhf, uhd, uhdfpga, soapysdr, soapyremote] cmake-parameters: - -DDEBUG_OUTPUT=OFF - -DBUILD_TYPE=RELEASE @@ -175,6 +175,7 @@ parts: - -DMBE_DIR=$SNAPCRAFT_STAGE/opt/install/sdrangel - -DCODEC2_DIR=$SNAPCRAFT_STAGE/opt/install/sdrangel - -DSGP4_DIR=$SNAPCRAFT_STAGE/opt/install/sdrangel + - -DINMARSATC_DIR=$SNAPCRAFT_STAGE/opt/install/sdrangel - -DLIBSIGMF_DIR=$SNAPCRAFT_STAGE/opt/install/sdrangel - -DDAB_DIR=$SNAPCRAFT_STAGE/opt/install/sdrangel - -DARCH_OPT=nehalem @@ -475,6 +476,14 @@ parts: cmake-parameters: - -DCMAKE_INSTALL_PREFIX=/opt/install/sdrangel + inmarsatc: + plugin: cmake + source: https://github.com/srcejon/inmarsatc.git + source-type: git + source-tag: msvc + cmake-parameters: + - -DCMAKE_INSTALL_PREFIX=/opt/install/sdrangel + cm265cc: plugin: cmake source: https://github.com/f4exb/cm256cc.git From e329d0311a2ea6d9358a83221576a4a791d68373 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 15:31:50 +0000 Subject: [PATCH 18/31] Add frame details. --- plugins/channelrx/demodinmarsat/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/channelrx/demodinmarsat/readme.md b/plugins/channelrx/demodinmarsat/readme.md index 220a103ee..52cb213f0 100644 --- a/plugins/channelrx/demodinmarsat/readme.md +++ b/plugins/channelrx/demodinmarsat/readme.md @@ -4,7 +4,8 @@ This plugin can be used to demodulate Inmarsat C data packets. They are transmitted by four geostationary satellites. -The packets are BPSK modulated with a symbol rate of 1,200 symbols/s and a data rate of 600 bit/s. +The packets are BPSK modulated with a symbol rate of 1,200 symbols/s and a data rate of 600 bit/s. +The packets are decoded from within frames of 639 bytes that take 8.64 seconds to receive. Satellites and corresponding frequencies are: From 08fdecaefffc16eae152b5a6e85914ffe55dbdde Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 15:32:07 +0000 Subject: [PATCH 19/31] Indicate Inmarsat C is supported by .deb --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 38e29c329..3e152564d 100644 --- a/debian/control +++ b/debian/control @@ -91,7 +91,7 @@ Description: SDR/Analyzer/Generator front-end for various hardware Builds on Linux, Windows and Mac O/S Reception modes supported: Analog: AM, ATV, NFM, WFM, SSB, broadcast FM, APT, ILS, VOR - Digital: D-Star, Yaesu SF, DMR, dPMR, FreeDV, M17, DAB, DVB-S, LoRa, ADS-B, Packet (AX.25/APRS), AIS, FT8, Navtex, Radiosonde, RTTY, Pager + Digital: D-Star, Yaesu SF, DMR, dPMR, FreeDV, M17, DAB, DVB-S, LoRa, ADS-B, Packet (AX.25/APRS), AIS, FT8, Navtex, Radiosonde, RTTY, Pager, Inmarsat C Analyzer: Generic channel Transmission modes supported: Analog: AM, ATV, NFM, SSB, WFM From b41bc373ad472a25f08182c87a8b2cbdbde5c1db Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 6 Jan 2026 15:38:28 +0000 Subject: [PATCH 20/31] Add Inmarsat Demod to WebAPI --- sdrbase/webapi/webapirequestmapper.cpp | 8 ++++++++ sdrbase/webapi/webapiutils.cpp | 1 + 2 files changed, 9 insertions(+) diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index bd501385a..edc59c566 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -4595,6 +4595,12 @@ bool WebAPIRequestMapper::getChannelSettings( channelSettings->getIlsDemodSettings()->init(); channelSettings->getIlsDemodSettings()->fromJsonObject(settingsJsonObject); } + else if (channelSettingsKey == "InmarsatDemodSettings") + { + channelSettings->setInmarsatDemodSettings(new SWGSDRangel::SWGInmarsatDemodSettings()); + channelSettings->getInmarsatDemodSettings()->init(); + channelSettings->getInmarsatDemodSettings()->fromJsonObject(settingsJsonObject); + } else if (channelSettingsKey == "InterferometerSettings") { channelSettings->setInterferometerSettings(new SWGSDRangel::SWGInterferometerSettings()); @@ -5565,6 +5571,7 @@ void WebAPIRequestMapper::resetChannelSettings(SWGSDRangel::SWGChannelSettings& channelSettings.setHeatMapSettings(nullptr); channelSettings.setIeee802154ModSettings(nullptr); channelSettings.setIlsDemodSettings(nullptr); + channelSettings.setInmarsatDemodSettings(nullptr); channelSettings.setNavtexDemodSettings(nullptr); channelSettings.setNfmDemodSettings(nullptr); channelSettings.setNfmModSettings(nullptr); @@ -5610,6 +5617,7 @@ void WebAPIRequestMapper::resetChannelReport(SWGSDRangel::SWGChannelReport& chan channelReport.setFreqTrackerReport(nullptr); channelReport.setHeatMapReport(nullptr); channelReport.setIlsDemodReport(nullptr); + channelReport.setInmarsatDemodReport(nullptr); channelReport.setNavtexDemodReport(nullptr); channelReport.setNfmDemodReport(nullptr); channelReport.setNfmModReport(nullptr); diff --git a/sdrbase/webapi/webapiutils.cpp b/sdrbase/webapi/webapiutils.cpp index 5babcc316..920828454 100644 --- a/sdrbase/webapi/webapiutils.cpp +++ b/sdrbase/webapi/webapiutils.cpp @@ -53,6 +53,7 @@ const QMap WebAPIUtils::m_channelURIToSettingsKey = { {"sdrangel.channel.freqtracker", "FreqTrackerSettings"}, {"sdrangel.channel.heatmap", "HeatMapSettings"}, {"sdrangel.channel.ilsdemod", "ILSDemodSettings"}, + {"sdrangel.channel.inmarsatdemod", "InmarsatDemodSettings"}, {"sdrangel.channel.navtexemod", "NavtexDemodSettings"}, {"sdrangel.channel.m17demod", "M17DemodSettings"}, {"sdrangel.channeltx.modm17", "M17ModSettings"}, From 64d9ad16e676f441990fd5b0c01a4d3a81115100 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Wed, 7 Jan 2026 08:51:29 +0000 Subject: [PATCH 21/31] Fix demod macro name. Remove unused library. --- external/CMakeLists.txt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index e32c02ffa..bf60359fb 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -915,18 +915,16 @@ if(ENABLE_FEATURE_MORSEDECODER) endif () endif() -# For Std-C decoder -if(ENABLE_CHANNELRX_DEMODSTDC) +# For Inmarsat C decoder +if(ENABLE_CHANNELRX_DEMODINMARSAT) if (WIN32) set(INMARSATC_LIBRARIES - "${SDRANGEL_BINARY_LIB_DIR}/inmarsatc_demodulator.lib" "${SDRANGEL_BINARY_LIB_DIR}/inmarsatc_parser.lib" "${SDRANGEL_BINARY_LIB_DIR}/inmarsatc_decoder.lib" CACHE INTERNAL "" ) elseif (LINUX) set(INMARSATC_LIBRARIES - "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libinmarsatc_demodulator${CMAKE_SHARED_LIBRARY_SUFFIX}" "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libinmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libinmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "" @@ -947,7 +945,6 @@ if(ENABLE_CHANNELRX_DEMODSTDC) set(INMARSATC_EXTERNAL ON CACHE INTERNAL "") set(INMARSATC_INCLUDE_DIR "${EXTERNAL_BUILD_LIBRARIES}/inmarsatc/src/inmarsatc" CACHE INTERNAL "") if (WIN32) - install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_demodulator${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) From ae75887a09b7538204fc9874c7933e8ecdf4eef7 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Wed, 7 Jan 2026 09:15:58 +0000 Subject: [PATCH 22/31] Specify library names precisely. --- external/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index bf60359fb..b797adcfd 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -44,6 +44,8 @@ set(BOOST_TAG2 "1_86_0") include(ExternalProject) # default build destination in windows to avoid Release/Debug folder +# Currently, we don't set this for APPLE, so binaries are built ${binary_dir}/src (which results in build_dir/external/project_name/src/project_name-build/src) +# we should change this to be similar to LINUX, so we don't use ${binary_dir} and can set BUILD_BYPRODUCTS if (WIN32) # the build will be output on the same folder of sdrangel set(COMMON_CMAKE_ARGS @@ -948,7 +950,11 @@ if(ENABLE_CHANNELRX_DEMODINMARSAT) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) - set(INMARSATC_LIBRARIES "${binary_dir}/src/libinmarsatc_*${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + set(INMARSATC_LIBRARIES + "${binary_dir}/src/libinmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" + "${binary_dir}/src/libinmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" + CACHE INTERNAL "" + ) install(DIRECTORY "${binary_dir}/src" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libinmarsatc*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src") From 16218a1ebe9667dc82dd1e471bf6398bfe55de65 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Wed, 7 Jan 2026 09:36:07 +0000 Subject: [PATCH 23/31] Not in src subdir --- external/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index b797adcfd..f7b3fdcd6 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -44,7 +44,7 @@ set(BOOST_TAG2 "1_86_0") include(ExternalProject) # default build destination in windows to avoid Release/Debug folder -# Currently, we don't set this for APPLE, so binaries are built ${binary_dir}/src (which results in build_dir/external/project_name/src/project_name-build/src) +# Currently, we don't set this for APPLE, so binaries are built ${binary_dir} (which results in build_dir/external/project_name/src/project_name-build) # we should change this to be similar to LINUX, so we don't use ${binary_dir} and can set BUILD_BYPRODUCTS if (WIN32) # the build will be output on the same folder of sdrangel @@ -951,11 +951,11 @@ if(ENABLE_CHANNELRX_DEMODINMARSAT) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) set(INMARSATC_LIBRARIES - "${binary_dir}/src/libinmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" - "${binary_dir}/src/libinmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" + "${binary_dir}/libinmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" + "${binary_dir}/libinmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "" ) - install(DIRECTORY "${binary_dir}/src" DESTINATION "${INSTALL_LIB_DIR}" + install(DIRECTORY "${binary_dir}" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libinmarsatc*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src") endif () From a29b5e00218148ac1f762f8e5f5440d82c00d4de Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Wed, 7 Jan 2026 10:12:56 +0000 Subject: [PATCH 24/31] Set Apple libraries before external project, so can be used as build byproducts. --- external/CMakeLists.txt | 42 ++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index f7b3fdcd6..ff4f2673b 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -44,8 +44,6 @@ set(BOOST_TAG2 "1_86_0") include(ExternalProject) # default build destination in windows to avoid Release/Debug folder -# Currently, we don't set this for APPLE, so binaries are built ${binary_dir} (which results in build_dir/external/project_name/src/project_name-build) -# we should change this to be similar to LINUX, so we don't use ${binary_dir} and can set BUILD_BYPRODUCTS if (WIN32) # the build will be output on the same folder of sdrangel set(COMMON_CMAKE_ARGS @@ -601,6 +599,8 @@ if ((NOT CODEC2_FOUND OR CODEC2_EXTERNAL) AND NOT USE_PRECOMPILED_LIBS) set(CODEC2_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/codec2.lib" CACHE INTERNAL "") elseif (LINUX) set(CODEC2_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libcodec2${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(CODEC2_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/codec2/src/codec2-build/src/libcodec2${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif () ExternalProject_Add(codec2 GIT_REPOSITORY https://github.com/drowe67/codec2-dev.git @@ -623,7 +623,6 @@ if ((NOT CODEC2_FOUND OR CODEC2_EXTERNAL) AND NOT USE_PRECOMPILED_LIBS) set(CODEC2_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libcodec2${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") makeLink("${source_dir}/src" "${source_dir}/src/codec2" codec2) elseif (APPLE) - set(CODEC2_LIBRARIES "${binary_dir}/src/libcodec2${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") # some source include "codec2/comp.h" and some without codec2 makeLink("${source_dir}/src" "${source_dir}/src/codec2" codec2) set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src") @@ -636,6 +635,8 @@ if (NOT CM256CC_FOUND OR CM256CC_EXTERNAL) set(CM256CC_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/cm256cc.lib" CACHE INTERNAL "") elseif (LINUX) set(CM256CC_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libcm256cc${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(CM256CC_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/cm256cc/src/cm256cc-build/libcm256cc${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif () string(REPLACE ";" "|" CMAKE_PREFIX_PATH_SEP "${CMAKE_PREFIX_PATH}") ExternalProject_Add(cm256cc @@ -661,7 +662,6 @@ if (NOT CM256CC_FOUND OR CM256CC_EXTERNAL) if (WIN32) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/cm256cc${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) # kept in case of relaxation of APPLE exclusion - set(CM256CC_LIBRARIES "${binary_dir}/libcm256cc${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") install(DIRECTORY "${binary_dir}/" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libcm256cc*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}") @@ -674,6 +674,8 @@ if ((NOT LIBDSDCC_FOUND OR LIBDSDCC_EXTERNAL) AND (NOT LIBMBE_FOUND OR LIBMBE_EX set(LIBMBE_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/libmbe.lib" CACHE INTERNAL "") elseif (LINUX) set(LIBMBE_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libmbe${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(LIBMBE_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/mbelib/src/mbelib-build/libmbe${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif () ExternalProject_Add(mbelib GIT_REPOSITORY https://github.com/srcejon/mbelib.git @@ -693,7 +695,6 @@ if ((NOT LIBDSDCC_FOUND OR LIBDSDCC_EXTERNAL) AND (NOT LIBMBE_FOUND OR LIBMBE_EX if (WIN32) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/libmbe${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) - set(LIBMBE_LIBRARIES "${binary_dir}/libmbe${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") install(DIRECTORY "${binary_dir}/" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libmbe*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}") @@ -706,6 +707,8 @@ if (NOT LIBSERIALDV_FOUND OR LIBSERIALDV_EXTERNAL) set(LIBSERIALDV_LIBRARY "${SDRANGEL_BINARY_LIB_DIR}/serialdv.lib" CACHE INTERNAL "") elseif (LINUX) set(LIBSERIALDV_LIBRARY "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libserialdv${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(LIBSERIALDV_LIBRARY "${EXTERNAL_BUILD_LIBRARIES}/serialdv/src/serialdv-build/libserialdv${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif () ExternalProject_Add(serialdv GIT_REPOSITORY https://github.com/f4exb/serialDV.git @@ -728,7 +731,6 @@ if (NOT LIBSERIALDV_FOUND OR LIBSERIALDV_EXTERNAL) # so we need a link makeLink("${source_dir}" "${source_dir}/dsp" serialdv) elseif (APPLE) - set(LIBSERIALDV_LIBRARY "${binary_dir}/libserialdv${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") # because sdrbase/dsp/dvserialworker.h use dsp/dvcontroller.h # so we need a link makeLink("${source_dir}" "${source_dir}/dsp" serialdv) @@ -743,6 +745,8 @@ if ((NOT LIBDSDCC_FOUND OR LIBDSDCC_EXTERNAL) AND LIBMBE_FOUND) set(LIBDSDCC_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/dsdcc.lib" CACHE INTERNAL "") elseif (LINUX) set(LIBDSDCC_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libdsdcc${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(LIBDSDCC_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/dsdcc/src/dsdcc-build/libdsdcc${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif () ExternalProject_Add(dsdcc GIT_REPOSITORY https://github.com/f4exb/dsdcc.git @@ -764,7 +768,6 @@ if ((NOT LIBDSDCC_FOUND OR LIBDSDCC_EXTERNAL) AND LIBMBE_FOUND) if (WIN32) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/dsdcc${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) - set(LIBDSDCC_LIBRARIES "${binary_dir}/libdsdcc${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") install(DIRECTORY "${binary_dir}/" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libdsdcc*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/") @@ -794,6 +797,8 @@ if(ENABLE_CHANNELRX_DEMODAPT) set(APT_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/apt.lib" CACHE INTERNAL "") elseif (LINUX) set(APT_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libapt${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(APT_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/apt/src/apt-build/libapt${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif() ExternalProject_Add(apt GIT_REPOSITORY https://github.com/srcejon/aptdec.git @@ -812,7 +817,6 @@ if(ENABLE_CHANNELRX_DEMODAPT) if (WIN32) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/apt${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) - set(APT_LIBRARIES "${binary_dir}/libapt${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") install(DIRECTORY "${binary_dir}/" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libapt*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/") @@ -827,6 +831,8 @@ if(ENABLE_FEATURE_SATELLITETRACKER OR ENABLE_CHANNELRX_DEMODAPT) set(SGP4_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/sgp4s.lib" CACHE INTERNAL "") elseif (LINUX) set(SGP4_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libsgp4s${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(SGP4_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/sgp4/src/sgp4-build/libsgp4/libsgp4s${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif() ExternalProject_Add(sgp4 GIT_REPOSITORY https://github.com/dnwrnr/sgp4.git @@ -845,7 +851,6 @@ if(ENABLE_FEATURE_SATELLITETRACKER OR ENABLE_CHANNELRX_DEMODAPT) if (WIN32) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/sgp4s${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) - set(SGP4_LIBRARIES "${binary_dir}/libsgp4/libsgp4s${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") install(DIRECTORY "${binary_dir}/libsgp4" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libsgp4s*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/libsgp4") @@ -890,6 +895,8 @@ if(ENABLE_FEATURE_MORSEDECODER) set(GGMORSE_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/ggmorse.lib" CACHE INTERNAL "") elseif (LINUX) set(GGMORSE_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libggmorse${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(GGMORSE_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/ggmorse/src/ggmorse-build/src/libggmorse${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif() ExternalProject_Add(ggmorse GIT_REPOSITORY https://github.com/srcejon/ggmorse.git @@ -910,7 +917,6 @@ if(ENABLE_FEATURE_MORSEDECODER) if (WIN32) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/ggmorse${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) - set(GGMORSE_LIBRARIES "${binary_dir}/src/libggmorse${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") install(DIRECTORY "${binary_dir}/src" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libggmorse*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src") @@ -931,6 +937,12 @@ if(ENABLE_CHANNELRX_DEMODINMARSAT) "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libinmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "" ) + elseif (APPLE) + set(INMARSATC_LIBRARIES + "${EXTERNAL_BUILD_LIBRARIES}/inmarsatc/src/inmarsatc-build/libinmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" + "${EXTERNAL_BUILD_LIBRARIES}/inmarsatc/src/inmarsatc-build/libinmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" + CACHE INTERNAL "" + ) endif() ExternalProject_Add(inmarsatc GIT_REPOSITORY https://github.com/srcejon/inmarsatc.git @@ -950,11 +962,6 @@ if(ENABLE_CHANNELRX_DEMODINMARSAT) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") install(FILES "${SDRANGEL_BINARY_BIN_DIR}/inmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) - set(INMARSATC_LIBRARIES - "${binary_dir}/libinmarsatc_decoder${CMAKE_SHARED_LIBRARY_SUFFIX}" - "${binary_dir}/libinmarsatc_parser${CMAKE_SHARED_LIBRARY_SUFFIX}" - CACHE INTERNAL "" - ) install(DIRECTORY "${binary_dir}" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libinmarsatc*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/src") @@ -1006,6 +1013,8 @@ if (ZLIB_FOUND AND FAAD_FOUND AND ENABLE_CHANNELRX_DEMODDAB) set(DAB_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/dab_lib.lib" CACHE INTERNAL "") elseif (LINUX) set(DAB_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libdab_lib${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + elseif (APPLE) + set(DAB_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/dab/src/dab-build/libdab_lib${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") endif() if (WIN32) ExternalProject_Add(dab @@ -1053,13 +1062,12 @@ if (ZLIB_FOUND AND FAAD_FOUND AND ENABLE_CHANNELRX_DEMODDAB) if (WIN32) install(FILES "${SDRANGEL_BINARY_BIN_DIR}/dab_lib${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION "${INSTALL_LIB_DIR}") elseif (APPLE) - set(DAB_LIBRARIES "${binary_dir}/libdab_lib${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") install(DIRECTORY "${binary_dir}/" DESTINATION "${INSTALL_LIB_DIR}" FILES_MATCHING PATTERN "libdab_lib*${CMAKE_SHARED_LIBRARY_SUFFIX}") set(MACOS_EXTERNAL_LIBS_FIXUP "${MACOS_EXTERNAL_LIBS_FIXUP};${binary_dir}/") endif () else() - message(STATUS "Can't build DAB library as missing zlib or faad") + message(STATUS "Can't build DAB library as missing zlib (${ZLIB_FOUND}) or faad (${FAAD_FOUND})") endif() # Device interface libraries. From 21580244974a8f9d2d96afa91769a210b57b5363 Mon Sep 17 00:00:00 2001 From: srcejon Date: Wed, 7 Jan 2026 10:50:02 +0000 Subject: [PATCH 25/31] Fix path to libFLAC on Linux --- external/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index ff4f2673b..99a8ca87a 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -861,7 +861,7 @@ if(ENABLE_CHANNELRX_REMOTETCPSINK) if (WIN32) set(FLAC_LIBRARIES "${SDRANGEL_BINARY_LIB_DIR}/FLAC.lib" CACHE INTERNAL "") elseif (LINUX) - set(FLAC_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/flac/src/flac-build/src/libFLAC/libFLAC${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") + set(FLAC_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/lib${LIB_SUFFIX}/libFLAC${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") elseif (APPLE) set(FLAC_LIBRARIES "${EXTERNAL_BUILD_LIBRARIES}/flac/src/flac-build/src/libFLAC/libFLAC${CMAKE_SHARED_LIBRARY_SUFFIX}" CACHE INTERNAL "") elseif (EMSCRIPTEN) From 9a64a9b3b9f4b9c9b34b8720785942ac891ca382 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Wed, 7 Jan 2026 11:19:17 +0000 Subject: [PATCH 26/31] Add FFTW as DAB dependency --- external/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 99a8ca87a..22a3d7826 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1039,7 +1039,7 @@ if (ZLIB_FOUND AND FAAD_FOUND AND ENABLE_CHANNELRX_DEMODDAB) ExternalProject_Add(dab GIT_REPOSITORY https://github.com/srcejon/dab-cmdline.git GIT_TAG msvc - DEPENDS ${ZLIB_DEPENDS} ${FAAD_DEPENDS} + DEPENDS ${ZLIB_DEPENDS} ${FAAD_DEPENDS} ${FFTW3F_DEPENDS} PREFIX "${EXTERNAL_BUILD_LIBRARIES}/dab" SOURCE_SUBDIR "library" CMAKE_ARGS ${COMMON_CMAKE_ARGS} From ae0f07eaa433f2f09f9f962e1f0dcfcb6b0d2dfd Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Fri, 9 Jan 2026 14:51:39 +0000 Subject: [PATCH 27/31] Add MES column. Decode additional fields. --- .../demodinmarsat/inmarsatdemodgui.cpp | 509 +++++++++--------- .../demodinmarsat/inmarsatdemodgui.h | 11 +- .../demodinmarsat/inmarsatdemodgui.ui | 50 +- .../demodinmarsat/inmarsatdemodsettings.h | 2 +- 4 files changed, 321 insertions(+), 251 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp index ce058e737..c73da9ec0 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp @@ -115,7 +115,7 @@ QRegularExpression MultipartMessage::m_re(QStringLiteral("(\\d+)-(\\d+)(.(\\d+)) void MultipartMessage::parseMessage() { - if (getParts() == getTotalParts()) + if (getComplete()) { QString message = getMessage(); m_messageCoordinates.clear(); @@ -209,13 +209,14 @@ void InmarsatDemodGUI::resizeTable() ui->packets->setItem(row, PACKET_COL_DATE, new QTableWidgetItem("Frid Apr 15 2016-")); ui->packets->setItem(row, PACKET_COL_TIME, new QTableWidgetItem("10:17:00")); ui->packets->setItem(row, PACKET_COL_SAT, new QTableWidgetItem("Atlantic Ocean")); + ui->packets->setItem(row, PACKET_COL_MES, new QTableWidgetItem("123456789-")); ui->packets->setItem(row, PACKET_COL_LES, new QTableWidgetItem("123456-15-")); - ui->packets->setItem(row, PACKET_COL_MSG_ID, new QTableWidgetItem("80555301-")); ui->packets->setItem(row, PACKET_COL_TYPE, new QTableWidgetItem("Multiframe Packet Start-")); ui->packets->setItem(row, PACKET_COL_FRAME_NO, new QTableWidgetItem("123456")); ui->packets->setItem(row, PACKET_COL_LCN, new QTableWidgetItem("888")); ui->packets->setItem(row, PACKET_COL_ULF, new QTableWidgetItem("15,888.888")); ui->packets->setItem(row, PACKET_COL_DLF, new QTableWidgetItem("15,888.888")); + ui->packets->setItem(row, PACKET_COL_MSG_ID, new QTableWidgetItem("80555301-")); ui->packets->setItem(row, PACKET_COL_PRIORITY, new QTableWidgetItem("Urgency")); ui->packets->setItem(row, PACKET_COL_ADDRESS, new QTableWidgetItem("90S 180W 1000 nm")); ui->packets->setItem(row, PACKET_COL_MESSAGE, new QTableWidgetItem("ABCEDGHIJKLMNOPQRSTUVWXYZ")); @@ -233,7 +234,7 @@ void InmarsatDemodGUI::resizeTable() ui->messages->setItem(row, MESSAGE_COL_PRIORITY, new QTableWidgetItem("Urgency-")); ui->messages->setItem(row, MESSAGE_COL_ADDRESS, new QTableWidgetItem("90S 180W 1000 nm")); ui->messages->setItem(row, MESSAGE_COL_MESSAGE, new QTableWidgetItem("ABCEDGHIJKLMNOPQRSTUVWXYZ")); - ui->messages->setItem(row, MESSAGE_COL_PARTS, new QTableWidgetItem("8/88")); + ui->messages->setItem(row, MESSAGE_COL_PARTS, new QTableWidgetItem("88/88+")); ui->messages->resizeColumnsToContents(); ui->messages->removeRow(row); } @@ -445,10 +446,10 @@ const QStringList MultipartMessage::m_navAreaFlags = { "russia" }; -QString MultipartMessage::decodeAddress(QString messageType, QString addressHex, float *latitude, float *longitude, QList *coordinates, QIcon **icon) +QString MultipartMessage::decodeAddress(QString serviceCode, QString addressHex, float *latitude, float *longitude, QList *coordinates, QIcon **icon) { bool ok; - int messageTypeNum = messageType.toInt(&ok); + int messageTypeNum = serviceCode.toInt(&ok); if (ok) { @@ -697,7 +698,10 @@ void InmarsatDemodGUI::updateMessageTable(MultipartMessage *message) addressItem->setIcon(*icon); } messageItem->setText(message->getMessage()); - QString parts = QString("%1 / %2").arg(message->getParts()).arg(message->getTotalParts()); + QString parts = QString("%1 / %2%3") + .arg(message->getParts()) + .arg(message->getTotalParts()) + .arg(message->getComplete() ? "" : "+"); partsItem->setData(Qt::DisplayRole, parts); filterRow(ui->messages, row, -1, MESSAGE_COL_MESSAGE); @@ -711,6 +715,21 @@ void InmarsatDemodGUI::updateMessageTable(MultipartMessage *message) } } +void InmarsatDemodGUI::decodeAppend(QString& decode, const QString& title, const std::string& variable, inmarsatc::frameParser::FrameParser::frameParser_result& frame) +{ + decode = decode.append("" + title + " " + QString::fromStdString(frame.decoding_result.packetVars[variable])); +} + +void InmarsatDemodGUI::decodeAppendFreqMHz(QString& decode, const QString& title, const std::string& variable, inmarsatc::frameParser::FrameParser::frameParser_result& frame) +{ + decode = decode.append("" + title + " " + formatFreqMHz(frame.decoding_result.packetVars[variable])); +} + +void InmarsatDemodGUI::decodeAppendHTML(QString& decode, const QString& title, const std::string& variable, inmarsatc::frameParser::FrameParser::frameParser_result& frame) +{ + decode = decode.append("" + title + " " + toHTML(frame.decoding_result.packetVars[variable])); +} + // Add row to table void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTime) { @@ -735,6 +754,7 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim QTableWidgetItem *dateItem = new QTableWidgetItem(); QTableWidgetItem *timeItem = new QTableWidgetItem(); QTableWidgetItem *satItem = new QTableWidgetItem(); + QTableWidgetItem *mesItem = new QTableWidgetItem(); QTableWidgetItem *lesItem = new QTableWidgetItem(); QTableWidgetItem *msgIdItem = new QTableWidgetItem(); QTableWidgetItem *typeItem = new QTableWidgetItem(); @@ -751,6 +771,7 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim ui->packets->setItem(row, PACKET_COL_DATE, dateItem); ui->packets->setItem(row, PACKET_COL_TIME, timeItem); ui->packets->setItem(row, PACKET_COL_SAT, satItem); + ui->packets->setItem(row, PACKET_COL_MES, mesItem); ui->packets->setItem(row, PACKET_COL_LES, lesItem); ui->packets->setItem(row, PACKET_COL_MSG_ID, msgIdItem); ui->packets->setItem(row, PACKET_COL_TYPE, typeItem); @@ -772,32 +793,29 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim frameNoItem->setText(QString::number(frame.decoding_result.frameNumber)); satItem->setText(QString::fromStdString(frame.decoding_result.packetVars["satName"])); + mesItem->setText(QString::fromStdString(frame.decoding_result.packetVars["mesId"])); QString lesName = QString::fromStdString(frame.decoding_result.packetVars["lesName"]); if (!lesName.isEmpty()) { lesItem->setText(lesName); - } else{ - lesItem->setText(QString::fromStdString(frame.decoding_result.packetVars["les"])); - } - QString msgId = QString::fromStdString(frame.decoding_result.packetVars["mesId"]); - if (!msgId.isEmpty()) { - msgIdItem->setText(msgId); } else { - msgIdItem->setText(QString::fromStdString(frame.decoding_result.packetVars["messageId"])); + lesItem->setText(QString::fromStdString(frame.decoding_result.packetVars["les"])); } lcnItem->setText(QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); ulfItem->setText(formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); dlfItem->setText(formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); + msgIdItem->setText(QString::fromStdString(frame.decoding_result.packetVars["messageId"])); priorityItem->setText(QString::fromStdString(frame.decoding_result.packetVars["priorityText"])); QIcon *icon = nullptr; - addressItem->setText(MultipartMessage::decodeAddress( + QString address = MultipartMessage::decodeAddress( QString::fromStdString(frame.decoding_result.packetVars["messageType"]), QString::fromStdString(frame.decoding_result.packetVars["addressHex"]), nullptr, nullptr, nullptr, &icon - )); + ); + addressItem->setText(address); if (icon) { addressItem->setIcon(*icon); } @@ -805,182 +823,212 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim QString message; QString decode; - switch(frame.decoding_result.packetDescriptor) - { - case 0x27: - decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); - decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); - break; - - case 0x2A: - decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); - decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); - break; - - case 0x08: - decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); - decode = decode.append("ULF " + formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); - break; - - case 0x6C: - { - decode = decode.append("ULF" + formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); - decode = decode.append("Services"); - - std::string services = frame.decoding_result.packetVars["services"]; - for (int k = 0; k < (int)services.length(); k++) - { - if (services[k] != '\n') { - decode = decode.append(services[k]); - } else { - decode = decode.append("
    "); - } - } - decode = decode.append("Tdm slots"); - std::string tdmSlots = frame.decoding_result.packetVars["tdmSlots"]; - for (int k = 0; k < (int)tdmSlots.length(); k++) - { - if (tdmSlots[k] != '\n') { - decode = decode.append(tdmSlots[k]); - } else { - decode = decode.append("
    "); - } - } + quint8 type; + if (((frame.decoding_result.packetDescriptor >> 7) & 1) == 0) { + type = frame.decoding_result.packetDescriptor >> 4; + } else { + type = frame.decoding_result.packetDescriptor & 0x3f; } - break; - case 0x7D: + switch(type) { - decode = decode.append("Network Version " + QString::fromStdString(frame.decoding_result.packetVars["networkVersion"])); - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); - decode = decode.append("Signalling Channel " + QString::fromStdString(frame.decoding_result.packetVars["signallingChannel"])); - decode = decode.append("Count " + QString::fromStdString(frame.decoding_result.packetVars["count"])); - decode = decode.append("Channel Type Name " + QString::fromStdString(frame.decoding_result.packetVars["channelTypeName"])); - decode = decode.append("Local " + QString::fromStdString(frame.decoding_result.packetVars["local"])); - decode = decode.append("Random Interval " + QString::fromStdString(frame.decoding_result.packetVars["randomInterval"])); - - decode = decode.append("Status"); - std::string status = frame.decoding_result.packetVars["status"]; - for (int k = 0; k < (int)status.length(); k++) - { - if (status[k] != '\n') { - decode = decode.append(status[k]); - } else { - decode = decode.append("
    "); - } - } - decode = decode.append("Services"); - std::string services = frame.decoding_result.packetVars["services"]; - for (int k = 0; k < (int)services.length(); k++) - { - if (services[k] != '\n') { - decode = decode.append(services[k]); - } else { - decode = decode.append("
    "); - } - } - } - break; - - case 0x81: - decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); - decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); - decode = decode.append("DLF " + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); - decode = decode.append("Presentation " + QString::fromStdString(frame.decoding_result.packetVars["presentation"])); + case 0x00: // Acknowledgement Request + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppend(decode, "LCN", "logicalChannelNo", frame); + decodeAppendFreqMHz(decode, "ULF", "uplinkChannelMhz", frame); break; - case 0x83: - decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); - decode = decode.append("Status Bits " + QString::fromStdString(frame.decoding_result.packetVars["status_bits"])); - decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); - decode = decode.append("Frame Length " + QString::fromStdString(frame.decoding_result.packetVars["frameLength"])); - decode = decode.append("Duration " + QString::fromStdString(frame.decoding_result.packetVars["duration"])); - decode = decode.append("DLF " + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); - decode = decode.append("ULF " + formatFreqMHz(frame.decoding_result.packetVars["uplinkChannelMhz"])); - decode = decode.append("Frame Offset " + QString::fromStdString(frame.decoding_result.packetVars["frameOffset"])); - decode = decode.append("Packet Descriptor 1 " + QString::fromStdString(frame.decoding_result.packetVars["packetDescriptor1"])); + case 0x01: // Announcement + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "MES", "mesId", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppendFreqMHz(decode, "DLF", "downlinkChannelMhz", frame); + decodeAppend(decode, "Service", "serviceText", frame); + decodeAppend(decode, "Direction", "directionText", frame); + decodeAppend(decode, "Priority", "priorityText", frame); + decodeAppend(decode, "LCN", "logicalChannelNo", frame); + decodeAppend(decode, "Message Reference Number", "messageReferenceNumber", frame); + decodeAppend(decode, "Sub-address", "subAddress", frame); + decodeAppend(decode, "Presentation", "presentationText", frame); + decodeAppend(decode, "Packets", "packets", frame); + decodeAppend(decode, "Last Count", "lastCount", frame); break; - case 0x92: - decode = decode.append("Login Ack Length" + QString::fromStdString(frame.decoding_result.packetVars["loginAckLength"])); - decode = decode.append("DLF" + formatFreqMHz(frame.decoding_result.packetVars["downlinkChannelMhz"])); - decode = decode.append("LES" + QString::fromStdString(frame.decoding_result.packetVars["les"])); - decode = decode.append("Station Start Hex" + QString::fromStdString(frame.decoding_result.packetVars["stationStartHex"])); + case 0x02: // Clear + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "MES", "mesId", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppend(decode, "LCN", "logicalChannelNo", frame); + break; + + case 0x03: // Logical Channel Assignment + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "MES", "mesId", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppend(decode, "Status Bits", "status_bits", frame); + decodeAppend(decode, "LCN", "logicalChannelNo", frame); + decodeAppend(decode, "Frame Length", "frameLength", frame); + decodeAppend(decode, "Duration", "duration", frame); + decodeAppendFreqMHz(decode, "DLF", "downlinkChannelMhz", frame); + decodeAppendFreqMHz(decode, "ULF", "uplinkChannelMhz", frame); + decodeAppend(decode, "Frame Offset", "frameOffset", frame); + decodeAppend(decode, "Packet Descriptor 1", "packetDescriptor1", frame); + break; + + case 0x06: // Signalling Channel Descriptor + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppendFreqMHz(decode, "ULF", "uplinkChannelMhz", frame); + decodeAppendHTML(decode, "Services", "services", frame); + decodeAppendHTML(decode, "TDM slots", "tdmSlots", frame); + break; + + case 0x07: // Bulletin Board + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Network Version", "networkVersion", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppend(decode, "Signalling Channel", "signallingChannel", frame); + decodeAppend(decode, "Count", "count", frame); + decodeAppend(decode, "Channel Type Name", "channelTypeName", frame); + decodeAppend(decode, "Local", "local", frame); + decodeAppend(decode, "Random Interval", "randomInterval", frame); + decodeAppendHTML(decode, "Status", "status", frame); + decodeAppendHTML(decode, "Services", "services", frame); + break; + + case 0x12: // Login Ack + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "MES", "mesId", frame); + decodeAppendFreqMHz(decode, "DLF", "downlinkChannelMhz", frame); + if (frame.decoding_result.packetVars.find("networkVesrion") != frame.decoding_result.packetVars.end()) { + decodeAppend(decode, "Network Version", "networkVersion", frame); + } if (frame.decoding_result.packetVars.find("stationCount") != frame.decoding_result.packetVars.end()) { - decode = decode.append("Station Count" + QString::fromStdString(frame.decoding_result.packetVars["stationCnt"])); - decode = decode.append("Stations"); - std::string stations = frame.decoding_result.packetVars["stations"]; - for (int k = 0; k < (int)stations.length(); k++) - { - if (stations[k] != '\n') { - decode = decode.append(stations[k]); - } else { - decode = decode.append("
    "); - } - } + decodeAppend(decode, "Station Count", "stationCount", frame); + decodeAppendHTML(decode, "Stations", "stations", frame); } break; - case 0xA3: - decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); - - if (frame.decoding_result.packetVars.find("shortMessage") != frame.decoding_result.packetVars.end()) - { - std::string shortMessage = frame.decoding_result.packetVars["shortMessage"]; - for (int k = 0; k < (int)shortMessage.length(); k++) - { - char chr = shortMessage[k] & 0x7F; - if ((chr < 0x20 && chr != '\n' && chr != '\r')) { - message = message.append("(" + QString::number(chr) + ")"); - } else if(chr != '\n' && chr != '\r') { - message = message.append(chr); - } - } - decode = decode.append("Payload" + message); - } + case 0x13: // Logout Ack + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "MES", "mesId", frame); break; - case 0xA8: - decode = decode.append("Msg Id " + QString::fromStdString(frame.decoding_result.packetVars["mesId"])); - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); - if (frame.decoding_result.packetVars.find("shortMessage") != frame.decoding_result.packetVars.end()) - { - std::string shortMessage = frame.decoding_result.packetVars["shortMessage"]; - for (int k = 0; k < (int)shortMessage.length(); k++) - { - char chr = shortMessage[k] & 0x7F; - if ((chr < 0x20 && chr != '\n' && chr != '\r')) { - message = message.append("(" + QString::number(chr) + ")"); - } else if(chr != '\n' && chr != '\r') { - message = message.append(chr); - } - } - decode = decode.append("Payload" + message); - } - break; - - case 0xAA: + case 0x22: // Group Poll { - decode = decode.append("Sat " + QString::fromStdString(frame.decoding_result.packetVars["satName"])); - decode = decode.append("LES " + QString::fromStdString(frame.decoding_result.packetVars["lesName"])); - decode = decode.append("LCN " + QString::fromStdString(frame.decoding_result.packetVars["logicalChannelNo"])); - decode = decode.append("Packet No " + QString::fromStdString(frame.decoding_result.packetVars["packetNo"])); + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "Data Network ID", "dataNetworkId", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppend(decode, "LES TDM", "lesTDM", frame); + decodeAppend(decode, "Randomizing Inverval", "randomizingInterval", frame); + decodeAppend(decode, "Sub-address", "subAddress", frame); + decodeAppend(decode, "Response", "responseText", frame); + decodeAppend(decode, "Command", "commandText", frame); + decodeAppend(decode, "Sequence No", "sequenceNo", frame); + qint8 command = QString::fromStdString(frame.decoding_result.packetVars["command"]).toInt(); + if (command == 0x4) + { + decodeAppend(decode, "Start Frame", "startFrame", frame); + decodeAppend(decode, "Interval", "interval", frame); + } + else if (command == 0x8) + { + decodeAppend(decode, "MEM Id", "memId", frame); + } + else if (command == 0xa) + { + decodeAppend(decode, "Member Number", "memberNumber", frame); + } + if (frame.decoding_result.packetVars.find("shortMessage") != frame.decoding_result.packetVars.end()) + { + std::string shortMessage = frame.decoding_result.packetVars["shortMessage"]; + for (int k = 0; k < (int)shortMessage.length(); k++) + { + char chr = shortMessage[k] & 0x7F; + if ((chr < 0x20 && chr != '\n' && chr != '\r')) { + message = message.append("(" + QString::number(chr) + ")"); + } else { + message = message.append(chr); + } + } + decode = decode.append("Text" + message); + } + QString textHex = QString::fromStdString(frame.decoding_result.packetVars["text"]); + if (!textHex.isEmpty()) { + decode = decode.append("Text (hex)" + textHex); + } + break; + } + case 0x23: // Individual Poll + { + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "MES", "mesId", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppend(decode, "Sub-address", "subAddress", frame); + decodeAppend(decode, "Data Network ID", "dataNetworkId", frame); + decodeAppend(decode, "Response", "responseText", frame); + decodeAppend(decode, "Command", "commandText", frame); + decodeAppend(decode, "Sequence No", "sequenceNo", frame); + qint8 command = QString::fromStdString(frame.decoding_result.packetVars["command"]).toInt(); + if (command == 0x4) + { + decodeAppend(decode, "Start Frame", "startFrame", frame); + decodeAppend(decode, "Interval", "interval", frame); + } + else if (command == 0x8) + { + decodeAppend(decode, "MEM Id", "memId", frame); + } + else if (command == 0xa) + { + decodeAppend(decode, "Member Number", "memberNumber", frame); + } + if (frame.decoding_result.packetVars.find("shortMessage") != frame.decoding_result.packetVars.end()) + { + std::string shortMessage = frame.decoding_result.packetVars["shortMessage"]; + for (int k = 0; k < (int)shortMessage.length(); k++) + { + char chr = shortMessage[k] & 0x7F; + if ((chr < 0x20 && chr != '\n' && chr != '\r')) { + message = message.append("(" + QString::number(chr) + ")"); + } else { + message = message.append(chr); + } + } + decode = decode.append("Text" + message); + } + QString textHex = QString::fromStdString(frame.decoding_result.packetVars["text"]); + if (!textHex.isEmpty()) { + decode = decode.append("Text (hex)" + textHex); + } + break; + } + + case 0x28: // Confirmation + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "MES", "mesId", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppend(decode, "Message Reference Number", "messageReferenceNumber", frame); + decodeAppendHTML(decode, "Message Status", "messageStatusDescriptors", frame); + break; + + case 0x2A: // Message + { + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "LES", "lesName", frame); + decodeAppend(decode, "LCN", "logicalChannelNo", frame); + decodeAppend(decode, "Packet No", "packetNo", frame); //bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; if (frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_IA5) { @@ -989,7 +1037,7 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim char chr = frame.decoding_result.payload.data8Bit[i] & 0x7F; if ((chr < 0x20 && chr != '\n' && chr != '\r')) { message = message.append("(" + QString::number((uint16_t)chr, 16) + ")"); - } else if(chr != '\n' && chr != '\r') { + } else { message = message.append(chr); } } @@ -1010,36 +1058,30 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim decode = decode.append("Payload" + message); break; - case 0xAB: - { - decode = decode.append("LES List Length" + QString::fromStdString(frame.decoding_result.packetVars["lesListLength"])); - decode = decode.append("Station Start Hex" + QString::fromStdString(frame.decoding_result.packetVars["stationStartHex"])); - decode = decode.append("Station Count" + QString::fromStdString(frame.decoding_result.packetVars["stationCount"])); + case 0x2B: // Network Update + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "LES List Length", "lesListLength", frame); + decodeAppend(decode, "Station Start Hex", "stationStartHex", frame); + decodeAppend(decode, "Station Count", "stationCount", frame); + decodeAppendHTML(decode, "Stations", "stations", frame); + break; - decode = decode.append("Stations"); - std::string stations = frame.decoding_result.packetVars["stations"]; - for (int k = 0; k < (int)stations.length(); k++) - { - if (stations[k] != '\n') { - decode = decode.append(stations[k]); - } else { - decode = decode.append("
    "); - } - } - } - break; - - case 0xB1: + case 0x30: // EGC (Single Header) + case 0x31: // EGC (First of Double Header) + case 0x32: // EGC (Second of Double Header) { - decode = decode.append("Msg Type" + QString::fromStdString(frame.decoding_result.packetVars["messageType"])); - decode = decode.append("Service Code & Address Name" + QString::fromStdString(frame.decoding_result.packetVars["serviceCodeAndAddressName"])); - decode = decode.append("Continuation" + QString::fromStdString(frame.decoding_result.packetVars["continuation"])); - decode = decode.append("Priority" + QString::fromStdString(frame.decoding_result.packetVars["priorityText"])); - decode = decode.append("Repetition" + QString::fromStdString(frame.decoding_result.packetVars["rep"])); - decode = decode.append("Msg Id" + QString::fromStdString(frame.decoding_result.packetVars["messageId"])); - decode = decode.append("Packet No" + QString::fromStdString(frame.decoding_result.packetVars["packetNo"])); - decode = decode.append("isNewPayload" + QString::fromStdString(frame.decoding_result.packetVars["isNewPayl"])); - decode = decode.append("Address" + QString::fromStdString(frame.decoding_result.packetVars["addrHex"])); + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Service Code", "serviceCodeAndAddressName", frame); + decodeAppend(decode, "Continuation", "continuation", frame); + decodeAppend(decode, "Priority", "priorityText", frame); + decodeAppend(decode, "Repetition Number", "repetition", frame); + decodeAppend(decode, "Message Sequence Number", "messageId", frame); + decodeAppend(decode, "Packet Sequence Number", "packetNo", frame); + decodeAppend(decode, "Presentation", "presentationText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "LES", "lesName", frame); + decode = decode.append("Address" + address); + decodeAppend(decode, "Checksum", "egcChecksum", frame); bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; if (!isBinary) @@ -1048,7 +1090,7 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim char chr = frame.decoding_result.payload.data8Bit[k] & 0x7F; if ((chr < 0x20 && chr != '\n' && chr != '\r')) { message = message.append("(" + QString::number((uint16_t)chr, 16) + ")"); - } else /*if (chr != '\n' && chr != '\r')*/ { + } else { message = message.append(chr); } } @@ -1061,46 +1103,21 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim message = message.append(QString::number(data, 16) + " "); } } - decode = decode.append("Payload" + message); + decode = decode.append("Message" + message); } break; - case 0xB2: + case 0x2c: // Request Status { - decode = decode.append("Msg Type" + QString::fromStdString(frame.decoding_result.packetVars["messageType"])); - decode = decode.append("Service Code & Address Name" + QString::fromStdString(frame.decoding_result.packetVars["serviceCodeAndAddressName"])); - decode = decode.append("Continuation" + QString::fromStdString(frame.decoding_result.packetVars["continuation"])); - decode = decode.append("Priority" + QString::fromStdString(frame.decoding_result.packetVars["priorityText"])); - decode = decode.append("Repetition" + QString::fromStdString(frame.decoding_result.packetVars["rep"])); - decode = decode.append("Msg Id" + QString::fromStdString(frame.decoding_result.packetVars["messageId"])); - decode = decode.append("Packet No" + QString::fromStdString(frame.decoding_result.packetVars["packetNo"])); - decode = decode.append("isNewPayload" + QString::fromStdString(frame.decoding_result.packetVars["isNewPayl"])); - decode = decode.append("Address" + QString::fromStdString(frame.decoding_result.packetVars["addrHex"])); - - bool isBinary = frame.decoding_result.payload.presentation == PACKETDECODER_PRESENTATION_BINARY; - if (!isBinary) - { - for (int k = 0; k < (int)frame.decoding_result.payload.data8Bit.size(); k++) - { - char chr = frame.decoding_result.payload.data8Bit[k] & 0x7F; - if ((chr < 0x20 && chr != '\n' && chr != '\r')) { - message = message.append("(" + QString::number((uint16_t)chr, 16) + ")"); - } else /*if (chr != '\n' && chr != '\r')*/ { - message = message.append(chr); - } - } - } - else - { - for (int i = 0; i < (int)frame.decoding_result.payload.data8Bit.size(); i++) - { - uint8_t data = frame.decoding_result.payload.data8Bit[i]; - message = message.append(QString::number(data, 16) + " "); - } - } - decode = decode.append("Payload" + message); + decodeAppend(decode, "Packet", "packetDescriptorText", frame); + decodeAppend(decode, "Sat", "satName", frame); + decodeAppend(decode, "MES", "mesId", frame); + decodeAppend(decode, "LES", "lesName", frame); + QString flag = QString::fromStdString(frame.decoding_result.packetVars["rejected"]) == "0" ? "Pending" : "Rejected"; + decode = decode.append("Pending / Reject Flag " + flag); + decodeAppend(decode, "Status Code", "statusCodeText", frame); + break; } - break; } @@ -1137,6 +1154,7 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim MessagePart part; part.m_part = frame.decoding_result.packetDescriptor == 0xb1 ? 1 : 2; part.m_packet = QString::fromStdString(frame.decoding_result.packetVars["packetNo"]).toInt(); + part.m_continuation = QString::fromStdString(frame.decoding_result.packetVars["continuation"]) == "1"; part.m_text = message; multipartMessage->addPart(part); updateMessageTable(multipartMessage); @@ -1152,6 +1170,17 @@ void InmarsatDemodGUI::packetReceived(const QByteArray& bytes, QDateTime dateTim } } +QString InmarsatDemodGUI::toHTML(const std::string& string) const +{ + return toHTML(QString::fromStdString(string)); +} + +QString InmarsatDemodGUI::toHTML(const QString& string) const +{ + QString s = string; + return s.replace("\n", "
    "); +} + void InmarsatDemodGUI::sendAreaToMapFeature(const QString& name, const QString& text, float latitude, float longitude, const QList& coordinates) { // Send to Map feature diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h index 2a509e57a..9197bfa6b 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h @@ -55,6 +55,7 @@ class InmarsatDemodGUI; struct MessagePart { int m_part; int m_packet; + bool m_continuation; QString m_text; }; @@ -68,6 +69,7 @@ public: int getParts() const { return m_parts.size(); } int getTotalParts() const { return m_parts[m_parts.size()-1].m_packet * 2; } QDateTime getDateTime() const { return m_dateTime; } + bool getComplete() const { return getParts() == getTotalParts() && !m_parts[m_parts.size()-1].m_continuation; } int getId() const { return m_id; } QString getService() const { return m_service; } QString getPriority() const { return m_priority; } @@ -183,6 +185,12 @@ private: void filterRow(QTableWidget *table, int row, int typeCol, int messageCol); void filter(); + void decodeAppend(QString& decode, const QString& title, const std::string& variable, inmarsatc::frameParser::FrameParser::frameParser_result& frame); + void decodeAppendFreqMHz(QString& decode, const QString& title, const std::string& variable, inmarsatc::frameParser::FrameParser::frameParser_result& frame); + void decodeAppendHTML(QString& decode, const QString& title, const std::string& variable, inmarsatc::frameParser::FrameParser::frameParser_result& frame); + QString toHTML(const std::string& string) const; + QString toHTML(const QString& string) const; + enum MessageCol { MESSAGE_COL_DATE, MESSAGE_COL_TIME, @@ -198,13 +206,14 @@ private: PACKET_COL_DATE, PACKET_COL_TIME, PACKET_COL_SAT, + PACKET_COL_MES, PACKET_COL_LES, - PACKET_COL_MSG_ID, PACKET_COL_TYPE, PACKET_COL_FRAME_NO, PACKET_COL_LCN, PACKET_COL_ULF, PACKET_COL_DLF, + PACKET_COL_MSG_ID, PACKET_COL_PRIORITY, PACKET_COL_ADDRESS, PACKET_COL_MESSAGE, diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui index 48457ef1d..4a3b90aee 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui @@ -854,7 +854,15 @@ Sat - Satellite + Satellite region + + + + + MES + + + Mobile Earth Station @@ -865,14 +873,6 @@ Land Earth Station - - - MsgId - - - Message ID - - Type @@ -913,6 +913,14 @@ Downlink frequency + + + MsgId + + + Message ID + + Priority @@ -989,41 +997,65 @@ Date + + Date last part of message was received + Time + + Time last part of message was received + ID + + Message ID + Service + + Service Code + Priority + + Priority + Address + + Address + Parts + + How many parts have been received / Total expected parts + Message + + Message text + diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h index 94c2ff5c3..0d8b306a1 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h @@ -29,7 +29,7 @@ class Serializable; // Number of columns in the table #define INMARSATDEMOD_MESSAGES_COLUMNS 8 -#define INMARSATDEMOD_PACKETS_COLUMNS 15 +#define INMARSATDEMOD_PACKETS_COLUMNS 16 struct InmarsatDemodSettings { From 22257e53114e2d9415b6ba9d01abc06ae831d563 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 12 Jan 2026 16:50:33 +0000 Subject: [PATCH 28/31] Add equalizers and EVM measurement. --- .../channelrx/demodinmarsat/inmarsatdemod.h | 4 +- .../demodinmarsat/inmarsatdemodbaseband.h | 4 +- .../demodinmarsat/inmarsatdemodgui.cpp | 24 +- .../demodinmarsat/inmarsatdemodgui.h | 1 + .../demodinmarsat/inmarsatdemodgui.ui | 76 +++++ .../demodinmarsat/inmarsatdemodsettings.cpp | 11 + .../demodinmarsat/inmarsatdemodsettings.h | 7 +- .../demodinmarsat/inmarsatdemodsink.cpp | 260 ++++++++++++++++-- .../demodinmarsat/inmarsatdemodsink.h | 61 +++- plugins/channelrx/demodinmarsat/readme.md | 46 +++- 10 files changed, 453 insertions(+), 41 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemod.h b/plugins/channelrx/demodinmarsat/inmarsatdemod.h index 7498e9cab..6be6fffee 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemod.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemod.h @@ -136,8 +136,8 @@ public: m_basebandSink->getMagSqLevels(avg, peak, nbSamples); } - void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq) const { - m_basebandSink->getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq); + void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq, Real &evm, bool &synced) const { + m_basebandSink->getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq, evm, synced); } uint32_t getNumberOfDeviceStreams() const; diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.h b/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.h index e69277a72..8beefc1f4 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodbaseband.h @@ -74,8 +74,8 @@ public: void getMagSqLevels(double& avg, double& peak, int& nbSamples) { m_sink.getMagSqLevels(avg, peak, nbSamples); } - void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq) const { - m_sink.getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq); + void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq, Real &evm, bool &synced) const { + m_sink.getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq, evm, synced); } void setMessageQueueToChannel(MessageQueue *messageQueue) { m_sink.setMessageQueueToChannel(messageQueue); } void setBasebandSampleRate(int sampleRate); diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp index c73da9ec0..7caf6ee97 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp @@ -1362,6 +1362,12 @@ void InmarsatDemodGUI::on_rfBW_valueChanged(int value) applySetting("rfBandwidth"); } +void InmarsatDemodGUI::on_equalizer_currentIndexChanged(int index) +{ + m_settings.m_equalizer = (InmarsatDemodSettings::Equalizer) index; + applySetting("equalizer"); +} + void InmarsatDemodGUI::on_rrcRolloff_valueChanged(int value) { ui->rrcRolloffText->setText(QString("%1").arg(value / 100.0, 0, 'f', 2)); @@ -1578,7 +1584,7 @@ InmarsatDemodGUI::InmarsatDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISe m_scopeVis->setGLScope(ui->glScope); ui->glScope->connectTimer(MainCore::instance()->getMasterTimer()); ui->scopeGUI->setBuddies(m_scopeVis->getInputMessageQueue(), m_scopeVis, ui->glScope); - ui->scopeGUI->setStreams(QStringList({"IQ", "MagSq", "IQ AGC", "AGC gain/avg", "IQ CFO", "IQ RRC", "TED Er", "TED Er Sum", "CL", "IQ Derot", "Bit/mu"})); + ui->scopeGUI->setStreams(QStringList({"IQ", "MagSq", "IQ AGC", "AGC gain/avg", "IQ CFO", "IQ RRC", "TED Er", "TED Er Sum", "CL", "IQ Derot", "Eq", "Eq Er", "Bit/mu"})); // Scope settings to display the IQ waveforms ui->scopeGUI->setPreTrigger(1); @@ -1735,6 +1741,8 @@ void InmarsatDemodGUI::displaySettings() ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1)); ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0); + ui->equalizer->setCurrentIndex((int) m_settings.m_equalizer); + ui->rrcRolloffText->setText(QString("%1").arg(m_settings.m_rrcRolloff, 0, 'f', 2)); ui->rrcRolloff->setValue(m_settings.m_rrcRolloff * 100.0); @@ -1822,13 +1830,20 @@ void InmarsatDemodGUI::tick() Real coarseFreq; Real coarseFreqPower; Real fineFreq; - m_inmarsatDemod->getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq); + Real evm; + bool synced; + m_inmarsatDemod->getPLLStatus(locked, coarseFreqCurrent, coarseFreqCurrentPower, coarseFreq, coarseFreqPower, fineFreq, evm, synced); - if (locked) + if (synced) { ui->pll->setStyleSheet("QToolButton { background-color : green; }"); ui->pll->setIcon(QIcon(":/locked.png").pixmap(QSize(20, 20))); } + else if (locked) + { + ui->pll->setStyleSheet("QToolButton { background-color : yellow; }"); + ui->pll->setIcon(QIcon(":/locked.png").pixmap(QSize(20, 20))); + } else { ui->pll->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); @@ -1844,6 +1859,8 @@ void InmarsatDemodGUI::tick() .arg(std::round(CalcDb::dbPower(coarseFreqPower))) ); + ui->evm->setText(QString("%1").arg(evm * 100.0f, 0, 'f', 1)); + m_tickCount++; } @@ -1951,6 +1968,7 @@ void InmarsatDemodGUI::makeUIConnections() { QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &InmarsatDemodGUI::on_deltaFrequency_changed); QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &InmarsatDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->equalizer, &QComboBox::currentIndexChanged, this, &InmarsatDemodGUI::on_equalizer_currentIndexChanged); QObject::connect(ui->rrcRolloff, &QDial::valueChanged, this, &InmarsatDemodGUI::on_rrcRolloff_valueChanged); QObject::connect(ui->pllBW, &QDial::valueChanged, this, &InmarsatDemodGUI::on_pllBW_valueChanged); QObject::connect(ui->ssBW, &QDial::valueChanged, this, &InmarsatDemodGUI::on_ssBW_valueChanged); diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h index 9197bfa6b..af84a326d 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.h @@ -226,6 +226,7 @@ private slots: void on_messages_itemSelectionChanged(); void on_deltaFrequency_changed(qint64 value); void on_rfBW_valueChanged(int index); + void on_equalizer_currentIndexChanged(int index); void on_rrcRolloff_valueChanged(int value); void on_pll_clicked(bool checked=false); void on_pllBW_valueChanged(int value); diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui index 4a3b90aee..a6df51f93 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.ui @@ -279,6 +279,82 @@ + + + + Eq + + + + + + + Equalizer + + + + None + + + + + CMA + + + + + LMS + + + + + + + + Qt::Orientation::Vertical + + + + + + + EVM + + + + + + + + 36 + 0 + + + + Error vector magnitude averaged over last second + + + 100.0 + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + % + + + + + + + Qt::Orientation::Vertical + + + diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp index b9d61bbb4..f1488d477 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.cpp @@ -59,6 +59,7 @@ void InmarsatDemodSettings::resetToDefaults() { m_inputFrequencyOffset = 0; m_rfBandwidth = 4000.0f; + m_equalizer = NONE; m_rrcRolloff = 1.0f; m_pllBW = 2*M_PI/100.0; m_ssBW = 2*M_PI/100.0; @@ -105,6 +106,8 @@ QByteArray InmarsatDemodSettings::serialize() const s.writeFloat(7, m_pllBW); s.writeFloat(8, m_ssBW); + s.writeS32(9, (int) m_equalizer); + s.writeBool(10, m_udpEnabled); s.writeString(11, m_udpAddress); s.writeU32(12, m_udpPort); @@ -168,6 +171,8 @@ bool InmarsatDemodSettings::deserialize(const QByteArray& data) d.readFloat(7, &m_pllBW, 2*M_PI/100.0); d.readFloat(8, &m_ssBW, 2*M_PI/100.0); + d.readS32(9, (int *) &m_equalizer, (int) NONE); + d.readBool(10, &m_udpEnabled); d.readString(11, &m_udpAddress); d.readU32(12, &utmp); @@ -244,6 +249,9 @@ void InmarsatDemodSettings::applySettings(const QStringList& settingsKeys, const if (settingsKeys.contains("rfBandwidth")) { m_rfBandwidth = settings.m_rfBandwidth; } + if (settingsKeys.contains("equalizer")) { + m_equalizer = settings.m_equalizer; + } if (settingsKeys.contains("rrcRolloff")) { m_rrcRolloff = settings.m_rrcRolloff; } @@ -331,6 +339,9 @@ QString InmarsatDemodSettings::getDebugString(const QStringList& settingsKeys, b if (settingsKeys.contains("rfBandwidth") || force) { ostr << " m_rfBandwidth: " << m_rfBandwidth; } + if (settingsKeys.contains("equalizer") || force) { + ostr << " m_equalizer: " << m_equalizer; + } if (settingsKeys.contains("rrcRolloff") || force) { ostr << " m_rrcRolloff: " << m_rrcRolloff; } diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h index 0d8b306a1..aaaf3d2f8 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsettings.h @@ -35,6 +35,11 @@ struct InmarsatDemodSettings { qint32 m_inputFrequencyOffset; float m_rfBandwidth; + enum Equalizer { + NONE, + CMA, //!< Constant Modulus + LMS //!< Least Mean Square + } m_equalizer; float m_rrcRolloff; float m_pllBW; //!< Costas loop bandwidth in rad/sample float m_ssBW; //!< Symbol sync bandwidth normalised to symbol rate (E.g. 0.05 for 5%) @@ -69,7 +74,7 @@ struct InmarsatDemodSettings static const int CHANNEL_SAMPLE_RATE = 48000; static const int BAUD_RATE = 1200; - static const int m_scopeStreams = 11; + static const int m_scopeStreams = 13; InmarsatDemodSettings(); void resetToDefaults(); diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp index fbc6bcdb7..63a63cf47 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp @@ -42,8 +42,8 @@ Complex AGC::processOneSample(const Complex& iq, bool locked) m_agcMovingAverage(abs(z)); //qDebug() << "abs" << abs(z) << "m_agcGain" << m_agcGain << "m_agcMovingAverage.instantAverage()" << m_agcMovingAverage.instantAverage(); - Real agcRef = 0.75f; // Target amplitude - Real agcMu = locked ? 0.01 : 0.1; // How fast we want to respond to changes in average + Real agcRef = 1.0f; // Target amplitude + Real agcMu = locked ? 0.03 : 0.3; // How fast we want to respond to changes in average Real agcEr = agcRef - m_agcMovingAverage.instantAverage(); // Error between target and average m_gain += agcMu * agcEr; @@ -128,10 +128,13 @@ void FrequencyOffsetEstimate::processOneSample(Complex& iq, bool locked) // if offset is multiple of data rate. if (!locked || ((magRatio >= 3) && (abs(maxIdx - m_freqOffsetBin) >= 2))) { - m_freqOffsetBin = maxIdx; - m_freqOffsetHz = m_currentFreqOffsetHz; - m_freqOffsetNCO.setFreq(-m_freqOffsetHz, InmarsatDemodSettings::CHANNEL_SAMPLE_RATE); - //qDebug() << "Setting CFO" << m_freqOffsetHz << "(" << CalcDb::dbPower(m_currentFreqMagSq) << "/" << CalcDb::dbPower(m_freqMagSq) << ")"; + if (m_freqOffsetBin != maxIdx) // Only update if changed, to reduce NCO debug messages + { + m_freqOffsetBin = maxIdx; + m_freqOffsetHz = m_currentFreqOffsetHz; + m_freqOffsetNCO.setFreq(-m_freqOffsetHz, InmarsatDemodSettings::CHANNEL_SAMPLE_RATE); + //qDebug() << "Setting CFO" << m_freqOffsetHz << "(" << CalcDb::dbPower(m_currentFreqMagSq) << "/" << CalcDb::dbPower(m_freqMagSq) << ")"; + } } m_fftCounter = 0; @@ -148,6 +151,155 @@ Real FrequencyOffsetEstimate::magSq(int bin) const return v / (m_fftSize * m_fftSize); } +SymbolBuffer::SymbolBuffer(int size) : + m_totalError(0), + m_idx(0), + m_count(0) +{ + m_bits.resize(size); + m_symbols.resize(size); + m_error.resize(size); +} + +void SymbolBuffer::push(quint8 bit, Complex symbol) +{ + m_bits[m_idx] = bit; + m_symbols[m_idx] = symbol; + + m_totalError -= m_error[m_idx]; + Complex error; + if (bit) { + error = symbol - Complex(1.0f, 0.0f); + } else { + error = symbol - Complex(-1.0f, 0.0f); + } + m_error[m_idx] = error.real() * error.real() + error.imag() * error.imag(); + m_totalError += m_error[m_idx]; + + m_idx = (m_idx + 1) % m_bits.size(); + if (m_count < m_bits.size()) { + m_count++; + } +} + +bool SymbolBuffer::checkUW() const +{ + qulonglong bits1 = 0; + qulonglong bits2 = 0; + + for (int i = 0; i < 64; i++) + { + int idx1 = (m_idx + i * 162) % m_bits.size(); + int idx2 = (m_idx + i * 162 + 1) % m_bits.size(); + bits1 |= (qulonglong)m_bits[idx1] << (63-i); + bits2 |= (qulonglong)m_bits[idx2] << (63-i); + } + return ( (bits1 == 0x07eacdda4e2f28c2) + || (bits1 == ~0x07eacdda4e2f28c2) + ) + && (bits1 == bits2); +} + +Complex SymbolBuffer::getSymbol(int idx) const +{ + return m_symbols[(m_idx + idx) % m_bits.size()]; +} + +// Calculate RMS EVM +float SymbolBuffer::evm() const +{ + return sqrt((float) (m_totalError / m_count)); +} + +Equalizer::Equalizer(int samplesPerSymbol) : + m_samplesPerSymbol(samplesPerSymbol), + m_idx(0) +{ + int taps = m_samplesPerSymbol * 8 + 1; + m_delay.resize(taps); + m_taps.resize(taps); + for (int i = 0; i < taps; i++) + { + m_delay[i] = 0.0f; + m_taps[i] = 0.0f; + } +} + +void Equalizer::printTaps() const +{ + printf("taps=["); + for (int i = 0; i < m_taps.size(); i++) { + printf("%f+i*%f ", m_taps[i].real(), m_taps[i].imag()); + } + printf("];\n"); +} + +CMAEqualizer::CMAEqualizer(int samplesPerSymbol) : + Equalizer(samplesPerSymbol) +{ + m_taps[m_delay.size()/2] = 1.0f; +} + +Complex CMAEqualizer::processOneSample(Complex x, bool update, bool training) +{ + (void) training; + + for (int i = m_taps.size() - 1; i > 0; i--) { + m_delay[i] = m_delay[i-1]; + } + m_delay[0] = x; + + Complex y = 0; + for (int i = 0; i < m_taps.size(); i++) { + y += std::conj(m_taps[i]) * m_delay[i]; + } + + Real mod = abs(y); + Real R = 1.0f; + Real error = mod * mod - R * R; + //printf("x=%f+i%f y=%f+i%f d=%f error=%f+i%f\n", x.real(), x.imag(), y.real(), y.imag(), d.real(), m_error.real(), m_error.imag()); + if (update) + { + Real mu = 0.001f; + for (int l = 0; l < m_taps.size(); l++) { + m_taps[l] = m_taps[l] - mu * std::conj(y) * m_delay[l] * error; + } + } + m_error = error; + + return y; +} + +LMSEqualizer::LMSEqualizer(int samplesPerSymbol) : + Equalizer(samplesPerSymbol) +{ +} + +Complex LMSEqualizer::processOneSample(Complex x, bool update, bool training) +{ + for (int i = m_taps.size() - 1; i > 0; i--) { + m_delay[i] = m_delay[i-1]; + } + m_delay[0] = x; + + Complex y = 0; + for (int i = 0; i < m_taps.size(); i++) { + y += std::conj(m_taps[i]) * m_delay[i]; // Could avoid conj here, by instead using mu * std::conj(m_delay[l]) * m_error below. + } + + Complex d = (training ? x.real() : y.real()) >= 0.0f ? Complex(1.0f, 0.0f) : Complex(-1.0f, 0.0f); + m_error = d - y; + if (update) + { + Real mu = 0.1f; + for (int l = 0; l < m_taps.size(); l++) { + m_taps[l] = m_taps[l] + mu * m_delay[l] * std::conj(m_error); + } + } + + return y; +} + InmarsatDemodSink::InmarsatDemodSink(InmarsatDemod *stdCDemod) : m_scopeSink(nullptr), m_inmarsatDemod(stdCDemod), @@ -158,6 +310,9 @@ InmarsatDemodSink::InmarsatDemodSink(InmarsatDemod *stdCDemod) : m_magsqCount(0), m_messageQueueToChannel(nullptr), m_decoder(9), + m_symbolCounter(0), + m_syncedToUW(false), + m_equalizer(nullptr), m_costasLoop(10*2*M_PI/100.0, 2), m_rrcBufferIndex(0), m_sampleBufferIndexA(0), @@ -188,12 +343,14 @@ InmarsatDemodSink::InmarsatDemodSink(InmarsatDemod *stdCDemod) : applySettings(m_settings, QStringList(), true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); - } InmarsatDemodSink::~InmarsatDemodSink() { delete m_rrcFilter; + m_rrcFilter = nullptr; + delete m_equalizer; + m_equalizer = nullptr; } void InmarsatDemodSink::sampleToScopeA(Complex sample, Real magsq, Complex postAGC, Real agcGain, Real agcAvg, Complex postCFO) @@ -209,7 +366,7 @@ void InmarsatDemodSink::sampleToScopeA(Complex sample, Real magsq, Complex postA } } -void InmarsatDemodSink::sampleToScopeB(Complex rrc, Complex tedError, Complex tedErrorSum, Complex ref, Complex derot, int bit, Real mu) +void InmarsatDemodSink::sampleToScopeB(Complex rrc, Complex tedError, Complex tedErrorSum, Complex ref, Complex derot, Complex eq, Complex eqError, int bit, Real mu) { if (m_scopeSink) { @@ -218,7 +375,9 @@ void InmarsatDemodSink::sampleToScopeB(Complex rrc, Complex tedError, Complex te m_sampleBuffer[7][m_sampleBufferIndexB] = tedErrorSum; m_sampleBuffer[8][m_sampleBufferIndexB] = ref; m_sampleBuffer[9][m_sampleBufferIndexB] = derot; - m_sampleBuffer[10][m_sampleBufferIndexB] = Complex(bit, mu); + m_sampleBuffer[10][m_sampleBufferIndexB] = eq; + m_sampleBuffer[11][m_sampleBufferIndexB] = eqError; + m_sampleBuffer[12][m_sampleBufferIndexB] = Complex(bit, mu); m_sampleBufferIndexB++; if (m_sampleBufferIndexB == SAMPLE_BUFFER_SIZE) { @@ -266,6 +425,16 @@ void InmarsatDemodSink::feed(const SampleVector::const_iterator& begin, const Sa } } +// Wrap to range [-0.5, 0.5) +static Real wrap(Real v) +{ + if (v > 0.0f) { + return fmod(v + 0.5f, 1.0f) - 0.5f; + } else { + return fmod(v - 0.5f, 1.0f) + 0.5f; + } +} + void InmarsatDemodSink::processOneSample(Complex &ci) { // Calculate average and peak levels for level meter @@ -275,8 +444,7 @@ void InmarsatDemodSink::processOneSample(Complex &ci) m_movingAverage(magsq); m_magsq = m_movingAverage.asDouble(); m_magsqSum += magsq; - if (magsq > m_magsqPeak) - { + if (magsq > m_magsqPeak) { m_magsqPeak = magsq; } m_magsqCount++; @@ -345,7 +513,7 @@ void InmarsatDemodSink::processOneSample(Complex &ci) // Symbol synchronizer adjustment m_mu = m_kp * m_error + m_ki * m_errorSum; // Positive error is late - //m_mu = std::clamp(m_mu, -0.5f, 0.5f); + m_mu = wrap(m_mu); int adjustment = (int)round(m_mu * SAMPLES_PER_SYMBOL); @@ -370,10 +538,55 @@ void InmarsatDemodSink::processOneSample(Complex &ci) m_locked = m_lockAverage.instantAverage() > lockThresh; //qDebug() << "m_lockAverage.instantAverage()" << m_lockAverage.instantAverage(); + // Equalizer (runs at symbol rate) + if ( (m_settings.m_equalizer == InmarsatDemodSettings::CMA) + || (m_settings.m_equalizer == InmarsatDemodSettings::LMS && m_syncedToUW) + ) + { + m_eq = m_equalizer->processOneSample(m_derot, true, false); + } else { + m_eq = m_derot; + } + // Symbol to bit - m_bit = m_derot.real() >= 0; + m_bit = m_eq.real() >= 0; m_bits[m_bitCount++] = m_bit; + // Look for Unique Words to synchronize to start of frame + m_symbolBuffer.push(m_bit, m_eq); + if (m_symbolBuffer.checkUW()) + { + if (m_syncedToUW && (m_symbolCounter != m_symbolBuffer.size() - 1)) { + qDebug() << "Already synced" << m_symbolCounter << m_symbolBuffer.size(); + } + m_symbolCounter = 0; + if (!m_syncedToUW && (m_settings.m_equalizer == InmarsatDemodSettings::LMS)) + { + // Train equalizer on unique word symbols + for (int i = 0; i < 64; i++) { + m_equalizer->processOneSample(m_symbolBuffer.getSymbol(i * 162), true, true); + } + for (int i = 0; i < 64; i++) { + m_equalizer->processOneSample(m_symbolBuffer.getSymbol(i * 162 + 1), true, true); + } + } + m_syncedToUW = true; + } + else if (m_syncedToUW) + { + // Allow 3 frames without UW before assuming sync loss (only currently effects whether we run LMS eq) + // Could allow a certain number of bit errors in Unique Words instead + if (m_symbolCounter < 3 * m_symbolBuffer.size()) + { + m_symbolCounter++; + } + else + { + m_symbolCounter = 0; + m_syncedToUW = false; + } + } + // Pass demodulated bits to decoder if (m_bitCount == DEMODULATOR_SYMBOLSPERCHUNK) { @@ -381,17 +594,19 @@ void InmarsatDemodSink::processOneSample(Complex &ci) m_bitCount = 0; } + // Calculate EVM + m_evm = m_symbolBuffer.evm(); + m_sampleIdx = 0; } else { m_sampleIdx++; } - } // Send signals to scope that are updated only whenever the RRC filter output is updated - sampleToScopeB(rrc, m_error, m_errorSum, m_ref, m_derot, m_bit*2-1, m_mu); + sampleToScopeB(rrc, m_error, m_errorSum, m_ref, m_derot, m_eq, m_equalizer ? m_equalizer->getError() : Complex(0.0), m_bit*2-1, m_mu); } } @@ -434,7 +649,7 @@ void InmarsatDemodSink::decodeBits() } } -void InmarsatDemodSink::getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq) const +void InmarsatDemodSink::getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq, Real &evm, bool &synced) const { locked = m_locked; coarseFreqCurrent = m_frequencyOffsetEst.getCurrentFreqHz(); @@ -442,6 +657,8 @@ void InmarsatDemodSink::getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real coarseFreq = m_frequencyOffsetEst.getFreqHz(); coarseFreqPower = m_frequencyOffsetEst.getFreqMagSq(); fineFreq = m_costasLoop.getFreq() * COSTAS_LOOP_RATE / (2 * M_PI); + evm = m_evm; + synced = m_syncedToUW; } void InmarsatDemodSink::applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force) @@ -513,6 +730,17 @@ void InmarsatDemodSink::applySettings(const InmarsatDemodSettings& settings, con m_ki = 0.01f; } + if (settingsKeys.contains("equalizer") || force) + { + delete m_equalizer; + m_equalizer = nullptr; + if (settings.m_equalizer == InmarsatDemodSettings::CMA) { + m_equalizer = new CMAEqualizer(1); + } else if (settings.m_equalizer == InmarsatDemodSettings::LMS) { + m_equalizer = new LMSEqualizer(1); + } + } + if (force) { m_settings = settings; } else { diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h index 6c74b7f17..9f859d43d 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h @@ -39,6 +39,7 @@ class ChannelAPI; class InmarsatDemod; class ScopeVis; +// Automatic Gain Control class AGC { public: AGC(); @@ -77,6 +78,52 @@ private: Real magSq(int bin) const; }; +// Circular symbol/bit buffer for unique word detection, EVM calculation and equalizer training +class SymbolBuffer { +public: + SymbolBuffer(int size=64*162); + void push(quint8 bit, Complex symbol); + bool checkUW() const; + Complex getSymbol(int idx) const; + float evm() const; + qsizetype size() const { return m_bits.size(); } +private: + QVector m_bits; + QVector m_symbols; + QVector m_error; + double m_totalError; + int m_idx; + int m_count; +}; + +class Equalizer { +public: + Equalizer(int samplesPerSymbol); + virtual Complex processOneSample(Complex x, bool update, bool training=false) = 0; + Complex getError() const { return m_error; } + void printTaps() const; +protected: + int m_samplesPerSymbol; + QVector m_delay; + QVector m_taps; + int m_idx; + Complex m_error; +}; + +// Constant Modulus Equalizer +class CMAEqualizer : public Equalizer { +public: + CMAEqualizer(int samplesPerSymbol); + Complex processOneSample(Complex x, bool update, bool training=false) override; +}; + +// Least Mean Square Equalizer +class LMSEqualizer : public Equalizer { +public: + LMSEqualizer(int samplesPerSymbol); + Complex processOneSample(Complex x, bool update, bool training=false) override; +}; + class InmarsatDemodSink : public ChannelSampleSink { public: InmarsatDemodSink(InmarsatDemod *stdcDemod); @@ -110,7 +157,8 @@ public: m_magsqCount = 0; } - void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, Real &fineFreq) const; + void getPLLStatus(bool &locked, Real &coarseFreqCurrent, Real &coarseFreqCurrentPower, Real &coarseFreq, Real &coarseFreqPower, + Real &fineFreq, Real& evm, bool &synced) const; private: struct MagSqLevelsStore @@ -148,6 +196,15 @@ private: inmarsatc::decoder::Decoder m_decoder; inmarsatc::frameParser::PacketDecoder m_parser; + SymbolBuffer m_symbolBuffer; + int m_symbolCounter; + bool m_syncedToUW; + + Equalizer *m_equalizer; + Complex m_eq; + Complex m_eqError; + float m_evm; + CostasLoop m_costasLoop; Complex m_ref; Complex m_derot; @@ -192,7 +249,7 @@ private: void decodeBits(); MessageQueue *getMessageQueueToChannel() { return m_messageQueueToChannel; } void sampleToScopeA(Complex sample, Real magsq, Complex postAGC, Real agcGain, Real agcAvg, Complex postCFO); - void sampleToScopeB(Complex rrc, Complex tedError, Complex tedErrorSum, Complex ref, Complex derot, int bit, Real mu); + void sampleToScopeB(Complex rrc, Complex tedError, Complex tedErrorSum, Complex ref, Complex derot, Complex eq, Complex eqEerror, int bit, Real mu); }; #endif // INCLUDE_INMARSATDEMODSINK_H diff --git a/plugins/channelrx/demodinmarsat/readme.md b/plugins/channelrx/demodinmarsat/readme.md index 52cb213f0..271741550 100644 --- a/plugins/channelrx/demodinmarsat/readme.md +++ b/plugins/channelrx/demodinmarsat/readme.md @@ -2,7 +2,7 @@

    Introduction

    -This plugin can be used to demodulate Inmarsat C data packets. They are transmitted by four geostationary satellites. +This plugin can be used to demodulate Inmarsat C data packets. They are transmitted by four geostationary satellites, using right-hand circular polarization (RHCP). The packets are BPSK modulated with a symbol rate of 1,200 symbols/s and a data rate of 600 bit/s. The packets are decoded from within frames of 639 bytes that take 8.64 seconds to receive. @@ -47,52 +47,68 @@ Average total power in dB relative to a +/- 1.0 amplitude signal received in the

    4: RF Bandwidth

    -This specifies the bandwidth of a LPF that is applied to the input signal to limit the RF bandwidth. This should be at least 3 kHz. +This specifies the bandwidth of a LPF that is applied to the input signal to limit the RF bandwidth. This should be at least 2.4 kHz. -

    5: PLL Status

    +

    5: Equalizer

    -The PLL status icon shows whether the Costas Loop in the demodulator is locked. When unlocked, the padlock icon will appear unlocked. When locked, the padlock icon will appear locked and the background will be green. +The Equalizer combobox allows selection of an equalizer to use, which can help to overcome some forms of channel distortion. Options are: + + - None: No equalizer will be used. + - CMA: Constant Modulus Algorithm equalizer. + - LMS: Least Mean Squares equalizer. + +

    6: EVM

    + +EVM (Error Vector Magnitude) measurement in % over the last 10,240 received symbols (one frames worth). Lower values indicate better quality signals. + +

    7: Status

    + +The status icon shows the status of the demodulator: + + - When the background is green, the demodulator is synchronized to the start of a frame. + - When the background is yellow, the demodulator Costas Loop is locked, but it is not yet synchronized to the start of a frame. + - When the background is grey, the Costas Loop is not locked, which suggests either no signal or too weak a signal to lock on to. Checking the icon will diplay additional PLL status and parameters, but these typically shouldn't require modification. -

    6: UDP

    +

    8: UDP

    -When checked, received packets are forwarded to the specified UDP address (7) and port (8). +When checked, received packets are forwarded to the specified UDP address (9) and port (10). -

    7: UDP address

    +

    9: UDP address

    IP address of the host to forward received packets to via UDP. -

    8: UDP port

    +

    10: UDP port

    UDP port number to forward received packets to. -

    9: Filter Packets by Type

    +

    11: Filter Packets by Type

    Entering a regular expression in the Type field displays only packets where the type, displayed in the Type column, matches the regular expression. -

    10: Filter Packets by Message

    +

    12: Filter Packets by Message

    Entering a regular expression in the Message field displays only packets where the message, displayed in the Message column, matches the regular expression. -

    11: Use Date and Time from File

    +

    13: Use Date and Time from File

    When checked, if the source device is a File Input device, the date and time used for packet reception time is taken from the file playback time. Otherwise, the current system clock time is used. -

    12: Start/stop Logging Packets to .csv File

    +

    14: Start/stop Logging Packets to .csv File

    When checked, writes all received packets to a .csv file. -

    13: .csv Log Filename

    +

    15: .csv Log Filename

    Click to specify the name of the .csv file which received packets are logged to. -

    14: Read Data from .csv File

    +

    16: Read Data from .csv File

    Click to specify a previously written .csv log file, which is read and used to update the table. -

    15: Clear Packets from table

    +

    17: Clear Packets from table

    Pressing this button clears all packets from the tables. From b668d41aa41be8eed35b80d847f3a2d71249f656 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 12 Jan 2026 18:44:30 +0000 Subject: [PATCH 29/31] Tidy up --- .../demodinmarsat/inmarsatdemodsink.cpp | 17 ++--------------- .../channelrx/demodinmarsat/inmarsatdemodsink.h | 2 +- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp index 02140b507..eeba312db 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp @@ -40,7 +40,6 @@ Complex AGC::processOneSample(const Complex& iq, bool locked) Complex z = m_gain * iq; m_agcMovingAverage(abs(z)); - //qDebug() << "abs" << abs(z) << "m_agcGain" << m_agcGain << "m_agcMovingAverage.instantAverage()" << m_agcMovingAverage.instantAverage(); Real agcRef = 1.0f; // Target amplitude Real agcMu = locked ? 0.03 : 0.3; // How fast we want to respond to changes in average @@ -119,7 +118,6 @@ void FrequencyOffsetEstimate::processOneSample(Complex& iq, bool locked) idx -= m_fftSize; // Negative freqs are in second half } m_currentFreqOffsetHz = ((idx * hzPerBin) / 2); // Divide by two, as the squaring operation doubles the freq - //qDebug() << "Max val" << maxVal << "maxIdx" << maxIdx << "freqOffset" << m_freqOffsetHz; Real magRatio = sqrt(m_currentFreqMagSq) / sqrt(m_freqMagSq); @@ -133,7 +131,6 @@ void FrequencyOffsetEstimate::processOneSample(Complex& iq, bool locked) m_freqOffsetBin = maxIdx; m_freqOffsetHz = m_currentFreqOffsetHz; m_freqOffsetNCO.setFreq(-m_freqOffsetHz, InmarsatDemodSettings::CHANNEL_SAMPLE_RATE); - //qDebug() << "Setting CFO" << m_freqOffsetHz << "(" << CalcDb::dbPower(m_currentFreqMagSq) << "/" << CalcDb::dbPower(m_freqMagSq) << ")"; } } @@ -257,7 +254,6 @@ Complex CMAEqualizer::processOneSample(Complex x, bool update, bool training) Real mod = abs(y); Real R = 1.0f; Real error = mod * mod - R * R; - //printf("x=%f+i%f y=%f+i%f d=%f error=%f+i%f\n", x.real(), x.imag(), y.real(), y.imag(), d.real(), m_error.real(), m_error.imag()); if (update) { Real mu = 0.001f; @@ -327,7 +323,7 @@ InmarsatDemodSink::InmarsatDemodSink(InmarsatDemod *stdCDemod) : m_sampleIdx = 0; - m_adjustedSPS = m_maxSamplesPerSymbol; // ok: 20, 15, fail: 10, 9, 5 + m_adjustedSPS = MAX_SAMPLES_PER_SYMBOL; m_adjustment = 0; m_totalSampleCount = 0; m_error = 0; @@ -487,7 +483,7 @@ void InmarsatDemodSink::processOneSample(Complex &ci) m_totalSampleCount++; m_filteredSamples.enqueue(rrc); - while (m_filteredSamples.size() > m_maxSamplesPerSymbol) + while (m_filteredSamples.size() > MAX_SAMPLES_PER_SYMBOL) { m_filteredSamples.dequeue(); @@ -499,9 +495,6 @@ void InmarsatDemodSink::processOneSample(Complex &ci) int midIdx = currentIdx - (SAMPLES_PER_SYMBOL/2.0f); int previousIdx = currentIdx - SAMPLES_PER_SYMBOL; - //qDebug() << "diff" << (m_prevTotalSampleCount - m_totalSampleCount); - //qDebug() << "m_totalSampleCount" << m_totalSampleCount << "m_prevTotalSampleCount" << m_prevTotalSampleCount << "diff" << (m_prevTotalSampleCount - m_totalSampleCount) << "currentIdx" << currentIdx << "previousIdx" << previousIdx << "midIdx" << midIdx << "mu" << m_mu; - Complex previous = m_filteredSamples[previousIdx]; Complex mid = m_filteredSamples[midIdx]; Complex current = m_filteredSamples[currentIdx]; @@ -517,8 +510,6 @@ void InmarsatDemodSink::processOneSample(Complex &ci) int adjustment = (int)round(m_mu * SAMPLES_PER_SYMBOL); - //qDebug() << "m_mu" << m_mu << "m_error" << m_error << "m_errorSum" << m_errorSum << "adjustment" << adjustment; - m_adjustedSPS = SAMPLES_PER_SYMBOL - m_adjustment; // Positve mu indicates late, so reduce time to next sample m_adjustment = adjustment; m_prevTotalSampleCount = m_totalSampleCount; @@ -536,7 +527,6 @@ void InmarsatDemodSink::processOneSample(Complex &ci) m_lockAverage(iNorm - qNorm); float lockThresh = 0.45; m_locked = m_lockAverage.instantAverage() > lockThresh; - //qDebug() << "m_lockAverage.instantAverage()" << m_lockAverage.instantAverage(); // Equalizer (runs at symbol rate) if ( (m_settings.m_equalizer == InmarsatDemodSettings::CMA) @@ -556,9 +546,6 @@ void InmarsatDemodSink::processOneSample(Complex &ci) m_symbolBuffer.push(m_bit, m_eq); if (m_symbolBuffer.checkUW()) { - /*if (m_syncedToUW && (m_symbolCounter != m_symbolBuffer.size() - 1)) { - qDebug() << "Already synced" << m_symbolCounter << m_symbolBuffer.size(); - }*/ m_symbolCounter = 0; if (!m_syncedToUW && (m_settings.m_equalizer == InmarsatDemodSettings::LMS)) { diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h index 9f859d43d..362310fa7 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h @@ -219,7 +219,7 @@ private: int m_rrcBufferIndex; static const int SAMPLES_PER_SYMBOL = InmarsatDemodSettings::CHANNEL_SAMPLE_RATE / InmarsatDemodSettings::BAUD_RATE; - static const int m_maxSamplesPerSymbol = SAMPLES_PER_SYMBOL * 2; + static const int MAX_SAMPLES_PER_SYMBOL = SAMPLES_PER_SYMBOL * 2; static const int COSTAS_LOOP_RATE = InmarsatDemodSettings::BAUD_RATE; // Costas loop is run at symbol rate int m_sampleIdx; From fd1adf679453d820ecd34627522cbdf52983e9b1 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 12 Jan 2026 18:56:32 +0000 Subject: [PATCH 30/31] Fix warnings --- plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp | 4 ++-- plugins/channelrx/demodinmarsat/inmarsatdemodsink.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp index eeba312db..0cb06b4f0 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.cpp @@ -191,8 +191,8 @@ bool SymbolBuffer::checkUW() const bits1 |= (qulonglong)m_bits[idx1] << (63-i); bits2 |= (qulonglong)m_bits[idx2] << (63-i); } - return ( (bits1 == 0x07eacdda4e2f28c2) - || (bits1 == ~0x07eacdda4e2f28c2) + return ( (bits1 == 0x07eacdda4e2f28c2ULL) + || (bits1 == ~0x07eacdda4e2f28c2ULL) ) && (bits1 == bits2); } diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h index 362310fa7..62d8f0fe9 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodsink.h @@ -99,6 +99,7 @@ private: class Equalizer { public: Equalizer(int samplesPerSymbol); + virtual ~Equalizer() {} virtual Complex processOneSample(Complex x, bool update, bool training=false) = 0; Complex getError() const { return m_error; } void printTaps() const; From b6ea86931624aa4e46778e1703d902ec047f015b Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 12 Jan 2026 18:58:41 +0000 Subject: [PATCH 31/31] Fix for Qt5 --- plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp index 7caf6ee97..e9be80e43 100644 --- a/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp +++ b/plugins/channelrx/demodinmarsat/inmarsatdemodgui.cpp @@ -1968,7 +1968,7 @@ void InmarsatDemodGUI::makeUIConnections() { QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &InmarsatDemodGUI::on_deltaFrequency_changed); QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &InmarsatDemodGUI::on_rfBW_valueChanged); - QObject::connect(ui->equalizer, &QComboBox::currentIndexChanged, this, &InmarsatDemodGUI::on_equalizer_currentIndexChanged); + QObject::connect(ui->equalizer, QOverload::of(&QComboBox::currentIndexChanged), this, &InmarsatDemodGUI::on_equalizer_currentIndexChanged); QObject::connect(ui->rrcRolloff, &QDial::valueChanged, this, &InmarsatDemodGUI::on_rrcRolloff_valueChanged); QObject::connect(ui->pllBW, &QDial::valueChanged, this, &InmarsatDemodGUI::on_pllBW_valueChanged); QObject::connect(ui->ssBW, &QDial::valueChanged, this, &InmarsatDemodGUI::on_ssBW_valueChanged);