добавил изменение параметров 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 is_carrier;
bool tx_is_on; bool tx_is_on;
bool is_cinc; bool is_cinc;
uint32_t modcod_tx;
}; };
struct modulator_state_com{ 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, archive(modulator_settings.attenuation,modulator_settings.baudrate, modulator_settings.central_freq_in_kGz,
modulator_settings.is_carrier, modulator_settings.is_cinc, modulator_settings.is_carrier, modulator_settings.is_cinc,
modulator_settings.is_save_current_state, modulator_settings.is_test_data, 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 is_carrier;
bool tx_is_on; bool tx_is_on;
bool is_cinc; bool is_cinc;
uint32_t modcod_tx;
}; };
EXTERNC CP_Result CP_SetModulatorSettings(TSID sid, modulator_settings& settings); EXTERNC CP_Result CP_SetModulatorSettings(TSID sid, modulator_settings& settings);

View File

@ -208,33 +208,49 @@ public:
json = this->qosClassesJson; json = this->qosClassesJson;
} }
void setSettingsRxTx(bool readback = true) {} void setSettingsRxTx(modulator_settings& mod, demodulator_settings& demod, ACM_parameters_serv_& acm, bool readback = true) {
void setSettingsCinc(const DPDI_parmeters& s, bool readback = true) {
DPDI_parmeters tmp = s;
std::lock_guard lock(this->cpApiMutex); std::lock_guard lock(this->cpApiMutex);
CP_SetDmaDebug(sid, "begin_save_config", ""); 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) { 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}; std::lock_guard lock2{this->settingsMutex};
this->dpdiSettings = tmp; this->modSettings = mod;
this->demodSettings = demod;
this->acmSettings = acm;
} }
} }
CP_SetDmaDebug(sid, "save_config", ""); CP_SetDmaDebug(sid, "save_config", "");
} }
void setSettingsBucLnb(const buc_lnb_settings& bucLnb, bool readback = true) { void setSettingsCinc(DPDI_parmeters& s, bool readback = true) {
buc_lnb_settings tmp = bucLnb;
std::lock_guard lock(this->cpApiMutex); std::lock_guard lock(this->cpApiMutex);
CP_SetDmaDebug(sid, "begin_save_config", ""); CP_SetDmaDebug(sid, "begin_save_config", "");
CP_SetBUC_LNB_settings(this->sid, tmp); CP_SetDpdiParams(sid, s);
if (readback) { if (readback) {
CP_GetBUC_LNB_settings(this->sid, tmp); CP_GetDpdiParams(this->sid, &s);
{ {
std::lock_guard lock2{this->settingsMutex}; 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", ""); CP_SetDmaDebug(sid, "save_config", "");
@ -440,12 +456,12 @@ std::string api_driver::ApiDriver::loadSettings() const {
buc_lnb_settings bucLnb{}; buc_lnb_settings bucLnb{};
daemon->getSettings(&modSettings, &demodSettings, &acmSettings, &dpdiSettings, &bucLnb); daemon->getSettings(&modSettings, &demodSettings, &acmSettings, &dpdiSettings, &bucLnb);
uint32_t modulatorModcod; // uint32_t modulatorModcod;
{ // {
modulator_state ms{}; // modulator_state ms{};
daemon->getStatistics(&ms, nullptr, nullptr); // daemon->getStatistics(&ms, nullptr, nullptr);
modulatorModcod = ms.modcod; // modulatorModcod = ms.modcod;
} // }
std::stringstream result; std::stringstream result;
result << "{\n\"general.isCinC\":" << boolAsStr(modSettings.is_cinc); 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.modulatorMode\":" << (modSettings.is_carrier ? "\"normal\"" : "\"test\"");
result << ",\"general.autoStartTx\":" << boolAsStr(modSettings.is_save_current_state); result << ",\"general.autoStartTx\":" << boolAsStr(modSettings.is_save_current_state);
result << ",\"general.isTestInputData\":" << boolAsStr(modSettings.is_test_data); result << ",\"general.isTestInputData\":" << boolAsStr(modSettings.is_test_data);
result << ",\n\"tx.attenuation\":"; writeDouble(result, modSettings.attenuation); result << ",\n\"tx.attenuation\":"; writeDouble(result, modSettings.attenuation);
result << ",\"tx.rolloff\":" << static_cast<int>(modSettings.rollof * 100); result << ",\"tx.rolloff\":" << static_cast<int>(modSettings.rollof * 100);
result << ",\"tx.cymRate\":" << modSettings.baudrate; result << ",\"tx.cymRate\":" << modSettings.baudrate;
result << ",\"tx.centerFreq\":"; writeDouble(result, modSettings.central_freq_in_kGz, 3); 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.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_maxModcod\":" << (acmSettings.max_modcod >> 2);
result << ",\"dvbs2.acm_minModcod\":" << (acmSettings.min_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 << ",\"dvbs2.servicePacketPeriod\":" << acmSettings.period_pack;
result << ",\n\"acm.en\":" << boolAsStr(acmSettings.enable_auto_atten); result << ",\n\"acm.en\":" << boolAsStr(acmSettings.enable_auto_atten);
result << ",\"acm.maxAttenuation\":"; writeDouble(result, acmSettings.max_attenuation); result << ",\"acm.maxAttenuation\":"; writeDouble(result, acmSettings.max_attenuation);
result << ",\"acm.minAttenuation\":"; writeDouble(result, acmSettings.min_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 << ",\n\"rx.gainMode\":" << (demodSettings.is_aru_on ? "\"auto\"" : "\"manual\"");
result << ",\"rx.manualGain\":"; writeDouble(result, demodSettings.gain); 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) { 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) { 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_grad = std::get<0>(ctmp);
s.longitude_sattelite_minute = std::get<1>(ctmp); s.longitude_sattelite_minute = std::get<1>(ctmp);
s.max_delay = pt.get<int>(json_path("cinc.delayMax", '/')); s.max_delay = pt.get<uint32_t>(json_path("cinc.delayMax", '/'));
s.min_delay = pt.get<int>(json_path("cinc.delayMin", '/')); s.min_delay = pt.get<uint32_t>(json_path("cinc.delayMin", '/'));
this->daemon->setSettingsCinc(s); this->daemon->setSettingsCinc(s);
} }

View File

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