diff --git a/.gitmodules b/.gitmodules index a686833..c91772d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,9 @@ [submodule "dependencies/control_system_client"] path = dependencies/control_system_client url = http://gitlab.devrss.vg/mf-tdma/protocol_processing/control_system_client.git +[submodule "dependencies/control_system_client_tdma"] + path = dependencies/control_system_client_tdma + url = http://gitlab.devrss.vg/mf-tdma/protocol_processing/control_system_client.git +[submodule "dependencies/control_system_client_shps"] + path = dependencies/control_system_client_shps + url = http://gitlab.devrss.vg/mf-tdma/protocol_processing/control_system_client.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 0552205..a7c928b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,12 +18,15 @@ endif() if("${MODEM_TYPE}" STREQUAL "SCPC") add_definitions(-DMODEM_IS_SCPC) message(STATUS "Selected SCPC modem") + add_subdirectory(dependencies/control_system_client) # подключение правильного control system client SCPC, ветка main elseif ("${MODEM_TYPE}" STREQUAL "TDMA") add_definitions(-DMODEM_IS_TDMA) message(STATUS "Selected TDMA modem") + add_subdirectory(dependencies/control_system_client_tdma) # подключение правильного control system client TDMA, ветка terminal-tdma elseif ("${MODEM_TYPE}" STREQUAL "SHPS") add_definitions(-DMODEM_IS_SHPS) message(STATUS "Selected SHPS modem") + add_subdirectory(dependencies/control_system_client_shps) # подключение правильного control system client SHPS, ветка shps else() message(FATAL_ERROR "You must set `MODEM_TYPE` \"SCPC\" or \"TDMA\" or \"SHPS\"!") endif() @@ -52,7 +55,6 @@ add_compile_options(-Wall -Wextra -Wsign-conversion -DPROJECT_GIT_REVISION="${PR # максимальный размер тела запроса 200mb add_definitions(-DHTTP_MAX_PAYLOAD=200000000) -add_subdirectory(dependencies/control_system_client) include_directories(src/) diff --git a/dependencies/control_system_client b/dependencies/control_system_client index 92fcb8a..76d6dcd 160000 --- a/dependencies/control_system_client +++ b/dependencies/control_system_client @@ -1 +1 @@ -Subproject commit 92fcb8ab674eb592b6237a7b82af2dfb1a0ae00c +Subproject commit 76d6dcdb08d3602ad33f2236a60cc78841b5bdc5 diff --git a/dependencies/control_system_client_shps b/dependencies/control_system_client_shps new file mode 160000 index 0000000..92fcb8a --- /dev/null +++ b/dependencies/control_system_client_shps @@ -0,0 +1 @@ +Subproject commit 92fcb8ab674eb592b6237a7b82af2dfb1a0ae00c diff --git a/dependencies/control_system_client_tdma b/dependencies/control_system_client_tdma new file mode 160000 index 0000000..cb0f743 --- /dev/null +++ b/dependencies/control_system_client_tdma @@ -0,0 +1 @@ +Subproject commit cb0f743535b95b87311318a0b8daf82da9bb7df5 diff --git a/front-generator/render-params.json b/front-generator/render-params.json index 05be67a..cafeb55 100644 --- a/front-generator/render-params.json +++ b/front-generator/render-params.json @@ -65,7 +65,8 @@ {"label": "Выкл", "value": "0"}, {"label": "24В", "value": "24"} ] - } + }, + {"widget": "number-int", "label": "Частота LO, кГц", "name": "bucLoKhz", "min": 0, "max": 40000000, "step": 1} ] }, { @@ -81,7 +82,8 @@ {"label": "18В", "value": "18"}, {"label": "24В", "value": "24"} ] - } + }, + {"widget": "number-int", "label": "Частота LO, кГц", "name": "lnbLoKhz", "min": 0, "max": 40000000, "step": 1} ] }, { @@ -101,17 +103,17 @@ "widget": "settings-container", "childs": [ { - "widget": "select", "label": "Метод расчета задержки", "name": "dpdiIsPositional", + "widget": "select", "label": "Метод расчета задержки", "name": "isPositional", "values": [ {"label": "Позиционированием", "value": "true"}, {"label": "Окном задержки", "value": "false"} ] }, - {"widget": "h2", "label": "Настройки позиционирования", "v_show": "paramDpdi.dpdiIsPositional === true"}, - {"widget": "number", "label": "Широта станции", "name": "dpdiPositionStationLatitude", "v_show": "paramDpdi.dpdiIsPositional === true", "min": -180, "step": 0.000001, "max": 180}, - {"widget": "number", "label": "Долгота станции", "name": "dpdiPositionStationLongitude", "v_show": "paramDpdi.dpdiIsPositional === true", "min": -180, "step": 0.000001, "max": 180}, - {"widget": "number", "label": "Подспутниковая точка", "name": "dpdiPositionSatelliteLongitude", "v_show": "paramDpdi.dpdiIsPositional === true", "min": -180, "step": 0.000001, "max": 180}, - {"widget": "number", "label": "Задержка до спутника, мс", "name": "dpdiDelay", "v_show": "paramDpdi.dpdiIsPositional === false", "min": 0, "step": 0.1, "max": 400}] + {"widget": "h2", "label": "Настройки позиционирования", "v_show": "paramDpdi.isPositional === true"}, + {"widget": "number", "label": "Широта станции", "name": "positionStationLatitude", "v_show": "paramDpdi.isPositional === true", "min": -180, "step": 0.000001, "max": 180}, + {"widget": "number", "label": "Долгота станции", "name": "positionStationLongitude", "v_show": "paramDpdi.isPositional === true", "min": -180, "step": 0.000001, "max": 180}, + {"widget": "number", "label": "Подспутниковая точка", "name": "positionSatelliteLongitude", "v_show": "paramDpdi.isPositional === true", "min": -180, "step": 0.000001, "max": 180}, + {"widget": "number", "label": "Задержка до спутника, мс", "name": "delay", "v_show": "paramDpdi.isPositional === false", "min": 0, "step": 0.1, "max": 400}] }, {"widget": "submit"} ], @@ -252,20 +254,20 @@ "widget": "settings-container", "v_show": "paramRxtx.isCinC", "childs": [ { - "widget": "select", "label": "Метод расчета задержки", "name": "dpdiIsPositional", + "widget": "select", "label": "Метод расчета задержки", "name": "isPositional", "values": [ {"label": "Позиционированием", "value": "true"}, {"label": "Окном задержки", "value": "false"} ] }, - {"widget": "number", "label": "Полоса поиска, КГц ±", "name": "dpdiSearchBandwidth", "min": 0, "step": 1, "max": 100}, - {"widget": "h2", "label": "Настройки позиционирования", "v_show": "paramDpdi.dpdiIsPositional === true"}, - {"widget": "number", "label": "Широта станции", "name": "dpdiPositionStationLatitude", "v_show": "paramDpdi.dpdiIsPositional === true", "min": -180, "step": 0.000001, "max": 180}, - {"widget": "number", "label": "Долгота станции", "name": "dpdiPositionStationLongitude", "v_show": "paramDpdi.dpdiIsPositional === true", "min": -180, "step": 0.000001, "max": 180}, - {"widget": "number", "label": "Подспутниковая точка", "name": "dpdiPositionSatelliteLongitude", "v_show": "paramDpdi.dpdiIsPositional === true", "min": -180, "step": 0.000001, "max": 180}, - {"widget": "h2", "label": "Задержка до спутника", "v_show": "paramDpdi.dpdiIsPositional === false"}, - {"widget": "number", "label": "от, мс", "name": "dpdiDelayMin", "v_show": "paramDpdi.dpdiIsPositional === false", "min": 0, "step": 0.1, "max": 400}, - {"widget": "number", "label": "до, мс", "name": "dpdiDelayMax", "v_show": "paramDpdi.dpdiIsPositional === false", "min": 0, "step": 0.1, "max": 400}] + {"widget": "number", "label": "Полоса поиска, КГц ±", "name": "searchBandwidth", "min": 0, "step": 1, "max": 100}, + {"widget": "h2", "label": "Настройки позиционирования", "v_show": "paramDpdi.isPositional === true"}, + {"widget": "number", "label": "Широта станции", "name": "positionStationLatitude", "v_show": "paramDpdi.isPositional === true", "min": -180, "step": 0.000001, "max": 180}, + {"widget": "number", "label": "Долгота станции", "name": "positionStationLongitude", "v_show": "paramDpdi.isPositional === true", "min": -180, "step": 0.000001, "max": 180}, + {"widget": "number", "label": "Подспутниковая точка", "name": "positionSatelliteLongitude", "v_show": "paramDpdi.isPositional === true", "min": -180, "step": 0.000001, "max": 180}, + {"widget": "h2", "label": "Задержка до спутника", "v_show": "paramDpdi.isPositional === false"}, + {"widget": "number", "label": "от, мс", "name": "delayMin", "v_show": "paramDpdi.isPositional === false", "min": 0, "step": 0.1, "max": 400}, + {"widget": "number", "label": "до, мс", "name": "delayMax", "v_show": "paramDpdi.isPositional === false", "min": 0, "step": 0.1, "max": 400}] }, {"widget": "submit", "v_show": "paramRxtx.isCinC"} ], diff --git a/src/api-driver/structs.cpp b/src/api-driver/structs.cpp index dc39f8e..7accf2f 100644 --- a/src/api-driver/structs.cpp +++ b/src/api-driver/structs.cpp @@ -472,15 +472,16 @@ void api_driver::obj::TerminalDeviceState::updateCallback(proxy::CpProxy &cp) { fTempZynq = ds.pl_temp; fTempFpga = ds.zynq_temp; } -#ifdef MODEM_IS_TDMA - { - progress_msg ds{}; - cp.getUpdateStatus(ds); - fUpgradeStatus = ds.status; - fUpgradePercent = ds.dwl_percent; - fUpgradeImage = ds.cur_image; - } -#endif + // FIXME: тут происходит зависание по неизвестной причине +// #ifdef MODEM_IS_TDMA +// { +// progress_msg ds{}; +// cp.getUpdateStatus(ds); +// fUpgradeStatus = ds.status; +// fUpgradePercent = ds.dwl_percent; +// fUpgradeImage = ds.cur_image; +// } +// #endif struct sysinfo info{}; sysinfo(&info); @@ -735,7 +736,7 @@ void api_driver::obj::TerminalRxTxSettings::updateDpdiSettings(const nlohmann::j dpdi.max_delay = data.value("delayMax", dpdi.max_delay); #else dpdi.min_delay = 0; - dpdi.max_delay = data.value("dpdiDelay", dpdi.max_delay); + dpdi.max_delay = data.value("delay", dpdi.max_delay); #endif } void api_driver::obj::TerminalRxTxSettings::storeDpdiSettings(proxy::CpProxy &cp) { @@ -765,6 +766,9 @@ void api_driver::obj::TerminalRxTxSettings::updateBuclnbSettings(const nlohmann: } } buclnb.is_ref_10MHz_buc = data.value("bucRefClk10M", buclnb.is_ref_10MHz_buc); +#ifdef MODEM_IS_TDMA + buclnb.lo_buc_inkHz = data.value("bucLoKhz", buclnb.lo_buc_inkHz); +#endif { // напряжение lnb @@ -784,8 +788,10 @@ void api_driver::obj::TerminalRxTxSettings::updateBuclnbSettings(const nlohmann: default: buclnb.lnb = voltage_lnb::DISABLE; } } - buclnb.is_ref_10MHz_lnb = data.value("lnbRefClk10M", buclnb.is_ref_10MHz_lnb); +#ifdef MODEM_IS_TDMA + buclnb.lo_lnb_inkHz = data.value("lnbLoKhz", buclnb.lo_lnb_inkHz); +#endif buclnb.is_ref_10MHz_output = data.value("srvRefClk10M", buclnb.is_ref_10MHz_output); buclnb.is_save_current_state = data.value("bucLnbAutoStart", buclnb.is_save_current_state); @@ -916,6 +922,9 @@ nlohmann::json api_driver::obj::TerminalRxTxSettings::asJson() const { #endif default: bl["bucPowering"] = 0; } +#ifdef MODEM_IS_TDMA + bl["bucLoKhz"] = buclnb.lo_buc_inkHz; +#endif bl["bucRefClk10M"] = buclnb.is_ref_10MHz_buc; switch (buclnb.lnb) { @@ -925,6 +934,9 @@ nlohmann::json api_driver::obj::TerminalRxTxSettings::asJson() const { default: bl["lnbPowering"] = 0; } bl["lnbRefClk10M"] = buclnb.is_ref_10MHz_lnb; +#ifdef MODEM_IS_TDMA + bl["lnbLoKhz"] = buclnb.lo_lnb_inkHz; +#endif bl["srvRefClk10M"] = buclnb.is_ref_10MHz_output; bl["bucLnbAutoStart"] = buclnb.is_save_current_state; diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 42e803d..88565b9 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -107,7 +107,7 @@ void api_driver::ApiDriver::setDpdiSettings(const nlohmann::json& data) { std::lock_guard _lapi(this->daemon->cpApiMutex); this->daemon->cp.setDmaDebug("begin_save_config", ""); - rxtx.storeMainSettings(this->daemon->cp); + rxtx.storeDpdiSettings(this->daemon->cp); this->daemon->cp.setDmaDebug("save_config", ""); rxtx.updateCallback(this->daemon->cp); { diff --git a/static/main-scpc.html b/static/main-scpc.html index fd06506..b43f079 100644 --- a/static/main-scpc.html +++ b/static/main-scpc.html @@ -326,19 +326,19 @@
- -

Настройки позиционирования

- - - -

Задержка до спутника

- - + +

Настройки позиционирования

+ + + +

Задержка до спутника

+ +

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

@@ -631,13 +631,13 @@ rxGoldan: 0, }, paramDpdi: { - dpdiIsPositional: true, - dpdiSearchBandwidth: 0, - dpdiPositionStationLatitude: -180, - dpdiPositionStationLongitude: -180, - dpdiPositionSatelliteLongitude: -180, - dpdiDelayMin: 0, - dpdiDelayMax: 0, + isPositional: true, + searchBandwidth: 0, + positionStationLatitude: -180, + positionStationLongitude: -180, + positionSatelliteLongitude: -180, + delayMin: 0, + delayMax: 0, }, paramBuclnb: { bucRefClk10M: false, @@ -829,13 +829,13 @@ if (this.submitStatus.dpdi) { return } let query = { - "dpdiIsPositional": this.paramDpdi.dpdiIsPositional, - "dpdiSearchBandwidth": this.paramDpdi.dpdiSearchBandwidth, - "dpdiPositionStationLatitude": this.paramDpdi.dpdiPositionStationLatitude, - "dpdiPositionStationLongitude": this.paramDpdi.dpdiPositionStationLongitude, - "dpdiPositionSatelliteLongitude": this.paramDpdi.dpdiPositionSatelliteLongitude, - "dpdiDelayMin": this.paramDpdi.dpdiDelayMin, - "dpdiDelayMax": this.paramDpdi.dpdiDelayMax, + "isPositional": this.paramDpdi.isPositional, + "searchBandwidth": this.paramDpdi.searchBandwidth, + "positionStationLatitude": this.paramDpdi.positionStationLatitude, + "positionStationLongitude": this.paramDpdi.positionStationLongitude, + "positionSatelliteLongitude": this.paramDpdi.positionSatelliteLongitude, + "delayMin": this.paramDpdi.delayMin, + "delayMax": this.paramDpdi.delayMax, } this.submitStatus.dpdi = true @@ -919,13 +919,13 @@ }, updateDpdiSettings(vals) { this.submitStatus.dpdi = false - this.paramDpdi.dpdiIsPositional = vals["settings"]["dpdi"]["dpdiIsPositional"] - this.paramDpdi.dpdiSearchBandwidth = vals["settings"]["dpdi"]["dpdiSearchBandwidth"] - this.paramDpdi.dpdiPositionStationLatitude = vals["settings"]["dpdi"]["dpdiPositionStationLatitude"] - this.paramDpdi.dpdiPositionStationLongitude = vals["settings"]["dpdi"]["dpdiPositionStationLongitude"] - this.paramDpdi.dpdiPositionSatelliteLongitude = vals["settings"]["dpdi"]["dpdiPositionSatelliteLongitude"] - this.paramDpdi.dpdiDelayMin = vals["settings"]["dpdi"]["dpdiDelayMin"] - this.paramDpdi.dpdiDelayMax = vals["settings"]["dpdi"]["dpdiDelayMax"] + this.paramDpdi.isPositional = vals["settings"]["dpdi"]["isPositional"] + this.paramDpdi.searchBandwidth = vals["settings"]["dpdi"]["searchBandwidth"] + this.paramDpdi.positionStationLatitude = vals["settings"]["dpdi"]["positionStationLatitude"] + this.paramDpdi.positionStationLongitude = vals["settings"]["dpdi"]["positionStationLongitude"] + this.paramDpdi.positionSatelliteLongitude = vals["settings"]["dpdi"]["positionSatelliteLongitude"] + this.paramDpdi.delayMin = vals["settings"]["dpdi"]["delayMin"] + this.paramDpdi.delayMax = vals["settings"]["dpdi"]["delayMax"] }, updateBuclnbSettings(vals) { this.submitStatus.buclnb = false diff --git a/static/main-tdma.html b/static/main-tdma.html index aa05685..cbdfbac 100644 --- a/static/main-tdma.html +++ b/static/main-tdma.html @@ -173,16 +173,16 @@
-

Настройки позиционирования

- - - - +

Настройки позиционирования

+ + + +

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

@@ -200,6 +200,10 @@ +

Настройки LNB

@@ -216,6 +220,10 @@ +

Сервисные настройки

@@ -347,17 +355,19 @@ paramBuclnb: { bucRefClk10M: false, bucPowering: 0, + bucLoKhz: 0, lnbRefClk10M: false, lnbPowering: 0, + lnbLoKhz: 0, srvRefClk10M: false, bucLnbAutoStart: false, }, paramDpdi: { - dpdiIsPositional: true, - dpdiPositionStationLatitude: -180, - dpdiPositionStationLongitude: -180, - dpdiPositionSatelliteLongitude: -180, - dpdiDelay: 0, + isPositional: true, + positionStationLatitude: -180, + positionStationLongitude: -180, + positionSatelliteLongitude: -180, + delay: 0, }, paramNetwork: { cesPassword: null, @@ -505,8 +515,10 @@ let query = { "bucRefClk10M": this.paramBuclnb.bucRefClk10M, "bucPowering": this.paramBuclnb.bucPowering, + "bucLoKhz": parseFloat(this.paramBuclnb.bucLoKhz.replace(/[^0-9,.]/g, '').replace(',', '.')), "lnbRefClk10M": this.paramBuclnb.lnbRefClk10M, "lnbPowering": this.paramBuclnb.lnbPowering, + "lnbLoKhz": parseFloat(this.paramBuclnb.lnbLoKhz.replace(/[^0-9,.]/g, '').replace(',', '.')), "srvRefClk10M": this.paramBuclnb.srvRefClk10M, "bucLnbAutoStart": this.paramBuclnb.bucLnbAutoStart, } @@ -521,11 +533,11 @@ if (this.submitStatus.dpdi) { return } let query = { - "dpdiIsPositional": this.paramDpdi.dpdiIsPositional, - "dpdiPositionStationLatitude": this.paramDpdi.dpdiPositionStationLatitude, - "dpdiPositionStationLongitude": this.paramDpdi.dpdiPositionStationLongitude, - "dpdiPositionSatelliteLongitude": this.paramDpdi.dpdiPositionSatelliteLongitude, - "dpdiDelay": this.paramDpdi.dpdiDelay, + "isPositional": this.paramDpdi.isPositional, + "positionStationLatitude": this.paramDpdi.positionStationLatitude, + "positionStationLongitude": this.paramDpdi.positionStationLongitude, + "positionSatelliteLongitude": this.paramDpdi.positionSatelliteLongitude, + "delay": this.paramDpdi.delay, } this.submitStatus.dpdi = true @@ -568,18 +580,20 @@ this.submitStatus.buclnb = false this.paramBuclnb.bucRefClk10M = vals["settings"]["buclnb"]["bucRefClk10M"] this.paramBuclnb.bucPowering = vals["settings"]["buclnb"]["bucPowering"] + this.paramBuclnb.bucLoKhz = this.inputFormatNumber(vals["settings"]["buclnb"]["bucLoKhz"], {max:40000000,step:1}) this.paramBuclnb.lnbRefClk10M = vals["settings"]["buclnb"]["lnbRefClk10M"] this.paramBuclnb.lnbPowering = vals["settings"]["buclnb"]["lnbPowering"] + this.paramBuclnb.lnbLoKhz = this.inputFormatNumber(vals["settings"]["buclnb"]["lnbLoKhz"], {max:40000000,step:1}) this.paramBuclnb.srvRefClk10M = vals["settings"]["buclnb"]["srvRefClk10M"] this.paramBuclnb.bucLnbAutoStart = vals["settings"]["buclnb"]["bucLnbAutoStart"] }, updateDpdiSettings(vals) { this.submitStatus.dpdi = false - this.paramDpdi.dpdiIsPositional = vals["settings"]["dpdi"]["dpdiIsPositional"] - this.paramDpdi.dpdiPositionStationLatitude = vals["settings"]["dpdi"]["dpdiPositionStationLatitude"] - this.paramDpdi.dpdiPositionStationLongitude = vals["settings"]["dpdi"]["dpdiPositionStationLongitude"] - this.paramDpdi.dpdiPositionSatelliteLongitude = vals["settings"]["dpdi"]["dpdiPositionSatelliteLongitude"] - this.paramDpdi.dpdiDelay = vals["settings"]["dpdi"]["dpdiDelay"] + this.paramDpdi.isPositional = vals["settings"]["dpdi"]["isPositional"] + this.paramDpdi.positionStationLatitude = vals["settings"]["dpdi"]["positionStationLatitude"] + this.paramDpdi.positionStationLongitude = vals["settings"]["dpdi"]["positionStationLongitude"] + this.paramDpdi.positionSatelliteLongitude = vals["settings"]["dpdi"]["positionSatelliteLongitude"] + this.paramDpdi.delay = vals["settings"]["dpdi"]["delay"] }, updateNetworkSettings(vals) { this.submitStatus.network = false