добавил изменение параметров rx/tx + изменил верстку блоков с настройками

This commit is contained in:
Vladislav Ostapov 2024-11-12 17:01:17 +03:00
parent dc2d464f41
commit df4b990316
4 changed files with 90 additions and 32 deletions

View File

@ -57,6 +57,7 @@ struct modulator_settings_com{
bool is_carrier;
bool tx_is_on;
bool is_cinc;
uint32_t modcod_tx;
};
struct modulator_state_com{
@ -476,7 +477,7 @@ struct cmd_modulator_settings
archive(modulator_settings.attenuation,modulator_settings.baudrate, modulator_settings.central_freq_in_kGz,
modulator_settings.is_carrier, modulator_settings.is_cinc,
modulator_settings.is_save_current_state, modulator_settings.is_test_data,
modulator_settings.rollof, modulator_settings.tx_is_on);
modulator_settings.rollof, modulator_settings.tx_is_on, modulator_settings.modcod_tx);
}
};

View File

@ -139,6 +139,7 @@ struct modulator_settings{
bool is_carrier;
bool tx_is_on;
bool is_cinc;
uint32_t modcod_tx;
};
EXTERNC CP_Result CP_SetModulatorSettings(TSID sid, modulator_settings& settings);

View File

@ -208,33 +208,49 @@ public:
json = this->qosClassesJson;
}
void setSettingsRxTx(bool readback = true) {}
void setSettingsCinc(const DPDI_parmeters& s, bool readback = true) {
DPDI_parmeters tmp = s;
void setSettingsRxTx(modulator_settings& mod, demodulator_settings& demod, ACM_parameters_serv_& acm, bool readback = true) {
std::lock_guard lock(this->cpApiMutex);
CP_SetDmaDebug(sid, "begin_save_config", "");
CP_SetDpdiParams(sid, tmp);
CP_SetModulatorSettings(this->sid, mod);
CP_SetDemodulatorSettings(this->sid, demod);
CP_SetAcmParams(this->sid, acm);
if (readback) {
CP_GetDpdiParams(this->sid, &tmp);
CP_GetModulatorSettings(this->sid, mod);
CP_GetDemodulatorSettings(this->sid, demod);
CP_GetAcmParams(this->sid, &acm);
{
std::lock_guard lock2{this->settingsMutex};
this->dpdiSettings = tmp;
this->modSettings = mod;
this->demodSettings = demod;
this->acmSettings = acm;
}
}
CP_SetDmaDebug(sid, "save_config", "");
}
void setSettingsBucLnb(const buc_lnb_settings& bucLnb, bool readback = true) {
buc_lnb_settings tmp = bucLnb;
void setSettingsCinc(DPDI_parmeters& s, bool readback = true) {
std::lock_guard lock(this->cpApiMutex);
CP_SetDmaDebug(sid, "begin_save_config", "");
CP_SetBUC_LNB_settings(this->sid, tmp);
CP_SetDpdiParams(sid, s);
if (readback) {
CP_GetBUC_LNB_settings(this->sid, tmp);
CP_GetDpdiParams(this->sid, &s);
{
std::lock_guard lock2{this->settingsMutex};
this->bucLnbSettings = tmp;
this->dpdiSettings = s;
}
}
CP_SetDmaDebug(sid, "save_config", "");
}
void setSettingsBucLnb(buc_lnb_settings& bucLnb, bool readback = true) {
std::lock_guard lock(this->cpApiMutex);
CP_SetDmaDebug(sid, "begin_save_config", "");
CP_SetBUC_LNB_settings(this->sid, bucLnb);
if (readback) {
CP_GetBUC_LNB_settings(this->sid, bucLnb);
{
std::lock_guard lock2{this->settingsMutex};
this->bucLnbSettings = bucLnb;
}
}
CP_SetDmaDebug(sid, "save_config", "");
@ -440,12 +456,12 @@ std::string api_driver::ApiDriver::loadSettings() const {
buc_lnb_settings bucLnb{};
daemon->getSettings(&modSettings, &demodSettings, &acmSettings, &dpdiSettings, &bucLnb);
uint32_t modulatorModcod;
{
modulator_state ms{};
daemon->getStatistics(&ms, nullptr, nullptr);
modulatorModcod = ms.modcod;
}
// uint32_t modulatorModcod;
// {
// modulator_state ms{};
// daemon->getStatistics(&ms, nullptr, nullptr);
// modulatorModcod = ms.modcod;
// }
std::stringstream result;
result << "{\n\"general.isCinC\":" << boolAsStr(modSettings.is_cinc);
@ -453,25 +469,24 @@ std::string api_driver::ApiDriver::loadSettings() const {
result << ",\"general.modulatorMode\":" << (modSettings.is_carrier ? "\"normal\"" : "\"test\"");
result << ",\"general.autoStartTx\":" << boolAsStr(modSettings.is_save_current_state);
result << ",\"general.isTestInputData\":" << boolAsStr(modSettings.is_test_data);
result << ",\n\"tx.attenuation\":"; writeDouble(result, modSettings.attenuation);
result << ",\"tx.rolloff\":" << static_cast<int>(modSettings.rollof * 100);
result << ",\"tx.cymRate\":" << modSettings.baudrate;
result << ",\"tx.centerFreq\":"; writeDouble(result, modSettings.central_freq_in_kGz, 3);
result << ",\"dvbs2.frameSizeNormal\":" << boolAsStr(!(modSettings.modcod_tx & 2));
result << ",\"dvbs2.ccm_modcod\":" << (modSettings.modcod_tx >> 4);
result << ",\n\"dvbs2.isAcm\":" << boolAsStr(acmSettings.enable);
result << ",\"dvbs2.frameSizeNormal\":" << boolAsStr(!(modulatorModcod & 2));
// result << ",\"dvbs2.isPilots\":" << "null";
result << ",\"dvbs2.ccm_modcod\":" << (modulatorModcod >> 4);
result << ",\n\"dvbs2.isAcm\":" << boolAsStr(acmSettings.enable);
result << ",\"dvbs2.acm_maxModcod\":" << (acmSettings.max_modcod >> 2);
result << ",\"dvbs2.acm_minModcod\":" << (acmSettings.min_modcod >> 2);
result << ",\"dvbs2.snrReserve\":"; writeDouble(result, acmSettings.min_attenuation);
result << ",\"dvbs2.snrReserve\":"; writeDouble(result, acmSettings.snr_treashold_acm);
result << ",\"dvbs2.servicePacketPeriod\":" << acmSettings.period_pack;
result << ",\n\"acm.en\":" << boolAsStr(acmSettings.enable_auto_atten);
result << ",\"acm.maxAttenuation\":"; writeDouble(result, acmSettings.max_attenuation);
result << ",\"acm.minAttenuation\":"; writeDouble(result, acmSettings.min_attenuation);
result << ",\"acm.requiredSnr\":"; writeDouble(result, acmSettings.snr_treashold_acm);
result << ",\"acm.requiredSnr\":"; writeDouble(result, acmSettings.snr_treashold);
result << ",\n\"rx.gainMode\":" << (demodSettings.is_aru_on ? "\"auto\"" : "\"manual\"");
result << ",\"rx.manualGain\":"; writeDouble(result, demodSettings.gain);
@ -516,6 +531,50 @@ std::string api_driver::ApiDriver::loadSettings() const {
}
void api_driver::ApiDriver::setRxTxSettings(boost::property_tree::ptree &pt) {
modulator_settings mod{};
demodulator_settings demod{};
ACM_parameters_serv_ acm{};
// для модулятора
mod.is_cinc = pt.get<bool>(json_path("general.isCinC", '/'));
mod.tx_is_on = pt.get<bool>(json_path("general.txEn", '/'));
auto tmp = pt.get<std::string>(json_path("general.modulatorMode", '/'));
if (tmp == "normal") { mod.is_carrier = true; }
else if (tmp == "test") { mod.is_carrier = false; }
else { throw std::runtime_error("api_driver::ApiDriver::setRxTxSettings(): Wrong carrier mode: " + tmp); }
mod.is_save_current_state = pt.get<bool>(json_path("general.autoStartTx", '/'));
mod.is_test_data = pt.get<bool>(json_path("general.isTestInputData", '/'));
mod.attenuation = pt.get<double>(json_path("tx.attenuation", '/'));
mod.rollof = pt.get<double>(json_path("tx.rolloff", '/')) / 100.0;
mod.baudrate = pt.get<uint32_t>(json_path("tx.cymRate", '/'));
mod.central_freq_in_kGz = pt.get<double>(json_path("tx.centerFreq", '/'));
const bool acmIsShortFrame = pt.get<bool>(json_path("dvbs2.frameSizeNormal", '/'));
mod.modcod_tx = (pt.get<uint32_t>(json_path("dvbs2.ccm_modcod", '/')) << 2) | (acmIsShortFrame ? 2 : 0);
// демодулятор
tmp = pt.get<std::string>(json_path("rx.gainMode", '/'));
if (tmp == "normal") { demod.is_aru_on = true; }
else if (tmp == "test") { demod.is_aru_on = false; }
else { throw std::runtime_error("api_driver::ApiDriver::setRxTxSettings(): Wrong gain mode: " + tmp); }
demod.gain = pt.get<double>(json_path("rx.manualGain", '/'));
demod.baudrate = pt.get<uint32_t>(json_path("rx.cymRate", '/'));
demod.is_rvt_iq = pt.get<bool>(json_path("rx.spectrumInversion", '/'));
demod.rollof = pt.get<double>(json_path("rx.rolloff", '/')) / 100.0;
demod.central_freq_in_kGz = pt.get<double>(json_path("rx.centerFreq", '/'));
// ACM
acm.enable = pt.get<bool>(json_path("dvbs2.isAcm", '/'));
acm.max_modcod = (pt.get<uint32_t>(json_path("dvbs2.acm_maxModcod", '/')) << 2) | (acmIsShortFrame ? 2 : 0);
acm.min_modcod = (pt.get<uint32_t>(json_path("dvbs2.acm_minModcod", '/')) << 2) | (acmIsShortFrame ? 2 : 0);
acm.snr_treashold_acm = pt.get<double>(json_path("dvbs2.snrReserve", '/')); // запас ОСШ
acm.period_pack = pt.get<uint32_t>(json_path("dvbs2.servicePacketPeriod", '/'));
acm.enable_auto_atten = pt.get<bool>(json_path("acm.en", '/'));
acm.max_attenuation = pt.get<double>(json_path("dvbs2.maxAttenuation", '/'));
acm.min_attenuation = pt.get<double>(json_path("dvbs2.minAttenuation", '/'));
acm.snr_treashold = pt.get<double>(json_path("dvbs2.requiredSnr", '/')); // требуемый ОСШ
daemon->setSettingsRxTx(mod, demod, acm);
}
void api_driver::ApiDriver::setCincSettings(boost::property_tree::ptree &pt) {
@ -541,8 +600,8 @@ void api_driver::ApiDriver::setCincSettings(boost::property_tree::ptree &pt) {
s.longitude_sattelite_grad = std::get<0>(ctmp);
s.longitude_sattelite_minute = std::get<1>(ctmp);
s.max_delay = pt.get<int>(json_path("cinc.delayMax", '/'));
s.min_delay = pt.get<int>(json_path("cinc.delayMin", '/'));
s.max_delay = pt.get<uint32_t>(json_path("cinc.delayMax", '/'));
s.min_delay = pt.get<uint32_t>(json_path("cinc.delayMin", '/'));
this->daemon->setSettingsCinc(s);
}

View File

@ -154,8 +154,6 @@
<option value="true">Тест (CW)</option>
</select>
</label>
</div>
<div class="settings-set-container">
<h3>Параметры передачи</h3>
<label>
<span>Центральная частота, КГц</span>
@ -179,8 +177,8 @@
<span>Ослабление, дБ</span>
<input v-model="param.tx.attenuation" type="number"/>
</label>
</div>
<div class="settings-set-container">
<h3>Режим работы DVB-S2</h3>
<label>
@ -264,8 +262,7 @@
<span>Запас ОСШ</span>
<input v-model="param.dvbs2.snrReserve" type="number">
</label>
</div>
<div class="settings-set-container">
<h3>Авто-регулировка мощности</h3>
<label>
<span>Авто-регулировка мощности</span>