diff --git a/MyTcpClient.cpp b/MyTcpClient.cpp index caed475..142bfcc 100644 --- a/MyTcpClient.cpp +++ b/MyTcpClient.cpp @@ -14,6 +14,8 @@ MyTcpClient::MyTcpClient(QObject *parent) : QObject(parent), shouldReconnect(tru // 连接失败后,定时尝试重连 connect(&reconnectTimer, &QTimer::timeout, this, &MyTcpClient::onReconnect); reconnectTimer.setInterval(5000); // 5秒重连一次 + memset(header,0,sizeof(header)); + int packge_len = 0; } MyTcpClient::~MyTcpClient() { @@ -70,54 +72,106 @@ void MyTcpClient::onConnected() { } void MyTcpClient::onReadyRead() { - while (socket->bytesAvailable() > 0) { - if (m_waitingForHeader) { - // 1. 先尝试读取头部(固定长度) - if (socket->bytesAvailable() < sizeof(PackageHead)) { - return; // 数据不够,等待下次触发 - } +// while (socket->bytesAvailable() > 0) { +// if (m_waitingForHeader) { +// // 1. 先尝试读取头部(固定长度) +// if (socket->bytesAvailable() < 4) { +// continue; // 数据不够,等待下次触发 +// } - // 读取头部 - socket->read(reinterpret_cast(&m_currentHead), sizeof(PackageHead)); +// // 读取头部 +// socket->read(reinterpret_cast(&header), 4); - // 验证头部标识(0xAA55AA) - if (m_currentHead.head[0] != 0xAA || - m_currentHead.head[1] != 0x55 || - m_currentHead.head[2] != 0xAA) { - qWarning() << "Invalid header! Disconnecting..."; - return; - } +// // 验证头部标识(0xAA55AA) +// if (header[0] != 0xAA || +// header[1] != 0x55 || +// header[2] != 0xAA) { +// qWarning() << "Invalid header! Disconnecting..."; +// return; +// } +// char temp[10]={0}; +// if(header[3] == kDownloadConfigFile){ - // 进入等待数据状态 - m_waitingForHeader = false; - m_buffer.clear(); - m_buffer.append(reinterpret_cast(&m_currentHead), sizeof(PackageHead)); // 先存头部 - } else { - // 2. 根据头部的 len 读取剩余数据 - qint64 remainingBytes = m_currentHead.len - (m_buffer.size() - sizeof(PackageHead)); +// socket->read(reinterpret_cast(&temp), 6); +// memcpy((char*)&packge_len,temp + 2, 4); +// }else{ +// QByteArray remain_data = socket->readAll(); +// m_buffer.clear(); +// m_buffer.append(reinterpret_cast(&header), 4); // 先存头部 +// m_buffer.append(remain_data); +// emit dataReceived(m_buffer); +// break; +// } - if (remainingBytes <= 0) { - // 数据已经完整,触发信号 - emit dataReceived(m_buffer); - m_waitingForHeader = true; // 重置状态,准备接收下一个包 - break; // 继续处理缓冲区可能的下一个包 - } +// // 进入等待数据状态 +// m_waitingForHeader = false; +// m_buffer.clear(); +// m_buffer.append(reinterpret_cast(&header), 4); // 先存头部 +// m_buffer.append(reinterpret_cast(&temp), 6); // 先存头部 +// } else { +// // 2. 根据头部的 len 读取剩余数据 +// qint64 remainingBytes = packge_len - (m_buffer.size() - 10); - // 读取剩余数据(不超过 remainingBytes) - QByteArray newData = socket->read(remainingBytes); - qDebug() << "Read" << newData.size() << "bytes"; - m_buffer.append(newData); +// if (remainingBytes <= 0) { +// // 数据已经完整,触发信号 +// emit dataReceived(m_buffer); +// m_waitingForHeader = true; // 重置状态,准备接收下一个包 +// break; // 继续处理缓冲区可能的下一个包 +// } - // 检查是否已经读完 - if (m_buffer.size() - sizeof(PackageHead) >= m_currentHead.len) { - qDebug() << "m_buffer" << m_buffer.size() << "bytes"; - emit dataReceived(m_buffer); - m_waitingForHeader = true; // 准备接收下一个包 - } - } - } -// QByteArray data = socket->readAll(); -// emit dataReceived(data); +// // 读取剩余数据(不超过 remainingBytes) +// QByteArray newData = socket->read(remainingBytes); +// qDebug() << "Read" << newData.size() << "bytes"; +// m_buffer.append(newData); + +// // 检查是否已经读完 +// if (m_buffer.size() - 10 >= packge_len) { +// qDebug() << "m_buffer" << m_buffer.size() << "bytes"; +// emit dataReceived(m_buffer); +// m_waitingForHeader = true; // 准备接收下一个包 +// break; +// } +// } +// } + m_buffer.append(socket->readAll()); + + while (true) { + if (m_buffer.size() < sizeof(BaseHeader)) return; + + const BaseHeader *base = reinterpret_cast(m_buffer.constData()); + if (!(base->head[0] == 0xAA && base->head[1] == 0x55 && base->head[2] == 0xAA)) { + m_buffer.remove(0, 1); + continue; + } + + uint8_t cmd = base->cmd; + + if (cmd == kDownloadConfigFile) { + if (m_buffer.size() < sizeof(BaseHeader) + sizeof(LargeHeaderExtra)) + return; // 等待更多数据 + + const LargeHeaderExtra *extra = reinterpret_cast( + m_buffer.constData() + sizeof(BaseHeader)); + int payloadLen = extra->len; + if (payloadLen <= 0 || payloadLen > 1024 * 1024) { + qWarning() << "Detected abnormal payload length:" << payloadLen; + m_buffer.remove(0, sizeof(BaseHeader)); // 丢弃当前包头 + continue; + } + int totalLen = sizeof(BaseHeader) + sizeof(LargeHeaderExtra) + extra->len; + if (m_buffer.size() < totalLen) + return; // 等待完整数据到达 + + QByteArray payload = m_buffer.mid(sizeof(BaseHeader) + sizeof(LargeHeaderExtra), extra->len); + emit dataReceived( m_buffer); + m_buffer.remove(0, totalLen); + } else { + QByteArray fullData = m_buffer; + emit dataReceived(fullData); + m_buffer.clear(); + return; // 等待下一批数据 + } + } } void MyTcpClient::onDisconnected() { diff --git a/MyTcpClient.h b/MyTcpClient.h index 70aaa90..22bd924 100644 --- a/MyTcpClient.h +++ b/MyTcpClient.h @@ -43,7 +43,9 @@ private: QByteArray m_buffer; // 存储当前正在接收的数据 bool m_waitingForHeader = true; // 是否在等待头部 - PackageHead m_currentHead; // 当前包的头部信息 + + uint8_t header[4]; + int packge_len ; }; #endif // MYTCPCLIENT_H diff --git a/connect.ui b/connect.ui index 92eecb9..c5bc7f9 100644 --- a/connect.ui +++ b/connect.ui @@ -46,7 +46,7 @@ - 192.168.0.100 + 192.168.0.101 diff --git a/data_config.h b/data_config.h index 152f5d2..c06d5c7 100644 --- a/data_config.h +++ b/data_config.h @@ -375,6 +375,7 @@ typedef struct { uint8_t subcard_id; // 子板编号,从1开始 uint8_t stage; // 0: 配置开始 1:配置结束 } UploadConfigProgress; + // kDownloadConfigFile typedef struct { uint8_t head[3]; // 固定值:0xAA55AA @@ -436,6 +437,50 @@ typedef struct { uint8_t code; } BaudrateSetRsp; +//kConfigIPv4 +typedef struct { + uint8_t head[3]; // 固定值:0xAA55AA + uint8_t cmd; + uint8_t version; // 版本号,默认为1 + uint8_t ethn; // 0: eth0, 1: eth1 + char ip[16]; + char netmask[16]; + char gw[16]; +} ConfigIPv4Req; + +typedef struct { + uint8_t head[3]; // 固定值:0xAA55AA + uint8_t cmd; + uint8_t version; // 版本号,默认为1 + uint8_t code; +} ConfigIPv4Rsp; + +//ConfigMacReq +typedef struct { + uint8_t head[3]; // 固定值:0xAA55AA + uint8_t cmd; + uint8_t version; // 版本号,默认为1 + uint8_t ethn; // 0: eth0, 1: eth1 + char mac[18]; +} ConfigMacReq; + +typedef struct { + uint8_t head[3]; // 固定值:0xAA55AA + uint8_t cmd; + uint8_t version; // 版本号,默认为1 + uint8_t code; +} ConfigMacRsp; + +struct BaseHeader { + uint8_t head[3]; // 固定 0xAA 0x55 0xAA + uint8_t cmd; +}; + +struct LargeHeaderExtra { + uint8_t version; + uint8_t code; + int32_t len; +}; #pragma pack() diff --git a/ethconfig.cpp b/ethconfig.cpp index de517fd..9e756e0 100644 --- a/ethconfig.cpp +++ b/ethconfig.cpp @@ -24,17 +24,15 @@ EthConfig::~EthConfig() void EthConfig::on_pushButton_confirm_clicked() { - PackageHead header = { {0xAA, 0x55, 0xAA}, kRebootCard, sizeof(ConfigIPv4Req),0,{} }; - ConfigIPv4Req config_ip; + ConfigIPv4Req config_ip = { {0xAA, 0x55, 0xAA}, kRebootCard, 1,0,{},{},{} }; config_ip.ethn = ui->comboBox_eth->currentIndex(); memcpy(config_ip.ip,ui->lineEdit_IP->text().toStdString().c_str(),sizeof(config_ip.ip)); memcpy(config_ip.netmask,ui->lineEdit_netmask->text().toStdString().c_str(),sizeof(config_ip.netmask)); memcpy(config_ip.gw,ui->lineEdit_gw->text().toStdString().c_str(),sizeof(config_ip.gw)); char send_buf[100] ={0}; - memcpy(send_buf, (char*)&header, sizeof(PackageHead)); - memcpy(send_buf + sizeof(PackageHead), (char*)&config_ip, sizeof(ConfigIPv4Req)); + memcpy(send_buf, (char*)&config_ip, sizeof(ConfigIPv4Req)); - int length = sizeof(PackageHead) + sizeof(ConfigIPv4Req); + int length = sizeof(ConfigIPv4Req); qint64 bytesWritten = m_tcpClient->sendData(send_buf, length); m_tcpClient->waitForRead(); qDebug() << "bytesWritten: " << bytesWritten; diff --git a/macconfig.cpp b/macconfig.cpp index 39a1e87..d15a0f7 100644 --- a/macconfig.cpp +++ b/macconfig.cpp @@ -20,14 +20,12 @@ MacConfig::~MacConfig() void MacConfig::on_pushButton_confirm_clicked() { - PackageHead header = { {0xAA, 0x55, 0xAA}, kConfigMac, sizeof(ConfigMacReq),0,{} }; - ConfigMacReq config_mac; + ConfigMacReq config_mac = { {0xAA, 0x55, 0xAA}, kConfigMac, 1,0,{} }; memcpy(config_mac.mac,ui->lineEdit_mac->text().toStdString().c_str(),sizeof(config_mac.mac)); - char send_buf[20] ={0}; - memcpy(send_buf, (char*)&header, sizeof(PackageHead)); - memcpy(send_buf + sizeof(PackageHead), (char*)&config_mac, sizeof(ConfigMacReq)); + char send_buf[50] ={0}; + memcpy(send_buf, (char*)&config_mac, sizeof(ConfigMacReq)); - int length = sizeof(PackageHead) + sizeof(ConfigMacReq); + int length = sizeof(ConfigMacReq); qint64 bytesWritten = m_tcpClient->sendData(send_buf, length); m_tcpClient->waitForRead(); qDebug() << "bytesWritten: " << bytesWritten; diff --git a/mainwindow.cpp b/mainwindow.cpp index 20661cb..1fdd834 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -571,6 +571,7 @@ void MainWindow::on_pushButton_save_clicked() { return; QString file_name = filepath + "\\tsi_config_file.json"; ConfigMgr::Instance()->Save(file_name); + tsi_config_file = file_name; return; } @@ -660,26 +661,23 @@ void MainWindow::sendUpgradePackage(int slot) { qDebug() << "Byte" << var << ":" << static_cast(fileData[var]); } qDebug() << "fileSize" << fileSize ; - // 创建 PackageHead 结构体 - PackageHead header = { {0xAA, 0x55, 0xAA}, 3, fileSize, 0, {} }; // 计算文件的 CRC 校验和 qDebug() << "filheader.slot" << slot ; - UpgradeCardReq upgrade_car_req; + UpgradeCardReq upgrade_car_req = { {0xAA, 0x55, 0xAA}, kUpgradeCard, 1, fileSize, 0, 0, {} }; if (slot == 0) { upgrade_car_req.card_id = 0xFF; } else { upgrade_car_req.card_id = slot & 0xFF; } - header.crc = calculate_crc(upgrade_car_req.card_id, fileData); - header.len = fileSize + sizeof(UpgradeCardReq); - qDebug() << "filheader.crc" << header.crc << "card_id" << upgrade_car_req.card_id << "header len" << header.len; + upgrade_car_req.crc = calculate_crc(upgrade_car_req.card_id, fileData); + upgrade_car_req.len = fileSize + sizeof(UpgradeCardReq); + qDebug() << "filheader.crc" << upgrade_car_req.crc << "card_id" << upgrade_car_req.card_id << "header len" << upgrade_car_req.len; char *send_buf = NULL; - send_buf = (char *)malloc(sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1); - memset(send_buf, 0, sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1); - memcpy(send_buf, &header, sizeof(PackageHead)); - memcpy(send_buf + sizeof(PackageHead), &upgrade_car_req, sizeof(UpgradeCardReq)); - memcpy(send_buf + sizeof(PackageHead) + sizeof(UpgradeCardReq), fileData.data(), fileData.size()); - int length = sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size(); + send_buf = (char *)malloc(sizeof(UpgradeCardReq) + fileData.size() + 1); + memset(send_buf, 0, sizeof(UpgradeCardReq) + fileData.size() + 1); + memcpy(send_buf, &upgrade_car_req, sizeof(UpgradeCardReq)); + memcpy(send_buf + sizeof(UpgradeCardReq), fileData.data(), fileData.size()); + int length = sizeof(UpgradeCardReq) + fileData.size(); const int MAX_CHUNK_SIZE = 50 * 1024; // 64 KB qint64 bytesSent = 0; qint64 totalBytes = length; @@ -713,18 +711,16 @@ void MainWindow::sendUpgradePackage(int slot) { void MainWindow::getVersion(int slot) { slot_no = slot; - PackageHead header = { {0xAA, 0x55, 0xAA}, kGetVersionInfo, 1, 0, {} }; qDebug() << "slot" << slot ; - GetVersionReq get_version_req; + GetVersionReq get_version_req = { {0xAA, 0x55, 0xAA}, kGetVersionInfo, 1, 0 }; if (slot == 0) { get_version_req.card_id = 0xFF; } else { get_version_req.card_id = slot & 0xFF; } char send_buf[20] = {0}; - memcpy(send_buf, (char *)&header, sizeof(PackageHead)); - memcpy(send_buf + sizeof(PackageHead), (char *)&get_version_req, sizeof(GetVersionReq)); - int length = sizeof(PackageHead) + sizeof(GetVersionReq); + memcpy(send_buf, (char *)&get_version_req, sizeof(GetVersionReq)); + int length = sizeof(GetVersionReq); qint64 bytesWritten = m_tcpClient->sendData(send_buf, length); m_tcpClient->waitForRead(); qDebug() << "bytesWritten: " << bytesWritten; @@ -732,43 +728,39 @@ void MainWindow::getVersion(int slot) { void MainWindow::readData(const QByteArray &data) { qDebug() << "Received from server:" << data; - PackageHead header; - memcpy(&header, data.data(), sizeof(PackageHead)); - if (header.cmd == kGetVersionInfo) { + + uint8_t cmd = data[3]; + if (cmd == kGetVersionInfo) { VersionRsp version_rsp; - memcpy(&version_rsp, data.data() + sizeof(PackageHead), sizeof(VersionRsp)); - QString strVerion = QString("第 %1 板卡\nFPGA 版本:%2\n软件版本:%3\nFPGA版本日期:%4").arg(slot_no).arg(version_rsp.fpga).arg(version_rsp.sw).arg(version_rsp.fpga_data); + memcpy(&version_rsp, data.data(), sizeof(VersionRsp)); + QString strVerion = QString("第 %1 板卡\nFPGA 版本:%2\n软件版本:%3\nFPGA版本日期:%4").arg(slot_no).arg(version_rsp.fpga).arg(version_rsp.sw).arg(version_rsp.fpga_date); QMessageBox::information(this, QStringLiteral("提示"), strVerion); - } else if (header.cmd == kUpgradeCard) { + } else if (cmd == kUpgradeCard) { UpgradeRsp resp; - QByteArray byteArray = data.mid(sizeof(PackageHead)); - QDataStream stream(&byteArray, QIODevice::ReadOnly); - stream >> resp.code ; - // if(resp.code == 1){ - // QMessageBox::information(this, QStringLiteral("提示"), "上传成功!"); - // } - } else if (header.cmd == kUpgradeProgress) { - QByteArray byteArray = data.mid(sizeof(PackageHead)); + memcpy(&resp, data.data(), sizeof(UpgradeRsp)); + } else if (cmd == kUpgradeProgress) { UpgradeRsp upgrade_resp; - QDataStream stream(&byteArray, QIODevice::ReadOnly); - stream >> upgrade_resp.code ; + memcpy(&upgrade_resp, data.data(), sizeof(UpgradeRsp)); progressBar->setValue(upgrade_resp.code); if (upgrade_resp.code == 100) { progressBar->setVisible(false); statusBar()->showMessage("升级完成!", 3000); // 显示3秒 } //qDebug() << "Server response: " << upgrade_resp.code; - } else if(header.cmd == kDownloadConfigFile){ + } else if(cmd == kDownloadConfigFile){ //qDebug() << "header.len" << header.len; char *config_file = NULL; - config_file = (char*)malloc(header.len + 1); - memset(config_file,0,header.len + 1); - memcpy(config_file, data.data() + sizeof(PackageHead), header.len); + int len = data[4]; + DownloadConfigRsp download_config; + memcpy(&download_config,data,sizeof(DownloadConfigRsp)); + config_file = (char*)malloc(download_config.len + 1); + memset(config_file,0,download_config.len + 1); + memcpy(config_file, data.data() + sizeof(DownloadConfigRsp), download_config.len); QString filename_ = QCoreApplication::applicationDirPath() + "\\config\\tsi_config_file_download.json"; //qDebug() << config_file ; QFile file(filename_); file.open(QIODevice::WriteOnly); - file.write(config_file,header.len); + file.write(config_file,download_config.len); file.close(); if(config_file != NULL) free(config_file); @@ -777,11 +769,9 @@ void MainWindow::readData(const QByteArray &data) { void MainWindow::on_pushButton_download_clicked() { - PackageHead header = { {0xAA, 0x55, 0xAA}, kDownloadConfigFile, 1, 0, {} }; - char send_buf[20] = {0}; - memcpy(send_buf, (char *)&header, sizeof(PackageHead)); - int length = sizeof(PackageHead); - qint64 bytesWritten = m_tcpClient->sendData(send_buf, length); + DownloadConfigReq download_config_req = { {0xAA, 0x55, 0xAA}, kDownloadConfigFile, 1 }; + int length = sizeof(download_config_req); + qint64 bytesWritten = m_tcpClient->sendData((char*)&download_config_req, length); m_tcpClient->waitForRead(); qDebug() << "bytesWritten: " << bytesWritten; } @@ -834,16 +824,16 @@ void MainWindow::on_pushButton_upload_clicked() } qDebug() << "fileSize" << fileSize ; // 创建 PackageHead 结构体 - PackageHead header = { {0xAA, 0x55, 0xAA}, kUploadConfigFile, fileSize, 0, {} }; + UploadConfigReq upload_config_req = { {0xAA, 0x55, 0xAA}, kUploadConfigFile,1, fileSize, 0, 0, {} }; // 计算文件的 CRC 校验和 - header.crc = calculate_crc(0, fileData); - header.len = fileSize; + upload_config_req.crc = calculate_crc(0, fileData); + upload_config_req.len = fileSize; char *send_buf = NULL; - send_buf = (char *)malloc(sizeof(PackageHead) + fileData.size() + 1); - memset(send_buf, 0, sizeof(PackageHead) + fileData.size() + 1); - memcpy(send_buf, &header, sizeof(PackageHead)); - memcpy(send_buf + sizeof(PackageHead), fileData.data(), fileData.size()); - int length = sizeof(PackageHead) + fileData.size(); + send_buf = (char *)malloc(sizeof(UploadConfigReq) + fileData.size() + 1); + memset(send_buf, 0, sizeof(UploadConfigReq) + fileData.size() + 1); + memcpy(send_buf, &upload_config_req, sizeof(UploadConfigReq)); + memcpy(send_buf + sizeof(UploadConfigReq), fileData.data(), fileData.size()); + int length = sizeof(UploadConfigReq) + fileData.size(); const int MAX_CHUNK_SIZE = 50 * 1024; // 50 KB qint64 bytesSent = 0; qint64 totalBytes = length; diff --git a/mainwindow.ui b/mainwindow.ui index 1623da2..edf8589 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -125,7 +125,7 @@ - 190 + 260 20 45 45 @@ -147,6 +147,31 @@ 下载 + + + + 200 + 20 + 45 + 45 + + + + + 45 + 45 + + + + + 45 + 45 + + + + 上传和配置 + + diff --git a/relaysetting.cpp b/relaysetting.cpp index b66ed49..4a360f8 100644 --- a/relaysetting.cpp +++ b/relaysetting.cpp @@ -14,11 +14,8 @@ RelaySetting::RelaySetting(QWidget *parent) ui->setupUi(this); ui->widget_body->setProperty("flag", "body"); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - 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)); - } + for (int var = 0; var < SLOT_NUM; ++var) { + ui->comboBox_slot->addItem(QString::number(var + 1)); } connect(ui->buttonGroup_OK, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); @@ -60,8 +57,31 @@ RelaySetting::RelaySetting(QWidget *parent) this, &RelaySetting::onRadioButtonClicked); connect(ui->buttonGroup_STATUS, QOverload::of(&QButtonGroup::buttonClicked), this, &RelaySetting::onRadioButtonClicked); -} + m_tcpClient = MyTcpClient::instance(); + connect(m_tcpClient, SIGNAL(dataReceived(const QByteArray &)), this, SLOT(readData(const QByteArray &))); +} +void RelaySetting::readData(const QByteArray &data) { + qDebug() << "Received from server:" << data; + + 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("工作"); + } + } +} RelaySetting::~RelaySetting() { delete ui; } @@ -111,10 +131,9 @@ void RelaySetting::onRadioButtonClicked(QAbstractButton *button) { qDebug() << "Connection failed!"; return; } - PackageHead header = { {0xAA, 0x55, 0xAA}, kRelaySetting, sizeof(RelaySettingReq), 0, {} }; + RelaySettingReq relay_setting_req = { {0xAA, 0x55, 0xAA}, kRelaySetting,1, 0, 0, 0 }; int slot = ui->comboBox_slot->currentText().toInt(); qDebug() << "slot" << slot ; - RelaySettingReq relay_setting_req; if (slot == 0) { relay_setting_req.card_id = 0xFF; } else { @@ -156,60 +175,30 @@ void RelaySetting::onRadioButtonClicked(QAbstractButton *button) { } 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); + 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(); 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 ; - memcpy(&relay_setting_rsp, response.data() + sizeof(PackageHead), sizeof(RelaySettingRsp)); - qDebug() << "relay_setting_rsp code" << relay_setting_rsp.code ; - } + } 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 ; - RelayStatusReq relay_status_req; + RelayStatusReq relay_status_req { {0xAA, 0x55, 0xAA}, kRelayStatus, 1, 0 }; 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); + 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(); 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 ; - memcpy(&relay_status_rsp, response.data() + sizeof(PackageHead), 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("工作"); - } - } + } diff --git a/relaysetting.h b/relaysetting.h index d4730a2..b5951fb 100644 --- a/relaysetting.h +++ b/relaysetting.h @@ -3,6 +3,7 @@ #include #include "data_config.h" +#include "MyTcpClient.h" namespace Ui { class RelaySetting; @@ -20,10 +21,11 @@ private slots: void onRadioButtonClicked(QAbstractButton *button); void on_pushButton_status_clicked(); - + void readData(const QByteArray&); private: Ui::RelaySetting *ui; QMap map_slot_config; + MyTcpClient* m_tcpClient; void readJsonFile(const QString &filePath); };