добавил повторные попытки подключения к API, если не удалось подключиться

This commit is contained in:
Vladislav Ostapov 2024-11-15 15:49:20 +03:00
parent dff0ba1cd3
commit c05a9cff7a

View File

@ -100,28 +100,6 @@ public:
*/ */
class api_driver::TerminalApiDaemon { class api_driver::TerminalApiDaemon {
private: 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() { void updateState() {
modulator_state modulator{}; modulator_state modulator{};
demodulator_state demodulator{}; demodulator_state demodulator{};
@ -211,7 +189,12 @@ private:
void run() { void run() {
// это демон, который в бесконечном цикле опрашивает API // это демон, который в бесконечном цикле опрашивает 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 { struct IntervalUpdate_t {
int64_t lastUpdate; int64_t lastUpdate;
@ -291,9 +274,6 @@ private:
} }
} }
std::shared_mutex firmwareMutex;
TerminalFirmwareVersion firmware;
std::shared_mutex stateMutex; std::shared_mutex stateMutex;
modulator_state modState{}; modulator_state modState{};
demodulator_state demodState{}; demodulator_state demodState{};
@ -319,6 +299,8 @@ public:
TSID sid; TSID sid;
boost::thread daemon; boost::thread daemon;
TerminalFirmwareVersion firmware;
explicit TerminalApiDaemon(TSID sid): qosEnabled(false), sid(sid), daemon([this]() { this->run(); }) { explicit TerminalApiDaemon(TSID sid): qosEnabled(false), sid(sid), daemon([this]() { this->run(); }) {
this->qosClassesJson = DEFAULT_QOS_CLASSES; this->qosClassesJson = DEFAULT_QOS_CLASSES;
} }
@ -370,11 +352,6 @@ public:
json = this->qosClassesJson; 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) { void setSettingsRxTx(modulator_settings& mod, demodulator_settings& demod, ACM_parameters_serv_& acm, bool readback = true) {
std::lock_guard lock(this->cpApiMutex); std::lock_guard lock(this->cpApiMutex);
CP_SetDmaDebug(sid, "begin_save_config", ""); 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() { void api_driver::ApiDriver::startDaemon() {
if (daemon == nullptr) { if (daemon == nullptr) {
TSID sid{}; TSID sid{};
unsigned int access{}; 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); 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<TerminalApiDaemon>(sid); daemon = std::make_unique<TerminalApiDaemon>(sid);
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API daemon succes started!"; 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!"})"; return R"({"error": "api daemon not started!"})";
} }
TerminalFirmwareVersion firmware;
daemon->getFirmwareVersion(firmware);
std::stringstream result; std::stringstream result;
result << "{\n\"fw.version\":" << buildEscapedString(firmware.version); result << "{\n\"fw.version\":" << buildEscapedString(daemon->firmware.version);
result << ",\"fw.modemId\":" << buildEscapedString(firmware.modemId); result << ",\"fw.modemId\":" << buildEscapedString(daemon->firmware.modemId);
result << ",\"fw.modemSn\":" << buildEscapedString(firmware.modemSn); result << ",\"fw.modemSn\":" << buildEscapedString(daemon->firmware.modemSn);
result << ",\"fw.macMang\":" << buildEscapedString(firmware.macMang); result << ",\"fw.macMang\":" << buildEscapedString(daemon->firmware.macMang);
result << ",\"fw.macData\":" << buildEscapedString(firmware.macData); result << ",\"fw.macData\":" << buildEscapedString(daemon->firmware.macData);
result << "\n}"; result << "\n}";
return result.str(); return result.str();
} }