103 lines
4.4 KiB
C++
103 lines
4.4 KiB
C++
|
#include "config_mgr.h"
|
||
|
#include <QDebug>
|
||
|
#include <QJsonDocument>
|
||
|
#include <QJsonArray>
|
||
|
#include <QJsonObject>
|
||
|
|
||
|
#include "data_config.h"
|
||
|
#include "vibrationdata.h"
|
||
|
|
||
|
ConfigMgr *ConfigMgr::instance = nullptr;
|
||
|
|
||
|
ConfigMgr::~ConfigMgr() {
|
||
|
}
|
||
|
|
||
|
void ConfigMgr::Save() {
|
||
|
}
|
||
|
|
||
|
void ConfigMgr::Load(QString filename) {
|
||
|
QFile file(filename);
|
||
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||
|
qDebug() << "Cannot open file for reading:" << filename;
|
||
|
return;
|
||
|
}
|
||
|
QString content = file.readAll();
|
||
|
file.close();
|
||
|
QByteArray jsonData = content.toUtf8();
|
||
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
|
||
|
if (jsonDoc.isNull()) {
|
||
|
qDebug() << "Cannot parse JSON document";
|
||
|
return;
|
||
|
}
|
||
|
if (!jsonDoc.isObject() && !jsonDoc.isArray()) {
|
||
|
qDebug() << "JSON document is not an object or an array";
|
||
|
return;
|
||
|
}
|
||
|
QJsonObject json_obj = jsonDoc.object();
|
||
|
// parse card_type
|
||
|
QJsonArray card_type = json_obj["card_type"].toArray();
|
||
|
int slot = 0;
|
||
|
QJsonObject temp_obj;
|
||
|
for (int i = 0; i < card_type.size(); ++i) {
|
||
|
temp_obj = card_type[i].toObject();
|
||
|
slot = temp_obj["slot"].toInt();
|
||
|
card_type_[slot - 1] = static_cast<CardType>(temp_obj["type"].toInt());
|
||
|
}
|
||
|
// parse each slot
|
||
|
QJsonObject channel;
|
||
|
for (int i = 0; i < SLOT_NUM; ++i) {
|
||
|
if (card_type_[i] == kCardNone) {
|
||
|
continue;
|
||
|
}
|
||
|
slot = i + 1;
|
||
|
if (json_obj[QString::number(slot)].isNull()) {
|
||
|
continue;
|
||
|
}
|
||
|
temp_obj = json_obj[QString::number(slot)].toObject();
|
||
|
if (card_type_[i] == kCardVibSingle) {
|
||
|
std::shared_ptr<VibrationData> vib_data = std::make_shared<VibrationData>();
|
||
|
for (int j = 0; j < CHANNEL_COUNT; ++j) {
|
||
|
channel = temp_obj[QString::number(j + 1)].toObject();
|
||
|
// base info
|
||
|
vib_data->base_config_[j].standby = channel["standby"].toBool();
|
||
|
vib_data->base_config_[j].active = channel["active"].toBool();
|
||
|
vib_data->base_config_[j].rack_type = channel["rack_type"].toInt();
|
||
|
// vib_data->base_config_[j].tmr_group = channel["tmr_group"].toString();
|
||
|
vib_data->base_config_[j].channel_type = channel["channel_type"].toInt();
|
||
|
memset(vib_data->base_config_[j].transducer_name, 0, 32);
|
||
|
memcpy(vib_data->base_config_[j].transducer_name, channel["transducer_name"].toString().toStdString().c_str(), channel["transducer_name"].toString().length());
|
||
|
vib_data->base_config_[j].scale_factor = channel["scale_factor"].toDouble();
|
||
|
vib_data->base_config_[j].sampling_rate = channel["sampling_rate"].toInt();
|
||
|
QJsonArray voltage_range_array = channel["normal_voltage_range"].toArray();
|
||
|
vib_data->base_config_[j].normal_voltage_low = voltage_range_array[0].toDouble();
|
||
|
vib_data->base_config_[j].normal_voltage_high = voltage_range_array[1].toDouble();
|
||
|
// filter
|
||
|
QJsonArray filter_array = channel["filter"].toArray();
|
||
|
for (int k = 0; k < filter_array.size(); k++) {
|
||
|
QJsonObject filter_ele = filter_array[i].toObject();
|
||
|
vib_data->filter_[j].filter[k].low = filter_ele["low"].toInt();
|
||
|
vib_data->filter_[j].filter[k].high = filter_ele["high"].toInt();
|
||
|
vib_data->filter_[j].filter[k].checked = filter_ele["checked"].toBool();
|
||
|
}
|
||
|
// variables
|
||
|
QJsonObject tmp_variable = channel["variable"].toObject();
|
||
|
switch (vib_data->base_config_[j].channel_type) {
|
||
|
case kVibRadial: {
|
||
|
std::shared_ptr<RadialVariable> radial_variable = std::make_shared<RadialVariable>();
|
||
|
radial_variable->id_ = j + 1;
|
||
|
vib_data->variables_.push_back(radial_variable);
|
||
|
break;
|
||
|
}
|
||
|
case kVibVelocity:
|
||
|
case kVibAcc: {
|
||
|
std::shared_ptr<AccVelVariable> acc_vel_variable = std::make_shared<AccVelVariable>();
|
||
|
vib_data->variables_.push_back(acc_vel_variable);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
cards_.push_back(vib_data);
|
||
|
}
|
||
|
}
|
||
|
}
|