какая-то куча изменений
This commit is contained in:
1
src/api-driver/proxy.cpp
Normal file
1
src/api-driver/proxy.cpp
Normal file
@@ -0,0 +1 @@
|
||||
#include "proxy.h"
|
57
src/api-driver/proxy.h
Normal file
57
src/api-driver/proxy.h
Normal file
@@ -0,0 +1,57 @@
|
||||
#ifndef PROXY_H
|
||||
#define PROXY_H
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <terminal_api/ControlProtoCInterface.h>
|
||||
|
||||
|
||||
std::ostream& operator<<(std::ostream& out, CP_Result result);
|
||||
|
||||
namespace api_driver {
|
||||
/**
|
||||
* Функция-хелпер для логгирования ошибок всех вызовов API.
|
||||
* @return то же значение ошибки, что и было передано в качестве параметра
|
||||
*/
|
||||
CP_Result logCpApiError(const char* desc, CP_Result err) {
|
||||
if (err != OK) {
|
||||
BOOST_LOG_TRIVIAL(error) << "CP API error in " << desc << ": " << err;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
#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);
|
||||
// }
|
||||
|
||||
namespace api_driver::proxy {
|
||||
class CpProxy {
|
||||
public:
|
||||
TSID sid;
|
||||
CpProxy();
|
||||
CpProxy(TSID s);
|
||||
|
||||
std::string getDmaDebug(TSID sid, const std::string& arg, const char* calledFrom = "");
|
||||
|
||||
void getModState(TSID sid, modulator_state& dest, const char* calledFrom = "");
|
||||
void getModSettings(TSID sid, modulator_settings& dest, const char* calledFrom = "");
|
||||
void setModSettings(TSID sid, modulator_settings& dest, const char* calledFrom = "");
|
||||
|
||||
void getDemodState(TSID sid, demodulator_state& dest, const char* calledFrom = "");
|
||||
void getDemodSettings(TSID sid, demodulator_settings& dest, const char* calledFrom = "");
|
||||
void setDemodSettings(TSID sid, demodulator_settings& dest, const char* calledFrom = "");
|
||||
|
||||
#ifdef MODEM_IS_SCPC
|
||||
void getCincState(TSID sid, demodulator_settings& dest, const char* calledFrom = "");
|
||||
#endif
|
||||
|
||||
~CpProxy();
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //PROXY_H
|
206
src/api-driver/structs.cpp
Normal file
206
src/api-driver/structs.cpp
Normal file
@@ -0,0 +1,206 @@
|
||||
#include "api-driver/structs.h"
|
||||
|
||||
#include <iomanip>
|
||||
|
||||
#include "api-driver/proxy.h"
|
||||
|
||||
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<int>(result);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string makeTimepointFromMillis(int64_t unix_time_ms) {
|
||||
// Преобразуем миллисекунды в микросекунды для std::chrono
|
||||
auto time_point = std::chrono::time_point<std::chrono::system_clock,
|
||||
std::chrono::microseconds>(std::chrono::microseconds(unix_time_ms * 1000));
|
||||
|
||||
auto tp = std::chrono::system_clock::to_time_t(time_point);
|
||||
tm* t = std::localtime(&tp);
|
||||
|
||||
std::stringstream ss;
|
||||
ss << std::put_time(t, "%Y-%m-%d %H:%M:%S");
|
||||
auto ms = (unix_time_ms % 1000);
|
||||
ss << '.' << std::setw(3) << std::setfill('0') << ms;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
|
||||
bool api_driver::obj::CpUpdatebleObject::checkNeedUpdate(int64_t now) const {
|
||||
if (updatePeriodMs < 0) return false;
|
||||
// тут нет смысла спать меньше чем на 20мс, поэтому можно разрешить чтение на некоторое время раньше
|
||||
return now - lastUpdate >= (updatePeriodMs - 20);
|
||||
}
|
||||
int64_t api_driver::obj::CpUpdatebleObject::getNextUpdate(int64_t now) const {
|
||||
if (checkNeedUpdate(now)) {
|
||||
return 0;
|
||||
}
|
||||
auto next = now - lastUpdate;
|
||||
return next < 0 ? 0 : next;
|
||||
}
|
||||
api_driver::obj::CpUpdatebleObject::~CpUpdatebleObject() = default;
|
||||
|
||||
|
||||
void api_driver::obj::TerminalState::updateCallback(TSID sid, CP_Result &lastCpError) {
|
||||
constexpr const char* thisFunc = "api_driver::obj::TerminalState::load()";
|
||||
|
||||
modulator_state modulator{};
|
||||
demodulator_state demodulator{};
|
||||
#ifdef MODEM_IS_SCPC
|
||||
CinC_state cinc{};
|
||||
#endif
|
||||
|
||||
proxy::getModState(sid, modulator, thisFunc);
|
||||
proxy::getDemodState(sid, demodulator, thisFunc);
|
||||
#ifdef MODEM_IS_TDMA
|
||||
const auto tmpDevState = proxy::getDmaDebug(sid, "status_init", thisFunc);
|
||||
#endif
|
||||
|
||||
#ifdef MODEM_IS_SCPC
|
||||
bool isCinC = getIsCinC();
|
||||
if (isCinC) {
|
||||
logCpApiError("api_driver::TerminalApiDaemon::updateState()->CP_GetCinCState()", CP_GetCinCState(sid, cinc));
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
std::lock_guard lock2(this->mutex);
|
||||
#ifdef MODEM_IS_TDMA
|
||||
this->fInitState = tmpDevState;
|
||||
#endif
|
||||
this->fTxState = modulator.is_tx_on;
|
||||
this->fTxModcod = modulator.modcod;
|
||||
this->fTxSnr = modulator.snr_remote;
|
||||
this->fTxframeSizeNormal = modulator.snr_remote;
|
||||
this->fTx = modulator.snr_remote;
|
||||
this->fTx = modulator.snr_remote;
|
||||
this->fTx = modulator.snr_remote;
|
||||
#ifdef MODEM_IS_SCPC
|
||||
result << ",\"tx.snr\":"; writeDouble(result, modulator.snr_remote);
|
||||
|
||||
if (modulator.is_short) { result << R"(,"tx.frameSizeNormal":false)"; }
|
||||
else { result << R"(,"tx.frameSizeNormal":true)"; }
|
||||
|
||||
if (modulator.is_pilots) { result << R"(,"tx.isPilots":true)"; }
|
||||
else { result << R"(,"tx.isPilots":false)"; }
|
||||
#else
|
||||
{
|
||||
modulator_settings modSet{};
|
||||
daemon->getSettings(&modSet, nullptr, nullptr, nullptr);
|
||||
result << ",\"tx.centerFreq\":"; writeDouble(result, modSet.central_freq_in_kGz);
|
||||
result << ",\"tx.symSpeed\":"; writeDouble(result, (static_cast<double>(modSet.baudrate) / 1000.0));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
|
||||
result << ",\"tx.speedOnTxKbit\":"; writeDouble(result, static_cast<double>(modulator.speed_in_bytes_tx) / 128.0);
|
||||
result << ",\"tx.speedOnIifKbit\":"; writeDouble(result, (static_cast<double>(modulator.speed_in_bytes_tx_iface) / 128.0));
|
||||
|
||||
// формируем структуру для RX
|
||||
result << ",\n\"rx.state\":" << boolAsStr(demodulator.locks.sym_sync_lock && demodulator.locks.freq_lock && demodulator.locks.afc_lock && demodulator.locks.pkt_sync);
|
||||
result << ",\"rx.sym_sync_lock\":" << boolAsStr(demodulator.locks.sym_sync_lock);
|
||||
result << ",\"rx.freq_search_lock\":" << boolAsStr(demodulator.locks.freq_lock);
|
||||
result << ",\"rx.afc_lock\":" << boolAsStr(demodulator.locks.afc_lock);
|
||||
result << ",\"rx.pkt_sync\":" << boolAsStr(demodulator.locks.pkt_sync);
|
||||
|
||||
result << ",\"rx.snr\":"; writeDouble(result, demodulator.snr);
|
||||
result << ",\"rx.rssi\":"; writeDouble(result, demodulator.rssi);
|
||||
result << ",\"rx.modcod\":" << demodulator.modcod;
|
||||
|
||||
if (demodulator.is_short) {
|
||||
result << R"(,"rx.frameSizeNormal":false)";
|
||||
} else {
|
||||
result << R"(,"rx.frameSizeNormal":true)";
|
||||
}
|
||||
|
||||
if (demodulator.is_pilots) {
|
||||
result << R"(,"rx.isPilots":true)";
|
||||
} else {
|
||||
result << R"(,"rx.isPilots":false)";
|
||||
}
|
||||
|
||||
result << ",\n\"rx.symError\":"; writeDouble(result, demodulator.sym_err);
|
||||
result << ",\"rx.freqErr\":"; writeDouble(result, demodulator.crs_freq_err);
|
||||
result << ",\"rx.freqErrAcc\":"; writeDouble(result, demodulator.fine_freq_err);
|
||||
result << ",\"rx.inputSignalLevel\":"; writeDouble(result, demodulator.if_overload);
|
||||
result << ",\"rx.pllError\":"; writeDouble(result, demodulator.afc_err);
|
||||
result << ",\"rx.speedOnRxKbit\":"; writeDouble(result, static_cast<double>(demodulator.speed_in_bytes_rx) / 128.0);
|
||||
result << ",\"rx.speedOnIifKbit\":"; writeDouble(result, static_cast<double>(demodulator.speed_in_bytes_rx_iface) / 128.0);
|
||||
result << ",\"rx.packetsOk\":" << demodulator.packet_ok_cnt;
|
||||
result << ",\"rx.packetsBad\":" << demodulator.packet_bad_cnt;
|
||||
result << ",\"rx.packetsDummy\":" << demodulator.dummy_cnt;
|
||||
|
||||
#ifdef MODEM_IS_SCPC
|
||||
// формируем структуру для CinC
|
||||
if (isCinC) {
|
||||
if (modulator.is_tx_on) {
|
||||
if (cinc.carrier_lock) {
|
||||
result << R"(,"cinc.correlator":true)";
|
||||
} else {
|
||||
result << R"(,"cinc.correlator":false)";
|
||||
}
|
||||
} else {
|
||||
result << R"(,"cinc.correlator":null)";
|
||||
}
|
||||
|
||||
result << ",\n\"cinc.occ\":"; writeDouble(result, cinc.ratio_signal_signal, 3);
|
||||
result << ",\"cinc.correlatorFails\":" << cinc.cnt_bad_lock;
|
||||
result << ",\"cinc.freqErr\":" << cinc.freq_error_offset;
|
||||
result << ",\"cinc.freqErrAcc\":" << cinc.freq_fine_estimate;
|
||||
result << ",\"cinc.channelDelay\":" << cinc.delay_dpdi;
|
||||
} else {
|
||||
result << R"(,"cinc.correlator":null)";
|
||||
}
|
||||
#endif
|
||||
|
||||
// структура температур девайса
|
||||
result << ",\n\"device.adrv\":"; writeDouble(result, device.adrv_temp, 1);
|
||||
result << ",\"device.fpga\":"; writeDouble(result, device.pl_temp, 1);
|
||||
result << ",\"device.zynq\":"; writeDouble(result, device.zynq_temp, 1);
|
||||
#ifdef MODEM_IS_TDMA
|
||||
if (device.cur_image.empty()) {
|
||||
result << R"(,
|
||||
"device.upgradeStatus":"Нет обновлений","device.upgradePercent":0,"device.upgradeImage":"")";
|
||||
} else {
|
||||
switch (device.status) {
|
||||
case NORM_RX_OBJECT_NEW_API: result << ",\n" R"("device.upgradeStatus": "Начало загрузки")"; break;
|
||||
case NORM_RX_OBJECT_INFO_API: result << ",\n" R"("device.upgradeStatus": "Получено имя образа")"; break;
|
||||
case NORM_RX_OBJECT_UPDATED_API: result << ",\n" R"("device.upgradeStatus": "Загружается")"; break;
|
||||
case NORM_RX_OBJECT_COMPLETED_API: result << ",\n" R"("device.upgradeStatus": "Загрузка завершена")"; break;
|
||||
case NORM_RX_OBJECT_ABORTED_API: result << ",\n" R"("device.upgradeStatus": "Загрузка прервана")"; break;
|
||||
default: result << ",\n" R"("device.upgradeStatus": "?")";
|
||||
|
||||
}
|
||||
result << ",\"device.upgradePercent\":" << device.dwl_percent;
|
||||
result << ",\"device.upgradeImage\":" << buildEscapedString(device.cur_image);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
result << "}";
|
||||
*/
|
||||
this->modState = modulator;
|
||||
this->demodState = demodulator;
|
||||
|
||||
#ifdef MODEM_IS_SCPC
|
||||
this->cincState = cinc;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
api_driver::obj::TerminalState::~TerminalState() = default;
|
||||
|
||||
|
||||
|
||||
|
||||
|
279
src/api-driver/structs.h
Normal file
279
src/api-driver/structs.h
Normal file
@@ -0,0 +1,279 @@
|
||||
#ifndef STRUCTS_H
|
||||
#define STRUCTS_H
|
||||
#include <shared_mutex>
|
||||
#include <string>
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <boost/property_tree/ptree_fwd.hpp>
|
||||
#include <terminal_api/ControlProtoCInterface.h>
|
||||
|
||||
|
||||
namespace api_driver::obj {
|
||||
/**
|
||||
* Обертка для объектов, доступных для обновления
|
||||
* NOTE: перед вызовом функций, требующих `TSID`, необходимо захватить мютекс API.
|
||||
*/
|
||||
class CpUpdatebleObject {
|
||||
public:
|
||||
int64_t lastUpdate = 0;
|
||||
int64_t updatePeriodMs = -1;
|
||||
|
||||
virtual void updateCallback(TSID sid, CP_Result& lastCpError) = 0;
|
||||
|
||||
bool checkNeedUpdate(int64_t now) const;
|
||||
|
||||
int64_t getNextUpdate(int64_t now) const;
|
||||
|
||||
virtual ~CpUpdatebleObject();
|
||||
};
|
||||
|
||||
|
||||
#ifdef MODEM_IS_SCPC
|
||||
class api_driver::StatisticsLogger {
|
||||
public:
|
||||
StatisticsLogger(): timeStart(TIME_NOW()) {}
|
||||
|
||||
int64_t timeStart;
|
||||
|
||||
bool logEn = false;
|
||||
std::atomic<int> logPeriodMs = 1000;
|
||||
std::atomic<int> maxAgeMs = 10000;
|
||||
|
||||
/**
|
||||
*
|
||||
* @return {"en": bool, "logPeriodMs": int, "maxAgeMs": int}
|
||||
*/
|
||||
std::string getSettings() {
|
||||
std::lock_guard _lock(mutex);
|
||||
std::stringstream res;
|
||||
res << "{\"en\":" << boolAsStr(this->logEn);
|
||||
res << ",\"logPeriodMs\":" << logPeriodMs;
|
||||
res << ",\"maxAgeMs\":" << maxAgeMs;
|
||||
res << '}';
|
||||
return res.str();
|
||||
}
|
||||
void setSettings(boost::property_tree::ptree &pt) {
|
||||
const bool newEn = pt.get<bool>("en");
|
||||
const int newInterval = pt.get<int>("logPeriodMs");
|
||||
const int newMaxAgeMs = pt.get<int>("maxAgeMs");
|
||||
|
||||
std::lock_guard _lock(this->mutex);
|
||||
this->logPeriodMs = newInterval;
|
||||
this->maxAgeMs = newMaxAgeMs;
|
||||
|
||||
if (newEn != this->logEn) {
|
||||
if (newEn) {
|
||||
this->logFile.open("/tmp/weblog-statistics.csv", std::ios::out);
|
||||
if (this->logFile.is_open()) {
|
||||
const auto* header = "timestamp\tcnt ok\tcnt bad\tfine freq dem\tcrs freq dem\tcrs freq compensator\tcrs time est\tfine time est\tmax level corr\tcurrent delay\tSNR\tcurrent modcod\tfine freq compensator\tind freq grb\tind freq tochn\tind filt adapt\tfilter corr cinc\tcorr cnt\tRSS\tcor erl\tcor lat\tgc gain\tpower pl rx\n";
|
||||
this->logFile.write(header, static_cast<std::streamsize>(strlen(header)));
|
||||
this->logEn = true;
|
||||
this->timeStart = TIME_NOW();
|
||||
}
|
||||
} else {
|
||||
if (this->logFile.is_open()) {
|
||||
this->logFile.close();
|
||||
}
|
||||
this->logEn = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Записать значение в "базу данных". Метку при этом вставлять не нужно, она будет вставлена автоматически.
|
||||
* @param item
|
||||
*/
|
||||
void putItem(const debug_metrics& item) {
|
||||
std::lock_guard _lock(this->mutex);
|
||||
if (!logEn) return;
|
||||
if (this->logFile.is_open()) {
|
||||
std::stringstream res;
|
||||
res << makeTimepointFromMillis(TIME_NOW()) << '\t';
|
||||
res << item.cnt_ok << '\t';
|
||||
res << item.cnt_bad << '\t';
|
||||
res << item.fine_freq_dem << '\t';
|
||||
res << item.crs_freq_dem << '\t';
|
||||
res << item.crs_freq_compensator << '\t';
|
||||
res << item.crs_time_est << '\t';
|
||||
res << item.fine_time_est << '\t';
|
||||
res << item.max_level_corr << '\t';
|
||||
res << item.current_delay << '\t';
|
||||
res << item.SNR << '\t';
|
||||
res << item.current_modcod << '\t';
|
||||
res << item.fine_freq_compensator << '\t';
|
||||
res << item.ind_freq_grb << '\t';
|
||||
res << item.ind_freq_tochn << '\t';
|
||||
res << item.ind_filt_adapt << '\t';
|
||||
res << item.filter_corr_cinc << '\t';
|
||||
res << item.corr_cnt << '\t';
|
||||
res << item.RSS << '\t';
|
||||
res << item.cor_erl << '\t';
|
||||
res << item.cor_lat << '\t';
|
||||
res << item.gc_gain << '\t';
|
||||
res << item.power_pl_rx << '\n';
|
||||
|
||||
const auto out = res.str();
|
||||
this->logFile.write(out.c_str(), static_cast<std::streamsize>(out.length()));
|
||||
this->logFile.flush();
|
||||
}
|
||||
}
|
||||
|
||||
// void collectExpiredItems();
|
||||
|
||||
// void resetLogs() {
|
||||
// std::lock_guard _lock(mutex);
|
||||
// logs.clear();
|
||||
// }
|
||||
|
||||
~StatisticsLogger() = default;
|
||||
private:
|
||||
// std::pmr::deque<LogItem> logs;
|
||||
std::fstream logFile{};
|
||||
std::shared_mutex mutex;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef MODEM_IS_SCPC
|
||||
static constexpr const char* DEFAULT_SERVER_NAME = "RCSM-101";
|
||||
#endif
|
||||
#ifdef MODEM_IS_TDMA
|
||||
static constexpr const char* DEFAULT_SERVER_NAME = "RCSM-101 TDMA";
|
||||
#endif
|
||||
|
||||
#if defined(MODEM_IS_SCPC)
|
||||
class TerminalNetworkSettings: public CpUpdatebleObject {
|
||||
public:
|
||||
std::string managementIp, managementGateway, dataIp, serverName;
|
||||
bool isL2 = true;
|
||||
unsigned int dataMtu = 1500;
|
||||
|
||||
TerminalNetworkSettings();
|
||||
TerminalNetworkSettings(const TerminalNetworkSettings& src);
|
||||
TerminalNetworkSettings& operator= (const TerminalNetworkSettings& src);
|
||||
|
||||
void loadDefaults() {
|
||||
managementIp = "0.0.0.0";
|
||||
managementGateway = "";
|
||||
isL2 = true;
|
||||
dataIp = "0.0.0.0";
|
||||
dataMtu = 1500;
|
||||
serverName = DEFAULT_SERVER_NAME;
|
||||
}
|
||||
|
||||
void updateCallback(TSID sid, CP_Result &lastCpError) override;
|
||||
void updateFromPt(boost::property_tree::ptree &pt);
|
||||
void store(TSID sid, CP_Result& lastCpError);
|
||||
std::string asJson();
|
||||
|
||||
~TerminalNetworkSettings() override;
|
||||
};
|
||||
#endif
|
||||
|
||||
class TerminalFirmwareVersion {
|
||||
public:
|
||||
std::string version, modemId, modemSn, macMang, macData;
|
||||
|
||||
TerminalFirmwareVersion();
|
||||
TerminalFirmwareVersion(const TerminalFirmwareVersion& src);
|
||||
~TerminalFirmwareVersion();
|
||||
|
||||
std::string asJson();
|
||||
|
||||
TerminalFirmwareVersion& operator= (const TerminalFirmwareVersion& src);
|
||||
};
|
||||
|
||||
/**
|
||||
* Обертка состояния терминала, тут состояние девайса, модулятора/демодулятора, состояние автоматического обновления.
|
||||
*/
|
||||
class TerminalState: public CpUpdatebleObject {
|
||||
public:
|
||||
std::string fInitState{};
|
||||
bool fIsTest = false; // daemon->isTest()
|
||||
bool fTxState = false;
|
||||
#ifdef MODEM_IS_SCPC
|
||||
bool fIsCinC = false;
|
||||
#endif
|
||||
|
||||
bool fStatRxState;
|
||||
bool fStatRxSymSyncLock;
|
||||
bool fStatRxFreqSearchLock;
|
||||
bool fStatRxAfcLock;
|
||||
bool fStatRxPktSync;
|
||||
|
||||
float fStatRxSnr;
|
||||
float fStatRxRssi;
|
||||
uint16_t fStatRxModcod;
|
||||
bool fStatRxFrameSizeNormal;
|
||||
bool fStatRxIsPilots;
|
||||
|
||||
double fStatRxSymError;
|
||||
double fStatRxFreqErr;
|
||||
double fStatRxFreqErrAcc;
|
||||
double fStatRxInputSignalLevel;
|
||||
double fStatRxPllError;
|
||||
double fStatRxSpeedOnRxKbit;
|
||||
double fStatRxSpeedOnIifKbit;
|
||||
uint32_t fStatRxPacketsOk;
|
||||
uint32_t fStatRxPacketsBad;
|
||||
uint32_t fStatRxPacketsDummy;
|
||||
|
||||
bool fStatTxState;
|
||||
uint16_t fStatTxModcod;
|
||||
double fStatTxSpeedOnTxKbit;
|
||||
double fStatTxSpeedOnIifKbit;
|
||||
#ifdef MODEM_IS_SCPC
|
||||
float fStatTxSnr;
|
||||
bool fStatTxFrameSizeNormal;
|
||||
bool fStatTxIsPilots;
|
||||
double fStatCincOcc;
|
||||
bool fStatCincCorrelator;
|
||||
uint32_t fStatCincCorrelatorFails;
|
||||
int32_t fStatCincFreqErr;
|
||||
int32_t fStatCincFreqErrAcc;
|
||||
float fStatCincChannelDelay;
|
||||
#endif
|
||||
#ifdef MODEM_IS_TDMA
|
||||
fStatTxCenterFreq;
|
||||
fStatTxSymSpeed;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Обновление основной части статистики, то есть RX/TX и sysinfo
|
||||
*/
|
||||
void updateCallback(TSID sid, CP_Result &lastCpError) override;
|
||||
|
||||
void updateFromPt(boost::property_tree::ptree &pt);
|
||||
void store(TSID sid, CP_Result& lastCpError);
|
||||
std::string asJson();
|
||||
|
||||
~TerminalState() override;
|
||||
};
|
||||
|
||||
class TerminalDeviceState: public CpUpdatebleObject {
|
||||
public:
|
||||
time_t fStatOsUptime;
|
||||
double fStatOsLoad1;
|
||||
double fStatOsLoad5;
|
||||
double fStatOsLoad15;
|
||||
int fStatOsTotalram;
|
||||
int fStatOsFreeram;
|
||||
int fStatOsProcs;
|
||||
|
||||
double fStatDeviceAdrv;
|
||||
double fStatDeviceZynq;
|
||||
double fStatDeviceFpga;
|
||||
#ifdef MODEM_IS_TDMA
|
||||
DOWNLOAD_STATUS fStatDeviceUpgradeStatus;
|
||||
unsigned int fStatDeviceUpgradePercent;
|
||||
std::string fStatDeviceUpgradeImage;
|
||||
#endif
|
||||
|
||||
void updateCallback(TSID sid, CP_Result &lastCpError) override;
|
||||
void updateFromPt(boost::property_tree::ptree &pt);
|
||||
void store(TSID sid, CP_Result& lastCpError);
|
||||
std::string asJson();
|
||||
|
||||
~TerminalDeviceState() override;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //STRUCTS_H
|
@@ -1,7 +1,6 @@
|
||||
#ifndef TERMINAL_API_DRIVER_H
|
||||
#define TERMINAL_API_DRIVER_H
|
||||
|
||||
#include <deque>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <boost/property_tree/ptree.hpp>
|
||||
|
Reference in New Issue
Block a user