| 
									
										
										
										
											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
										 |  |  | } | 
					
						
							|  |  |  | 
 |