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 @@
Статистика пакетов |
Качественных пакетов | {{ statRx.packetsOk }} |
Поврежденных пакетов | {{ statRx.packetsBad }} |
- DUMMY | {{ statRx.packetsDummy }} |
+ DUMMY | {{ statRx.packetsDummy }} |
{% endraw %}{% else %}{% raw %}
+ Прием | |
+ ОСШ/RSSI | {{ statRx.snr }} / {{ statRx.rssi }} |
+ Частотная ошибка, Гц | {{ statRx.freqErrAcc }} |
+ Ур. входного сигнала | {{ statRx.inputSignalLevel }} |
+ Ошибка ФАПЧ | {{ statRx.pllError }} |
+ Инф. скорость на приеме | {{ statRx.speedOnRxKbit }} кбит/с |
+ Инф. скорость на интерфейсе | {{ statRx.speedOnIifKbit }} кбит/с |
+ Статистика пакетов |
+ Качественных пакетов | {{ statRx.packetsOk }} |
+ Поврежденных пакетов | {{ statRx.packetsBad }} |
{% endraw %}{% endif %}{% raw %}
@@ -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 @@
Прием | |
- Захват символьной | |
- Захват ФАПЧ | |
- Захват поиска по частоте | |
- Захват пакетной синхр. | |
ОСШ/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 }} кбит/с |
@@ -75,7 +67,6 @@
Статистика пакетов |
Качественных пакетов | {{ statRx.packetsOk }} |
Поврежденных пакетов | {{ statRx.packetsBad }} |
- DUMMY | {{ statRx.packetsDummy }} |
@@ -85,7 +76,6 @@
Передача | |
- Modcod | {{ statTx.modcod }} |
Инф. скорость на передаче | {{ statTx.speedOnTxKbit }} кбит/с |
Инф. скорость на интерфейсе | {{ statTx.speedOnIifKbit }} кбит/с |
Центральная частота | {{ statTx.centerFreq }} кГц |
@@ -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