изменил логику подключения к API
This commit is contained in:
parent
1f8ea04f43
commit
3e4ffc8281
@ -201,12 +201,35 @@ private:
|
|||||||
|
|
||||||
void run() {
|
void run() {
|
||||||
// это демон, который в бесконечном цикле опрашивает API
|
// это демон, который в бесконечном цикле опрашивает API
|
||||||
CP_GetNetwork(sid, "version", &firmware.version);
|
{
|
||||||
CP_GetNetwork(sid, "chip_id", &firmware.modemId);
|
TSID sid{};
|
||||||
rtrim(firmware.modemId);
|
unsigned int access{};
|
||||||
CP_GetNetwork(sid, "serial", &firmware.modemSn);
|
for (int connectAttempt = 0;; connectAttempt++) {
|
||||||
CP_GetNetwork(sid, "mac_eth0", &firmware.macMang);
|
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Try to connect api (attempt " << connectAttempt << ")...";
|
||||||
CP_GetNetwork(sid, "mac_eth1", &firmware.macData);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string tmp;
|
||||||
|
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;
|
||||||
|
|
||||||
|
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;
|
||||||
@ -290,6 +313,7 @@ private:
|
|||||||
modulator_state modState{};
|
modulator_state modState{};
|
||||||
demodulator_state demodState{};
|
demodulator_state demodState{};
|
||||||
device_state devState{};
|
device_state devState{};
|
||||||
|
std::string deviceInitState;
|
||||||
#ifdef MODEM_IS_SCPC
|
#ifdef MODEM_IS_SCPC
|
||||||
CinC_state cincState{};
|
CinC_state cincState{};
|
||||||
#endif
|
#endif
|
||||||
@ -317,10 +341,15 @@ public:
|
|||||||
|
|
||||||
TerminalFirmwareVersion firmware;
|
TerminalFirmwareVersion firmware;
|
||||||
|
|
||||||
explicit TerminalApiDaemon(TSID sid): qosEnabled(false), sid(sid), daemon([this]() { this->run(); }) {
|
explicit TerminalApiDaemon(): deviceInitState("Not connected to API"), qosEnabled(false), sid(0), daemon([this]() { this->run(); }) {
|
||||||
this->qosClassesJson = DEFAULT_QOS_CLASSES;
|
this->qosClassesJson = DEFAULT_QOS_CLASSES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string getDeviceInitState() {
|
||||||
|
std::shared_lock lock(this->stateMutex);
|
||||||
|
return this->deviceInitState;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef MODEM_IS_SCPC
|
#ifdef MODEM_IS_SCPC
|
||||||
/**
|
/**
|
||||||
* Получение статистики, копирует текущие значения в структуры, переданные по указателю. Если передан пустой указатель, копирования не произойдет.
|
* Получение статистики, копирует текущие значения в структуры, переданные по указателю. Если передан пустой указатель, копирования не произойдет.
|
||||||
@ -557,23 +586,7 @@ api_driver::ApiDriver::ApiDriver() = default;
|
|||||||
|
|
||||||
void api_driver::ApiDriver::startDaemon() {
|
void api_driver::ApiDriver::startDaemon() {
|
||||||
if (daemon == nullptr) {
|
if (daemon == nullptr) {
|
||||||
TSID sid{};
|
daemon = std::make_unique<TerminalApiDaemon>();
|
||||||
unsigned int 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!";
|
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API daemon succes started!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -619,7 +632,7 @@ std::string api_driver::ApiDriver::loadTerminalState() const {
|
|||||||
}
|
}
|
||||||
std::stringstream result;
|
std::stringstream result;
|
||||||
|
|
||||||
result << "{\n\"initState\":" << buildEscapedString(this->deviceInitState);
|
result << "{\n\"initState\":" << buildEscapedString(daemon->getDeviceInitState());
|
||||||
|
|
||||||
modulator_state modulator{};
|
modulator_state modulator{};
|
||||||
demodulator_state demodulator{};
|
demodulator_state demodulator{};
|
||||||
|
@ -73,7 +73,6 @@ namespace api_driver {
|
|||||||
~ApiDriver();
|
~ApiDriver();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string deviceInitState;
|
|
||||||
std::unique_ptr<TerminalApiDaemon> daemon;
|
std::unique_ptr<TerminalApiDaemon> daemon;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user