Compare commits

..

7 Commits

13 changed files with 211 additions and 78 deletions

View File

@@ -8,9 +8,9 @@ test for build:
- cpp-test-universal - cpp-test-universal
only: only:
- master - master
variables:
GIT_SUBMODULE_STRATEGY: recursive
script: script:
- git submodule init
- git submodule update
- cmake -DCMAKE_BUILD_TYPE=Debug -DMODEM_TYPE=TDMA -B cmake-build-debug-tdma - cmake -DCMAKE_BUILD_TYPE=Debug -DMODEM_TYPE=TDMA -B cmake-build-debug-tdma
- cmake -DCMAKE_BUILD_TYPE=Debug -DMODEM_TYPE=SCPC -B cmake-build-debug-scpc - cmake -DCMAKE_BUILD_TYPE=Debug -DMODEM_TYPE=SCPC -B cmake-build-debug-scpc
- cmake -DCMAKE_BUILD_TYPE=Debug -DMODEM_TYPE=SHPS -B cmake-build-debug-shps - cmake -DCMAKE_BUILD_TYPE=Debug -DMODEM_TYPE=SHPS -B cmake-build-debug-shps

View File

@@ -122,7 +122,6 @@
{ {
"widget": "settings-container", "widget": "settings-container",
"childs": [ "childs": [
{"widget": "text", "label": "Пароль для входа в сеть ЦЗС", "name": "cesPassword"},
{"widget": "h3", "label": "Настройки интерфейса управления"}, {"widget": "h3", "label": "Настройки интерфейса управления"},
{"widget": "ip-address-mask", "label": "Интерфейс управления (a.d.d.r/mask)", "name": "managementIp"}, {"widget": "ip-address-mask", "label": "Интерфейс управления (a.d.d.r/mask)", "name": "managementIp"},
{"widget": "text", "label": "Имя веб-сервера", "name": "serverName"} {"widget": "text", "label": "Имя веб-сервера", "name": "serverName"}
@@ -365,19 +364,20 @@
"widget": "select", "label": "Режим работы модулятора", "name": "txModulatorIsTest", "widget": "select", "label": "Режим работы модулятора", "name": "txModulatorIsTest",
"values": [{"label": "Нормальный", "value": "false"}, {"label": "Тест (CW)", "value": "true"}] "values": [{"label": "Нормальный", "value": "false"}, {"label": "Тест (CW)", "value": "true"}]
}, },
{"widget": "number", "label": "Ослабление, дБ", "name": "txAttenuation", "max": 0, "min": -40, "step": 0.25},
{ {
"widget": "select", "label": "Входные данные", "name": "txIsTestInput", "widget": "select", "label": "Входные данные", "name": "txIsTestInput",
"values": [{"label": "Ethernet", "value": "false"}, {"label": "Тест", "value": "true"}] "values": [{"label": "Ethernet", "value": "false"}, {"label": "Тест", "value": "true"}]
}, },
{"widget": "h3", "label": "Параметры передачи"}, {"widget": "h3", "label": "Параметры передачи"},
{"widget": "number", "label": "Центральная частота, КГц", "name": "txCentralFreq", "min": 100000, "max": 6000000, "step": 0.01}, {"widget": "number-int", "label": "Центральная частота, КГц", "name": "txCentralFreq", "min": 70000, "max": 6000000, "step": 100},
{"widget": "number", "label": "Символьная скорость, Бод", "name": "txBaudrate", "min": 200000, "max": 54000000}, {"widget": "number-int", "label": "Символьная скорость, Бод", "name": "txBaudrate", "min": 128000, "max": 30000000},
{ {
"widget": "select", "label": "Roll-off", "name": "txRolloff", "widget": "select", "label": "Roll-off", "name": "txRolloff",
"values": [{"label": "0.02", "value": "20"}, {"label": "0.05", "value": "50"}, {"label": "0.10", "value": "100"}, {"label": "0.15", "value": "150"}, {"label": "0.20", "value": "200"}, {"label": "0.25", "value": "250"}] "values": [{"label": "0.02", "value": "20"}, {"label": "0.05", "value": "50"}, {"label": "0.10", "value": "100"}, {"label": "0.15", "value": "150"}, {"label": "0.20", "value": "200"}, {"label": "0.25", "value": "250"}, {"label": "0.30", "value": "300"}, {"label": "0.35", "value": "350"}]
}, },
{"widget": "number", "label": "Коэф. расширения", "name": "txSpreadCoef", "max": 1000, "min": -1000, "step": 0.01}, {"widget": "number", "label": "Коэф. расширения", "name": "txSpreadCoef", "max": 1024, "min": 8, "step": 2},
{"widget": "number", "label": "Ослабление, дБ", "name": "txAttenuation", "max": 0, "min": -40, "step": 0.25} {"widget": "number", "label": "Кол-во пакетов на преамбулу", "name": "txFieldsDataPreamble", "max": 255, "min": 1, "step": 1}
] ]
}, },
{ {
@@ -401,13 +401,15 @@
{"widget": "number", "label": "Усиление, дБ", "name": "rxManualGain", "min": -40, "step": 0.01, "max": 40, "v_show": "paramRxtx.rxAgcEn === false"}, {"widget": "number", "label": "Усиление, дБ", "name": "rxManualGain", "min": -40, "step": 0.01, "max": 40, "v_show": "paramRxtx.rxAgcEn === false"},
{"widget": "watch-expr", "label": "Текущее усиление", "expr": "paramRxtx.rxManualGain", "v_show": "paramRxtx.rxAgcEn === true"}, {"widget": "watch-expr", "label": "Текущее усиление", "expr": "paramRxtx.rxManualGain", "v_show": "paramRxtx.rxAgcEn === true"},
{"widget": "checkbox", "label": "Инверсия спектра", "name": "rxSpectrumInversion"}, {"widget": "checkbox", "label": "Инверсия спектра", "name": "rxSpectrumInversion"},
{"widget": "number", "label": "Центральная частота, КГц", "name": "rxCentralFreq", "min": 100000, "max": 6000000, "step": 0.01}, {"widget": "number-int", "label": "Центральная частота, КГц", "name": "rxCentralFreq", "min": 70000, "max": 6000000, "step": 100},
{"widget": "number", "label": "Символьная скорость, Бод", "name": "rxBaudrate", "min": 200000, "max": 54000000}, {"widget": "number-int", "label": "Символьная скорость, Бод", "name": "rxBaudrate", "min": 128000, "max": 30000000},
{ {
"widget": "select", "label": "Roll-off", "name": "rxRolloff", "widget": "select", "label": "Roll-off", "name": "rxRolloff",
"values": [{"label": "0.02", "value": "20"}, {"label": "0.05", "value": "50"}, {"label": "0.10", "value": "100"}, {"label": "0.15", "value": "150"}, {"label": "0.20", "value": "200"}, {"label": "0.25", "value": "250"}] "values": [{"label": "0.02", "value": "20"}, {"label": "0.05", "value": "50"}, {"label": "0.10", "value": "100"}, {"label": "0.15", "value": "150"}, {"label": "0.20", "value": "200"}, {"label": "0.25", "value": "250"}, {"label": "0.30", "value": "300"}, {"label": "0.35", "value": "350"}]
}, },
{"widget": "number", "label": "Коэф. расширения", "name": "rxSpreadCoef", "max": 1000, "min": -1000, "step": 0.01} {"widget": "number", "label": "Коэф. расширения", "name": "rxSpreadCoef", "max": 1024, "min": 8, "step": 2},
{"widget": "number", "label": "Порог коррелятора", "name": "rxFftShift", "max": 4096, "min": 256, "step": 1},
{"widget": "number", "label": "Кол-во пакетов на преамбулу", "name": "rxFieldsDataPreamble", "max": 255, "min": 1, "step": 1}
] ]
} }
] ]

View File

@@ -63,6 +63,22 @@
} }
this.submitStatus.firmwareUpgradeOta = false this.submitStatus.firmwareUpgradeOta = false
}, },
async settingsPerformSetCesPassword() {
if (this.submitStatus.cesPassword) { return }
this.submitStatus.cesPassword = true
try {
await fetch('/api/set/cesPassword', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({'password': this.cesPasswordValue})
})
} catch (e) {
console.log("failed to perform set CES password: ", e)
}
this.submitStatus.cesPassword = false
},
{% endif %} {% endif %}
doModemReboot() { doModemReboot() {

View File

@@ -23,7 +23,16 @@
</div> </div>
<button class="action-button" @click="dumpAllSettings()">Сохранить бекап конфигурации</button> <button class="action-button" @click="dumpAllSettings()">Сохранить бекап конфигурации</button>
<button class="dangerous-button" @click="restoreAllSettings()">Восстановить бекап конфигурации</button> <button class="dangerous-button" @click="restoreAllSettings()">Восстановить бекап конфигурации</button>
</div> </div>{% endraw %}{% if modem == 'tdma' %}
<h2>Вход в сеть ЦЗС</h2>
<div class="settings-set-container statistics-container">
<label>
<span>Хеш-строка пароля (выдается оператором NMS)</span>
<input v-model="cesPasswordValue" type="text">
</label>
<button class="action-button" @click="settingsPerformSetCesPassword()">Установить пароль<span class="submit-spinner" v-show="submitStatus.cesPassword"></span></button>
</div>{% endif %}{% raw %}
<h2>Обновление ПО</h2> <h2>Обновление ПО</h2>
<div class="settings-set-container statistics-container"> <div class="settings-set-container statistics-container">

View File

@@ -3,7 +3,7 @@
<div class="settings-set-container statistics-container"> <div class="settings-set-container statistics-container">
<h2>Статистика приема</h2> <h2>Статистика приема</h2>
<table> <table>
<tbody> <tbody>{% endraw %}{% if modem != 'shps' %}{% raw %}
<tr><th>Прием</th><td><span :class="{ indicator_bad: statRx.state === false, indicator_good: statRx.state === true, indicator: true }"></span></td></tr> <tr><th>Прием</th><td><span :class="{ indicator_bad: statRx.state === false, indicator_good: statRx.state === true, indicator: true }"></span></td></tr>
<tr><th>Захват символьной</th><td><span :class="{ indicator_bad: statRx.sym_sync_lock === false, indicator_good: statRx.sym_sync_lock === true, indicator: true }"></span></td></tr> <tr><th>Захват символьной</th><td><span :class="{ indicator_bad: statRx.sym_sync_lock === false, indicator_good: statRx.sym_sync_lock === true, indicator: true }"></span></td></tr>
<tr><th>Захват ФАПЧ</th><td><span :class="{ indicator_bad: statRx.afc_lock === false, indicator_good: statRx.afc_lock === true, indicator: true }"></span></td></tr> <tr><th>Захват ФАПЧ</th><td><span :class="{ indicator_bad: statRx.afc_lock === false, indicator_good: statRx.afc_lock === true, indicator: true }"></span></td></tr>
@@ -22,7 +22,17 @@
<tr><td colspan="2" style="padding-top: 1em; text-align: center">Статистика пакетов</td></tr> <tr><td colspan="2" style="padding-top: 1em; text-align: center">Статистика пакетов</td></tr>
<tr><th>Качественных пакетов</th><td>{{ statRx.packetsOk }}</td></tr> <tr><th>Качественных пакетов</th><td>{{ statRx.packetsOk }}</td></tr>
<tr><th>Поврежденных пакетов</th><td>{{ statRx.packetsBad }}</td></tr> <tr><th>Поврежденных пакетов</th><td>{{ statRx.packetsBad }}</td></tr>
<tr><th>DUMMY</th><td>{{ statRx.packetsDummy }}</td></tr> <tr><th>DUMMY</th><td>{{ statRx.packetsDummy }}</td></tr>{% endraw %}{% else %}{% raw %}
<tr><th>Прием</th><td><span :class="{ indicator_bad: statRx.state === false, indicator_good: statRx.state === true, indicator: true }"></span></td></tr>
<tr><th>ОСШ/RSSI</th><td>{{ statRx.snr }} / {{ statRx.rssi }}</td></tr>
<tr><th>Частотная ошибка, Гц</th><td>{{ statRx.freqErrAcc }}</td></tr>
<tr><th>Ур. входного сигнала</th><td>{{ statRx.inputSignalLevel }}</td></tr>
<tr><th>Ошибка ФАПЧ</th><td>{{ statRx.pllError }}</td></tr>
<tr><th>Инф. скорость на приеме</th><td>{{ statRx.speedOnRxKbit }} кбит/с</td></tr>
<tr><th>Инф. скорость на интерфейсе</th><td>{{ statRx.speedOnIifKbit }} кбит/с</td></tr>
<tr><td colspan="2" style="padding-top: 1em; text-align: center">Статистика пакетов</td></tr>
<tr><th>Качественных пакетов</th><td>{{ statRx.packetsOk }}</td></tr>
<tr><th>Поврежденных пакетов</th><td>{{ statRx.packetsBad }}</td></tr>{% endraw %}{% endif %}{% raw %}
</tbody> </tbody>
</table> </table>
<button class="action-button" @click="resetPacketsStatistics()"> Сброс статистики </button> <button class="action-button" @click="resetPacketsStatistics()"> Сброс статистики </button>
@@ -39,7 +49,7 @@
<tr><th>Инф. скорость на передаче</th><td>{{ statTx.speedOnTxKbit }} кбит/с</td></tr> <tr><th>Инф. скорость на передаче</th><td>{{ statTx.speedOnTxKbit }} кбит/с</td></tr>
<tr><th>Инф. скорость на интерфейсе</th><td>{{ statTx.speedOnIifKbit }} кбит/с</td></tr> <tr><th>Инф. скорость на интерфейсе</th><td>{{ statTx.speedOnIifKbit }} кбит/с</td></tr>
</tbody> </tbody>
</table>{% endraw %}{% else %}{% raw %} </table>{% endraw %}{% elif modem == 'tdma' %}{% raw %}
<table> <table>
<tbody> <tbody>
<tr><th>Передача</th><td><span :class="{ indicator_bad: statTx.state === false, indicator_good: statTx.state === true, indicator: true }"></span></td></tr> <tr><th>Передача</th><td><span :class="{ indicator_bad: statTx.state === false, indicator_good: statTx.state === true, indicator: true }"></span></td></tr>
@@ -49,6 +59,15 @@
<tr><th>Центральная частота</th><td>{{ statTx.centerFreq }} кГц</td></tr> <tr><th>Центральная частота</th><td>{{ statTx.centerFreq }} кГц</td></tr>
<tr><th>Символьная скорость</th><td>{{ statTx.symSpeed }} ksymb</td></tr> <tr><th>Символьная скорость</th><td>{{ statTx.symSpeed }} ksymb</td></tr>
</tbody> </tbody>
</table>{% endraw %}{% elif modem == 'shps' %}{% raw %}
<table>
<tbody>
<tr><th>Передача</th><td><span :class="{ indicator_bad: statTx.state === false, indicator_good: statTx.state === true, indicator: true }"></span></td></tr>
<tr><th>Инф. скорость на передаче</th><td>{{ statTx.speedOnTxKbit }} кбит/с</td></tr>
<tr><th>Инф. скорость на интерфейсе</th><td>{{ statTx.speedOnIifKbit }} кбит/с</td></tr>
<tr><th>Центральная частота</th><td>{{ statTx.centerFreq }} кГц</td></tr>
<tr><th>Символьная скорость</th><td>{{ statTx.symSpeed }} ksymb</td></tr>
</tbody>
</table>{% endraw %}{% endif %}{% raw %} </table>{% endraw %}{% endif %}{% raw %}
</div>{% endraw %}{% if modem == 'scpc' %}{% raw %} </div>{% endraw %}{% if modem == 'scpc' %}{% raw %}
<div class="settings-set-container statistics-container" v-if="paramRxtx.isCinC === true"> <div class="settings-set-container statistics-container" v-if="paramRxtx.isCinC === true">

View File

@@ -99,10 +99,14 @@
firmwareUpgrade: false, firmwareUpgrade: false,
{% if modem == 'tdma' %} {% if modem == 'tdma' %}
firmwareUpgradeOta: false, firmwareUpgradeOta: false,
cesPassword: false,
{% endif %} {% endif %}
// когда модем перезагружается, тут должен быть счетчик. Направление счета - к нулю // когда модем перезагружается, тут должен быть счетчик. Направление счета - к нулю
modemReboot: null modemReboot: null
}, },
{% if modem == 'tdma' %}
cesPasswordValue: '',
{% endif %}
// ========== include from 'common/all-params-data.js.j2' // ========== include from 'common/all-params-data.js.j2'
{% include 'common/all-params-data.js.j2' %} {% include 'common/all-params-data.js.j2' %}

View File

@@ -354,19 +354,23 @@ void api_driver::obj::TerminalState::updateCallback(proxy::CpProxy& cp) {
} }
fRxState = demod.locks.sym_sync_lock && demod.locks.freq_lock && demod.locks.afc_lock && demod.locks.pkt_sync; fRxState = demod.locks.sym_sync_lock && demod.locks.freq_lock && demod.locks.afc_lock && demod.locks.pkt_sync;
#ifndef MODEM_IS_SHPS
fRxSymSyncLock = demod.locks.sym_sync_lock; fRxSymSyncLock = demod.locks.sym_sync_lock;
fRxFreqSearchLock = demod.locks.freq_lock; fRxFreqSearchLock = demod.locks.freq_lock;
fRxAfcLock = demod.locks.afc_lock; fRxAfcLock = demod.locks.afc_lock;
fRxPktSync = demod.locks.pkt_sync; fRxPktSync = demod.locks.pkt_sync;
#endif
fRxSnr = demod.snr; fRxSnr = demod.snr;
fRxRssi = demod.rssi; fRxRssi = demod.rssi;
#ifndef MODEM_IS_SHPS
fRxModcod = demod.modcod; fRxModcod = demod.modcod;
fRxFrameSizeNormal = !demod.is_short; fRxFrameSizeNormal = !demod.is_short;
fRxIsPilots = demod.is_pilots; fRxIsPilots = demod.is_pilots;
fRxSymError = demod.sym_err; fRxSymError = demod.sym_err;
fRxFreqErr = demod.crs_freq_err; fRxFreqErr = demod.crs_freq_err;
#endif
fRxFreqErrAcc = demod.fine_freq_err; fRxFreqErrAcc = demod.fine_freq_err;
fRxInputSignalLevel = demod.if_overload; fRxInputSignalLevel = demod.if_overload;
fRxPllError = demod.afc_err; fRxPllError = demod.afc_err;
@@ -374,9 +378,10 @@ void api_driver::obj::TerminalState::updateCallback(proxy::CpProxy& cp) {
fRxSpeedOnIifKbit = static_cast<double>(demod.speed_in_bytes_rx_iface) / 128.0; fRxSpeedOnIifKbit = static_cast<double>(demod.speed_in_bytes_rx_iface) / 128.0;
fRxPacketsOk = demod.packet_ok_cnt; fRxPacketsOk = demod.packet_ok_cnt;
fRxPacketsBad = demod.packet_bad_cnt; fRxPacketsBad = demod.packet_bad_cnt;
#ifndef MODEM_IS_SHPS
fRxPacketsDummy = demod.dummy_cnt; fRxPacketsDummy = demod.dummy_cnt;
fTxModcod = mod.modcod; fTxModcod = mod.modcod;
#endif
fTxSpeedOnTxKbit = static_cast<double>(mod.speed_in_bytes_tx) / 128.0; fTxSpeedOnTxKbit = static_cast<double>(mod.speed_in_bytes_tx) / 128.0;
fTxSpeedOnIifKbit = static_cast<double>(mod.speed_in_bytes_tx_iface) / 128.0; fTxSpeedOnIifKbit = static_cast<double>(mod.speed_in_bytes_tx_iface) / 128.0;
#ifdef MODEM_IS_SCPC #ifdef MODEM_IS_SCPC
@@ -404,19 +409,23 @@ nlohmann::json api_driver::obj::TerminalState::asJson() {
#endif #endif
res["rx"]["state"] = fRxState; res["rx"]["state"] = fRxState;
#ifndef MODEM_IS_SHPS
res["rx"]["sym_sync_lock"] = fRxSymSyncLock; res["rx"]["sym_sync_lock"] = fRxSymSyncLock;
res["rx"]["freq_search_lock"] = fRxFreqSearchLock; res["rx"]["freq_search_lock"] = fRxFreqSearchLock;
res["rx"]["afc_lock"] = fRxAfcLock; res["rx"]["afc_lock"] = fRxAfcLock;
res["rx"]["pkt_sync"] = fRxPktSync; res["rx"]["pkt_sync"] = fRxPktSync;
#endif
res["rx"]["snr"] = fRxSnr; res["rx"]["snr"] = fRxSnr;
res["rx"]["rssi"] = fRxRssi; res["rx"]["rssi"] = fRxRssi;
#ifndef MODEM_IS_SHPS
res["rx"]["modcod"] = fRxModcod; res["rx"]["modcod"] = fRxModcod;
res["rx"]["frameSizeNormal"] = fRxFrameSizeNormal; res["rx"]["frameSizeNormal"] = fRxFrameSizeNormal;
res["rx"]["isPilots"] = fRxIsPilots; res["rx"]["isPilots"] = fRxIsPilots;
res["rx"]["symError"] = fRxSymError; res["rx"]["symError"] = fRxSymError;
res["rx"]["freqErr"] = fRxFreqErr; res["rx"]["freqErr"] = fRxFreqErr;
#endif
res["rx"]["freqErrAcc"] = fRxFreqErrAcc; res["rx"]["freqErrAcc"] = fRxFreqErrAcc;
res["rx"]["inputSignalLevel"] = fRxInputSignalLevel; res["rx"]["inputSignalLevel"] = fRxInputSignalLevel;
res["rx"]["pllError"] = fRxPllError; res["rx"]["pllError"] = fRxPllError;
@@ -424,9 +433,10 @@ nlohmann::json api_driver::obj::TerminalState::asJson() {
res["rx"]["speedOnIifKbit"] = fRxSpeedOnIifKbit; res["rx"]["speedOnIifKbit"] = fRxSpeedOnIifKbit;
res["rx"]["packetsOk"] = fRxPacketsOk; res["rx"]["packetsOk"] = fRxPacketsOk;
res["rx"]["packetsBad"] = fRxPacketsBad; res["rx"]["packetsBad"] = fRxPacketsBad;
#ifndef MODEM_IS_SHPS
res["rx"]["packetsDummy"] = fRxPacketsDummy; res["rx"]["packetsDummy"] = fRxPacketsDummy;
res["tx"]["modcod"] = fTxModcod; res["tx"]["modcod"] = fTxModcod;
#endif
res["tx"]["state"] = fTxState; res["tx"]["state"] = fTxState;
res["tx"]["speedOnTxKbit"] = fTxSpeedOnTxKbit; res["tx"]["speedOnTxKbit"] = fTxSpeedOnTxKbit;
res["tx"]["speedOnIifKbit"] = fTxSpeedOnIifKbit; res["tx"]["speedOnIifKbit"] = fTxSpeedOnIifKbit;
@@ -472,16 +482,15 @@ void api_driver::obj::TerminalDeviceState::updateCallback(proxy::CpProxy &cp) {
fTempZynq = ds.pl_temp; fTempZynq = ds.pl_temp;
fTempFpga = ds.zynq_temp; fTempFpga = ds.zynq_temp;
} }
// FIXME: тут происходит зависание по неизвестной причине #ifdef MODEM_IS_TDMA
// #ifdef MODEM_IS_TDMA {
// { progress_msg ds{};
// progress_msg ds{}; cp.getUpdateStatus(ds);
// cp.getUpdateStatus(ds); fUpgradeStatus = ds.status;
// fUpgradeStatus = ds.status; fUpgradePercent = ds.dwl_percent;
// fUpgradePercent = ds.dwl_percent; fUpgradeImage = ds.cur_image;
// fUpgradeImage = ds.cur_image; }
// } #endif
// #endif
struct sysinfo info{}; struct sysinfo info{};
sysinfo(&info); sysinfo(&info);
@@ -658,6 +667,7 @@ void api_driver::obj::TerminalRxTxSettings::updateMainSettings(const nlohmann::j
#endif #endif
#ifdef MODEM_IS_SHPS #ifdef MODEM_IS_SHPS
mod.koef_spread = data.value("txSpreadCoef", mod.koef_spread); mod.koef_spread = data.value("txSpreadCoef", mod.koef_spread);
mod.txFieldsDataPreamble = data.value("txFieldsDataPreamble", mod.txFieldsDataPreamble);
#endif #endif
// демодулятор // демодулятор
@@ -672,6 +682,7 @@ void api_driver::obj::TerminalRxTxSettings::updateMainSettings(const nlohmann::j
#endif #endif
#ifdef MODEM_IS_SHPS #ifdef MODEM_IS_SHPS
dem.koef_spread = data.value("rxSpreadCoef", dem.koef_spread); dem.koef_spread = data.value("rxSpreadCoef", dem.koef_spread);
dem.rxFftShift = data.value("rxFftShift", dem.rxFftShift);
#endif #endif
#ifdef API_STRUCT_ACM_ENABLE #ifdef API_STRUCT_ACM_ENABLE
@@ -681,7 +692,7 @@ void api_driver::obj::TerminalRxTxSettings::updateMainSettings(const nlohmann::j
acm.period_pack_acm = data.value("dvbServicePacketPeriod", acm.period_pack_acm); acm.period_pack_acm = data.value("dvbServicePacketPeriod", acm.period_pack_acm);
acm.enable_acm = data.value("dvbIsAcm", acm.enable_acm); acm.enable_acm = data.value("dvbIsAcm", acm.enable_acm);
acm.min_modcod_acm = buildModcodFromJson(data, acm.min_modcod_acm, "dvbAcmMin", acmIsFrameSizeNormal, acmIsPilots); acm.min_modcod_acm = buildModcodFromJson(data, acm.min_modcod_acm, "dvbAcmMin", acmIsFrameSizeNormal, acmIsPilots);
acm.min_modcod_acm = buildModcodFromJson(data, acm.max_modcod_acm, "dvbAcmMax", acmIsFrameSizeNormal, acmIsPilots); acm.max_modcod_acm = buildModcodFromJson(data, acm.max_modcod_acm, "dvbAcmMax", acmIsFrameSizeNormal, acmIsPilots);
acm.snr_threashold_acm = data.value("dvbSnrReserve", acm.snr_threashold_acm); // запас ОСШ acm.snr_threashold_acm = data.value("dvbSnrReserve", acm.snr_threashold_acm); // запас ОСШ
#endif #endif
@@ -838,6 +849,7 @@ nlohmann::json api_driver::obj::TerminalRxTxSettings::asJson() const {
rxtx["txAttenuation"] = mod.attenuation; rxtx["txAttenuation"] = mod.attenuation;
#ifdef MODEM_IS_SHPS #ifdef MODEM_IS_SHPS
rxtx["txSpreadCoef"] = mod.koef_spread; rxtx["txSpreadCoef"] = mod.koef_spread;
rxtx["txFieldsDataPreamble"] = mod.txFieldsDataPreamble;
#endif #endif
#if defined(MODEM_IS_SCPC) || defined(MODEM_IS_SHPS) #if defined(MODEM_IS_SCPC) || defined(MODEM_IS_SHPS)
@@ -862,8 +874,8 @@ nlohmann::json api_driver::obj::TerminalRxTxSettings::asJson() const {
rxtx["rxGoldan"] = dem.gold_seq_is_active ? 1 : 0; rxtx["rxGoldan"] = dem.gold_seq_is_active ? 1 : 0;
#endif #endif
#ifdef MODEM_IS_SHPS #ifdef MODEM_IS_SHPS
rxtx["txSpreadCoef"] = mod.koef_spread;
rxtx["rxSpreadCoef"] = dem.koef_spread; rxtx["rxSpreadCoef"] = dem.koef_spread;
rxtx["rxFftShift"] = dem.rxFftShift;
#endif #endif
#ifdef API_STRUCT_ACM_ENABLE #ifdef API_STRUCT_ACM_ENABLE

View File

@@ -134,19 +134,22 @@ namespace api_driver::obj {
#endif #endif
bool fRxState{}; bool fRxState{};
#ifndef MODEM_IS_SHPS
bool fRxSymSyncLock{}; bool fRxSymSyncLock{};
bool fRxFreqSearchLock{}; bool fRxFreqSearchLock{};
bool fRxAfcLock{}; bool fRxAfcLock{};
bool fRxPktSync{}; bool fRxPktSync{};
#endif
float fRxSnr{}; float fRxSnr{};
float fRxRssi{}; float fRxRssi{};
#ifndef MODEM_IS_SHPS
uint16_t fRxModcod{}; uint16_t fRxModcod{};
bool fRxFrameSizeNormal{}; bool fRxFrameSizeNormal{};
bool fRxIsPilots{}; bool fRxIsPilots{};
double fRxSymError{}; double fRxSymError{};
double fRxFreqErr{}; double fRxFreqErr{};
#endif
double fRxFreqErrAcc{}; double fRxFreqErrAcc{};
double fRxInputSignalLevel{}; double fRxInputSignalLevel{};
double fRxPllError{}; double fRxPllError{};
@@ -154,9 +157,10 @@ namespace api_driver::obj {
double fRxSpeedOnIifKbit{}; double fRxSpeedOnIifKbit{};
uint32_t fRxPacketsOk{}; uint32_t fRxPacketsOk{};
uint32_t fRxPacketsBad{}; uint32_t fRxPacketsBad{};
#ifndef MODEM_IS_SHPS
uint32_t fRxPacketsDummy{}; uint32_t fRxPacketsDummy{};
uint16_t fTxModcod{}; uint16_t fTxModcod{};
#endif
double fTxSpeedOnTxKbit{}; double fTxSpeedOnTxKbit{};
double fTxSpeedOnIifKbit{}; double fTxSpeedOnIifKbit{};
#ifdef MODEM_IS_SCPC #ifdef MODEM_IS_SCPC

View File

@@ -227,7 +227,7 @@ public:
resultJson["status"] = "ok"; resultJson["status"] = "ok";
resultJson["state"] = api->loadTerminalState(); resultJson["state"] = api->loadTerminalState();
} catch (std::exception& e) { } catch (std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "WebHandle(/api/set/qos): Can't set QoS settings: " << e.what(); BOOST_LOG_TRIVIAL(error) << "WebHandle(/api/get/statistics): Can't get terminal state: " << e.what();
resultJson.clear(); resultJson.clear();
resultJson["status"] = "error"; resultJson["status"] = "error";
resultJson["error"] = e.what(); resultJson["error"] = e.what();
@@ -436,6 +436,36 @@ public:
auto result = resultJson.dump(); auto result = resultJson.dump();
rep.content.insert(rep.content.end(), result.c_str(), result.c_str() + result.size()); rep.content.insert(rep.content.end(), result.c_str(), result.c_str() + result.size());
})); }));
#ifdef MODEM_IS_TDMA
s.resources.emplace_back(std::make_unique<http::auth::AuthRequiredResource>("/api/set/cesPassword", this->auth, http::auth::User::EDIT_SETTINGS, [this](const http::server::Request& req, auto& rep) {
if (req.method != "POST") {
http::server::stockReply(http::server::bad_request, rep);
return;
}
rep.status = http::server::ok;
rep.headers.push_back({.name = "Content-Type", .value = toString(mime_types::json)});
nlohmann::json resultJson;
try {
auto reqJson = nlohmann::json::parse(std::string(req.payload.begin(), req.payload.end()));
auto password = reqJson["password"].get<std::string>();
this->api->executeInApi([&password](auto& cp) {
cp.setNetwork("ces_password", password);
});
resultJson["status"] = "ok";
} catch (std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "WebHandle(/api/set/cesPassword): Can't set CES password: " << e.what();
resultJson.clear();
resultJson["status"] = "error";
resultJson["error"] = e.what();
}
auto result = resultJson.dump();
rep.content.insert(rep.content.end(), result.c_str(), result.c_str() + result.size());
}));
#endif
#endif #endif
s.resources.emplace_back(std::make_unique<http::auth::AuthRequiredResource>("/api/reboot", this->auth, 0, [this](const auto& req, auto& rep) { s.resources.emplace_back(std::make_unique<http::auth::AuthRequiredResource>("/api/reboot", this->auth, 0, [this](const auto& req, auto& rep) {

View File

@@ -58,16 +58,8 @@
<table> <table>
<tbody> <tbody>
<tr><th>Прием</th><td><span :class="{ indicator_bad: statRx.state === false, indicator_good: statRx.state === true, indicator: true }"></span></td></tr> <tr><th>Прием</th><td><span :class="{ indicator_bad: statRx.state === false, indicator_good: statRx.state === true, indicator: true }"></span></td></tr>
<tr><th>Захват символьной</th><td><span :class="{ indicator_bad: statRx.sym_sync_lock === false, indicator_good: statRx.sym_sync_lock === true, indicator: true }"></span></td></tr>
<tr><th>Захват ФАПЧ</th><td><span :class="{ indicator_bad: statRx.afc_lock === false, indicator_good: statRx.afc_lock === true, indicator: true }"></span></td></tr>
<tr><th>Захват поиска по частоте</th><td><span :class="{ indicator_bad: statRx.freq_search_lock === false, indicator_good: statRx.freq_search_lock === true, indicator: true }"></span></td></tr>
<tr><th>Захват пакетной синхр.</th><td><span :class="{ indicator_bad: statRx.pkt_sync === false, indicator_good: statRx.pkt_sync === true, indicator: true }"></span></td></tr>
<tr><th>ОСШ/RSSI</th><td>{{ statRx.snr }} / {{ statRx.rssi }}</td></tr> <tr><th>ОСШ/RSSI</th><td>{{ statRx.snr }} / {{ statRx.rssi }}</td></tr>
<tr><th>Modcod</th><td>{{ statRx.modcod }}</td></tr> <tr><th>Частотная ошибка, Гц</th><td>{{ statRx.freqErrAcc }}</td></tr>
<tr><th>Размер кадра</th><td>{{ statRx.frameSizeNormal ? 'normal' : 'short' }}</td></tr>
<tr><th>Пилот-символы</th><td>{{ statRx.isPilots ? 'pilots' : 'no pilots' }}</td></tr>
<tr><th>Символьная ошибка</th><td>{{ statRx.symError }}</td></tr>
<tr><th>Грубая/точная част. ошибка, Гц</th><td>{{ statRx.freqErr }} / {{ statRx.freqErrAcc }}</td></tr>
<tr><th>Ур. входного сигнала</th><td>{{ statRx.inputSignalLevel }}</td></tr> <tr><th>Ур. входного сигнала</th><td>{{ statRx.inputSignalLevel }}</td></tr>
<tr><th>Ошибка ФАПЧ</th><td>{{ statRx.pllError }}</td></tr> <tr><th>Ошибка ФАПЧ</th><td>{{ statRx.pllError }}</td></tr>
<tr><th>Инф. скорость на приеме</th><td>{{ statRx.speedOnRxKbit }} кбит/с</td></tr> <tr><th>Инф. скорость на приеме</th><td>{{ statRx.speedOnRxKbit }} кбит/с</td></tr>
@@ -75,7 +67,6 @@
<tr><td colspan="2" style="padding-top: 1em; text-align: center">Статистика пакетов</td></tr> <tr><td colspan="2" style="padding-top: 1em; text-align: center">Статистика пакетов</td></tr>
<tr><th>Качественных пакетов</th><td>{{ statRx.packetsOk }}</td></tr> <tr><th>Качественных пакетов</th><td>{{ statRx.packetsOk }}</td></tr>
<tr><th>Поврежденных пакетов</th><td>{{ statRx.packetsBad }}</td></tr> <tr><th>Поврежденных пакетов</th><td>{{ statRx.packetsBad }}</td></tr>
<tr><th>DUMMY</th><td>{{ statRx.packetsDummy }}</td></tr>
</tbody> </tbody>
</table> </table>
<button class="action-button" @click="resetPacketsStatistics()"> Сброс статистики </button> <button class="action-button" @click="resetPacketsStatistics()"> Сброс статистики </button>
@@ -85,7 +76,6 @@
<table> <table>
<tbody> <tbody>
<tr><th>Передача</th><td><span :class="{ indicator_bad: statTx.state === false, indicator_good: statTx.state === true, indicator: true }"></span></td></tr> <tr><th>Передача</th><td><span :class="{ indicator_bad: statTx.state === false, indicator_good: statTx.state === true, indicator: true }"></span></td></tr>
<tr><th>Modcod</th><td>{{ statTx.modcod }}</td></tr>
<tr><th>Инф. скорость на передаче</th><td>{{ statTx.speedOnTxKbit }} кбит/с</td></tr> <tr><th>Инф. скорость на передаче</th><td>{{ statTx.speedOnTxKbit }} кбит/с</td></tr>
<tr><th>Инф. скорость на интерфейсе</th><td>{{ statTx.speedOnIifKbit }} кбит/с</td></tr> <tr><th>Инф. скорость на интерфейсе</th><td>{{ statTx.speedOnIifKbit }} кбит/с</td></tr>
<tr><th>Центральная частота</th><td>{{ statTx.centerFreq }} кГц</td></tr> <tr><th>Центральная частота</th><td>{{ statTx.centerFreq }} кГц</td></tr>
@@ -127,6 +117,7 @@
<option :value="true">Тест (CW)</option> <option :value="true">Тест (CW)</option>
</select> </select>
</label> </label>
<label><span>Ослабление, дБ</span><input type="number" v-model="paramRxtx.txAttenuation" min="-40" step="0.25"/></label>
<label> <label>
<span>Входные данные</span> <span>Входные данные</span>
<select v-model="paramRxtx.txIsTestInput"> <select v-model="paramRxtx.txIsTestInput">
@@ -135,8 +126,14 @@
</select> </select>
</label> </label>
<h3>Параметры передачи</h3> <h3>Параметры передачи</h3>
<label><span>Центральная частота, КГц</span><input type="number" v-model="paramRxtx.txCentralFreq" min="100000" max="6000000" step="0.01"/></label> <label>
<label><span>Символьная скорость, Бод</span><input type="number" v-model="paramRxtx.txBaudrate" min="200000" max="54000000"/></label> <span>Центральная частота, КГц</span>
<input type="text" v-model.lazy="paramRxtx.txCentralFreq" @change="e => paramRxtx.txCentralFreq = inputFormatNumber(inputFormatNumber(e.target.value, {min:70000,max:6000000,step:100}), {min:70000,max:6000000,step:100})"/>
</label>
<label>
<span>Символьная скорость, Бод</span>
<input type="text" v-model.lazy="paramRxtx.txBaudrate" @change="e => paramRxtx.txBaudrate = inputFormatNumber(inputFormatNumber(e.target.value, {min:128000,max:30000000,}), {min:128000,max:30000000,})"/>
</label>
<label> <label>
<span>Roll-off</span> <span>Roll-off</span>
<select v-model="paramRxtx.txRolloff"> <select v-model="paramRxtx.txRolloff">
@@ -146,10 +143,12 @@
<option :value="150">0.15</option> <option :value="150">0.15</option>
<option :value="200">0.20</option> <option :value="200">0.20</option>
<option :value="250">0.25</option> <option :value="250">0.25</option>
<option :value="300">0.30</option>
<option :value="350">0.35</option>
</select> </select>
</label> </label>
<label><span>Коэф. расширения</span><input type="number" v-model="paramRxtx.txSpreadCoef" min="-1000" max="1000" step="0.01"/></label> <label><span>Коэф. расширения</span><input type="number" v-model="paramRxtx.txSpreadCoef" min="8" max="1024" step="2"/></label>
<label><span>Ослабление, дБ</span><input type="number" v-model="paramRxtx.txAttenuation" min="-40" step="0.25"/></label> <label><span>Кол-во пакетов на преамбулу</span><input type="number" v-model="paramRxtx.txFieldsDataPreamble" min="1" max="255" step="1"/></label>
</div> </div>
<div class="settings-set-container"> <div class="settings-set-container">
<h3>Авто-регулировка мощности</h3> <h3>Авто-регулировка мощности</h3>
@@ -178,8 +177,14 @@
<span>Инверсия спектра</span> <span>Инверсия спектра</span>
<span class="toggle-input"><input type="checkbox" v-model="paramRxtx.rxSpectrumInversion" /><span class="slider"></span></span> <span class="toggle-input"><input type="checkbox" v-model="paramRxtx.rxSpectrumInversion" /><span class="slider"></span></span>
</label> </label>
<label><span>Центральная частота, КГц</span><input type="number" v-model="paramRxtx.rxCentralFreq" min="100000" max="6000000" step="0.01"/></label> <label>
<label><span>Символьная скорость, Бод</span><input type="number" v-model="paramRxtx.rxBaudrate" min="200000" max="54000000"/></label> <span>Центральная частота, КГц</span>
<input type="text" v-model.lazy="paramRxtx.rxCentralFreq" @change="e => paramRxtx.rxCentralFreq = inputFormatNumber(inputFormatNumber(e.target.value, {min:70000,max:6000000,step:100}), {min:70000,max:6000000,step:100})"/>
</label>
<label>
<span>Символьная скорость, Бод</span>
<input type="text" v-model.lazy="paramRxtx.rxBaudrate" @change="e => paramRxtx.rxBaudrate = inputFormatNumber(inputFormatNumber(e.target.value, {min:128000,max:30000000,}), {min:128000,max:30000000,})"/>
</label>
<label> <label>
<span>Roll-off</span> <span>Roll-off</span>
<select v-model="paramRxtx.rxRolloff"> <select v-model="paramRxtx.rxRolloff">
@@ -189,9 +194,13 @@
<option :value="150">0.15</option> <option :value="150">0.15</option>
<option :value="200">0.20</option> <option :value="200">0.20</option>
<option :value="250">0.25</option> <option :value="250">0.25</option>
<option :value="300">0.30</option>
<option :value="350">0.35</option>
</select> </select>
</label> </label>
<label><span>Коэф. расширения</span><input type="number" v-model="paramRxtx.rxSpreadCoef" min="-1000" max="1000" step="0.01"/></label> <label><span>Коэф. расширения</span><input type="number" v-model="paramRxtx.rxSpreadCoef" min="8" max="1024" step="2"/></label>
<label><span>Порог коррелятора</span><input type="number" v-model="paramRxtx.rxFftShift" min="256" max="4096" step="1"/></label>
<label><span>Кол-во пакетов на преамбулу</span><input type="number" v-model="paramRxtx.rxFieldsDataPreamble" min="1" max="255" step="1"/></label>
</div> </div>
</div> </div>
<button class="action-button" @click="settingsSubmitRxtx()">Сохранить <span class="submit-spinner" v-show="submitStatus.rxtx"></span></button> <button class="action-button" @click="settingsSubmitRxtx()">Сохранить <span class="submit-spinner" v-show="submitStatus.rxtx"></span></button>
@@ -351,12 +360,13 @@
txEn: false, txEn: false,
txAutoStart: false, txAutoStart: false,
txModulatorIsTest: false, txModulatorIsTest: false,
txIsTestInput: false,
txCentralFreq: 100000,
txBaudrate: 200000,
txRolloff: 20,
txSpreadCoef: -1000,
txAttenuation: -40, txAttenuation: -40,
txIsTestInput: false,
txCentralFreq: 0,
txBaudrate: 0,
txRolloff: 20,
txSpreadCoef: 8,
txFieldsDataPreamble: 1,
aupcEn: false, aupcEn: false,
aupcMinAttenuation: 0, aupcMinAttenuation: 0,
aupcMaxAttenuation: 0, aupcMaxAttenuation: 0,
@@ -364,10 +374,12 @@
rxAgcEn: false, rxAgcEn: false,
rxManualGain: -40, rxManualGain: -40,
rxSpectrumInversion: false, rxSpectrumInversion: false,
rxCentralFreq: 100000, rxCentralFreq: 0,
rxBaudrate: 200000, rxBaudrate: 0,
rxRolloff: 20, rxRolloff: 20,
rxSpreadCoef: -1000, rxSpreadCoef: 8,
rxFftShift: 256,
rxFieldsDataPreamble: 1,
}, },
paramBuclnb: { paramBuclnb: {
bucRefClk10M: false, bucRefClk10M: false,
@@ -501,12 +513,13 @@
"txEn": this.paramRxtx.txEn, "txEn": this.paramRxtx.txEn,
"txAutoStart": this.paramRxtx.txAutoStart, "txAutoStart": this.paramRxtx.txAutoStart,
"txModulatorIsTest": this.paramRxtx.txModulatorIsTest, "txModulatorIsTest": this.paramRxtx.txModulatorIsTest,
"txAttenuation": this.paramRxtx.txAttenuation,
"txIsTestInput": this.paramRxtx.txIsTestInput, "txIsTestInput": this.paramRxtx.txIsTestInput,
"txCentralFreq": this.paramRxtx.txCentralFreq, "txCentralFreq": parseFloat(this.paramRxtx.txCentralFreq.replace(/[^0-9,.]/g, '').replace(',', '.')),
"txBaudrate": this.paramRxtx.txBaudrate, "txBaudrate": parseFloat(this.paramRxtx.txBaudrate.replace(/[^0-9,.]/g, '').replace(',', '.')),
"txRolloff": this.paramRxtx.txRolloff, "txRolloff": this.paramRxtx.txRolloff,
"txSpreadCoef": this.paramRxtx.txSpreadCoef, "txSpreadCoef": this.paramRxtx.txSpreadCoef,
"txAttenuation": this.paramRxtx.txAttenuation, "txFieldsDataPreamble": this.paramRxtx.txFieldsDataPreamble,
"aupcEn": this.paramRxtx.aupcEn, "aupcEn": this.paramRxtx.aupcEn,
"aupcMinAttenuation": this.paramRxtx.aupcMinAttenuation, "aupcMinAttenuation": this.paramRxtx.aupcMinAttenuation,
"aupcMaxAttenuation": this.paramRxtx.aupcMaxAttenuation, "aupcMaxAttenuation": this.paramRxtx.aupcMaxAttenuation,
@@ -514,10 +527,12 @@
"rxAgcEn": this.paramRxtx.rxAgcEn, "rxAgcEn": this.paramRxtx.rxAgcEn,
"rxManualGain": this.paramRxtx.rxManualGain, "rxManualGain": this.paramRxtx.rxManualGain,
"rxSpectrumInversion": this.paramRxtx.rxSpectrumInversion, "rxSpectrumInversion": this.paramRxtx.rxSpectrumInversion,
"rxCentralFreq": this.paramRxtx.rxCentralFreq, "rxCentralFreq": parseFloat(this.paramRxtx.rxCentralFreq.replace(/[^0-9,.]/g, '').replace(',', '.')),
"rxBaudrate": this.paramRxtx.rxBaudrate, "rxBaudrate": parseFloat(this.paramRxtx.rxBaudrate.replace(/[^0-9,.]/g, '').replace(',', '.')),
"rxRolloff": this.paramRxtx.rxRolloff, "rxRolloff": this.paramRxtx.rxRolloff,
"rxSpreadCoef": this.paramRxtx.rxSpreadCoef, "rxSpreadCoef": this.paramRxtx.rxSpreadCoef,
"rxFftShift": this.paramRxtx.rxFftShift,
"rxFieldsDataPreamble": this.paramRxtx.rxFieldsDataPreamble,
} }
this.submitStatus.rxtx = true this.submitStatus.rxtx = true
@@ -569,12 +584,13 @@
this.paramRxtx.txEn = vals["settings"]["rxtx"]["txEn"] this.paramRxtx.txEn = vals["settings"]["rxtx"]["txEn"]
this.paramRxtx.txAutoStart = vals["settings"]["rxtx"]["txAutoStart"] this.paramRxtx.txAutoStart = vals["settings"]["rxtx"]["txAutoStart"]
this.paramRxtx.txModulatorIsTest = vals["settings"]["rxtx"]["txModulatorIsTest"] this.paramRxtx.txModulatorIsTest = vals["settings"]["rxtx"]["txModulatorIsTest"]
this.paramRxtx.txAttenuation = vals["settings"]["rxtx"]["txAttenuation"]
this.paramRxtx.txIsTestInput = vals["settings"]["rxtx"]["txIsTestInput"] this.paramRxtx.txIsTestInput = vals["settings"]["rxtx"]["txIsTestInput"]
this.paramRxtx.txCentralFreq = vals["settings"]["rxtx"]["txCentralFreq"] this.paramRxtx.txCentralFreq = this.inputFormatNumber(vals["settings"]["rxtx"]["txCentralFreq"], {min:70000,max:6000000,step:100})
this.paramRxtx.txBaudrate = vals["settings"]["rxtx"]["txBaudrate"] this.paramRxtx.txBaudrate = this.inputFormatNumber(vals["settings"]["rxtx"]["txBaudrate"], {min:128000,max:30000000,})
this.paramRxtx.txRolloff = vals["settings"]["rxtx"]["txRolloff"] this.paramRxtx.txRolloff = vals["settings"]["rxtx"]["txRolloff"]
this.paramRxtx.txSpreadCoef = vals["settings"]["rxtx"]["txSpreadCoef"] this.paramRxtx.txSpreadCoef = vals["settings"]["rxtx"]["txSpreadCoef"]
this.paramRxtx.txAttenuation = vals["settings"]["rxtx"]["txAttenuation"] this.paramRxtx.txFieldsDataPreamble = vals["settings"]["rxtx"]["txFieldsDataPreamble"]
this.paramRxtx.aupcEn = vals["settings"]["rxtx"]["aupcEn"] this.paramRxtx.aupcEn = vals["settings"]["rxtx"]["aupcEn"]
this.paramRxtx.aupcMinAttenuation = vals["settings"]["rxtx"]["aupcMinAttenuation"] this.paramRxtx.aupcMinAttenuation = vals["settings"]["rxtx"]["aupcMinAttenuation"]
this.paramRxtx.aupcMaxAttenuation = vals["settings"]["rxtx"]["aupcMaxAttenuation"] this.paramRxtx.aupcMaxAttenuation = vals["settings"]["rxtx"]["aupcMaxAttenuation"]
@@ -582,10 +598,12 @@
this.paramRxtx.rxAgcEn = vals["settings"]["rxtx"]["rxAgcEn"] this.paramRxtx.rxAgcEn = vals["settings"]["rxtx"]["rxAgcEn"]
this.paramRxtx.rxManualGain = vals["settings"]["rxtx"]["rxManualGain"] this.paramRxtx.rxManualGain = vals["settings"]["rxtx"]["rxManualGain"]
this.paramRxtx.rxSpectrumInversion = vals["settings"]["rxtx"]["rxSpectrumInversion"] this.paramRxtx.rxSpectrumInversion = vals["settings"]["rxtx"]["rxSpectrumInversion"]
this.paramRxtx.rxCentralFreq = vals["settings"]["rxtx"]["rxCentralFreq"] this.paramRxtx.rxCentralFreq = this.inputFormatNumber(vals["settings"]["rxtx"]["rxCentralFreq"], {min:70000,max:6000000,step:100})
this.paramRxtx.rxBaudrate = vals["settings"]["rxtx"]["rxBaudrate"] this.paramRxtx.rxBaudrate = this.inputFormatNumber(vals["settings"]["rxtx"]["rxBaudrate"], {min:128000,max:30000000,})
this.paramRxtx.rxRolloff = vals["settings"]["rxtx"]["rxRolloff"] this.paramRxtx.rxRolloff = vals["settings"]["rxtx"]["rxRolloff"]
this.paramRxtx.rxSpreadCoef = vals["settings"]["rxtx"]["rxSpreadCoef"] this.paramRxtx.rxSpreadCoef = vals["settings"]["rxtx"]["rxSpreadCoef"]
this.paramRxtx.rxFftShift = vals["settings"]["rxtx"]["rxFftShift"]
this.paramRxtx.rxFieldsDataPreamble = vals["settings"]["rxtx"]["rxFieldsDataPreamble"]
}, },
updateBuclnbSettings(vals) { updateBuclnbSettings(vals) {
this.submitStatus.buclnb = false this.submitStatus.buclnb = false

View File

@@ -241,10 +241,6 @@
</div> <div class="tabs-body-item" v-if="activeTab === 'admin' && settingFetchComplete"> </div> <div class="tabs-body-item" v-if="activeTab === 'admin' && settingFetchComplete">
<h2>Настройки сети</h2> <h2>Настройки сети</h2>
<div class="settings-set-container"> <div class="settings-set-container">
<label>
<span>Пароль для входа в сеть ЦЗС</span>
<input v-model="paramNetwork.cesPassword" type="text">
</label>
<h3>Настройки интерфейса управления</h3> <h3>Настройки интерфейса управления</h3>
<label> <label>
<span>Интерфейс управления (a.d.d.r/mask)</span> <span>Интерфейс управления (a.d.d.r/mask)</span>
@@ -277,6 +273,14 @@
<button class="action-button" @click="dumpAllSettings()">Сохранить бекап конфигурации</button> <button class="action-button" @click="dumpAllSettings()">Сохранить бекап конфигурации</button>
<button class="dangerous-button" @click="restoreAllSettings()">Восстановить бекап конфигурации</button> <button class="dangerous-button" @click="restoreAllSettings()">Восстановить бекап конфигурации</button>
</div> </div>
<h2>Вход в сеть ЦЗС</h2>
<div class="settings-set-container statistics-container">
<label>
<span>Хеш-строка пароля (выдается оператором NMS)</span>
<input v-model="cesPasswordValue" type="text">
</label>
<button class="action-button" @click="settingsPerformSetCesPassword()">Установить пароль<span class="submit-spinner" v-show="submitStatus.cesPassword"></span></button>
</div>
<h2>Обновление ПО</h2> <h2>Обновление ПО</h2>
<div class="settings-set-container statistics-container"> <div class="settings-set-container statistics-container">
@@ -335,9 +339,11 @@
firmwareUpload: false, firmwareUpload: false,
firmwareUpgrade: false, firmwareUpgrade: false,
firmwareUpgradeOta: false, firmwareUpgradeOta: false,
cesPassword: false,
// когда модем перезагружается, тут должен быть счетчик. Направление счета - к нулю // когда модем перезагружается, тут должен быть счетчик. Направление счета - к нулю
modemReboot: null modemReboot: null
}, },
cesPasswordValue: '',
// ========== include from 'common/all-params-data.js.j2' // ========== include from 'common/all-params-data.js.j2'
paramRxtx: { paramRxtx: {
@@ -370,7 +376,6 @@
delay: 0, delay: 0,
}, },
paramNetwork: { paramNetwork: {
cesPassword: null,
managementIp: null, managementIp: null,
serverName: null, serverName: null,
}, },
@@ -551,7 +556,6 @@
{ if (!confirm("Применение этих настроек может сделать модем недоступным! Продолжить?")) return } { if (!confirm("Применение этих настроек может сделать модем недоступным! Продолжить?")) return }
let query = { let query = {
"cesPassword": this.paramNetwork.cesPassword,
"managementIp": this.paramNetwork.managementIp, "managementIp": this.paramNetwork.managementIp,
"serverName": this.paramNetwork.serverName, "serverName": this.paramNetwork.serverName,
} }
@@ -597,7 +601,6 @@
}, },
updateNetworkSettings(vals) { updateNetworkSettings(vals) {
this.submitStatus.network = false this.submitStatus.network = false
this.paramNetwork.cesPassword = vals["settings"]["network"]["cesPassword"]
this.paramNetwork.managementIp = vals["settings"]["network"]["managementIp"] this.paramNetwork.managementIp = vals["settings"]["network"]["managementIp"]
this.paramNetwork.serverName = vals["settings"]["network"]["serverName"] this.paramNetwork.serverName = vals["settings"]["network"]["serverName"]
}, },
@@ -761,6 +764,22 @@
} }
this.submitStatus.firmwareUpgradeOta = false this.submitStatus.firmwareUpgradeOta = false
}, },
async settingsPerformSetCesPassword() {
if (this.submitStatus.cesPassword) { return }
this.submitStatus.cesPassword = true
try {
await fetch('/api/set/cesPassword', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({'password': this.cesPasswordValue})
})
} catch (e) {
console.log("failed to perform set CES password: ", e)
}
this.submitStatus.cesPassword = false
},
doModemReboot() { doModemReboot() {
if (this.submitStatus.modemReboot !== null) { if (this.submitStatus.modemReboot !== null) {