diff --git a/dependencies/control_system_client_shps b/dependencies/control_system_client_shps index 92fcb8a..9241716 160000 --- a/dependencies/control_system_client_shps +++ b/dependencies/control_system_client_shps @@ -1 +1 @@ -Subproject commit 92fcb8ab674eb592b6237a7b82af2dfb1a0ae00c +Subproject commit 92417169312526456fdad4668c9d3bb04e64de70 diff --git a/front-generator/render-params.json b/front-generator/render-params.json index 43f4e67..5d0ceca 100644 --- a/front-generator/render-params.json +++ b/front-generator/render-params.json @@ -364,19 +364,20 @@ "widget": "select", "label": "Режим работы модулятора", "name": "txModulatorIsTest", "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", "values": [{"label": "Ethernet", "value": "false"}, {"label": "Тест", "value": "true"}] }, {"widget": "h3", "label": "Параметры передачи"}, - {"widget": "number", "label": "Центральная частота, КГц", "name": "txCentralFreq", "min": 100000, "max": 6000000, "step": 0.01}, - {"widget": "number", "label": "Символьная скорость, Бод", "name": "txBaudrate", "min": 200000, "max": 54000000}, + {"widget": "number", "label": "Центральная частота, КГц", "name": "txCentralFreq", "min": 70000, "max": 6000000, "step": 100}, + {"widget": "number", "label": "Символьная скорость, Бод", "name": "txBaudrate", "min": 128000, "max": 30000000}, { "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": "txAttenuation", "max": 0, "min": -40, "step": 0.25} + {"widget": "number", "label": "Коэф. расширения", "name": "txSpreadCoef", "max": 1024, "min": 8, "step": 2}, + {"widget": "number", "label": "Кол-во пакетов на преамбулу", "name": "txFieldsDataPreamble", "max": 255, "min": 1, "step": 1} ] }, { @@ -400,13 +401,15 @@ {"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": "checkbox", "label": "Инверсия спектра", "name": "rxSpectrumInversion"}, - {"widget": "number", "label": "Центральная частота, КГц", "name": "rxCentralFreq", "min": 100000, "max": 6000000, "step": 0.01}, - {"widget": "number", "label": "Символьная скорость, Бод", "name": "rxBaudrate", "min": 200000, "max": 54000000}, + {"widget": "number", "label": "Центральная частота, КГц", "name": "rxCentralFreq", "min": 70000, "max": 6000000, "step": 100}, + {"widget": "number", "label": "Символьная скорость, Бод", "name": "rxBaudrate", "min": 128000, "max": 30000000}, { "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} ] } ] diff --git a/front-generator/template/common/monitoring.html.j2 b/front-generator/template/common/monitoring.html.j2 index 16b7dbb..2f6e927 100644 --- a/front-generator/template/common/monitoring.html.j2 +++ b/front-generator/template/common/monitoring.html.j2 @@ -3,7 +3,7 @@

Статистика приема

- + {% endraw %}{% if modem != 'shps' %}{% raw %} @@ -22,7 +22,17 @@ - + {% endraw %}{% else %}{% raw %} + + + + + + + + + + {% endraw %}{% endif %}{% raw %}
Прием
Захват символьной
Захват ФАПЧ
Статистика пакетов
Качественных пакетов{{ statRx.packetsOk }}
Поврежденных пакетов{{ statRx.packetsBad }}
DUMMY{{ statRx.packetsDummy }}
DUMMY{{ statRx.packetsDummy }}
Прием
ОСШ/RSSI{{ statRx.snr }} / {{ statRx.rssi }}
Частотная ошибка, Гц{{ statRx.freqErrAcc }}
Ур. входного сигнала{{ statRx.inputSignalLevel }}
Ошибка ФАПЧ{{ statRx.pllError }}
Инф. скорость на приеме{{ statRx.speedOnRxKbit }} кбит/с
Инф. скорость на интерфейсе{{ statRx.speedOnIifKbit }} кбит/с
Статистика пакетов
Качественных пакетов{{ statRx.packetsOk }}
Поврежденных пакетов{{ statRx.packetsBad }}
@@ -39,7 +49,7 @@ Инф. скорость на передаче{{ statTx.speedOnTxKbit }} кбит/с Инф. скорость на интерфейсе{{ statTx.speedOnIifKbit }} кбит/с - {% endraw %}{% else %}{% raw %} + {% endraw %}{% elif modem == 'tdma' %}{% raw %} @@ -49,6 +59,15 @@ +
Передача
Центральная частота{{ statTx.centerFreq }} кГц
Символьная скорость{{ statTx.symSpeed }} ksymb
{% endraw %}{% elif modem == 'shps' %}{% raw %} + + + + + + + +
Передача
Инф. скорость на передаче{{ statTx.speedOnTxKbit }} кбит/с
Инф. скорость на интерфейсе{{ statTx.speedOnIifKbit }} кбит/с
Центральная частота{{ statTx.centerFreq }} кГц
Символьная скорость{{ statTx.symSpeed }} ksymb
{% endraw %}{% endif %}{% raw %}
{% endraw %}{% if modem == 'scpc' %}{% raw %}
diff --git a/src/api-driver/structs.cpp b/src/api-driver/structs.cpp index c81086c..c2bedd6 100644 --- a/src/api-driver/structs.cpp +++ b/src/api-driver/structs.cpp @@ -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; +#ifndef MODEM_IS_SHPS fRxSymSyncLock = demod.locks.sym_sync_lock; fRxFreqSearchLock = demod.locks.freq_lock; fRxAfcLock = demod.locks.afc_lock; fRxPktSync = demod.locks.pkt_sync; +#endif fRxSnr = demod.snr; fRxRssi = demod.rssi; +#ifndef MODEM_IS_SHPS fRxModcod = demod.modcod; fRxFrameSizeNormal = !demod.is_short; fRxIsPilots = demod.is_pilots; fRxSymError = demod.sym_err; fRxFreqErr = demod.crs_freq_err; +#endif fRxFreqErrAcc = demod.fine_freq_err; fRxInputSignalLevel = demod.if_overload; fRxPllError = demod.afc_err; @@ -374,9 +378,10 @@ void api_driver::obj::TerminalState::updateCallback(proxy::CpProxy& cp) { fRxSpeedOnIifKbit = static_cast(demod.speed_in_bytes_rx_iface) / 128.0; fRxPacketsOk = demod.packet_ok_cnt; fRxPacketsBad = demod.packet_bad_cnt; +#ifndef MODEM_IS_SHPS fRxPacketsDummy = demod.dummy_cnt; - fTxModcod = mod.modcod; +#endif fTxSpeedOnTxKbit = static_cast(mod.speed_in_bytes_tx) / 128.0; fTxSpeedOnIifKbit = static_cast(mod.speed_in_bytes_tx_iface) / 128.0; #ifdef MODEM_IS_SCPC @@ -404,19 +409,23 @@ nlohmann::json api_driver::obj::TerminalState::asJson() { #endif res["rx"]["state"] = fRxState; +#ifndef MODEM_IS_SHPS res["rx"]["sym_sync_lock"] = fRxSymSyncLock; res["rx"]["freq_search_lock"] = fRxFreqSearchLock; res["rx"]["afc_lock"] = fRxAfcLock; res["rx"]["pkt_sync"] = fRxPktSync; +#endif res["rx"]["snr"] = fRxSnr; res["rx"]["rssi"] = fRxRssi; +#ifndef MODEM_IS_SHPS res["rx"]["modcod"] = fRxModcod; res["rx"]["frameSizeNormal"] = fRxFrameSizeNormal; res["rx"]["isPilots"] = fRxIsPilots; res["rx"]["symError"] = fRxSymError; res["rx"]["freqErr"] = fRxFreqErr; +#endif res["rx"]["freqErrAcc"] = fRxFreqErrAcc; res["rx"]["inputSignalLevel"] = fRxInputSignalLevel; res["rx"]["pllError"] = fRxPllError; @@ -424,9 +433,10 @@ nlohmann::json api_driver::obj::TerminalState::asJson() { res["rx"]["speedOnIifKbit"] = fRxSpeedOnIifKbit; res["rx"]["packetsOk"] = fRxPacketsOk; res["rx"]["packetsBad"] = fRxPacketsBad; +#ifndef MODEM_IS_SHPS res["rx"]["packetsDummy"] = fRxPacketsDummy; - res["tx"]["modcod"] = fTxModcod; +#endif res["tx"]["state"] = fTxState; res["tx"]["speedOnTxKbit"] = fTxSpeedOnTxKbit; res["tx"]["speedOnIifKbit"] = fTxSpeedOnIifKbit; @@ -657,6 +667,7 @@ void api_driver::obj::TerminalRxTxSettings::updateMainSettings(const nlohmann::j #endif #ifdef MODEM_IS_SHPS mod.koef_spread = data.value("txSpreadCoef", mod.koef_spread); + mod.txFieldsDataPreamble = data.value("txFieldsDataPreamble", mod.txFieldsDataPreamble); #endif // демодулятор @@ -671,6 +682,7 @@ void api_driver::obj::TerminalRxTxSettings::updateMainSettings(const nlohmann::j #endif #ifdef MODEM_IS_SHPS dem.koef_spread = data.value("rxSpreadCoef", dem.koef_spread); + dem.rxFftShift = data.value("rxFftShift", dem.rxFftShift); #endif #ifdef API_STRUCT_ACM_ENABLE @@ -837,6 +849,7 @@ nlohmann::json api_driver::obj::TerminalRxTxSettings::asJson() const { rxtx["txAttenuation"] = mod.attenuation; #ifdef MODEM_IS_SHPS rxtx["txSpreadCoef"] = mod.koef_spread; + rxtx["txFieldsDataPreamble"] = mod.txFieldsDataPreamble; #endif #if defined(MODEM_IS_SCPC) || defined(MODEM_IS_SHPS) @@ -861,8 +874,8 @@ nlohmann::json api_driver::obj::TerminalRxTxSettings::asJson() const { rxtx["rxGoldan"] = dem.gold_seq_is_active ? 1 : 0; #endif #ifdef MODEM_IS_SHPS - rxtx["txSpreadCoef"] = mod.koef_spread; rxtx["rxSpreadCoef"] = dem.koef_spread; + rxtx["rxFftShift"] = dem.rxFftShift; #endif #ifdef API_STRUCT_ACM_ENABLE diff --git a/src/api-driver/structs.h b/src/api-driver/structs.h index e162d62..48ae754 100644 --- a/src/api-driver/structs.h +++ b/src/api-driver/structs.h @@ -134,19 +134,22 @@ namespace api_driver::obj { #endif bool fRxState{}; +#ifndef MODEM_IS_SHPS bool fRxSymSyncLock{}; bool fRxFreqSearchLock{}; bool fRxAfcLock{}; bool fRxPktSync{}; +#endif float fRxSnr{}; float fRxRssi{}; +#ifndef MODEM_IS_SHPS uint16_t fRxModcod{}; bool fRxFrameSizeNormal{}; bool fRxIsPilots{}; - double fRxSymError{}; double fRxFreqErr{}; +#endif double fRxFreqErrAcc{}; double fRxInputSignalLevel{}; double fRxPllError{}; @@ -154,9 +157,10 @@ namespace api_driver::obj { double fRxSpeedOnIifKbit{}; uint32_t fRxPacketsOk{}; uint32_t fRxPacketsBad{}; +#ifndef MODEM_IS_SHPS uint32_t fRxPacketsDummy{}; - uint16_t fTxModcod{}; +#endif double fTxSpeedOnTxKbit{}; double fTxSpeedOnIifKbit{}; #ifdef MODEM_IS_SCPC diff --git a/static/main-shps.html b/static/main-shps.html index f99c0ba..7c197b9 100644 --- a/static/main-shps.html +++ b/static/main-shps.html @@ -58,16 +58,8 @@ - - - - - - - - - + @@ -75,7 +67,6 @@ -
Прием
Захват символьной
Захват ФАПЧ
Захват поиска по частоте
Захват пакетной синхр.
ОСШ/RSSI{{ statRx.snr }} / {{ statRx.rssi }}
Modcod{{ statRx.modcod }}
Размер кадра{{ statRx.frameSizeNormal ? 'normal' : 'short' }}
Пилот-символы{{ statRx.isPilots ? 'pilots' : 'no pilots' }}
Символьная ошибка{{ statRx.symError }}
Грубая/точная част. ошибка, Гц{{ statRx.freqErr }} / {{ statRx.freqErrAcc }}
Частотная ошибка, Гц{{ statRx.freqErrAcc }}
Ур. входного сигнала{{ statRx.inputSignalLevel }}
Ошибка ФАПЧ{{ statRx.pllError }}
Инф. скорость на приеме{{ statRx.speedOnRxKbit }} кбит/с
Статистика пакетов
Качественных пакетов{{ statRx.packetsOk }}
Поврежденных пакетов{{ statRx.packetsBad }}
DUMMY{{ statRx.packetsDummy }}
@@ -85,7 +76,6 @@ - @@ -127,6 +117,7 @@ +

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

- - + + - - + +

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

@@ -178,8 +171,8 @@ Инверсия спектра - - + + - + + +
@@ -351,12 +348,13 @@ txEn: false, txAutoStart: false, txModulatorIsTest: false, - txIsTestInput: false, - txCentralFreq: 100000, - txBaudrate: 200000, - txRolloff: 20, - txSpreadCoef: -1000, txAttenuation: -40, + txIsTestInput: false, + txCentralFreq: 70000, + txBaudrate: 128000, + txRolloff: 20, + txSpreadCoef: 8, + txFieldsDataPreamble: 1, aupcEn: false, aupcMinAttenuation: 0, aupcMaxAttenuation: 0, @@ -364,10 +362,12 @@ rxAgcEn: false, rxManualGain: -40, rxSpectrumInversion: false, - rxCentralFreq: 100000, - rxBaudrate: 200000, + rxCentralFreq: 70000, + rxBaudrate: 128000, rxRolloff: 20, - rxSpreadCoef: -1000, + rxSpreadCoef: 8, + rxFftShift: 256, + rxFieldsDataPreamble: 1, }, paramBuclnb: { bucRefClk10M: false, @@ -501,12 +501,13 @@ "txEn": this.paramRxtx.txEn, "txAutoStart": this.paramRxtx.txAutoStart, "txModulatorIsTest": this.paramRxtx.txModulatorIsTest, + "txAttenuation": this.paramRxtx.txAttenuation, "txIsTestInput": this.paramRxtx.txIsTestInput, "txCentralFreq": this.paramRxtx.txCentralFreq, "txBaudrate": this.paramRxtx.txBaudrate, "txRolloff": this.paramRxtx.txRolloff, "txSpreadCoef": this.paramRxtx.txSpreadCoef, - "txAttenuation": this.paramRxtx.txAttenuation, + "txFieldsDataPreamble": this.paramRxtx.txFieldsDataPreamble, "aupcEn": this.paramRxtx.aupcEn, "aupcMinAttenuation": this.paramRxtx.aupcMinAttenuation, "aupcMaxAttenuation": this.paramRxtx.aupcMaxAttenuation, @@ -518,6 +519,8 @@ "rxBaudrate": this.paramRxtx.rxBaudrate, "rxRolloff": this.paramRxtx.rxRolloff, "rxSpreadCoef": this.paramRxtx.rxSpreadCoef, + "rxFftShift": this.paramRxtx.rxFftShift, + "rxFieldsDataPreamble": this.paramRxtx.rxFieldsDataPreamble, } this.submitStatus.rxtx = true @@ -569,12 +572,13 @@ this.paramRxtx.txEn = vals["settings"]["rxtx"]["txEn"] this.paramRxtx.txAutoStart = vals["settings"]["rxtx"]["txAutoStart"] this.paramRxtx.txModulatorIsTest = vals["settings"]["rxtx"]["txModulatorIsTest"] + this.paramRxtx.txAttenuation = vals["settings"]["rxtx"]["txAttenuation"] this.paramRxtx.txIsTestInput = vals["settings"]["rxtx"]["txIsTestInput"] this.paramRxtx.txCentralFreq = vals["settings"]["rxtx"]["txCentralFreq"] this.paramRxtx.txBaudrate = vals["settings"]["rxtx"]["txBaudrate"] this.paramRxtx.txRolloff = vals["settings"]["rxtx"]["txRolloff"] 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.aupcMinAttenuation = vals["settings"]["rxtx"]["aupcMinAttenuation"] this.paramRxtx.aupcMaxAttenuation = vals["settings"]["rxtx"]["aupcMaxAttenuation"] @@ -586,6 +590,8 @@ this.paramRxtx.rxBaudrate = vals["settings"]["rxtx"]["rxBaudrate"] this.paramRxtx.rxRolloff = vals["settings"]["rxtx"]["rxRolloff"] this.paramRxtx.rxSpreadCoef = vals["settings"]["rxtx"]["rxSpreadCoef"] + this.paramRxtx.rxFftShift = vals["settings"]["rxtx"]["rxFftShift"] + this.paramRxtx.rxFieldsDataPreamble = vals["settings"]["rxtx"]["rxFieldsDataPreamble"] }, updateBuclnbSettings(vals) { this.submitStatus.buclnb = false
Передача
Modcod{{ statTx.modcod }}
Инф. скорость на передаче{{ statTx.speedOnTxKbit }} кбит/с
Инф. скорость на интерфейсе{{ statTx.speedOnIifKbit }} кбит/с
Центральная частота{{ statTx.centerFreq }} кГц