#include "commandwidget.h" #include "ui_commandwidget.h" CommandWidget::CommandWidget(QWidget *parent) : QWidget(parent), ui(new Ui::CommandWidget) { ui->setupUi(this); m_commandUdpSocket = new QUdpSocket(this); // 将套接字绑定到指定端口 if (m_commandUdpSocket->bind(QHostAddress::Any, 1200)) { qDebug() << "UDP 套接字已绑定到端口 1200"; } else { qDebug() << "绑定 UDP 套接字失败"; } } CommandWidget::~CommandWidget() { delete ui; if (m_commandUdpSocket) m_commandUdpSocket->deleteLater(); } void CommandWidget::receiveMessageSlots(QString message, int type) { emit sendErrorMessage(message, type); } unsigned char CommandWidget::getCrc(quint8 *data, quint8 length) { quint16 crc = 0; int i = 0; while (length-- > 0) { crc = CRC8TAB[crc ^ (data[i] & 0x00FF)]; i++; } return crc & 0x00ff; } ProtocalKB CommandWidget::EncodeCommandCmd(quint8 cmd) { std::unique_ptr pBuff = std::make_unique(); pBuff->head[0] = PROTOCOL_HEAD_0; pBuff->head[1] = PROTOCOL_HEAD_1; pBuff->reserved = PROTOCOL_RESERVED; pBuff->data[0] = cmd; pBuff->data[1] = cmd; pBuff->data[2] = cmd; pBuff->curPage = PROTOCOL_CUR_PAGE; quint8 *ptr = reinterpret_cast(&pBuff); pBuff->CHKSUM = getCrc(ptr, sizeof(pBuff) - sizeof(pBuff->CHKSUM)); return *pBuff; } bool CommandWidget::writeBufferToClient(const QByteArray &data) { // 目标地址和端口 QHostAddress destination("172.10.1.216"); // 目标 IP 地址 quint16 port = 9003; // 目标端口 // 发送数据 qint64 bytesSent = m_commandUdpSocket->writeDatagram(data, destination, port); if (bytesSent == -1) { qDebug() << "发送失败:" << m_commandUdpSocket->errorString(); return false; } else { qDebug() << "发送成功,字节数:" << bytesSent; return true; } } void CommandWidget::buttonResponse(quint8 cmd) { ProtocalKB packet = EncodeCommandCmd(cmd); // 将 ProtocalKB 结构体转换为 QByteArray QByteArray data; data.append(reinterpret_cast(&packet), sizeof(ProtocalKB)); for (int i = 0; i < 3; i++) { writeBufferToClient(data); } } void CommandWidget::on_pushButton_clicked() { buttonResponse(0x75); } void CommandWidget::on_pushButton_2_clicked() { buttonResponse(0x76); } void CommandWidget::on_pushButton_5_clicked() { buttonResponse(0x7D); } void CommandWidget::on_pushButton_6_clicked() { buttonResponse(0x7C); } void CommandWidget::on_pushButton_10_clicked() { buttonResponse(0x69); } void CommandWidget::on_pushButton_9_clicked() { buttonResponse(0x6A); } void CommandWidget::on_pushButton_4_clicked() { buttonResponse(0x77); } void CommandWidget::on_pushButton_3_clicked() { buttonResponse(0x78); } void CommandWidget::on_pushButton_14_clicked() { buttonResponse(0x79); } void CommandWidget::on_pushButton_13_clicked() { buttonResponse(0xC6); } void CommandWidget::on_pushButton_17_clicked() { buttonResponse(0x66); } void CommandWidget::on_pushButton_8_clicked() { buttonResponse(0x67); } void CommandWidget::on_pushButton_7_clicked() { buttonResponse(0x68); } void CommandWidget::on_pushButton_12_clicked() { buttonResponse(0x7B); } void CommandWidget::on_pushButton_11_clicked() { buttonResponse(0x7A); } void CommandWidget::on_pushButton_16_clicked() { buttonResponse(0xC8); } void CommandWidget::on_pushButton_15_clicked() { buttonResponse(0xC9); }