исправления методов-заглушек, часть 1
This commit is contained in:
parent
f30e1adb49
commit
55fc322c13
@ -6,6 +6,11 @@
|
||||
// минимальный порог для сна в цикле событий демона
|
||||
static constexpr int64_t SLEEP_THRESHOLD = 10;
|
||||
|
||||
int64_t api_driver::TimeNow() {
|
||||
return std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()).time_since_epoch().count();
|
||||
}
|
||||
|
||||
|
||||
namespace api_driver {
|
||||
/**
|
||||
* Обертка для объектов, доступных для обновления
|
||||
@ -196,37 +201,26 @@ void api_driver::TerminalApiDaemon::getDeviceState(obj::TerminalDeviceState &des
|
||||
dest = stateDev;
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::getSettingsRxTx(obj::TerminalRxTxSettings &dest) {
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::getNetworkSettings(obj::TerminalNetworkSettings &dest) {
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::getQosSettings(bool &isEnabled, std::string &json) {
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::setSettingsRxTx(obj::TerminalRxTxSettings &s, bool readback) {
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::setSettingsDpdi(DPDI_parmeters &s, bool readback) {
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::setSettingsBucLnb(buc_lnb_settings &bucLnb, bool readback) {
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::setQosSettings(bool enabled, const std::string &str, bool readback) {
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::setNetworkSettings(obj::TerminalNetworkSettings &s, bool readback) {
|
||||
}
|
||||
|
||||
api_driver::obj::TerminalFirmwareVersion api_driver::TerminalApiDaemon::getFirmware() {
|
||||
obj::TerminalFirmwareVersion res;
|
||||
{
|
||||
std::shared_lock _olock(firmwareMutex);
|
||||
res = firmware;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::resetPacketStatistics() {
|
||||
std::lock_guard lock(this->cpApiMutex);
|
||||
cp.getDmaDebug("reset_cnt_rx");
|
||||
}
|
||||
|
||||
void api_driver::TerminalApiDaemon::resetDefaultSettings() {
|
||||
std::lock_guard lock(this->cpApiMutex);
|
||||
cp.setDmaDebug("begin_save_config", "");
|
||||
cp.setDmaDebug("default_params", "");
|
||||
cp.setDmaDebug("save_config", "");
|
||||
}
|
||||
|
||||
api_driver::TerminalApiDaemon::~TerminalApiDaemon() {
|
||||
|
@ -50,26 +50,19 @@ namespace api_driver {
|
||||
|
||||
// /**
|
||||
// * Получение настроек, копирует текущие значения в структуры, переданные по указателю. Если передан пустой указатель, копирования не произойдет.
|
||||
// * Установка настроек просто копирует настройки и устанавливает их текущими
|
||||
// */
|
||||
void getSettingsRxTx(obj::TerminalRxTxSettings &dest);
|
||||
obj::TerminalRxTxSettings getSettingsRxTx() const;
|
||||
void setSettingsRxTx(obj::TerminalRxTxSettings &s);
|
||||
|
||||
#ifdef API_OBJECT_NETWORK_SETTINGS_ENABLE
|
||||
void getNetworkSettings(obj::TerminalNetworkSettings &dest);
|
||||
void setNetworkSettings(obj::TerminalNetworkSettings &s, bool readback = true);
|
||||
obj::TerminalNetworkSettings getNetworkSettings() const;
|
||||
void setNetworkSettings(obj::TerminalNetworkSettings &s);
|
||||
#endif
|
||||
|
||||
#ifdef API_OBJECT_QOS_SETTINGS_ENABLE
|
||||
void getQosSettings(bool &isEnabled, std::string &json);
|
||||
void setQosSettings(bool enabled, const std::string &str, bool readback = true);
|
||||
#endif
|
||||
|
||||
void setSettingsRxTx(obj::TerminalRxTxSettings &s, bool readback = true);
|
||||
|
||||
#ifdef API_OBJECT_DPDI_SETTINGS_ENABLE
|
||||
void setSettingsDpdi(DPDI_parmeters &s, bool readback = true);
|
||||
#endif
|
||||
|
||||
#ifdef API_OBJECT_BUCLNB_SETTINGS_ENABLE
|
||||
void setSettingsBucLnb(buc_lnb_settings &bucLnb, bool readback = true);
|
||||
obj::TerminalQosSettings getQosSettings() const;
|
||||
void setQosSettings(bool enabled, const std::string &str);
|
||||
#endif
|
||||
|
||||
obj::TerminalFirmwareVersion getFirmware();
|
||||
|
@ -1,10 +1,119 @@
|
||||
#include "proxy.h"
|
||||
#include "sstream"
|
||||
|
||||
//#define CPAPI_PROXY_CALL(proxy, func, ...) do { auto _res = func(proxy.sid, __VA_ARGS__); if (_res != OK) { BOOST_LOG_TRIVIAL(error) << "CP API error in " #func "(" #__VA_ARGS__ "): " << _res; } } while (0)
|
||||
// void foo() {
|
||||
// api_driver::proxy::CpProxy proxy;
|
||||
// std::string tmp;
|
||||
// CPAPI_PROXY_CALL(proxy, CP_GetDmaDebug, "fuck", &tmp);
|
||||
// }
|
||||
#define CPAPI_PROXY_CALL_HELPER(callfrom, func, funcArgs, throwArgs) do { lastCpError = func funcArgs; if (lastCpError != OK) { \
|
||||
std::stringstream err; err << callfrom ": CP Api error " #func "("; err << throwArgs; err << "): " << lastCpError;\
|
||||
throw std::runtime_error(err.str());\
|
||||
} } while (0)
|
||||
|
||||
|
||||
api_driver::proxy::CpProxy::CpProxy() = default;
|
||||
|
||||
api_driver::proxy::CpProxy::CpProxy(TSID s): sid(s) {}
|
||||
|
||||
void api_driver::proxy::CpProxy::connect() {
|
||||
unsigned int access{};
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::connect", CP_Login, ("admin", "pass", &sid, &access), R"("admin", "pass", &sid, &access)");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::disconnect() {
|
||||
if (sid != 0) {
|
||||
lastCpError = CP_Logout(sid);
|
||||
sid = 0;
|
||||
}
|
||||
}
|
||||
|
||||
std::string api_driver::proxy::CpProxy::getDmaDebug(const std::string &arg) {
|
||||
std::string result;
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getDmaDebug", CP_GetDmaDebug, (sid, arg.c_str(), &result), arg);
|
||||
return result;
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::setDmaDebug(const std::string &arg, const std::string &value) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::setDmaDebug", CP_SetDmaDebug, (sid, arg.c_str(), value), arg << ", \"" << value << "\"");
|
||||
}
|
||||
|
||||
std::string api_driver::proxy::CpProxy::getNetwork(const std::string ¶m) {
|
||||
std::string result;
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getNetwork", CP_GetNetwork, (sid, param.c_str(), &result), param);
|
||||
return result;
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::setNetwork(const std::string ¶m, const std::string &value) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::setNetwork", CP_SetNetwork, (sid, param.c_str(), value.c_str()), param << ", \"" << value << "\"");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getModState(modulator_state &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getModState", CP_GetModulatorState, (sid, dest), "");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getModSettings(modulator_settings &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getModSettings", CP_GetModulatorSettings, (sid, dest), "");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::setModSettings(modulator_settings &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::setModSettings", CP_SetModulatorSettings, (sid, dest), "struct {...}");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getDemodState(demodulator_state &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getDemodState", CP_GetDemodulatorState, (sid, dest), "");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getDemodSettings(demodulator_settings &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getDemodSettings", CP_GetDemodulatorSettings, (sid, dest), "");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::setDemodSettings(demodulator_settings &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::setDemodSettings", CP_SetDemodulatorSettings, (sid, dest), "struct {...}");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getAcmSettings(ACM_parameters_serv_ &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getAcmSettings", CP_GetAcmParams, (sid, &dest), "");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::setAcmSettings(ACM_parameters_serv_ &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::setAcmSettings", CP_GetAcmParams, (sid, &dest), "struct {...}");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getDeviceState(device_state &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getDeviceState", CP_GetDeviceState, (sid, dest), "");
|
||||
}
|
||||
|
||||
std::tuple<std::string, bool> api_driver::proxy::CpProxy::getQosSettings() {
|
||||
std::string rules;
|
||||
bool en;
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getQosSettings", CP_GetQoSSettings, (sid, rules, en), "");
|
||||
return {rules, en};
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::setQosSettings(const std::string &rules, bool enable) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::setQosSettings", CP_SetQoSSettings, (sid, rules, enable), "`" << rules << "`, " << (enable ? "true" : "false"));
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getDpdiSettings(DPDI_parmeters &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getDpdiSettings", CP_GetDpdiParams, (sid, &dest), "");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::setDpdiSettings(DPDI_parmeters &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::setDpdiSettings", CP_SetDpdiParams, (sid, dest), "struct {...}");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getBuclnbSettings(buc_lnb_settings &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getBuclnbSettings", CP_GetBUC_LNB_settings, (sid, dest), "");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::setBuclnbSettings(buc_lnb_settings &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::setBuclnbSettings", CP_SetBUC_LNB_settings, (sid, dest), "struct {...}");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getCincState(CinC_state &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getCincState", CP_GetCinCState, (sid, dest), "");
|
||||
}
|
||||
|
||||
void api_driver::proxy::CpProxy::getDebugMetrics(debug_metrics &dest) {
|
||||
CPAPI_PROXY_CALL_HELPER("CpProxy::getDebugMetrics", CP_GetDebugMetrics, (sid, dest), "");
|
||||
}
|
||||
|
||||
api_driver::proxy::CpProxy::~CpProxy() {
|
||||
disconnect();
|
||||
}
|
||||
|
@ -132,7 +132,11 @@ void api_driver::obj::StatisticsLogger::setSettings(const nlohmann::json& data)
|
||||
}
|
||||
|
||||
void api_driver::obj::StatisticsLogger::updateCallback(proxy::CpProxy &cp) {
|
||||
if (!logEn) return;
|
||||
|
||||
debug_metrics dm{};
|
||||
cp.getDebugMetrics(dm);
|
||||
putItem(dm);
|
||||
}
|
||||
|
||||
void api_driver::obj::StatisticsLogger::putItem(const debug_metrics &item) {
|
||||
@ -214,6 +218,11 @@ void api_driver::obj::TerminalNetworkSettings::updateCallback(proxy::CpProxy &cp
|
||||
}
|
||||
|
||||
void api_driver::obj::TerminalNetworkSettings::updateFromJson(nlohmann::json &data) {
|
||||
managementIp = data.value("managementIp", managementIp);
|
||||
isL2 = data.value("isL2", isL2);
|
||||
dataIp = data.value("dataIp", dataIp);
|
||||
dataMtu = data.value("dataMtu", dataMtu);
|
||||
serverName = data.value("serverName", serverName);
|
||||
}
|
||||
|
||||
void api_driver::obj::TerminalNetworkSettings::store(proxy::CpProxy& cp) {
|
||||
@ -546,6 +555,14 @@ void api_driver::obj::TerminalRxTxSettings::updateCallback(proxy::CpProxy &cp) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void api_driver::obj::TerminalRxTxSettings::storeMainSettings(proxy::CpProxy &cp) {
|
||||
cp.setModSettings(mod);
|
||||
cp.setDemodSettings(dem);
|
||||
#ifdef API_STRUCT_ACM_ENABLE
|
||||
cp.setAcmSettings(acm);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
struct ModcodDef_t {const char* modulation; const char* speed;};
|
||||
const static ModcodDef_t ModcodDefs[] = {
|
||||
@ -674,11 +691,11 @@ void api_driver::obj::TerminalRxTxSettings::updateMainSettings(const nlohmann::j
|
||||
}
|
||||
|
||||
#ifdef API_OBJECT_DPDI_SETTINGS_ENABLE
|
||||
double translateCoordinates(uint8_t deg, uint8_t min) {
|
||||
static double translateCoordinates(uint8_t deg, uint8_t min) {
|
||||
return static_cast<double>(deg) + static_cast<double>(min) / 60;
|
||||
}
|
||||
|
||||
std::tuple<uint8_t, uint8_t> translateCoordinates(double abs) {
|
||||
static 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);
|
||||
|
@ -44,7 +44,7 @@ std::tuple<uint8_t, uint8_t> translateCoordinates(double abs) {
|
||||
}
|
||||
|
||||
|
||||
std::string api_driver::ApiDriver::loadTerminalState() const {
|
||||
nlohmann::json api_driver::ApiDriver::loadTerminalState() const {
|
||||
if (daemon == nullptr) {
|
||||
return R"({"error": "api daemon not started!"})";
|
||||
}
|
||||
@ -56,7 +56,7 @@ std::string api_driver::ApiDriver::loadTerminalState() const {
|
||||
|
||||
auto res = state.asJson();
|
||||
res["device"] = devState.asJson();
|
||||
return res.dump();
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
@ -64,38 +64,57 @@ void api_driver::ApiDriver::resetPacketStatistics() const {
|
||||
this->daemon->resetPacketStatistics();
|
||||
}
|
||||
|
||||
std::string api_driver::ApiDriver::loadSettings() const {
|
||||
nlohmann::json api_driver::ApiDriver::loadSettings() const {
|
||||
if (daemon == nullptr) {
|
||||
return R"({"error": "api daemon not started!"})";
|
||||
}
|
||||
|
||||
// TODO сделать получение настроек
|
||||
return "{}";
|
||||
nlohmann::json res = daemon->getSettingsRxTx().asJson();
|
||||
#ifdef API_OBJECT_QOS_SETTINGS_ENABLE
|
||||
res.update(daemon->getQosSettings().asJson());
|
||||
#endif
|
||||
#ifdef API_OBJECT_NETWORK_SETTINGS_ENABLE
|
||||
res.update(daemon->getNetworkSettings().asJson());
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
|
||||
std::string api_driver::ApiDriver::loadFirmwareVersion() const {
|
||||
nlohmann::json api_driver::ApiDriver::loadFirmwareVersion() const {
|
||||
if (daemon == nullptr) {
|
||||
return R"({"error": "api daemon not started!"})";
|
||||
}
|
||||
|
||||
std::stringstream result;
|
||||
auto firmware = daemon->getFirmware();
|
||||
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}";
|
||||
return result.str();
|
||||
return daemon->getFirmware().asJson();
|
||||
}
|
||||
|
||||
void api_driver::ApiDriver::setRxTxSettings(const nlohmann::json& data) {
|
||||
// TODO
|
||||
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) {
|
||||
// TODO
|
||||
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
|
||||
|
||||
void api_driver::ApiDriver::setBucLnbSettings(const nlohmann::json& data) {
|
||||
// TODO
|
||||
|
@ -30,18 +30,17 @@ namespace api_driver {
|
||||
|
||||
/**
|
||||
* Запросить общее состояние терминала
|
||||
* @return {"txState":false,"rxState":false,"rx.sym_sync_lock":false,"rx.freq_search_lock":false,"rx.afc_lock":false,"rx.pkt_sync":false}
|
||||
*/
|
||||
std::string loadTerminalState() const;
|
||||
nlohmann::json loadTerminalState() const;
|
||||
|
||||
/**
|
||||
* Сбросить статистику пакетов
|
||||
*/
|
||||
void resetPacketStatistics() const;
|
||||
|
||||
std::string loadSettings() const;
|
||||
nlohmann::json loadSettings() const;
|
||||
|
||||
std::string loadFirmwareVersion() const;
|
||||
nlohmann::json loadFirmwareVersion() const;
|
||||
|
||||
/**
|
||||
* Установить настройки RX/TX, readback можно получить используя loadTerminalState
|
||||
|
Loading…
x
Reference in New Issue
Block a user