TSI_Config/relaysetting.cpp

205 lines
8.9 KiB
C++
Raw Normal View History

2025-03-09 11:53:05 +08:00
#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)
2025-03-27 10:16:01 +08:00
, ui(new Ui::RelaySetting) {
2025-03-09 11:53:05 +08:00
ui->setupUi(this);
2025-03-11 16:42:00 +08:00
ui->widget_body->setProperty("flag", "body");
2025-03-27 10:16:01 +08:00
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
2025-05-14 23:14:50 +08:00
for (int var = 0; var < SLOT_NUM; ++var) {
ui->comboBox_slot->addItem(QString::number(var + 1));
2025-03-09 11:53:05 +08:00
}
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);
2025-05-14 23:14:50 +08:00
m_tcpClient = MyTcpClient::instance();
connect(m_tcpClient, SIGNAL(dataReceived(const QByteArray &)), this, SLOT(readData(const QByteArray &)));
2025-03-09 11:53:05 +08:00
}
2025-05-14 23:14:50 +08:00
void RelaySetting::readData(const QByteArray &data) {
qDebug() << "Received from server:" << data;
2025-03-09 11:53:05 +08:00
2025-05-14 23:14:50 +08:00
uint8_t cmd = data[3];
if (cmd == kRelaySetting) {
RelaySettingRsp relay_setting_rsp;
memcpy(&relay_setting_rsp, data.data(), sizeof(RelaySettingRsp));
qDebug() << "relay_setting_rsp code" << relay_setting_rsp.code ;
}else if(cmd == kRelayStatus){
RelayStatusRsp relay_status_rsp;
memcpy(&relay_status_rsp, data.data(), sizeof(RelayStatusRsp));
qDebug() << "relay_setting_rsp status" << relay_status_rsp.status ;
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("工作");
}
}
}
2025-03-27 10:16:01 +08:00
RelaySetting::~RelaySetting() {
2025-03-09 11:53:05 +08:00
delete ui;
}
2025-03-27 10:16:01 +08:00
void RelaySetting::readJsonFile(const QString &filePath) {
2025-03-09 11:53:05 +08:00
// 创建文件对象
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();
2025-03-27 10:16:01 +08:00
map_slot_config.insert(slot_id, slot_config);
2025-03-09 11:53:05 +08:00
slot_id ++;
}
}
}
2025-03-27 10:16:01 +08:00
void RelaySetting::onRadioButtonClicked(QAbstractButton *button) {
2025-03-09 11:53:05 +08:00
QButtonGroup *group = qobject_cast<QButtonGroup *>(sender());
2025-03-27 10:16:01 +08:00
if (!group || !button) {
return;
}
2025-03-09 11:53:05 +08:00
qDebug() << "Group:" << group << ", Selected button text:" << button->text();
QTcpSocket socket;
// 连接到服务器
socket.connectToHost(g_strServerIp, 10000);
if (!socket.waitForConnected()) {
qDebug() << "Connection failed!";
return;
}
2025-05-14 23:14:50 +08:00
RelaySettingReq relay_setting_req = { {0xAA, 0x55, 0xAA}, kRelaySetting,1, 0, 0, 0 };
2025-03-09 11:53:05 +08:00
int slot = ui->comboBox_slot->currentText().toInt();
2025-04-14 20:30:41 +08:00
qDebug() << "slot" << slot ;
2025-03-27 10:16:01 +08:00
if (slot == 0) {
2025-03-09 11:53:05 +08:00
relay_setting_req.card_id = 0xFF;
2025-03-27 10:16:01 +08:00
} else {
2025-03-09 11:53:05 +08:00
relay_setting_req.card_id = slot & 0xFF;
2025-03-27 10:16:01 +08:00
}
2025-03-09 11:53:05 +08:00
QString led_id = group->objectName().mid(12);
2025-04-14 20:30:41 +08:00
qDebug() << "led_id" << led_id ;
2025-03-27 10:16:01 +08:00
if (led_id == "OK") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_id = 0xff;
2025-03-27 10:16:01 +08:00
} else if (led_id == "TX_RX") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_id = 0xf1;
2025-03-27 10:16:01 +08:00
} else if (led_id == "TEST") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_id = 0xee;
2025-03-27 10:16:01 +08:00
} else if (led_id == "STATUS") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_id = 0xe1;
2025-03-27 10:16:01 +08:00
} else {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_id = led_id.toInt() & 0xFF;
2025-03-27 10:16:01 +08:00
}
if (button->text() == "OFF") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 0;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "ON") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 1;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "红色") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 2;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "绿色") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 3;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "红色1Hz闪烁" || button->text() == "红色闪烁") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 4;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "红色2Hz闪烁") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 5;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "绿色闪烁") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 6;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "测试") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 7;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "手动") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 8;
2025-03-27 10:16:01 +08:00
} else if (button->text() == "工作") {
2025-03-09 11:53:05 +08:00
relay_setting_req.led_operate = 9;
2025-03-27 10:16:01 +08:00
}
2025-03-09 11:53:05 +08:00
qDebug() << "relay_setting_req.led_operate " << relay_setting_req.led_operate;
2025-03-27 10:16:01 +08:00
char send_buf[20] = {0};
2025-05-14 23:14:50 +08:00
memcpy(send_buf, (char *)&relay_setting_req, sizeof(RelaySettingReq));
int length = sizeof(RelaySettingReq) + sizeof(RelaySettingReq);
qint64 bytesWritten = m_tcpClient->sendData((char*)&send_buf, length);
m_tcpClient->waitForRead();
2025-03-09 11:53:05 +08:00
qDebug() << "Server response: " << bytesWritten;
2025-05-14 23:14:50 +08:00
2025-03-09 11:53:05 +08:00
}
2025-03-27 10:16:01 +08:00
void RelaySetting::on_pushButton_status_clicked() {
2025-05-14 23:14:50 +08:00
2025-03-09 11:53:05 +08:00
int slot = ui->comboBox_slot->currentText().toInt();
2025-04-14 20:30:41 +08:00
qDebug() << "slot" << slot ;
2025-05-14 23:14:50 +08:00
RelayStatusReq relay_status_req { {0xAA, 0x55, 0xAA}, kRelayStatus, 1, 0 };
2025-03-27 10:16:01 +08:00
if (slot == 0) {
2025-03-09 11:53:05 +08:00
relay_status_req.card_id = 0xFF;
2025-03-27 10:16:01 +08:00
} else {
2025-03-09 11:53:05 +08:00
relay_status_req.card_id = slot & 0xFF;
2025-03-27 10:16:01 +08:00
}
char send_buf[20] = {0};
2025-05-14 23:14:50 +08:00
memcpy(send_buf, (char *)&relay_status_req, sizeof(RelayStatusReq));
int length = sizeof(RelayStatusReq);
qint64 bytesWritten = m_tcpClient->sendData((char*)&send_buf, length);
m_tcpClient->waitForRead();
2025-03-09 11:53:05 +08:00
qDebug() << "Server response: " << bytesWritten;
2025-05-14 23:14:50 +08:00
2025-03-09 11:53:05 +08:00
}