From 4a293e10f65231c044ce2a29f8babd1038810e1a Mon Sep 17 00:00:00 2001 From: Vladislav Ostapov Date: Thu, 7 Nov 2024 13:59:20 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D1=87?= =?UTF-8?q?=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA,=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D1=83=20=D1=80=D1=83=D0=B4=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dependencies/control_system/client/main.cpp | 40 +++++ .../control_system/client/system_client.cpp | 45 ++++- .../control_system/client/system_client.h | 2 + .../control_system/common/protocol_commands.h | 28 ++- .../terminal_api/ControlProtoCInterface.h | 19 ++ src/terminal_api_driver.cpp | 70 +++----- static/main.html | 164 +++++++++++++----- 7 files changed, 283 insertions(+), 85 deletions(-) diff --git a/dependencies/control_system/client/main.cpp b/dependencies/control_system/client/main.cpp index 9023f31..15541c9 100644 --- a/dependencies/control_system/client/main.cpp +++ b/dependencies/control_system/client/main.cpp @@ -6,6 +6,46 @@ std::shared_mutex mtx; TSID sid_counter { 0 }; std::map> clients; + +EXTERNC CP_Result CP_SetBUC_LNB_settings(TSID sid, buc_lnb_settings &settings){ + std::shared_lock lock(mtx); + try + { + if (clients.find(sid) == clients.end()) + return ERROR; + auto settings_ = reinterpret_cast(settings); + auto resp = clients[sid]->send_set_buc_lnb_settings(settings_); + if (resp == response_type::error) + return ERROR; + return OK; + } + + catch(const std::exception& e) + { + return ERROR; + } +} +EXTERNC CP_Result CP_GetBUC_LNB_settings(TSID sid, buc_lnb_settings &settings){ + std::shared_lock lock(mtx); + try + { + if (clients.find(sid) == clients.end()) + return ERROR; + + buc_lnb_settings_com settings_com; + auto resp = clients[sid]->send_get_buc_lnb_settings(settings_com); + + if (resp == response_type::error) + return ERROR; + settings = reinterpret_cast(settings_com); + return OK; + } + + catch(const std::exception& e) + { + return ERROR; + } +} EXTERNC CP_Result CP_SetModulatorSettings(TSID sid, modulator_settings& settings){ std::shared_lock lock(mtx); try diff --git a/dependencies/control_system/client/system_client.cpp b/dependencies/control_system/client/system_client.cpp index 5eb190b..6b673b9 100644 --- a/dependencies/control_system/client/system_client.cpp +++ b/dependencies/control_system/client/system_client.cpp @@ -337,6 +337,17 @@ void system_client::data_received(const std::vector & data) break; } + case cmd_type::get_lnb_buc_settings: + { + if(cmd.rsp == response_type::ok) + { + cmd_lnb_buc_settings value; + iarchive(value); + data_from_serv = value; + } + break; + } + case cmd_type::get_demodulator_settings: { if(cmd.rsp == response_type::ok) @@ -801,7 +812,6 @@ response_type system_client::send_get_demodulator_settings(demodulator_settings_ cmd_header cmd_dpdi_header{curr_id, cmd_type::get_demodulator_settings}; cmd_demodulator_settings demodulator; send_to_socket(cmd_dpdi_header, demodulator); - std::cout << "END GET_DEMODULATOR SETTINGS SEND TO SOCKET" << std::endl; std::any data_from_serv; auto result = wait_for_response(curr_id, cmd_type::get_demodulator_settings, data_from_serv); @@ -841,6 +851,39 @@ response_type system_client::send_get_modulator_state(modulator_state_com &modul return result; } +response_type system_client::send_set_buc_lnb_settings(buc_lnb_settings_com &settings){ + std::scoped_lock lock(cmd_in_progress_mtx); + uint32_t curr_id { ++cmd_id }; + cmd_header cmd_acm_header{curr_id, cmd_type::set_lnb_buc_settings}; + + cmd_lnb_buc_settings settings_; + settings_.buc_lnb = settings; + send_to_socket(cmd_acm_header, settings_); + + std::any data_to_serv; + + auto result = wait_for_response(curr_id, cmd_type::set_lnb_buc_settings, data_to_serv); + + return result; + +} + +response_type system_client::send_get_buc_lnb_settings(buc_lnb_settings_com &settings){ + std::scoped_lock lock(cmd_in_progress_mtx); + uint32_t curr_id { ++cmd_id }; + cmd_header cmd_buc_lnb_header{curr_id, cmd_type::get_lnb_buc_settings}; + cmd_lnb_buc_settings lnb_buc; + send_to_socket(cmd_buc_lnb_header, lnb_buc); + + std::any data_from_serv; + + auto result = wait_for_response(curr_id, cmd_type::get_lnb_buc_settings, data_from_serv); + if (data_from_serv.has_value()) + settings = std::any_cast(data_from_serv).buc_lnb; + + return result; +} + response_type system_client::send_get_device_state(device_state_com &device_state ){ std::scoped_lock lock(cmd_in_progress_mtx); uint32_t curr_id { ++cmd_id }; diff --git a/dependencies/control_system/client/system_client.h b/dependencies/control_system/client/system_client.h index 66cb9fb..99a26da 100644 --- a/dependencies/control_system/client/system_client.h +++ b/dependencies/control_system/client/system_client.h @@ -59,6 +59,8 @@ public: response_type send_get_modulator_settings(modulator_settings_com &settings); response_type send_get_demodulator_settings(demodulator_settings_com &settings); + response_type send_set_buc_lnb_settings(buc_lnb_settings_com &settings); + response_type send_get_buc_lnb_settings(buc_lnb_settings_com &settings); response_type send_set_dpdi_params(dpdi_parameters &dpdi_params); response_type send_get_dpdi_params(dpdi_parameters &dpdi_params); diff --git a/dependencies/control_system/common/protocol_commands.h b/dependencies/control_system/common/protocol_commands.h index addaf28..f71a494 100644 --- a/dependencies/control_system/common/protocol_commands.h +++ b/dependencies/control_system/common/protocol_commands.h @@ -120,6 +120,21 @@ struct device_state_com{ double pl_temp; }; +enum class voltage_lnb_com{ + DISABLE = 0, _13V, _18V, _24V +}; +enum class voltage_buc_com{ + DISABLE = 0, _24V, _48V +}; +struct buc_lnb_settings_com +{ + voltage_lnb_com lnb; + bool is_ref_10MHz_lnb = false; + voltage_buc_com buc; + bool is_ref_10MHz_buc = false; + bool is_ref_10MHz_output = false; + bool is_save_current_state = false; +}; enum class name_classes_qos { realtime1 = 0, @@ -373,7 +388,9 @@ enum class cmd_type set_modulator_settings = 35, set_demodulator_settings = 36, get_modulator_settings = 37, - get_demodulator_settings = 38 + get_demodulator_settings = 38, + set_lnb_buc_settings = 39, + get_lnb_buc_settings = 40 }; struct cmd_lbq_params @@ -387,6 +404,15 @@ struct cmd_lbq_params } }; +struct cmd_lnb_buc_settings{ + buc_lnb_settings_com buc_lnb; + template + void serialize(Archive & archive) + { + archive(buc_lnb.buc, buc_lnb.is_ref_10MHz_buc, buc_lnb.lnb,buc_lnb.is_ref_10MHz_lnb, buc_lnb.is_ref_10MHz_output, buc_lnb.is_save_current_state); + } +}; + struct cmd_get_cinc_state { CinC_state_com cinc_state; diff --git a/dependencies/control_system/include/terminal_api/ControlProtoCInterface.h b/dependencies/control_system/include/terminal_api/ControlProtoCInterface.h index 8b78a6f..24bda04 100644 --- a/dependencies/control_system/include/terminal_api/ControlProtoCInterface.h +++ b/dependencies/control_system/include/terminal_api/ControlProtoCInterface.h @@ -156,6 +156,25 @@ struct demodulator_settings EXTERNC CP_Result CP_SetDemodulatorSettings(TSID sid, demodulator_settings& settings); EXTERNC CP_Result CP_GetDemodulatorSettings(TSID sid, demodulator_settings& settings); +enum class voltage_lnb{ + DISABLE = 0, _13V, _18V, _24V +}; +enum class voltage_buc{ + DISABLE = 0, _24V, _48V +}; +struct buc_lnb_settings +{ + voltage_lnb lnb; + bool is_ref_10MHz_lnb = false; + voltage_buc buc; + bool is_ref_10MHz_buc = false; + bool is_ref_10MHz_output = false; + bool is_save_current_state = false; +}; + +EXTERNC CP_Result CP_SetBUC_LNB_settings(TSID sid, buc_lnb_settings &settings); +EXTERNC CP_Result CP_GetBUC_LNB_settings(TSID sid, buc_lnb_settings &settings); + EXTERNC CP_Result CP_GetModulatorParams(TSID sid, const char *modulator_param, uint32_t *value); diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 42911d7..ced1f7c 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -152,7 +152,7 @@ std::string api_driver::ApiDriver::loadTerminalState() const { // структура температур девайса result << ",\n\"device.adrv\":"; writeDouble(result, device.adrv_temp, 1); result << ",\"device.fpga\":"; writeDouble(result, device.pl_temp, 1); - result << ",\"device.zync\":"; writeDouble(result, device.zynq_temp, 1); + result << ",\"device.zynq\":"; writeDouble(result, device.zynq_temp, 1); result << "}"; @@ -166,33 +166,7 @@ void api_driver::ApiDriver::resetPacketStatistics() const { } std::string api_driver::ApiDriver::loadSettings() const { - /* -param: { - cinc: { - cinc.mode: null, // 'positional' | 'delay' - cinc.searchBandwidth: 0, // полоса поиска в кГц - cinc.position.station.latitude: 0, - cinc.position.station.longitude: 0, - cinc.position.satelliteLongitude: 0, - cinc.delayMin: 0, - cinc.delayMax: 0 - }, - buc: { - buc.refClk10M: false, // подача опоры 10MHz - buc.powering: 0 // 0, 24, 48 - }, - lnb: { - lnb.refClk10M: false, // подача опоры 10MHz - lnb.powering: 0 // 0, 13, 18, 24 - }, - serviceSettings: { - serviceSettings.refClk10M: false, // подача опоры 10MHz - serviceSettings.startDelay: 0, // задержка включения передачи - serviceSettings.autoStart: false - }, -}, - */ - constexpr auto* UNKNOWN = "\"?\""; + // constexpr auto* UNKNOWN = "\"?\""; modulator_settings modSettings{}; CP_GetModulatorSettings(sid, modSettings); @@ -202,19 +176,21 @@ param: { demodulator_settings demodSettings{}; CP_GetDemodulatorSettings(sid, demodSettings); ACM_parameters_serv_ acmSettings{}; - // CP_GetAcmParams(sid, &acmSettings); + CP_GetAcmParams(sid, &acmSettings); DPDI_parmeters dpdiSettings{}; - // CP_GetDpdiParams(sid, &dpdiSettings); + CP_GetDpdiParams(sid, &dpdiSettings); + buc_lnb_settings bucLnb{}; + CP_GetBUC_LNB_settings(sid, bucLnb); std::stringstream result; - result << "{\n\"general.iscInC\":" << boolAsStr(modSettings.is_cinc); + result << "{\n\"general.isCinC\":" << boolAsStr(modSettings.is_cinc); result << ",\"general.txEn\":" << boolAsStr(modSettings.tx_is_on); 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\":"; writeDouble(result, modSettings.rollof); + result << ",\"tx.rolloff\":" << static_cast(modSettings.rollof * 100); result << ",\"tx.cymRate\":" << modSettings.baudrate; result << ",\"tx.centerFreq\":"; writeDouble(result, modSettings.central_freq_in_kGz, 3); @@ -224,18 +200,18 @@ param: { result << ",\"dvbs2.ccm_modcod\":" << (modulatorModcod >> 4); result << ",\"dvbs2.acm_maxModcod\":" << (acmSettings.max_modcod >> 2); result << ",\"dvbs2.acm_minModcod\":" << (acmSettings.min_modcod >> 2); - result << ",\"dvbs2.snrReserve\":" << UNKNOWN; - result << ",\"dvbs2.servicePacketPeriod\":" << UNKNOWN; + result << ",\"dvbs2.snrReserve\":"; writeDouble(result, acmSettings.min_attenuation); + 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\":" << UNKNOWN; + result << ",\"acm.requiredSnr\":"; writeDouble(result, acmSettings.snr_treashold_acm); result << ",\n\"rx.gainMode\":" << (demodSettings.is_aru_on ? "\"auto\"" : "\"manual\""); result << ",\"rx.manualGain\":"; writeDouble(result, demodSettings.gain); result << ",\"rx.spectrumInversion\":" << boolAsStr(demodSettings.is_rvt_iq); - result << ",\"rx.rolloff\":"; writeDouble(result, demodSettings.rollof); + result << ",\"rx.rolloff\":" << static_cast(demodSettings.rollof * 100); result << ",\"rx.cymRate\":" << demodSettings.baudrate; result << ",\"rx.centerFreq\":"; writeDouble(result, demodSettings.central_freq_in_kGz); @@ -247,15 +223,23 @@ param: { result << ",\"cinc.delayMin\":" << dpdiSettings.min_delay; result << ",\"cinc.delayMax\":" << dpdiSettings.max_delay; - result << ",\n\"buc.refClk10M\":" << UNKNOWN; - result << ",\"buc.powering\":" << UNKNOWN; + result << ",\n\"buc.refClk10M\":" << boolAsStr(bucLnb.is_ref_10MHz_buc); + switch (bucLnb.buc) { + case voltage_buc::DISABLE: result << ",\"buc.powering\":0"; break; + case voltage_buc::_24V: result << ",\"buc.powering\":24"; break; + case voltage_buc::_48V: result << ",\"buc.powering\":48"; break; + } - result << ",\n\"lnb.refClk10M\":" << UNKNOWN; - result << ",\"lnb.powering\":" << UNKNOWN; + result << ",\n\"lnb.refClk10M\":" << boolAsStr(bucLnb.is_ref_10MHz_lnb); + switch (bucLnb.lnb) { + case voltage_lnb::DISABLE: result << ",\"lnb.powering\":0"; break; + case voltage_lnb::_13V: result << ",\"lnb.powering\":13"; break; + case voltage_lnb::_18V: result << ",\"lnb.powering\":18"; break; + case voltage_lnb::_24V: result << ",\"lnb.powering\":24"; break; + } - result << ",\n\"serviceSettings.refClk10M\":" << UNKNOWN; - result << ",\"serviceSettings.startDelay\":" << UNKNOWN; - result << ",\"serviceSettings.autoStart\":" << UNKNOWN; + result << ",\n\"serviceSettings.refClk10M\":" << boolAsStr(bucLnb.is_ref_10MHz_output); + result << ",\"serviceSettings.autoStart\":" << boolAsStr(bucLnb.is_save_current_state); result << "}"; return result.str(); diff --git a/static/main.html b/static/main.html index fe8eb5d..34075b5 100644 --- a/static/main.html +++ b/static/main.html @@ -13,7 +13,7 @@
Прием: Передача: - Тест: + Тест:
@@ -90,7 +90,7 @@ - +
Температура ADRV{{ stat_device.adrv }} °C
Температура ZYNC ULTRASUCK{{ stat_device.zync }} °C
Температура ZYNQ ULTRASUCK{{ stat_device.zynq }} °C
Температура FPGA{{ stat_device.fpga }} °C
@@ -133,9 +133,9 @@
@@ -309,8 +309,8 @@ -

Настройки режима CinC

-
+

Настройки режима CinC

+
- +

Настройки питания и опорного генератора

@@ -396,11 +396,7 @@ -

- Эти настройки пока недоступны, но скоро разработчик это поправит. А пока купи разработчику банку пива) + Эти настройки пока недоступны, но скоро разработчик это поправит. А пока купи разработчику банку пива колы)

-