добавил повторные попытки подключения к 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 {
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<TerminalApiDaemon>(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();
}