From df4b990316fc290e2bbcda49170abed72e2442e3 Mon Sep 17 00:00:00 2001 From: Vladislav Ostapov Date: Tue, 12 Nov 2024 17:01:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20rx/tx?= =?UTF-8?q?=20+=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D1=82=D0=BA=D1=83=20=D0=B1=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=20=D1=81=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../control_system/common/protocol_commands.h | 3 +- .../terminal_api/ControlProtoCInterface.h | 1 + src/terminal_api_driver.cpp | 111 ++++++++++++++---- static/main.html | 7 +- 4 files changed, 90 insertions(+), 32 deletions(-) diff --git a/dependencies/control_system/common/protocol_commands.h b/dependencies/control_system/common/protocol_commands.h index 32be958..3d5f248 100644 --- a/dependencies/control_system/common/protocol_commands.h +++ b/dependencies/control_system/common/protocol_commands.h @@ -57,6 +57,7 @@ struct modulator_settings_com{ bool is_carrier; bool tx_is_on; bool is_cinc; + uint32_t modcod_tx; }; struct modulator_state_com{ @@ -476,7 +477,7 @@ struct cmd_modulator_settings archive(modulator_settings.attenuation,modulator_settings.baudrate, modulator_settings.central_freq_in_kGz, modulator_settings.is_carrier, modulator_settings.is_cinc, modulator_settings.is_save_current_state, modulator_settings.is_test_data, - modulator_settings.rollof, modulator_settings.tx_is_on); + modulator_settings.rollof, modulator_settings.tx_is_on, modulator_settings.modcod_tx); } }; diff --git a/dependencies/control_system/include/terminal_api/ControlProtoCInterface.h b/dependencies/control_system/include/terminal_api/ControlProtoCInterface.h index f0e90f7..64a1ba9 100644 --- a/dependencies/control_system/include/terminal_api/ControlProtoCInterface.h +++ b/dependencies/control_system/include/terminal_api/ControlProtoCInterface.h @@ -139,6 +139,7 @@ struct modulator_settings{ bool is_carrier; bool tx_is_on; bool is_cinc; + uint32_t modcod_tx; }; EXTERNC CP_Result CP_SetModulatorSettings(TSID sid, modulator_settings& settings); diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 54e0c43..ce42227 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -208,33 +208,49 @@ public: json = this->qosClassesJson; } - void setSettingsRxTx(bool readback = true) {} - - void setSettingsCinc(const DPDI_parmeters& s, bool readback = true) { - DPDI_parmeters tmp = s; + void setSettingsRxTx(modulator_settings& mod, demodulator_settings& demod, ACM_parameters_serv_& acm, bool readback = true) { std::lock_guard lock(this->cpApiMutex); CP_SetDmaDebug(sid, "begin_save_config", ""); - CP_SetDpdiParams(sid, tmp); + CP_SetModulatorSettings(this->sid, mod); + CP_SetDemodulatorSettings(this->sid, demod); + CP_SetAcmParams(this->sid, acm); if (readback) { - CP_GetDpdiParams(this->sid, &tmp); + CP_GetModulatorSettings(this->sid, mod); + CP_GetDemodulatorSettings(this->sid, demod); + CP_GetAcmParams(this->sid, &acm); { std::lock_guard lock2{this->settingsMutex}; - this->dpdiSettings = tmp; + this->modSettings = mod; + this->demodSettings = demod; + this->acmSettings = acm; } } CP_SetDmaDebug(sid, "save_config", ""); } - void setSettingsBucLnb(const buc_lnb_settings& bucLnb, bool readback = true) { - buc_lnb_settings tmp = bucLnb; + void setSettingsCinc(DPDI_parmeters& s, bool readback = true) { std::lock_guard lock(this->cpApiMutex); CP_SetDmaDebug(sid, "begin_save_config", ""); - CP_SetBUC_LNB_settings(this->sid, tmp); + CP_SetDpdiParams(sid, s); if (readback) { - CP_GetBUC_LNB_settings(this->sid, tmp); + CP_GetDpdiParams(this->sid, &s); { std::lock_guard lock2{this->settingsMutex}; - this->bucLnbSettings = tmp; + this->dpdiSettings = s; + } + } + CP_SetDmaDebug(sid, "save_config", ""); + } + + void setSettingsBucLnb(buc_lnb_settings& bucLnb, bool readback = true) { + std::lock_guard lock(this->cpApiMutex); + CP_SetDmaDebug(sid, "begin_save_config", ""); + CP_SetBUC_LNB_settings(this->sid, bucLnb); + if (readback) { + CP_GetBUC_LNB_settings(this->sid, bucLnb); + { + std::lock_guard lock2{this->settingsMutex}; + this->bucLnbSettings = bucLnb; } } CP_SetDmaDebug(sid, "save_config", ""); @@ -440,12 +456,12 @@ std::string api_driver::ApiDriver::loadSettings() const { buc_lnb_settings bucLnb{}; daemon->getSettings(&modSettings, &demodSettings, &acmSettings, &dpdiSettings, &bucLnb); - uint32_t modulatorModcod; - { - modulator_state ms{}; - daemon->getStatistics(&ms, nullptr, nullptr); - modulatorModcod = ms.modcod; - } + // uint32_t modulatorModcod; + // { + // modulator_state ms{}; + // daemon->getStatistics(&ms, nullptr, nullptr); + // modulatorModcod = ms.modcod; + // } std::stringstream result; result << "{\n\"general.isCinC\":" << boolAsStr(modSettings.is_cinc); @@ -453,25 +469,24 @@ std::string api_driver::ApiDriver::loadSettings() const { result << ",\"general.modulatorMode\":" << (modSettings.is_carrier ? "\"normal\"" : "\"test\""); result << ",\"general.autoStartTx\":" << boolAsStr(modSettings.is_save_current_state); result << ",\"general.isTestInputData\":" << boolAsStr(modSettings.is_test_data); - result << ",\n\"tx.attenuation\":"; writeDouble(result, modSettings.attenuation); result << ",\"tx.rolloff\":" << static_cast(modSettings.rollof * 100); result << ",\"tx.cymRate\":" << modSettings.baudrate; result << ",\"tx.centerFreq\":"; writeDouble(result, modSettings.central_freq_in_kGz, 3); + result << ",\"dvbs2.frameSizeNormal\":" << boolAsStr(!(modSettings.modcod_tx & 2)); + result << ",\"dvbs2.ccm_modcod\":" << (modSettings.modcod_tx >> 4); - result << ",\n\"dvbs2.isAcm\":" << boolAsStr(acmSettings.enable); - result << ",\"dvbs2.frameSizeNormal\":" << boolAsStr(!(modulatorModcod & 2)); // result << ",\"dvbs2.isPilots\":" << "null"; - result << ",\"dvbs2.ccm_modcod\":" << (modulatorModcod >> 4); + result << ",\n\"dvbs2.isAcm\":" << boolAsStr(acmSettings.enable); result << ",\"dvbs2.acm_maxModcod\":" << (acmSettings.max_modcod >> 2); result << ",\"dvbs2.acm_minModcod\":" << (acmSettings.min_modcod >> 2); - result << ",\"dvbs2.snrReserve\":"; writeDouble(result, acmSettings.min_attenuation); + result << ",\"dvbs2.snrReserve\":"; writeDouble(result, acmSettings.snr_treashold_acm); result << ",\"dvbs2.servicePacketPeriod\":" << acmSettings.period_pack; result << ",\n\"acm.en\":" << boolAsStr(acmSettings.enable_auto_atten); result << ",\"acm.maxAttenuation\":"; writeDouble(result, acmSettings.max_attenuation); result << ",\"acm.minAttenuation\":"; writeDouble(result, acmSettings.min_attenuation); - result << ",\"acm.requiredSnr\":"; writeDouble(result, acmSettings.snr_treashold_acm); + result << ",\"acm.requiredSnr\":"; writeDouble(result, acmSettings.snr_treashold); result << ",\n\"rx.gainMode\":" << (demodSettings.is_aru_on ? "\"auto\"" : "\"manual\""); result << ",\"rx.manualGain\":"; writeDouble(result, demodSettings.gain); @@ -516,6 +531,50 @@ std::string api_driver::ApiDriver::loadSettings() const { } void api_driver::ApiDriver::setRxTxSettings(boost::property_tree::ptree &pt) { + modulator_settings mod{}; + demodulator_settings demod{}; + ACM_parameters_serv_ acm{}; + + // для модулятора + mod.is_cinc = pt.get(json_path("general.isCinC", '/')); + mod.tx_is_on = pt.get(json_path("general.txEn", '/')); + auto tmp = pt.get(json_path("general.modulatorMode", '/')); + if (tmp == "normal") { mod.is_carrier = true; } + else if (tmp == "test") { mod.is_carrier = false; } + else { throw std::runtime_error("api_driver::ApiDriver::setRxTxSettings(): Wrong carrier mode: " + tmp); } + mod.is_save_current_state = pt.get(json_path("general.autoStartTx", '/')); + mod.is_test_data = pt.get(json_path("general.isTestInputData", '/')); + mod.attenuation = pt.get(json_path("tx.attenuation", '/')); + mod.rollof = pt.get(json_path("tx.rolloff", '/')) / 100.0; + mod.baudrate = pt.get(json_path("tx.cymRate", '/')); + mod.central_freq_in_kGz = pt.get(json_path("tx.centerFreq", '/')); + + const bool acmIsShortFrame = pt.get(json_path("dvbs2.frameSizeNormal", '/')); + mod.modcod_tx = (pt.get(json_path("dvbs2.ccm_modcod", '/')) << 2) | (acmIsShortFrame ? 2 : 0); + + // демодулятор + tmp = pt.get(json_path("rx.gainMode", '/')); + if (tmp == "normal") { demod.is_aru_on = true; } + else if (tmp == "test") { demod.is_aru_on = false; } + else { throw std::runtime_error("api_driver::ApiDriver::setRxTxSettings(): Wrong gain mode: " + tmp); } + demod.gain = pt.get(json_path("rx.manualGain", '/')); + demod.baudrate = pt.get(json_path("rx.cymRate", '/')); + demod.is_rvt_iq = pt.get(json_path("rx.spectrumInversion", '/')); + demod.rollof = pt.get(json_path("rx.rolloff", '/')) / 100.0; + demod.central_freq_in_kGz = pt.get(json_path("rx.centerFreq", '/')); + + // ACM + acm.enable = pt.get(json_path("dvbs2.isAcm", '/')); + acm.max_modcod = (pt.get(json_path("dvbs2.acm_maxModcod", '/')) << 2) | (acmIsShortFrame ? 2 : 0); + acm.min_modcod = (pt.get(json_path("dvbs2.acm_minModcod", '/')) << 2) | (acmIsShortFrame ? 2 : 0); + acm.snr_treashold_acm = pt.get(json_path("dvbs2.snrReserve", '/')); // запас ОСШ + acm.period_pack = pt.get(json_path("dvbs2.servicePacketPeriod", '/')); + acm.enable_auto_atten = pt.get(json_path("acm.en", '/')); + acm.max_attenuation = pt.get(json_path("dvbs2.maxAttenuation", '/')); + acm.min_attenuation = pt.get(json_path("dvbs2.minAttenuation", '/')); + acm.snr_treashold = pt.get(json_path("dvbs2.requiredSnr", '/')); // требуемый ОСШ + + daemon->setSettingsRxTx(mod, demod, acm); } void api_driver::ApiDriver::setCincSettings(boost::property_tree::ptree &pt) { @@ -541,8 +600,8 @@ void api_driver::ApiDriver::setCincSettings(boost::property_tree::ptree &pt) { s.longitude_sattelite_grad = std::get<0>(ctmp); s.longitude_sattelite_minute = std::get<1>(ctmp); - s.max_delay = pt.get(json_path("cinc.delayMax", '/')); - s.min_delay = pt.get(json_path("cinc.delayMin", '/')); + s.max_delay = pt.get(json_path("cinc.delayMax", '/')); + s.min_delay = pt.get(json_path("cinc.delayMin", '/')); this->daemon->setSettingsCinc(s); } diff --git a/static/main.html b/static/main.html index 76612fb..6ef8200 100644 --- a/static/main.html +++ b/static/main.html @@ -154,8 +154,6 @@ - -

Параметры передачи

-
+

Режим работы DVB-S2

-
-
+

Авто-регулировка мощности