223 lines
9.5 KiB
C++
223 lines
9.5 KiB
C++
#include "relaysetting.h"
|
|
#include "ui_relaysetting.h"
|
|
#include <QDebug>
|
|
#include <QList>
|
|
#include <QJsonDocument>
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
#include <QTcpSocket>
|
|
|
|
|
|
RelaySetting::RelaySetting(QWidget *parent)
|
|
: QWidget(parent)
|
|
, ui(new Ui::RelaySetting)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
readJsonFile(QCoreApplication::applicationDirPath() + "\\config\\main.json");
|
|
|
|
for (int var = 0; var < map_slot_config.size(); ++var) {
|
|
if(map_slot_config[var].slot_type == 30){
|
|
ui->comboBox_slot->addItem(QString::number(map_slot_config[var].slot));
|
|
}
|
|
}
|
|
connect(ui->buttonGroup_OK, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_TX_RX, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_1, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_2, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_3, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_4, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_5, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_6, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_7, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_8, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_9, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_10, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_11, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_12, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_13, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_14, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_15, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_16, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_TEST, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
connect(ui->buttonGroup_STATUS, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
|
|
this, &RelaySetting::onRadioButtonClicked);
|
|
|
|
}
|
|
|
|
RelaySetting::~RelaySetting()
|
|
{
|
|
delete ui;
|
|
}
|
|
void RelaySetting::readJsonFile(const QString &filePath)
|
|
{
|
|
// 创建文件对象
|
|
QFile file(filePath);
|
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
qDebug() << "Cannot open file for reading:" << filePath;
|
|
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;
|
|
}
|
|
int slot_id = 0;
|
|
QJsonArray jsonArray = jsonDoc.array();
|
|
for (const QJsonValue &value : jsonArray) {
|
|
SlotConfig slot_config;
|
|
if (value.isObject()) { // 处理数组中的对象,例如每个对象代表一个记录或用户等。
|
|
QJsonObject obj = value.toObject();
|
|
slot_config.slot = obj["slot"].toInt();
|
|
slot_config.slot_type = obj["slot_type"].toInt();
|
|
slot_config.chan_display = obj["chan_display"].toString();
|
|
slot_config.rack_type = obj["rack_type"].toString();
|
|
map_slot_config.insert(slot_id,slot_config);
|
|
slot_id ++;
|
|
}
|
|
}
|
|
}
|
|
|
|
void RelaySetting::onRadioButtonClicked(QAbstractButton *button)
|
|
{
|
|
QButtonGroup *group = qobject_cast<QButtonGroup *>(sender());
|
|
if (!group || !button) return;
|
|
|
|
qDebug() << "Group:" << group << ", Selected button text:" << button->text();
|
|
QTcpSocket socket;
|
|
// 连接到服务器
|
|
socket.connectToHost(g_strServerIp, 10000);
|
|
if (!socket.waitForConnected()) {
|
|
qDebug() << "Connection failed!";
|
|
return;
|
|
}
|
|
PackageHead header = { {0xAA, 0x55, 0xAA}, kRelaySetting, sizeof(RelaySettingReq),0,{} };
|
|
|
|
int slot = ui->comboBox_slot->currentText().toInt();
|
|
qDebug() << "slot" << slot <<endl;
|
|
RelaySettingReq relay_setting_req;
|
|
if(slot == 0)
|
|
relay_setting_req.card_id = 0xFF;
|
|
else
|
|
relay_setting_req.card_id = slot & 0xFF;
|
|
QString led_id = group->objectName().mid(12);
|
|
qDebug() << "led_id" << led_id <<endl;
|
|
if(led_id == "OK")
|
|
relay_setting_req.led_id = 0xff;
|
|
else if(led_id == "TX_RX")
|
|
relay_setting_req.led_id = 0xf1;
|
|
else if(led_id == "TEST")
|
|
relay_setting_req.led_id = 0xee;
|
|
else if(led_id == "STATUS")
|
|
relay_setting_req.led_id = 0xe1;
|
|
else
|
|
relay_setting_req.led_id = led_id.toInt() & 0xFF;
|
|
|
|
if(button->text() == "OFF")
|
|
relay_setting_req.led_operate = 0;
|
|
else if(button->text() == "ON")
|
|
relay_setting_req.led_operate = 1;
|
|
else if(button->text() == "红色")
|
|
relay_setting_req.led_operate = 2;
|
|
else if(button->text() == "绿色")
|
|
relay_setting_req.led_operate = 3;
|
|
else if(button->text() == "红色1Hz闪烁" || button->text() == "红色闪烁")
|
|
relay_setting_req.led_operate = 4;
|
|
else if(button->text() == "红色2Hz闪烁")
|
|
relay_setting_req.led_operate = 5;
|
|
else if(button->text() == "绿色闪烁")
|
|
relay_setting_req.led_operate = 6;
|
|
else if(button->text() == "测试")
|
|
relay_setting_req.led_operate = 7;
|
|
else if(button->text() == "手动")
|
|
relay_setting_req.led_operate = 8;
|
|
else if(button->text() == "工作")
|
|
relay_setting_req.led_operate = 9;
|
|
qDebug() << "relay_setting_req.led_operate " << relay_setting_req.led_operate;
|
|
char send_buf[20] ={0};
|
|
memcpy(send_buf, (char*)&header, sizeof(PackageHead));
|
|
memcpy(send_buf + sizeof(PackageHead), (char*)&relay_setting_req, sizeof(RelaySettingReq));
|
|
int length = sizeof(PackageHead) + sizeof(RelaySettingReq);
|
|
qint64 bytesWritten = socket.write(send_buf, length);
|
|
qDebug() << "Server response: " << bytesWritten;
|
|
if (socket.waitForReadyRead()) {
|
|
QByteArray response = socket.readAll();
|
|
PackageHead header;
|
|
RelaySettingRsp relay_setting_rsp;
|
|
memcpy(&header,response.data(),sizeof(PackageHead));
|
|
qDebug() << "header len" << header.len << endl;
|
|
memcpy(&relay_setting_rsp,response.data() + sizeof(PackageHead),sizeof(RelaySettingRsp));
|
|
qDebug() << "relay_setting_rsp code" << relay_setting_rsp.code << endl;
|
|
}
|
|
}
|
|
|
|
void RelaySetting::on_pushButton_status_clicked()
|
|
{
|
|
QTcpSocket socket;
|
|
// 连接到服务器
|
|
socket.connectToHost(g_strServerIp, 10000);
|
|
if (!socket.waitForConnected()) {
|
|
qDebug() << "Connection failed!";
|
|
return;
|
|
}
|
|
PackageHead header = { {0xAA, 0x55, 0xAA}, kRelayStatus, sizeof(RelaySettingReq),0,{} };
|
|
|
|
int slot = ui->comboBox_slot->currentText().toInt();
|
|
qDebug() << "slot" << slot <<endl;
|
|
RelayStatusReq relay_status_req;
|
|
if(slot == 0)
|
|
relay_status_req.card_id = 0xFF;
|
|
else
|
|
relay_status_req.card_id = slot & 0xFF;
|
|
char send_buf[20] ={0};
|
|
memcpy(send_buf, (char*)&header, sizeof(PackageHead));
|
|
memcpy(send_buf + sizeof(PackageHead), (char*)&relay_status_req, sizeof(RelayStatusReq));
|
|
int length = sizeof(PackageHead) + sizeof(RelayStatusReq);
|
|
qint64 bytesWritten = socket.write(send_buf, length);
|
|
qDebug() << "Server response: " << bytesWritten;
|
|
if (socket.waitForReadyRead()) {
|
|
QByteArray response = socket.readAll();
|
|
PackageHead header;
|
|
RelayStatusRsp relay_status_rsp;
|
|
memcpy(&header,response.data(),sizeof(PackageHead));
|
|
qDebug() << "header len" << header.len << endl;
|
|
memcpy(&relay_status_rsp,response.data() + sizeof(PackageHead),sizeof(RelayStatusRsp));
|
|
qDebug() << "relay_setting_rsp status" << relay_status_rsp.status << endl;
|
|
if(relay_status_rsp.status == 7)
|
|
ui->label_status->setText("测试");
|
|
else if(relay_status_rsp.status == 8)
|
|
ui->label_status->setText("手动");
|
|
else if(relay_status_rsp.status == 9)
|
|
ui->label_status->setText("工作");
|
|
}
|
|
}
|
|
|