diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 6eaa8dc..7383d6e 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -95,6 +95,25 @@ public: TerminalFirmwareVersion& operator= (const TerminalFirmwareVersion& src) = default; }; +static std::ostream& operator<<(std::ostream& out, CP_Result result) { + switch (result) { + case OK: out << "OK"; break; + case TIMEOUT: out << "TIMEOUT"; break; + case ERROR: out << "ERROR"; break; + case ABORT: out << "ABORT"; break; + case BUSY: out << "BUSY"; break; + default: + out << static_cast(result); + } + return out; +} + +static void logCpApiError(const char* desc, CP_Result err) { + if (err != OK) { + BOOST_LOG_TRIVIAL(error) << "CP API error in " << desc << ": " << err; + } +} + /** * Этот демон нужен для того, чтобы получать статистику из API, а так же корректно сохранять настройки */ @@ -109,13 +128,13 @@ private: #endif std::lock_guard lock(this->cpApiMutex); - CP_GetModulatorState(sid, modulator); - CP_GetDemodulatorState(sid, demodulator); - CP_GetDeviceState(sid, device); + logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetModulatorState()", CP_GetModulatorState(sid, modulator)); + logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDemodulatorState()", CP_GetDemodulatorState(sid, demodulator)); + logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDeviceState()", CP_GetDeviceState(sid, device)); #ifdef MODEM_IS_SCPC bool isCinC = getIsCinC(); if (isCinC) { - CP_GetCinCState(sid, cinc); + logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetCinCState()", CP_GetCinCState(sid, cinc)); } #endif @@ -142,13 +161,13 @@ private: buc_lnb_settings bucLnb{}; std::lock_guard lock(this->cpApiMutex); - CP_GetModulatorSettings(sid, mod); - CP_GetDemodulatorSettings(sid, demod); + logCpApiError("api_driver::TerminalApiDaemon::updateSettings()->CP_GetModulatorSettings()", CP_GetModulatorSettings(sid, mod)); + logCpApiError("api_driver::TerminalApiDaemon::updateSettings()->CP_GetDemodulatorSettings()", CP_GetDemodulatorSettings(sid, demod)); #ifdef MODEM_IS_SCPC - CP_GetAcmParams(sid, &acm); - CP_GetDpdiParams(sid, &dpdi); + logCpApiError("api_driver::TerminalApiDaemon::updateSettings()->CP_GetAcmParams()", CP_GetAcmParams(sid, &acm)); + logCpApiError("api_driver::TerminalApiDaemon::updateSettings()->CP_GetDpdiParams()", CP_GetDpdiParams(sid, &dpdi)); #endif - CP_GetBUC_LNB_settings(sid, bucLnb); + logCpApiError("api_driver::TerminalApiDaemon::updateSettings()->CP_GetBUC_LNB_settings()", CP_GetBUC_LNB_settings(sid, bucLnb)); { std::lock_guard lock2(this->settingsMutex); @@ -166,15 +185,15 @@ private: TerminalNetworkSettings s; std::string tmp; std::lock_guard lock(this->cpApiMutex); - CP_GetNetwork(sid, "addr", &tmp); + logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &tmp)); s.managementIp = tmp + "/"; - tmp.clear(); CP_GetNetwork(sid, "mask", &tmp); + tmp.clear(); logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(mask)", CP_GetNetwork(sid, "mask", &tmp)); s.managementIp += std::to_string(calculateSubnetMask(tmp)); - tmp.clear(); CP_GetNetwork(sid, "gateway", &s.managementGateway); s.managementGateway = tmp; - tmp.clear(); CP_GetNetwork(sid, "mode", &tmp); + tmp.clear(); logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(gateway)", CP_GetNetwork(sid, "gateway", &s.managementGateway)); s.managementGateway = tmp; + tmp.clear(); logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &tmp)); if (tmp == "tun") { s.mode = "l3"; - CP_GetNetwork(sid, "addr_data", &s.dataIp); + logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(addr_data)", CP_GetNetwork(sid, "addr_data", &s.dataIp)); s.dataIp += "/24"; } else { s.mode = "l2"; @@ -191,7 +210,7 @@ private: void updateQos() { bool tmp1; std::string tmp2; std::scoped_lock lock{this->cpApiMutex}; - CP_GetQoSSettings(this->sid, tmp2, tmp1); + logCpApiError("api_driver::TerminalApiDaemon::updateQos()->CP_GetQoSSettings()", CP_GetQoSSettings(this->sid, tmp2, tmp1)); { std::lock_guard lock2(this->qosSettingsMutex); this->qosEnabled = tmp1; @@ -205,8 +224,9 @@ private: TSID sid{}; unsigned int access{}; for (int connectAttempt = 0;; connectAttempt++) { - BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Try to connect api (attempt " << connectAttempt << ")..."; + BOOST_LOG_TRIVIAL(info) << "api_driver::TerminalApiDaemon::run(): Try to connect api (attempt " << connectAttempt << ")..."; auto res = CP_Login("admin", "pass", &sid, &access); + logCpApiError(R"(api_driver::TerminalApiDaemon::run()->CP_Login("admin", "pass"))", res); if (res != OK) { boost::this_thread::sleep_for(boost::chrono::duration(boost::chrono::milliseconds(1000))); } else { @@ -215,20 +235,20 @@ private: } std::string tmp; - CP_GetDmaDebug(sid, "status_init", &tmp); + logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetDmaDebug(status_init)", CP_GetDmaDebug(sid, "status_init", &tmp)); { std::lock_guard _lock(this->stateMutex); this->deviceInitState = tmp; } - BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Success connect!"; - BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API status: " << tmp; + BOOST_LOG_TRIVIAL(info) << "api_driver::TerminalApiDaemon::run(): Success connect!"; + BOOST_LOG_TRIVIAL(info) << "api_driver::TerminalApiDaemon::run(): API status: " << tmp; - CP_GetNetwork(sid, "version", &firmware.version); - CP_GetNetwork(sid, "chip_id", &firmware.modemId); + logCpApiError("api_driver::TerminalApiDaemon::run()->CP_GetNetwork(version)", CP_GetNetwork(sid, "version", &firmware.version)); + logCpApiError("api_driver::TerminalApiDaemon::run()->CP_GetNetwork(chip_id)", 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); + logCpApiError("api_driver::TerminalApiDaemon::run()->CP_GetNetwork(serial)", CP_GetNetwork(sid, "serial", &firmware.modemSn)); + logCpApiError("api_driver::TerminalApiDaemon::run()->CP_GetNetwork(mac_eth0)", CP_GetNetwork(sid, "mac_eth0", &firmware.macMang)); + logCpApiError("api_driver::TerminalApiDaemon::run()->CP_GetNetwork(mac_eth1)", CP_GetNetwork(sid, "mac_eth1", &firmware.macData)); } struct IntervalUpdate_t {