199 lines
6.0 KiB
C++
199 lines
6.0 KiB
C++
#include "terminal_api_driver.h"
|
|
|
|
#include <cmath>
|
|
#include <sstream>
|
|
#include <iomanip>
|
|
#include <shared_mutex>
|
|
#include <boost/thread.hpp>
|
|
#include <boost/log/trivial.hpp>
|
|
#include <boost/property_tree/json_parser.hpp>
|
|
#include <sys/sysinfo.h>
|
|
#include "common/nlohmann/json.hpp"
|
|
#include "api-driver/daemon.h"
|
|
|
|
typedef boost::property_tree::ptree::path_type json_path;
|
|
|
|
|
|
api_driver::ApiDriver::ApiDriver() = default;
|
|
|
|
void api_driver::ApiDriver::startDaemon() {
|
|
if (daemon == nullptr) {
|
|
daemon = std::make_unique<TerminalApiDaemon>();
|
|
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API daemon succes started!";
|
|
}
|
|
}
|
|
|
|
std::string api_driver::buildEscapedString(const std::string& source) {
|
|
std::string str(source);
|
|
size_t start_pos = 0;
|
|
while((start_pos = str.find('\"', start_pos)) != std::string::npos) {
|
|
str.replace(start_pos, 1, "\\\"");
|
|
start_pos += 2;
|
|
}
|
|
for (start_pos = 0; start_pos < str.size() && (str[start_pos] == ' ' || str[start_pos] == '\n' || str[start_pos] == '\t'); start_pos++) {}
|
|
size_t end_pos = str.size() - 1;
|
|
for (; end_pos > start_pos && end_pos != 0 && (str[end_pos] == ' ' || str[end_pos] == '\n' || str[end_pos] == '\t'); end_pos--) {}
|
|
return "\"" + str.substr(start_pos, end_pos - start_pos + 1) + "\"";
|
|
}
|
|
|
|
std::tuple<uint8_t, uint8_t> translateCoordinates(double abs) {
|
|
auto deg = static_cast<uint8_t>(abs);
|
|
double min_double = (abs - deg) * 60;
|
|
auto min = static_cast<uint8_t>(min_double);
|
|
return std::make_tuple(deg, min);
|
|
}
|
|
|
|
|
|
nlohmann::json api_driver::ApiDriver::loadTerminalState() const {
|
|
if (daemon == nullptr) {
|
|
return R"({"error": "api daemon not started!"})";
|
|
}
|
|
|
|
obj::TerminalState state;
|
|
daemon->getState(state);
|
|
obj::TerminalDeviceState devState;
|
|
daemon->getDeviceState(devState);
|
|
|
|
auto res = state.asJson();
|
|
res["device"] = devState.asJson();
|
|
return res;
|
|
}
|
|
|
|
|
|
void api_driver::ApiDriver::resetPacketStatistics() const {
|
|
this->daemon->resetPacketStatistics();
|
|
}
|
|
|
|
nlohmann::json api_driver::ApiDriver::loadSettings() const {
|
|
if (daemon == nullptr) {
|
|
return R"({"error": "api daemon not started!"})";
|
|
}
|
|
|
|
nlohmann::json res = daemon->getSettingsRxTx().asJson();
|
|
#ifdef API_OBJECT_QOS_SETTINGS_ENABLE
|
|
res["qos"] = (daemon->getQosSettings().asJson());
|
|
#endif
|
|
#ifdef API_OBJECT_NETWORK_SETTINGS_ENABLE
|
|
res["network"] = (daemon->getNetworkSettings().asJson());
|
|
#endif
|
|
return res;
|
|
}
|
|
|
|
nlohmann::json api_driver::ApiDriver::loadFirmwareVersion() const {
|
|
if (daemon == nullptr) {
|
|
return R"({"error": "api daemon not started!"})";
|
|
}
|
|
return daemon->getFirmware().asJson();
|
|
}
|
|
|
|
void api_driver::ApiDriver::setRxTxSettings(const nlohmann::json& data) {
|
|
auto rxtx = daemon->getSettingsRxTx();
|
|
rxtx.updateMainSettings(data);
|
|
|
|
std::lock_guard _lapi(this->daemon->cpApiMutex);
|
|
this->daemon->cp.setDmaDebug("begin_save_config", "");
|
|
rxtx.storeMainSettings(this->daemon->cp);
|
|
this->daemon->cp.setDmaDebug("save_config", "");
|
|
rxtx.updateCallback(this->daemon->cp);
|
|
{
|
|
daemon->setSettingsRxTx(rxtx);
|
|
}
|
|
}
|
|
|
|
#ifdef API_OBJECT_DPDI_SETTINGS_ENABLE
|
|
void api_driver::ApiDriver::setDpdiSettings(const nlohmann::json& data) {
|
|
auto rxtx = daemon->getSettingsRxTx();
|
|
rxtx.updateDpdiSettings(data);
|
|
|
|
std::lock_guard _lapi(this->daemon->cpApiMutex);
|
|
this->daemon->cp.setDmaDebug("begin_save_config", "");
|
|
rxtx.storeMainSettings(this->daemon->cp);
|
|
this->daemon->cp.setDmaDebug("save_config", "");
|
|
rxtx.updateCallback(this->daemon->cp);
|
|
{
|
|
daemon->setSettingsRxTx(rxtx);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifdef API_OBJECT_BUCLNB_SETTINGS_ENABLE
|
|
void api_driver::ApiDriver::setBucLnbSettings(const nlohmann::json& data) {
|
|
auto rxtx = daemon->getSettingsRxTx();
|
|
rxtx.updateBuclnbSettings(data);
|
|
|
|
std::lock_guard _lapi(this->daemon->cpApiMutex);
|
|
this->daemon->cp.setDmaDebug("begin_save_config", "");
|
|
rxtx.storeBuclnbSettings(this->daemon->cp);
|
|
this->daemon->cp.setDmaDebug("save_config", "");
|
|
rxtx.updateCallback(this->daemon->cp);
|
|
{
|
|
daemon->setSettingsRxTx(rxtx);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifdef API_OBJECT_QOS_SETTINGS_ENABLE
|
|
void api_driver::ApiDriver::setQosSettings(const nlohmann::json& data) {
|
|
auto qos = daemon->getQosSettings();
|
|
qos.updateFromJson(data);
|
|
|
|
std::lock_guard _lapi(this->daemon->cpApiMutex);
|
|
this->daemon->cp.setDmaDebug("begin_save_config", "");
|
|
qos.store(this->daemon->cp);
|
|
this->daemon->cp.setDmaDebug("save_config", "");
|
|
qos.updateCallback(this->daemon->cp);
|
|
{
|
|
daemon->setQosSettings(qos);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifdef API_OBJECT_NETWORK_SETTINGS_ENABLE
|
|
void api_driver::ApiDriver::setNetworkSettings(const nlohmann::json& data) {
|
|
auto net = daemon->getNetworkSettings();
|
|
net.updateFromJson(data);
|
|
|
|
std::lock_guard _lapi(this->daemon->cpApiMutex);
|
|
this->daemon->cp.setDmaDebug("begin_save_config", "");
|
|
net.store(this->daemon->cp);
|
|
this->daemon->cp.setDmaDebug("save_config", "");
|
|
net.updateCallback(this->daemon->cp);
|
|
{
|
|
daemon->setNetworkSettings(net);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
void api_driver::ApiDriver::resetDefaultSettings() {
|
|
daemon->resetDefaultSettings();
|
|
}
|
|
|
|
void api_driver::ApiDriver::executeInApi(const std::function<void(proxy::CpProxy&)>& callback) {
|
|
try {
|
|
std::lock_guard lock(this->daemon->cpApiMutex);
|
|
callback(this->daemon->cp);
|
|
} catch (std::exception& e) {
|
|
BOOST_LOG_TRIVIAL(error) << "ApiDriver::executeInApi(): failed to exec with error: " << e.what();
|
|
}
|
|
}
|
|
|
|
#ifdef MODEM_IS_TDMA
|
|
std::string api_driver::ApiDriver::getOtaFileLocation() const {
|
|
obj::TerminalDeviceState ds;
|
|
daemon->getDeviceState(ds);
|
|
return ds.fUpgradeImage;
|
|
}
|
|
#endif
|
|
|
|
#ifdef MODEM_IS_SCPC
|
|
nlohmann::json api_driver::ApiDriver::getLoggingStatisticsSettings() {
|
|
return this->daemon->statsLogs.getSettings();
|
|
}
|
|
|
|
void api_driver::ApiDriver::setLoggingStatisticsSettings(const nlohmann::json& data) {
|
|
this->daemon->statsLogs.setSettings(data);
|
|
}
|
|
#endif
|
|
|
|
api_driver::ApiDriver::~ApiDriver() = default;
|