Compare commits
3 Commits
6464cda437
...
bafef9c51c
Author | SHA1 | Date | |
---|---|---|---|
bafef9c51c | |||
196f7ae5a2 | |||
8813488df8 |
@ -18,14 +18,10 @@
|
|||||||
{"widget": "h3", "label": "Настройки передатчика"},
|
{"widget": "h3", "label": "Настройки передатчика"},
|
||||||
{"widget": "checkbox", "label": "Включить передатчик", "name": "txEn"},
|
{"widget": "checkbox", "label": "Включить передатчик", "name": "txEn"},
|
||||||
{
|
{
|
||||||
"widget": "select", "label": "Входные данные", "name": "txIsTestInput",
|
"widget": "select", "label": "Режим работы модулятора", "name": "txModulatorIsTest",
|
||||||
"values": [
|
"values": [{"label": "Нормальный", "value": "false"}, {"label": "Тест (CW)", "value": "true"}]
|
||||||
{"label": "SCPC", "value": "false"},
|
|
||||||
{"label": "Тест", "value": "true"}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{"widget": "number", "label": "Центральная частота, КГц", "name": "txCentralFreq", "min": 900000, "step": 0.01, "v_show": "paramRxrx.txIsTestInput"},
|
{"widget": "number", "label": "Центральная частота, КГц", "name": "txCentralFreq", "min": 900000, "step": 0.01, "v_show": "paramRxtx.txModulatorIsTest"},
|
||||||
{"widget": "number", "label": "Символьная скорость, Бод", "name": "txBaudrate", "min": 0, "step": 1, "v_show": "paramRxrx.txIsTestInput"},
|
|
||||||
{"widget": "number", "label": "Ослабление, дБ", "name": "txAttenuation", "min": 0, "step": 1}
|
{"widget": "number", "label": "Ослабление, дБ", "name": "txAttenuation", "min": 0, "step": 1}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -186,11 +182,14 @@
|
|||||||
},
|
},
|
||||||
{"widget": "modulation-modcod", "label": "Модуляция", "name": "dvbCcm", "v_show": "paramRxtx.dvbIsAcm === false"},
|
{"widget": "modulation-modcod", "label": "Модуляция", "name": "dvbCcm", "v_show": "paramRxtx.dvbIsAcm === false"},
|
||||||
{"widget": "modulation-speed", "label": "Скорость кода", "name": "dvbCcm", "v_show": "paramRxtx.dvbIsAcm === false"},
|
{"widget": "modulation-speed", "label": "Скорость кода", "name": "dvbCcm", "v_show": "paramRxtx.dvbIsAcm === false"},
|
||||||
{"widget": "watch", "label": "Текущий модкод", "model": "statTx.modcod", "v_show": "paramRxtx.dvbIsAcm === true"},
|
{"widget": "watch-expr", "label": "Расчетная скорость, kbit", "expr": "calcInterfaceSpeedKb(paramRxtx.txBaudrate, paramRxtx.dvbCcmModulation, paramRxtx.dvbCcmSpeed)", "v_show": "paramRxtx.dvbIsAcm === false"},
|
||||||
|
{"widget": "watch-expr", "label": "Текущий модкод", "expr": "statTx.modcod", "v_show": "paramRxtx.dvbIsAcm === true"},
|
||||||
{"widget": "modulation-modcod", "label": "Модуляция (мин. режим)", "name": "dvbAcmMin", "v_show": "paramRxtx.dvbIsAcm === true"},
|
{"widget": "modulation-modcod", "label": "Модуляция (мин. режим)", "name": "dvbAcmMin", "v_show": "paramRxtx.dvbIsAcm === true"},
|
||||||
{"widget": "modulation-speed", "label": "Скорость кода (мин. режим)", "name": "dvbAcmMin", "v_show": "paramRxtx.dvbIsAcm === true"},
|
{"widget": "modulation-speed", "label": "Скорость кода (мин. режим)", "name": "dvbAcmMin", "v_show": "paramRxtx.dvbIsAcm === true"},
|
||||||
|
{"widget": "watch-expr", "label": "Расчетная скорость (мин. режим), kbit", "expr": "calcInterfaceSpeedKb(paramRxtx.txBaudrate, paramRxtx.dvbAcmMinModulation, paramRxtx.dvbAcmMinSpeed)", "v_show": "paramRxtx.dvbIsAcm === true"},
|
||||||
{"widget": "modulation-modcod", "label": "Модуляция (макс. режим)", "name": "dvbAcmMax", "v_show": "paramRxtx.dvbIsAcm === true"},
|
{"widget": "modulation-modcod", "label": "Модуляция (макс. режим)", "name": "dvbAcmMax", "v_show": "paramRxtx.dvbIsAcm === true"},
|
||||||
{"widget": "modulation-speed", "label": "Скорость кода (макс. режим)", "name": "dvbAcmMax", "v_show": "paramRxtx.dvbIsAcm === true"},
|
{"widget": "modulation-speed", "label": "Скорость кода (макс. режим)", "name": "dvbAcmMax", "v_show": "paramRxtx.dvbIsAcm === true"},
|
||||||
|
{"widget": "watch-expr", "label": "Расчетная скорость (макс. режим), kbit", "expr": "calcInterfaceSpeedKb(paramRxtx.txBaudrate, paramRxtx.dvbAcmMaxModulation, paramRxtx.dvbAcmMaxSpeed)", "v_show": "paramRxtx.dvbIsAcm === true"},
|
||||||
{"widget": "number", "label": "Запас ОСШ, дБ", "name": "dvbSnrReserve", "min": 0, "step": 0.01, "max": 10}
|
{"widget": "number", "label": "Запас ОСШ, дБ", "name": "dvbSnrReserve", "min": 0, "step": 0.01, "max": 10}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -213,7 +212,7 @@
|
|||||||
"values": [{"label": "РРУ", "value": "false"}, {"label": "АРУ", "value": "true"}]
|
"values": [{"label": "РРУ", "value": "false"}, {"label": "АРУ", "value": "true"}]
|
||||||
},
|
},
|
||||||
{"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", "label": "Текущее усиление", "model": "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": 900000, "step": 0.01},
|
{"widget": "number", "label": "Центральная частота, КГц", "name": "rxCentralFreq", "min": 900000, "step": 0.01},
|
||||||
{"widget": "number", "label": "Символьная скорость, Бод", "name": "rxBaudrate", "min": 0, "step": 1},
|
{"widget": "number", "label": "Символьная скорость, Бод", "name": "rxBaudrate", "min": 0, "step": 1},
|
||||||
|
@ -100,3 +100,4 @@
|
|||||||
this.statRx.packetsDummy = 0
|
this.statRx.packetsDummy = 0
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
8
front-generator/template/common/setup-methods.js.j2
Normal file
8
front-generator/template/common/setup-methods.js.j2
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{% if 'rxtx' in params and modem == 'scpc' %}
|
||||||
|
calcInterfaceSpeedKb(baud, modulation, speed) {
|
||||||
|
const mMod = Math.max(2, ['', '', 'qpsk', '8psk', '16apsk', '32apsk'].indexOf(modulation))
|
||||||
|
const speedVals = {'1/4': 0.25, '1/3': 0.333, '2/5': 0.4, '1/2': 0.5, '3/5': 0.6, '2/3': 0.666, '3/4': 0.75, '4/5': 0.8, '5/6': 0.833, '8/9': 0.888, '9/10': 0.9}
|
||||||
|
const mSpeed = speed in speedVals ? speedVals[speed] : 1
|
||||||
|
return ((baud * mMod * mSpeed) / 1024).toLocaleString()
|
||||||
|
},
|
||||||
|
{% endif %}
|
@ -16,6 +16,11 @@
|
|||||||
|
|
||||||
{% macro build_widget_watch(param_group, widget) %}<label{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}><span>{{ widget.label }}</span><input type="text" readonly v-model="{{ widget.model }}"/></label>{% endmacro %}
|
{% macro build_widget_watch(param_group, widget) %}<label{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}><span>{{ widget.label }}</span><input type="text" readonly v-model="{{ widget.model }}"/></label>{% endmacro %}
|
||||||
|
|
||||||
|
{% macro build_widget_watch_expr(param_group, widget) %}<label{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}>
|
||||||
|
<span>{{ widget.label }}</span><span>{{ '{{ ' ~ widget.expr ~ ' }}' }}</span>
|
||||||
|
</label>{% endmacro %}
|
||||||
|
|
||||||
|
|
||||||
{% macro build_widget_modulation_modcod(param_group, widget) %}<label{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}>
|
{% macro build_widget_modulation_modcod(param_group, widget) %}<label{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}>
|
||||||
<span>{{ widget.label }}</span>
|
<span>{{ widget.label }}</span>
|
||||||
<select v-model="param{{ param_group | title }}.{{ widget.name }}Modulation" @change="param{{ param_group | title }}.{{ widget.name }}Speed = correctModcodSpeed(param{{ param_group | title }}.{{ widget.name }}Modulation, param{{ param_group | title }}.{{ widget.name }}Speed)">
|
<select v-model="param{{ param_group | title }}.{{ widget.name }}Modulation" @change="param{{ param_group | title }}.{{ widget.name }}Speed = correctModcodSpeed(param{{ param_group | title }}.{{ widget.name }}Modulation, param{{ param_group | title }}.{{ widget.name }}Speed)">
|
||||||
@ -54,6 +59,7 @@
|
|||||||
{% elif widget.widget == 'checkbox' %}{{ build_widget_checkbox(param_group, widget) }}
|
{% elif widget.widget == 'checkbox' %}{{ build_widget_checkbox(param_group, widget) }}
|
||||||
{% elif widget.widget == 'number' %}{{ build_widget_number(param_group, widget) }}
|
{% elif widget.widget == 'number' %}{{ build_widget_number(param_group, widget) }}
|
||||||
{% elif widget.widget == 'watch' %}{{ build_widget_watch(param_group, widget) }}
|
{% elif widget.widget == 'watch' %}{{ build_widget_watch(param_group, widget) }}
|
||||||
|
{% elif widget.widget == 'watch-expr' %}{{ build_widget_watch_expr(param_group, widget) }}
|
||||||
{% elif widget.widget == 'select' %}{{ build_widget_select(param_group, widget) }}
|
{% elif widget.widget == 'select' %}{{ build_widget_select(param_group, widget) }}
|
||||||
{% elif widget.widget == 'modulation-modcod' %}{{ build_widget_modulation_modcod(param_group, widget) }}
|
{% elif widget.widget == 'modulation-modcod' %}{{ build_widget_modulation_modcod(param_group, widget) }}
|
||||||
{% elif widget.widget == 'modulation-speed' %}{{ build_widget_modulation_speed(param_group, widget) }}
|
{% elif widget.widget == 'modulation-speed' %}{{ build_widget_modulation_speed(param_group, widget) }}
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endraw %}
|
{% endraw %}
|
||||||
</div>
|
</div>
|
||||||
<script src="/js/vue.js"></script>
|
<script src="/js/vue.js?v=3.5.13"></script>
|
||||||
<script>
|
<script>
|
||||||
const availableTabs = ['{{ tab_names_array | join("', '") }}']
|
const availableTabs = ['{{ tab_names_array | join("', '") }}']
|
||||||
|
|
||||||
|
@ -30,10 +30,10 @@ http::auth::jwt::Jwt http::auth::jwt::Jwt::fromCookies(const std::string &cookie
|
|||||||
const auto auth = pc.at("auth");
|
const auto auth = pc.at("auth");
|
||||||
std::string::size_type firstDot = std::string::npos;
|
std::string::size_type firstDot = std::string::npos;
|
||||||
std::string::size_type secondDot = std::string::npos;
|
std::string::size_type secondDot = std::string::npos;
|
||||||
for (size_t i = 0; i < auth.size(); i++) {
|
for (std::string::size_type i = 0; i < auth.size(); i++) {
|
||||||
if (auth[i] == '.') {
|
if (auth[i] == '.') {
|
||||||
if (firstDot == std::string::npos) { firstDot = static_cast<int>(i); }
|
if (firstDot == std::string::npos) { firstDot = i; }
|
||||||
else if (secondDot == std::string::npos) { secondDot = static_cast<int>(i); }
|
else if (secondDot == std::string::npos) { secondDot = i; }
|
||||||
else {
|
else {
|
||||||
// так быть не должно
|
// так быть не должно
|
||||||
return t;
|
return t;
|
||||||
|
25
src/main.cpp
25
src/main.cpp
@ -28,25 +28,6 @@ constexpr const char* REBOOT_COMMAND = "web-action reboot";
|
|||||||
constexpr const char* UPGRADE_COMMAND = "web-action upgrade";
|
constexpr const char* UPGRADE_COMMAND = "web-action upgrade";
|
||||||
|
|
||||||
|
|
||||||
static std::vector<char> loadFile(const std::string& path) {
|
|
||||||
std::ifstream is(path, std::ios::in | std::ios::binary);
|
|
||||||
if (!is) {
|
|
||||||
throw std::runtime_error("File not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<char> content;
|
|
||||||
for (;;) {
|
|
||||||
char buf[512];
|
|
||||||
auto len = is.read(buf, sizeof(buf)).gcount();
|
|
||||||
if (len <= 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
content.insert(content.end(), buf, buf + len);
|
|
||||||
}
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
namespace mime_types = http::server::mime_types;
|
namespace mime_types = http::server::mime_types;
|
||||||
|
|
||||||
void init_logging() {
|
void init_logging() {
|
||||||
@ -515,9 +496,9 @@ int main(int argc, char *argv[]) {
|
|||||||
s->run();
|
s->run();
|
||||||
|
|
||||||
} else if (strcmp(argv[1], "ssl") == 0) {
|
} else if (strcmp(argv[1], "ssl") == 0) {
|
||||||
const auto cert = loadFile("cert.pem");
|
std::vector<char> cert; http::resource::loadFile("cert.pem", cert);
|
||||||
const auto key = loadFile("key.pem");
|
std::vector<char> key; http::resource::loadFile("key.pem", key);
|
||||||
const auto dh = loadFile("dh.pem");
|
std::vector<char> dh; http::resource::loadFile("dh.pem", dh);
|
||||||
|
|
||||||
auto ctx = std::make_shared<ssl::context>(ssl::context::tlsv12);
|
auto ctx = std::make_shared<ssl::context>(ssl::context::tlsv12);
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
static void loadFile(const std::string& path, std::vector<char>& content) {
|
void http::resource::loadFile(const std::string& path, std::vector<char>& content) {
|
||||||
std::ifstream is(path, std::ios::in | std::ios::binary);
|
std::ifstream is(path, std::ios::in | std::ios::binary);
|
||||||
if (!is) {
|
if (!is) {
|
||||||
throw std::runtime_error("File not found");
|
throw std::runtime_error("File not found " + path);
|
||||||
}
|
}
|
||||||
|
|
||||||
content.clear();
|
content.clear();
|
||||||
|
@ -62,6 +62,8 @@ namespace http::resource {
|
|||||||
|
|
||||||
~GenericResource() override;
|
~GenericResource() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void loadFile(const std::string& path, std::vector<char>& content);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //RESOURCE_H
|
#endif //RESOURCE_H
|
||||||
|
@ -469,6 +469,15 @@ public:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool isTest() {
|
||||||
|
std::shared_lock lock(this->settingsMutex);
|
||||||
|
return !modSettings.is_carrier
|
||||||
|
#ifdef MODEM_IS_SCPC
|
||||||
|
|| this->modSettings.is_test_data
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
void getNetworkSettings(TerminalNetworkSettings& dest) {
|
void getNetworkSettings(TerminalNetworkSettings& dest) {
|
||||||
std::shared_lock lock(this->networkSettingsMutex);
|
std::shared_lock lock(this->networkSettingsMutex);
|
||||||
dest = this->networkSettings;
|
dest = this->networkSettings;
|
||||||
@ -690,6 +699,7 @@ std::string api_driver::ApiDriver::loadTerminalState() const {
|
|||||||
std::stringstream result;
|
std::stringstream result;
|
||||||
|
|
||||||
result << "{\n\"initState\":" << buildEscapedString(daemon->getDeviceInitState());
|
result << "{\n\"initState\":" << buildEscapedString(daemon->getDeviceInitState());
|
||||||
|
result << ",\n\"testState\":" << boolAsStr(daemon->isTest());
|
||||||
|
|
||||||
modulator_state modulator{};
|
modulator_state modulator{};
|
||||||
demodulator_state demodulator{};
|
demodulator_state demodulator{};
|
||||||
@ -837,7 +847,7 @@ const static ModcodDef_t ModcodDefs[] = {
|
|||||||
static const char* extractModcodModulation(uint32_t modcod, bool defaultQpsk1_4 = true) {
|
static const char* extractModcodModulation(uint32_t modcod, bool defaultQpsk1_4 = true) {
|
||||||
modcod >>= 2;
|
modcod >>= 2;
|
||||||
const auto* d = defaultQpsk1_4 ? ModcodDefs : ModcodDefs + 1;
|
const auto* d = defaultQpsk1_4 ? ModcodDefs : ModcodDefs + 1;
|
||||||
if (modcod < 28) {
|
if (modcod < (sizeof(ModcodDefs) / sizeof(ModcodDef_t))) {
|
||||||
d = ModcodDefs + modcod;
|
d = ModcodDefs + modcod;
|
||||||
}
|
}
|
||||||
return d->modulation;
|
return d->modulation;
|
||||||
@ -846,7 +856,7 @@ static const char* extractModcodModulation(uint32_t modcod, bool defaultQpsk1_4
|
|||||||
static const char* extractModcodSpeed(uint32_t modcod, bool defaultQpsk1_4 = true) {
|
static const char* extractModcodSpeed(uint32_t modcod, bool defaultQpsk1_4 = true) {
|
||||||
modcod >>= 2;
|
modcod >>= 2;
|
||||||
const auto* d = defaultQpsk1_4 ? ModcodDefs : ModcodDefs + 1;
|
const auto* d = defaultQpsk1_4 ? ModcodDefs : ModcodDefs + 1;
|
||||||
if (modcod < 28) {
|
if (modcod < (sizeof(ModcodDefs) / sizeof(ModcodDef_t))) {
|
||||||
d = ModcodDefs + modcod;
|
d = ModcodDefs + modcod;
|
||||||
}
|
}
|
||||||
return d->speed;
|
return d->speed;
|
||||||
@ -873,15 +883,15 @@ std::string api_driver::ApiDriver::loadSettings() const {
|
|||||||
|
|
||||||
std::stringstream result;
|
std::stringstream result;
|
||||||
result << "{\n\"txAutoStart\":" << boolAsStr(modSettings.is_save_current_state);
|
result << "{\n\"txAutoStart\":" << boolAsStr(modSettings.is_save_current_state);
|
||||||
#ifdef MODEM_IS_SCPC
|
|
||||||
result << ",\"txEn\":" << boolAsStr(modSettings.tx_is_on);
|
result << ",\"txEn\":" << boolAsStr(modSettings.tx_is_on);
|
||||||
result << ",\"txModulatorIsTest\":" << boolAsStr(!modSettings.is_carrier);
|
#ifdef MODEM_IS_SCPC
|
||||||
#endif
|
|
||||||
result << ",\"txIsTestInput\":" << boolAsStr(modSettings.is_test_data);
|
result << ",\"txIsTestInput\":" << boolAsStr(modSettings.is_test_data);
|
||||||
|
#endif
|
||||||
|
result << ",\"txModulatorIsTest\":" << boolAsStr(!modSettings.is_carrier);
|
||||||
result << ",\"txCentralFreq\":"; writeDouble(result, modSettings.central_freq_in_kGz);
|
result << ",\"txCentralFreq\":"; writeDouble(result, modSettings.central_freq_in_kGz);
|
||||||
|
#ifdef MODEM_IS_SCPC
|
||||||
result << ",\"txBaudrate\":" << modSettings.baudrate;
|
result << ",\"txBaudrate\":" << modSettings.baudrate;
|
||||||
result << ",\"txRolloff\":" << static_cast<int>(modSettings.rollof);
|
result << ",\"txRolloff\":" << static_cast<int>(modSettings.rollof);
|
||||||
#ifdef MODEM_IS_SCPC
|
|
||||||
result << ",\"txGoldan\":" << static_cast<int>(modSettings.gold_seq_is_active);
|
result << ",\"txGoldan\":" << static_cast<int>(modSettings.gold_seq_is_active);
|
||||||
#endif
|
#endif
|
||||||
result << ",\"txAttenuation\":"; writeDouble(result, modSettings.attenuation);
|
result << ",\"txAttenuation\":"; writeDouble(result, modSettings.attenuation);
|
||||||
@ -1017,13 +1027,13 @@ void api_driver::ApiDriver::setRxTxSettings(boost::property_tree::ptree &pt) {
|
|||||||
mod.tx_is_on = pt.get<bool>("txEn");
|
mod.tx_is_on = pt.get<bool>("txEn");
|
||||||
#ifdef MODEM_IS_SCPC
|
#ifdef MODEM_IS_SCPC
|
||||||
mod.is_save_current_state = pt.get<bool>("txAutoStart");
|
mod.is_save_current_state = pt.get<bool>("txAutoStart");
|
||||||
mod.is_carrier = !pt.get<bool>("txModulatorIsTest");
|
|
||||||
#endif
|
|
||||||
mod.is_test_data = pt.get<bool>("txIsTestInput");
|
mod.is_test_data = pt.get<bool>("txIsTestInput");
|
||||||
|
#endif
|
||||||
|
mod.is_carrier = !pt.get<bool>("txModulatorIsTest");
|
||||||
mod.central_freq_in_kGz = pt.get<double>("txCentralFreq");
|
mod.central_freq_in_kGz = pt.get<double>("txCentralFreq");
|
||||||
mod.baudrate = pt.get<uint32_t>("txBaudrate");
|
|
||||||
mod.rollof = pt.get<int>("txRolloff");
|
|
||||||
#ifdef MODEM_IS_SCPC
|
#ifdef MODEM_IS_SCPC
|
||||||
|
mod.baudrate = pt.get<uint32_t>("txBaudrate");
|
||||||
|
mod.rollof = pt.get<unsigned int>("txRolloff");
|
||||||
mod.gold_seq_is_active = pt.get<bool>("txGoldan");
|
mod.gold_seq_is_active = pt.get<bool>("txGoldan");
|
||||||
#endif
|
#endif
|
||||||
mod.attenuation = pt.get<double>("txAttenuation");
|
mod.attenuation = pt.get<double>("txAttenuation");
|
||||||
@ -1036,10 +1046,10 @@ void api_driver::ApiDriver::setRxTxSettings(boost::property_tree::ptree &pt) {
|
|||||||
// демодулятор
|
// демодулятор
|
||||||
demod.is_aru_on = pt.get<bool>("rxAgcEn");
|
demod.is_aru_on = pt.get<bool>("rxAgcEn");
|
||||||
demod.gain = pt.get<double>("rxManualGain");
|
demod.gain = pt.get<double>("rxManualGain");
|
||||||
demod.is_rvt_iq = pt.get<bool>("aupcEn");
|
demod.is_rvt_iq = pt.get<bool>("rxSpectrumInversion");
|
||||||
demod.central_freq_in_kGz = pt.get<double>("rxCentralFreq");
|
demod.central_freq_in_kGz = pt.get<double>("rxCentralFreq");
|
||||||
demod.baudrate = pt.get<uint32_t>("rxBaudrate");
|
demod.baudrate = pt.get<uint32_t>("rxBaudrate");
|
||||||
demod.rollof = pt.get<int>("rxRolloff");
|
demod.rollof = pt.get<unsigned int>("rxRolloff");
|
||||||
#ifdef MODEM_IS_SCPC
|
#ifdef MODEM_IS_SCPC
|
||||||
demod.gold_seq_is_active = pt.get<bool>("rxGoldan");
|
demod.gold_seq_is_active = pt.get<bool>("rxGoldan");
|
||||||
#endif
|
#endif
|
||||||
|
@ -216,7 +216,12 @@
|
|||||||
<option v-for="speed in getAvailableModcods(paramRxtx.dvbCcmModulation)" v-bind:value="speed">{{ speed }}</option>
|
<option v-for="speed in getAvailableModcods(paramRxtx.dvbCcmModulation)" v-bind:value="speed">{{ speed }}</option>
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
<label v-show="paramRxtx.dvbIsAcm === true"><span>Текущий модкод</span><input type="text" readonly v-model="statTx.modcod"/></label>
|
<label v-show="paramRxtx.dvbIsAcm === false">
|
||||||
|
<span>Расчетная скорость, kbit</span><span>{{ calcInterfaceSpeedKb(paramRxtx.txBaudrate, paramRxtx.dvbCcmModulation, paramRxtx.dvbCcmSpeed) }}</span>
|
||||||
|
</label>
|
||||||
|
<label v-show="paramRxtx.dvbIsAcm === true">
|
||||||
|
<span>Текущий модкод</span><span>{{ statTx.modcod }}</span>
|
||||||
|
</label>
|
||||||
<label v-show="paramRxtx.dvbIsAcm === true">
|
<label v-show="paramRxtx.dvbIsAcm === true">
|
||||||
<span>Модуляция (мин. режим)</span>
|
<span>Модуляция (мин. режим)</span>
|
||||||
<select v-model="paramRxtx.dvbAcmMinModulation" @change="paramRxtx.dvbAcmMinSpeed = correctModcodSpeed(paramRxtx.dvbAcmMinModulation, paramRxtx.dvbAcmMinSpeed)">
|
<select v-model="paramRxtx.dvbAcmMinModulation" @change="paramRxtx.dvbAcmMinSpeed = correctModcodSpeed(paramRxtx.dvbAcmMinModulation, paramRxtx.dvbAcmMinSpeed)">
|
||||||
@ -232,6 +237,9 @@
|
|||||||
<option v-for="speed in getAvailableModcods(paramRxtx.dvbAcmMinModulation)" v-bind:value="speed">{{ speed }}</option>
|
<option v-for="speed in getAvailableModcods(paramRxtx.dvbAcmMinModulation)" v-bind:value="speed">{{ speed }}</option>
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
|
<label v-show="paramRxtx.dvbIsAcm === true">
|
||||||
|
<span>Расчетная скорость (мин. режим), kbit</span><span>{{ calcInterfaceSpeedKb(paramRxtx.txBaudrate, paramRxtx.dvbAcmMinModulation, paramRxtx.dvbAcmMinSpeed) }}</span>
|
||||||
|
</label>
|
||||||
<label v-show="paramRxtx.dvbIsAcm === true">
|
<label v-show="paramRxtx.dvbIsAcm === true">
|
||||||
<span>Модуляция (макс. режим)</span>
|
<span>Модуляция (макс. режим)</span>
|
||||||
<select v-model="paramRxtx.dvbAcmMaxModulation" @change="paramRxtx.dvbAcmMaxSpeed = correctModcodSpeed(paramRxtx.dvbAcmMaxModulation, paramRxtx.dvbAcmMaxSpeed)">
|
<select v-model="paramRxtx.dvbAcmMaxModulation" @change="paramRxtx.dvbAcmMaxSpeed = correctModcodSpeed(paramRxtx.dvbAcmMaxModulation, paramRxtx.dvbAcmMaxSpeed)">
|
||||||
@ -247,6 +255,9 @@
|
|||||||
<option v-for="speed in getAvailableModcods(paramRxtx.dvbAcmMaxModulation)" v-bind:value="speed">{{ speed }}</option>
|
<option v-for="speed in getAvailableModcods(paramRxtx.dvbAcmMaxModulation)" v-bind:value="speed">{{ speed }}</option>
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
|
<label v-show="paramRxtx.dvbIsAcm === true">
|
||||||
|
<span>Расчетная скорость (макс. режим), kbit</span><span>{{ calcInterfaceSpeedKb(paramRxtx.txBaudrate, paramRxtx.dvbAcmMaxModulation, paramRxtx.dvbAcmMaxSpeed) }}</span>
|
||||||
|
</label>
|
||||||
<label><span>Запас ОСШ, дБ</span><input type="number" v-model="paramRxtx.dvbSnrReserve" max="10" step="0.01"/></label>
|
<label><span>Запас ОСШ, дБ</span><input type="number" v-model="paramRxtx.dvbSnrReserve" max="10" step="0.01"/></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-set-container">
|
<div class="settings-set-container">
|
||||||
@ -269,7 +280,9 @@
|
|||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
<label v-show="paramRxtx.rxAgcEn === false"><span>Усиление, дБ</span><input type="number" v-model="paramRxtx.rxManualGain" min="-40" max="40" step="0.01"/></label>
|
<label v-show="paramRxtx.rxAgcEn === false"><span>Усиление, дБ</span><input type="number" v-model="paramRxtx.rxManualGain" min="-40" max="40" step="0.01"/></label>
|
||||||
<label v-show="paramRxtx.rxAgcEn === true"><span>Текущее усиление</span><input type="text" readonly v-model="paramRxtx.rxManualGain"/></label>
|
<label v-show="paramRxtx.rxAgcEn === true">
|
||||||
|
<span>Текущее усиление</span><span>{{ paramRxtx.rxManualGain }}</span>
|
||||||
|
</label>
|
||||||
<label>
|
<label>
|
||||||
<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>
|
||||||
@ -526,7 +539,7 @@
|
|||||||
<p>Последнее обновление статистики: {{ lastUpdateTime }}</p>
|
<p>Последнее обновление статистики: {{ lastUpdateTime }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="/js/vue.js"></script>
|
<script src="/js/vue.js?v=3.5.13"></script>
|
||||||
<script>
|
<script>
|
||||||
const availableTabs = ['monitoring', 'setup', 'qos', 'admin']
|
const availableTabs = ['monitoring', 'setup', 'qos', 'admin']
|
||||||
|
|
||||||
@ -1007,9 +1020,16 @@
|
|||||||
this.statRx.packetsBad = 0
|
this.statRx.packetsBad = 0
|
||||||
this.statRx.packetsDummy = 0
|
this.statRx.packetsDummy = 0
|
||||||
})
|
})
|
||||||
}, // ========== include end from 'common/monitoring-methods.js.j2'
|
},
|
||||||
|
// ========== include end from 'common/monitoring-methods.js.j2'
|
||||||
|
|
||||||
// ========== include from 'common/setup-methods.js.j2'
|
// ========== include from 'common/setup-methods.js.j2'
|
||||||
|
calcInterfaceSpeedKb(baud, modulation, speed) {
|
||||||
|
const mMod = Math.max(2, ['', '', 'qpsk', '8psk', '16apsk', '32apsk'].indexOf(modulation))
|
||||||
|
const speedVals = {'1/4': 0.25, '1/3': 0.333, '2/5': 0.4, '1/2': 0.5, '3/5': 0.6, '2/3': 0.666, '3/4': 0.75, '4/5': 0.8, '5/6': 0.833, '8/9': 0.888, '9/10': 0.9}
|
||||||
|
const mSpeed = speed in speedVals ? speedVals[speed] : 1
|
||||||
|
return ((baud * mMod * mSpeed) / 1024).toLocaleString()
|
||||||
|
},
|
||||||
// ========== include end from 'common/setup-methods.js.j2'
|
// ========== include end from 'common/setup-methods.js.j2'
|
||||||
|
|
||||||
// ========== include from 'common/qos-methods.js.j2'
|
// ========== include from 'common/qos-methods.js.j2'
|
||||||
|
@ -121,14 +121,13 @@
|
|||||||
<span class="toggle-input"><input type="checkbox" v-model="paramRxtx.txEn" /><span class="slider"></span></span>
|
<span class="toggle-input"><input type="checkbox" v-model="paramRxtx.txEn" /><span class="slider"></span></span>
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
<span>Входные данные</span>
|
<span>Режим работы модулятора</span>
|
||||||
<select v-model="paramRxtx.txIsTestInput">
|
<select v-model="paramRxtx.txModulatorIsTest">
|
||||||
<option :value="false">SCPC</option>
|
<option :value="false">Нормальный</option>
|
||||||
<option :value="true">Тест</option>
|
<option :value="true">Тест (CW)</option>
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
<label v-show="paramRxrx.txIsTestInput"><span>Центральная частота, КГц</span><input type="number" v-model="paramRxtx.txCentralFreq" min="900000" step="0.01"/></label>
|
<label v-show="paramRxtx.txModulatorIsTest"><span>Центральная частота, КГц</span><input type="number" v-model="paramRxtx.txCentralFreq" min="900000" step="0.01"/></label>
|
||||||
<label v-show="paramRxrx.txIsTestInput"><span>Символьная скорость, Бод</span><input type="number" v-model="paramRxtx.txBaudrate" step="1"/></label>
|
|
||||||
<label><span>Ослабление, дБ</span><input type="number" v-model="paramRxtx.txAttenuation" step="1"/></label>
|
<label><span>Ослабление, дБ</span><input type="number" v-model="paramRxtx.txAttenuation" step="1"/></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-set-container">
|
<div class="settings-set-container">
|
||||||
@ -259,7 +258,7 @@
|
|||||||
<p>Последнее обновление статистики: {{ lastUpdateTime }}</p>
|
<p>Последнее обновление статистики: {{ lastUpdateTime }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="/js/vue.js"></script>
|
<script src="/js/vue.js?v=3.5.13"></script>
|
||||||
<script>
|
<script>
|
||||||
const availableTabs = ['monitoring', 'setup', 'admin']
|
const availableTabs = ['monitoring', 'setup', 'admin']
|
||||||
|
|
||||||
@ -292,9 +291,8 @@
|
|||||||
// ========== include from 'common/all-params-data.js.j2'
|
// ========== include from 'common/all-params-data.js.j2'
|
||||||
paramRxtx: {
|
paramRxtx: {
|
||||||
txEn: false,
|
txEn: false,
|
||||||
txIsTestInput: false,
|
txModulatorIsTest: false,
|
||||||
txCentralFreq: 900000,
|
txCentralFreq: 900000,
|
||||||
txBaudrate: 0,
|
|
||||||
txAttenuation: 0,
|
txAttenuation: 0,
|
||||||
rxAgcEn: true,
|
rxAgcEn: true,
|
||||||
rxManualGain: -40,
|
rxManualGain: -40,
|
||||||
@ -422,9 +420,8 @@
|
|||||||
|
|
||||||
let query = {
|
let query = {
|
||||||
"txEn": this.paramRxtx.txEn,
|
"txEn": this.paramRxtx.txEn,
|
||||||
"txIsTestInput": this.paramRxtx.txIsTestInput,
|
"txModulatorIsTest": this.paramRxtx.txModulatorIsTest,
|
||||||
"txCentralFreq": this.paramRxtx.txCentralFreq,
|
"txCentralFreq": this.paramRxtx.txCentralFreq,
|
||||||
"txBaudrate": this.paramRxtx.txBaudrate,
|
|
||||||
"txAttenuation": this.paramRxtx.txAttenuation,
|
"txAttenuation": this.paramRxtx.txAttenuation,
|
||||||
"rxAgcEn": this.paramRxtx.rxAgcEn,
|
"rxAgcEn": this.paramRxtx.rxAgcEn,
|
||||||
"rxManualGain": this.paramRxtx.rxManualGain,
|
"rxManualGain": this.paramRxtx.rxManualGain,
|
||||||
@ -480,9 +477,8 @@
|
|||||||
updateRxtxSettings(vals) {
|
updateRxtxSettings(vals) {
|
||||||
this.submitStatus.rxtx = false
|
this.submitStatus.rxtx = false
|
||||||
this.paramRxtx.txEn = vals["settings"]["txEn"]
|
this.paramRxtx.txEn = vals["settings"]["txEn"]
|
||||||
this.paramRxtx.txIsTestInput = vals["settings"]["txIsTestInput"]
|
this.paramRxtx.txModulatorIsTest = vals["settings"]["txModulatorIsTest"]
|
||||||
this.paramRxtx.txCentralFreq = vals["settings"]["txCentralFreq"]
|
this.paramRxtx.txCentralFreq = vals["settings"]["txCentralFreq"]
|
||||||
this.paramRxtx.txBaudrate = vals["settings"]["txBaudrate"]
|
|
||||||
this.paramRxtx.txAttenuation = vals["settings"]["txAttenuation"]
|
this.paramRxtx.txAttenuation = vals["settings"]["txAttenuation"]
|
||||||
this.paramRxtx.rxAgcEn = vals["settings"]["rxAgcEn"]
|
this.paramRxtx.rxAgcEn = vals["settings"]["rxAgcEn"]
|
||||||
this.paramRxtx.rxManualGain = vals["settings"]["rxManualGain"]
|
this.paramRxtx.rxManualGain = vals["settings"]["rxManualGain"]
|
||||||
@ -591,7 +587,8 @@
|
|||||||
this.statRx.packetsBad = 0
|
this.statRx.packetsBad = 0
|
||||||
this.statRx.packetsDummy = 0
|
this.statRx.packetsDummy = 0
|
||||||
})
|
})
|
||||||
}, // ========== include end from 'common/monitoring-methods.js.j2'
|
},
|
||||||
|
// ========== include end from 'common/monitoring-methods.js.j2'
|
||||||
|
|
||||||
// ========== include from 'common/setup-methods.js.j2'
|
// ========== include from 'common/setup-methods.js.j2'
|
||||||
// ========== include end from 'common/setup-methods.js.j2'
|
// ========== include end from 'common/setup-methods.js.j2'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user