diff --git a/front-generator/render-params.json b/front-generator/render-params.json index 7edd28b..c9b7162 100644 --- a/front-generator/render-params.json +++ b/front-generator/render-params.json @@ -39,7 +39,7 @@ {"widget": "number", "label": "Ручное усиление, дБ", "name": "rxManualGain", "v_show": "!paramRxtx.rxAgcEn", "min": -40}, {"widget": "checkbox", "label": "Инверсия спектра", "name": "rxSpectrumInversion"}, {"widget": "number-int", "label": "Центральная частота, КГц", "name": "rxCentralFreq", "min": 900000, "step": 0.01}, - {"widget": "number-int", "label": "Символьная скорость, Бод", "name": "rxBaudrate", "min": 0, "step": 1}, + {"widget": "number-int", "label": "Символьная скорость, Бод", "name": "rxBaudrate", "min": 200000, "max": 54000000, "step": 1}, { "widget": "select", "label": "Roll-off", "name": "rxRolloff", "values": [{"label": "0.02", "value": "2"}, {"label": "0.05", "value": "5"}, {"label": "0.10", "value": "10"}, {"label": "0.15", "value": "15"}, {"label": "0.20", "value": "20"}, {"label": "0.25", "value": "25"}] diff --git a/front-generator/template/common/monitoring-data.js.j2 b/front-generator/template/common/monitoring-data.js.j2 index 87777fe..65a6c48 100644 --- a/front-generator/template/common/monitoring-data.js.j2 +++ b/front-generator/template/common/monitoring-data.js.j2 @@ -26,9 +26,9 @@ // прочие поля {% if modem == 'scpc' %} - snr: '?', modcod: '?', frameSizeNormal: '?', isPilots: '?', speedOnTxKbit: '?', speedOnIifKbit: '?', + snr: '?', modcod: '?', frameSizeNormal: '?', isPilots: '?', speedOnTxKbit: '?', speedOnIifKbit: '?' {% else %} - modcod: '?', speedOnTxKbit: '?', speedOnIifKbit: '?', centerFreq: '?', symSpeed: '?', + modcod: '?', speedOnTxKbit: '?', speedOnIifKbit: '?', centerFreq: '?', symSpeed: '?' {% endif %} }, {% if modem == 'scpc' %} @@ -42,6 +42,9 @@ {% endif %} statDevice: { // температурные датчики adrv: 0, zynq: 0, fpga: 0 + {% if modem == 'tdma' %}, + upgradeStatus: "", upgradePercent: 0, upgradeImage: "" + {% endif %} }, statOs: {uptime: '?', load1: '?', load5: '?', load15: '?', totalram: '?', freeram: '?'}, diff --git a/front-generator/template/common/monitoring-methods.js.j2 b/front-generator/template/common/monitoring-methods.js.j2 index 5c886ee..5d82065 100644 --- a/front-generator/template/common/monitoring-methods.js.j2 +++ b/front-generator/template/common/monitoring-methods.js.j2 @@ -71,6 +71,11 @@ this.statDevice.adrv = vals["mainState"]["device.adrv"] this.statDevice.zynq = vals["mainState"]["device.zynq"] this.statDevice.fpga = vals["mainState"]["device.fpga"] + {% if modem == 'tdma' %}, + this.statDevice.upgradeStatus = vals["mainState"]["device.upgradeStatus"] + this.statDevice.upgradePercent = vals["mainState"]["device.upgradePercent"] + this.statDevice.upgradeImage = vals["mainState"]["device.upgradeImage"] + {% endif %} this.testState = vals["mainState"]["testState"] diff --git a/front-generator/template/common/monitoring.html.j2 b/front-generator/template/common/monitoring.html.j2 index 2a4008e..b7583af 100644 --- a/front-generator/template/common/monitoring.html.j2 +++ b/front-generator/template/common/monitoring.html.j2 @@ -72,7 +72,11 @@ Температура FPGA{{ statDevice.fpga }} °C Время работы устройства{{ statOs.uptime }} Средняя загрузка ЦП (1/5/15 мин.){{ statOs.load1 }}% {{ statOs.load5 }}% {{ statOs.load15 }}% - ОЗУ всего/свободно{{ statOs.totalram }}МБ/{{ statOs.freeram }}МБ + ОЗУ всего/свободно{{ statOs.totalram }}МБ/{{ statOs.freeram }}МБ{% endraw %}{% if modem == 'tdma' %}{% raw %} + Статус обновления + Статус{{ statDevice.upgradeStatus }} + Прогресс{{ statDevice.upgradePercent }}% + Имя образа{{ statDevice.upgradeImage }}{% endraw %}{% endif %}{% raw %} diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 7bb6bb0..bd3bc21 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -255,7 +255,6 @@ private: void updateState() { modulator_state modulator{}; demodulator_state demodulator{}; - device_state device{}; #ifdef MODEM_IS_SCPC CinC_state cinc{}; #endif @@ -263,7 +262,6 @@ private: std::lock_guard lock(this->cpApiMutex); logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetModulatorState()", CP_GetModulatorState(sid, modulator)); logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDemodulatorState()", CP_GetDemodulatorState(sid, demodulator)); - logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDeviceState()", CP_GetDeviceState(sid, device)); #ifdef MODEM_IS_TDMA std::string tmpDevState; logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDmaDebug(status_init)", CP_GetDmaDebug(sid, "status_init", &tmpDevState)); @@ -281,7 +279,6 @@ private: std::lock_guard lock2(this->stateMutex); this->modState = modulator; this->demodState = demodulator; - this->devState = device; #ifdef MODEM_IS_TDMA this->deviceInitState = tmpDevState; #endif @@ -323,6 +320,16 @@ private: } } + void updateDeviceState() { + device_state device{}; + std::lock_guard lock(this->cpApiMutex); + logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDeviceState()", CP_GetDeviceState(sid, device)); + { + std::lock_guard lock2(this->stateMutex); + this->devState = device; + } + } + void unsafeLoadNetworkSettings(TerminalNetworkSettings& s) { s.loadDefaults(); logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &s.managementIp)); @@ -475,6 +482,15 @@ private: BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateState() failed to log: " << e.what(); } }}, + // обновление состояния устройства (обновления, температура) + {.lastUpdate = 0, .periodMs = CACHE_DEV_STATE_UPDATE_MS, .callback = [this]() { + try { + this->updateDeviceState(); + BOOST_LOG_TRIVIAL(debug) << "api_driver::TerminalApiDaemon::updateDeviceState(): success update!"; + } catch (std::exception& e) { + BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateDeviceState(): " << e.what(); + } + }}, // обновление кеша настроек {.lastUpdate = 0, .periodMs = CACHE_SETTINGS_UPDATE_MS, .callback = [this]() { try { @@ -515,7 +531,12 @@ private: auto now = TIME_NOW(); for (auto& u: updaters) { if (u.checkNeedUpdate(now)) { - u.lastUpdate = now; + // выравнивание таймингов (-20ms...+50ms) + if (u.lastUpdate + u.periodMs + 50 < now) { + u.lastUpdate += u.periodMs; + } else { + u.lastUpdate = now; + } u.callback(); now = TIME_NOW(); } @@ -942,6 +963,25 @@ 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.zynq\":"; writeDouble(result, device.zynq_temp, 1); +#ifdef MODEM_IS_TDMA + if (device.cur_image.empty()) { + result << R"(, +"device.upgradeStatus":"Нет обновлений","device.upgradePercent":0,"device.upgradeImage":"")"; + } else { + switch (device.status) { + case NORM_RX_OBJECT_NEW_API: result << ",\n" R"("device.upgradeStatus": "Начало загрузки")"; break; + case NORM_RX_OBJECT_INFO_API: result << ",\n" R"("device.upgradeStatus": "Получено имя образа")"; break; + case NORM_RX_OBJECT_UPDATED_API: result << ",\n" R"("device.upgradeStatus": "Загружается")"; break; + case NORM_RX_OBJECT_COMPLETED_API: result << ",\n" R"("device.upgradeStatus": "Загрузка завершена")"; break; + case NORM_RX_OBJECT_ABORTED_API: result << ",\n" R"("device.upgradeStatus": "Загрузка прервана")"; break; + default: result << ",\n" R"("device.upgradeStatus": "?")"; + + } + result << ",\"device.upgradePercent\":" << device.dwl_percent; + result << ",\"device.upgradeImage\":" << buildEscapedString(device.cur_image); + } + +#endif result << "}"; diff --git a/src/terminal_api_driver.h b/src/terminal_api_driver.h index dcb316a..b75f98d 100644 --- a/src/terminal_api_driver.h +++ b/src/terminal_api_driver.h @@ -9,7 +9,8 @@ namespace api_driver { - constexpr int CACHE_STATISTICS_UPDATE_MS = 500; + constexpr int CACHE_STATISTICS_UPDATE_MS = 500; ///< время обновления кеша статистики модулятора/демодулятора + constexpr int CACHE_DEV_STATE_UPDATE_MS = 3000; ///< время обновления статуса устройства (обновления по воздуху, температуры) constexpr int CACHE_SETTINGS_UPDATE_MS = 5000; constexpr int CACHE_QOS_UPDATE_MS = 5000; diff --git a/static/main-scpc.html b/static/main-scpc.html index 60f6a4c..08fbbc2 100644 --- a/static/main-scpc.html +++ b/static/main-scpc.html @@ -687,7 +687,7 @@ state: '?', // прочие поля - snr: '?', modcod: '?', frameSizeNormal: '?', isPilots: '?', speedOnTxKbit: '?', speedOnIifKbit: '?', + snr: '?', modcod: '?', frameSizeNormal: '?', isPilots: '?', speedOnTxKbit: '?', speedOnIifKbit: '?' }, statCinc: { occ: '?', diff --git a/static/main-tdma.html b/static/main-tdma.html index 1962842..0c35651 100644 --- a/static/main-tdma.html +++ b/static/main-tdma.html @@ -103,6 +103,10 @@ Время работы устройства{{ statOs.uptime }} Средняя загрузка ЦП (1/5/15 мин.){{ statOs.load1 }}% {{ statOs.load5 }}% {{ statOs.load15 }}% ОЗУ всего/свободно{{ statOs.totalram }}МБ/{{ statOs.freeram }}МБ + Статус обновления + Статус{{ statDevice.upgradeStatus }} + Прогресс{{ statDevice.upgradePercent }}% + Имя образа{{ statDevice.upgradeImage }} @@ -149,7 +153,7 @@