#include "config_mgr.h" #include #include #include #include #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(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 vib_data = std::make_shared(); 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 radial_variable = std::make_shared(); radial_variable->id_ = j + 1; vib_data->variables_.push_back(radial_variable); break; } case kVibVelocity: case kVibAcc: { std::shared_ptr acc_vel_variable = std::make_shared(); vib_data->variables_.push_back(acc_vel_variable); break; } } } cards_.push_back(vib_data); } } }