From c05a9cff7a893f872fd7456db2cf608e0f474293 Mon Sep 17 00:00:00 2001 From: Vladislav Ostapov Date: Fri, 15 Nov 2024 15:49:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B2=D1=82=D0=BE=D1=80=D0=BD=D1=8B=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=20API,=20?= =?UTF-8?q?=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BD=D0=B5=20=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=BE=D1=81=D1=8C=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B8=D1=82=D1=8C=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/terminal_api_driver.cpp | 67 ++++++++++++++----------------------- 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index ed60200..3e623c4 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -100,28 +100,6 @@ public: */ class api_driver::TerminalApiDaemon { private: - - void updateFirmwareSettings() { - std::string version, chip_id, sn, mac0, mac1; - std::lock_guard lock(this->cpApiMutex); - - CP_GetNetwork(sid, "version", &version); - CP_GetNetwork(sid, "chip_id", &chip_id); - rtrim(chip_id); - CP_GetNetwork(sid, "serial", &sn); - CP_GetNetwork(sid, "mac_eth0", &mac0); - CP_GetNetwork(sid, "mac_eth1", &mac1); - - { - std::lock_guard lock2(this->firmwareMutex); - this->firmware.version = version; - this->firmware.modemId = chip_id; - this->firmware.modemSn = sn; - this->firmware.macMang = mac0; - this->firmware.macData = mac1; - } - } - void updateState() { modulator_state modulator{}; demodulator_state demodulator{}; @@ -211,7 +189,12 @@ private: void run() { // это демон, который в бесконечном цикле опрашивает API - updateFirmwareSettings(); + CP_GetNetwork(sid, "version", &firmware.version); + CP_GetNetwork(sid, "chip_id", &firmware.modemId); + rtrim(firmware.modemId); + CP_GetNetwork(sid, "serial", &firmware.modemSn); + CP_GetNetwork(sid, "mac_eth0", &firmware.macMang); + CP_GetNetwork(sid, "mac_eth1", &firmware.macData); struct IntervalUpdate_t { int64_t lastUpdate; @@ -291,9 +274,6 @@ private: } } - std::shared_mutex firmwareMutex; - TerminalFirmwareVersion firmware; - std::shared_mutex stateMutex; modulator_state modState{}; demodulator_state demodState{}; @@ -319,6 +299,8 @@ public: TSID sid; boost::thread daemon; + TerminalFirmwareVersion firmware; + explicit TerminalApiDaemon(TSID sid): qosEnabled(false), sid(sid), daemon([this]() { this->run(); }) { this->qosClassesJson = DEFAULT_QOS_CLASSES; } @@ -370,11 +352,6 @@ public: json = this->qosClassesJson; } - void getFirmwareVersion(TerminalFirmwareVersion& fw) { - std::lock_guard lock2(this->firmwareMutex); - fw = this->firmware; - } - 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", ""); @@ -509,15 +486,25 @@ public: }; -api_driver::ApiDriver::ApiDriver() { -} +api_driver::ApiDriver::ApiDriver() = default; void api_driver::ApiDriver::startDaemon() { if (daemon == nullptr) { TSID sid{}; unsigned int access{}; - CP_Login("admin", "pass", &sid, &access); + for (int connectAttempt = 0; connectAttempt <= 10; connectAttempt++) { + BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Try to connect api (attempt " << connectAttempt << ")..."; + auto res = CP_Login("admin", "pass", &sid, &access); + if (res != OK) { + boost::this_thread::sleep_for(boost::chrono::duration(boost::chrono::milliseconds(1000))); + } else { + break; + } + } + CP_GetDmaDebug(sid, "status_init", &deviceInitState); + BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Success connect!"; + BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API status: " << deviceInitState; daemon = std::make_unique(sid); BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API daemon succes started!"; @@ -760,14 +747,12 @@ std::string api_driver::ApiDriver::loadFirmwareVersion() const { return R"({"error": "api daemon not started!"})"; } - TerminalFirmwareVersion firmware; - daemon->getFirmwareVersion(firmware); std::stringstream result; - result << "{\n\"fw.version\":" << buildEscapedString(firmware.version); - result << ",\"fw.modemId\":" << buildEscapedString(firmware.modemId); - result << ",\"fw.modemSn\":" << buildEscapedString(firmware.modemSn); - result << ",\"fw.macMang\":" << buildEscapedString(firmware.macMang); - result << ",\"fw.macData\":" << buildEscapedString(firmware.macData); + result << "{\n\"fw.version\":" << buildEscapedString(daemon->firmware.version); + result << ",\"fw.modemId\":" << buildEscapedString(daemon->firmware.modemId); + result << ",\"fw.modemSn\":" << buildEscapedString(daemon->firmware.modemSn); + result << ",\"fw.macMang\":" << buildEscapedString(daemon->firmware.macMang); + result << ",\"fw.macData\":" << buildEscapedString(daemon->firmware.macData); result << "\n}"; return result.str(); }