diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 367a57d..cbc33ea 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -122,21 +122,27 @@ private: } } - void updateStatistics() { + void updateState() { modulator_state modulator{}; demodulator_state demodulator{}; device_state device{}; + CinC_state cinc{}; std::lock_guard lock(this->cpApiMutex); CP_GetModulatorState(sid, modulator); CP_GetDemodulatorState(sid, demodulator); CP_GetDeviceState(sid, device); + bool isCinC = getIsCinC(); + if (isCinC) { + CP_GetCinCState(sid, cinc); + } { std::lock_guard lock2(this->stateMutex); this->modState = modulator; this->demodState = demodulator; this->devState = device; + this->cincState = cinc; } } @@ -230,10 +236,10 @@ private: // обновление статистики {.lastUpdate = 0, .periodMs = CACHE_STATISTICS_UPDATE_MS, .callback = [this]() { try { - this->updateStatistics(); - BOOST_LOG_TRIVIAL(debug) << "api_driver::TerminalApiDaemon::updateStatistics(): success update!"; + this->updateState(); + BOOST_LOG_TRIVIAL(debug) << "api_driver::TerminalApiDaemon::updateState(): success update!"; } catch (std::exception& e) { - BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateStatistics(): " << e.what(); + BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateState(): " << e.what(); } }}, // обновление кеша настроек @@ -291,6 +297,7 @@ private: modulator_state modState{}; demodulator_state demodState{}; device_state devState{}; + CinC_state cincState{}; std::shared_mutex settingsMutex; modulator_settings modSettings{}; @@ -311,7 +318,7 @@ public: TSID sid; boost::thread daemon; - explicit TerminalApiDaemon(TSID sid): sid(sid), daemon([this]() { this->run(); }), qosEnabled(false) { + explicit TerminalApiDaemon(TSID sid): qosEnabled(false), sid(sid), daemon([this]() { this->run(); }) { this->qosClassesJson = DEFAULT_QOS_CLASSES; } @@ -320,13 +327,15 @@ public: * @param mod статистика модулятра * @param demod статистика демодулятора * @param dev статистика устройства (температуры) + * @param cinc статистика CinC (актуальна только для режима CinC, но в любом случае будет перезаписана) */ - void getStatistics(modulator_state* mod, demodulator_state* demod, device_state* dev) { + void getState(modulator_state* mod, demodulator_state* demod, device_state* dev, CinC_state* cinc) { if (mod != nullptr || demod != nullptr || dev != nullptr) { std::shared_lock lock(this->stateMutex); if (mod) { *mod = this->modState; } if (demod) { *demod = this->demodState; } if (dev) { *dev = this->devState; } + if (cinc) { *cinc = this->cincState; } } } @@ -344,19 +353,24 @@ public: } } + bool getIsCinC() { + std::shared_lock lock(this->settingsMutex); + return modSettings.is_cinc; + } + void getNetworkSettings(TerminalNetworkSettings& dest) { std::shared_lock lock(this->networkSettingsMutex); dest = this->networkSettings; } void getQosSettings(bool& isEnabled, std::string& json) { - std::shared_lock lock(this->settingsMutex); + std::shared_lock lock(this->qosSettingsMutex); isEnabled = this->qosEnabled; json = this->qosClassesJson; } void getFirmwareVersion(TerminalFirmwareVersion& fw) { - std::shared_lock lock(this->settingsMutex); + std::lock_guard lock2(this->firmwareMutex); fw = this->firmware; } @@ -495,13 +509,16 @@ public: api_driver::ApiDriver::ApiDriver() { - CP_Login("admin", "pass", &sid, &access); - CP_GetDmaDebug(sid, "status_init", &deviceInitState); } void api_driver::ApiDriver::startDaemon() { if (daemon == nullptr) { - daemon = std::make_unique(this->sid); + TSID sid{}; + unsigned int access{}; + CP_Login("admin", "pass", &sid, &access); + CP_GetDmaDebug(sid, "status_init", &deviceInitState); + + daemon = std::make_unique(sid); BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API daemon succes started!"; } } @@ -551,8 +568,9 @@ std::string api_driver::ApiDriver::loadTerminalState() const { modulator_state modulator{}; demodulator_state demodulator{}; device_state device{}; - daemon->getStatistics(&modulator, &demodulator, &device); - const bool isCinC = this->getIsCinC(); + CinC_state cinc{}; + daemon->getState(&modulator, &demodulator, &device, &cinc); + const bool isCinC = this->daemon->getIsCinC(); result << ",\"isCinC\":" << boolAsStr(isCinC); @@ -612,11 +630,8 @@ std::string api_driver::ApiDriver::loadTerminalState() const { // формируем структуру для CinC if (isCinC) { - CinC_state state_cinc{}; - CP_GetCinCState(sid,state_cinc); - if (modulator.is_tx_on) { - if (state_cinc.carrier_lock) { + if (cinc.carrier_lock) { result << R"(,"cinc.correlator":true)"; } else { result << R"(,"cinc.correlator":false)"; @@ -625,11 +640,11 @@ std::string api_driver::ApiDriver::loadTerminalState() const { result << R"(,"cinc.correlator":null)"; } - result << ",\n\"cinc.occ\":"; writeDouble(result, state_cinc.ratio_signal_signal, 3); - result << ",\"cinc.correlatorFails\":" << state_cinc.cnt_bad_lock; - result << ",\"cinc.freqErr\":" << state_cinc.freq_error_offset; - result << ",\"cinc.freqErrAcc\":" << state_cinc.freq_fine_estimate; - result << ",\"cinc.channelDelay\":" << state_cinc.delay_dpdi; + result << ",\n\"cinc.occ\":"; writeDouble(result, cinc.ratio_signal_signal, 3); + result << ",\"cinc.correlatorFails\":" << cinc.cnt_bad_lock; + result << ",\"cinc.freqErr\":" << cinc.freq_error_offset; + result << ",\"cinc.freqErrAcc\":" << cinc.freq_fine_estimate; + result << ",\"cinc.channelDelay\":" << cinc.delay_dpdi; } else { result << R"(,"cinc.correlator":null)"; } @@ -901,10 +916,4 @@ void api_driver::ApiDriver::executeInApi(const std::function& ca } } -bool api_driver::ApiDriver::getIsCinC() const { - modulator_settings s{}; - daemon->getSettings(&s, nullptr, nullptr, nullptr, nullptr); - return s.is_cinc; -} - api_driver::ApiDriver::~ApiDriver() = default; diff --git a/src/terminal_api_driver.h b/src/terminal_api_driver.h index 15d4706..b2ed226 100644 --- a/src/terminal_api_driver.h +++ b/src/terminal_api_driver.h @@ -72,13 +72,8 @@ namespace api_driver { ~ApiDriver(); private: - TSID sid{0}; - unsigned int access{0}; - std::string deviceInitState; std::unique_ptr daemon; - - bool getIsCinC() const; }; }