You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.3 KiB
C++
142 lines
3.3 KiB
C++
8 months ago
|
#include "gddcdlg.h"
|
||
|
#include "ui_gddcdlg.h"
|
||
|
#include <QDateTime>
|
||
|
#include <QNetworkInterface>
|
||
|
#include <QTabBar>
|
||
|
#include <QTabWidget>
|
||
|
|
||
|
GDDCdlg::GDDCdlg(QWidget *parent)
|
||
|
: QWidget(parent)
|
||
|
, ui(new Ui::GDDCdlg)
|
||
|
{
|
||
|
ui->setupUi(this);
|
||
|
|
||
|
|
||
|
initWindow();
|
||
|
initParam();
|
||
|
initUDPSocket();
|
||
|
|
||
|
/*启动定时器*/
|
||
|
GDDCControlTimer = new QTimer();
|
||
|
connect(GDDCControlTimer,&QTimer::timeout,this,[=](){
|
||
|
GDDCControlTimeOut();
|
||
|
});
|
||
|
GDDCControlTimer->start(100);
|
||
|
}
|
||
|
|
||
|
GDDCdlg::~GDDCdlg()
|
||
|
{
|
||
|
//关闭定时器
|
||
|
GDDCControlTimer->stop();
|
||
|
//关闭套接字,并丢弃写缓冲区中的所有待处理数据。
|
||
|
udpSocket->abort();
|
||
|
delete ui;
|
||
|
}
|
||
|
|
||
|
//初始化window
|
||
|
void GDDCdlg::initWindow()
|
||
|
{
|
||
|
QPalette palette;
|
||
|
//设置主窗口背景颜色
|
||
|
palette.setColor(QPalette::Window,QColor(20, 20, 20));
|
||
|
this->setPalette(palette);
|
||
|
//嵌入到主窗口
|
||
|
setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
|
||
|
hide();
|
||
|
|
||
|
}
|
||
|
|
||
|
//初始化参数
|
||
|
void GDDCdlg::initParam()
|
||
|
{
|
||
|
m_DCcmdBuffer.resize(cmdLength);
|
||
|
memset(TJDCCmdBuffer,0,10);
|
||
|
|
||
|
}
|
||
|
|
||
|
//初始化udp通信
|
||
|
void GDDCdlg::initUDPSocket()
|
||
|
{
|
||
|
//创建udp socket对象
|
||
|
udpSocket = new QUdpSocket(this);
|
||
|
RemoteIP = "172.10.1.183"; //目标IP
|
||
|
RemoteAddr.setAddress(RemoteIP);
|
||
|
RemotePort = 6002;//目标port
|
||
|
|
||
|
/*接收*/
|
||
|
//获取本机ip
|
||
|
QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
|
||
|
qDebug()<<"ip list:"<<ipAddressesList;
|
||
|
quint16 port = 6001;
|
||
|
udpSocket->bind(port);
|
||
|
|
||
|
}
|
||
|
|
||
|
//定时器处理
|
||
|
void GDDCdlg::GDDCControlTimeOut()
|
||
|
{
|
||
|
UpdateDataTJDC();
|
||
|
//qDebug()<<"Enter timeout processing function\n";
|
||
|
//发出数据包
|
||
|
udpSocket->writeDatagram(m_DCcmdBuffer,RemoteAddr,RemotePort);
|
||
|
|
||
|
}
|
||
|
|
||
|
//更新m_DCcmdBuffer
|
||
|
void GDDCdlg::UpdateDataTJDC()
|
||
|
{
|
||
|
/******************模拟发送天进吊舱控制指令************************/
|
||
|
m_DCcmdBuffer[0] = 0xfb;//帧头
|
||
|
m_DCcmdBuffer[1] = 0x2C;//帧头
|
||
|
m_DCcmdBuffer[2] = (char)TJDCCmdBuffer[0];
|
||
|
m_DCcmdBuffer[3] = (char)TJDCCmdBuffer[1];
|
||
|
m_DCcmdBuffer[4] = (char)TJDCCmdBuffer[2];
|
||
|
m_DCcmdBuffer[5] = (char)TJDCCmdBuffer[3];
|
||
|
m_DCcmdBuffer[6] = (char)TJDCCmdBuffer[4];
|
||
|
for(int i=7;i<37;++i)
|
||
|
{
|
||
|
m_DCcmdBuffer[i] = 0x00;
|
||
|
}
|
||
|
|
||
|
/*精确到毫秒级*/
|
||
|
QDateTime st = QDateTime::currentDateTime();//获取系统当前的时间
|
||
|
QString formattedDateTime = st.toString("yyyy-MM-dd hh:mm:ss");
|
||
|
|
||
|
m_DCcmdBuffer[37] = (char)TJDCCmdBuffer[5];
|
||
|
m_DCcmdBuffer[38] = (char)TJDCCmdBuffer[6];
|
||
|
m_DCcmdBuffer[39] = (char)TJDCCmdBuffer[7];
|
||
|
m_DCcmdBuffer[40] = (char)TJDCCmdBuffer[8];
|
||
|
m_DCcmdBuffer[41] = (char)TJDCCmdBuffer[9];
|
||
|
char S2 = (char)m_DCcmdBuffer[2];
|
||
|
char S3 = (char)m_DCcmdBuffer[3];
|
||
|
for(int i = 4;i<41;++i)
|
||
|
{
|
||
|
S3 = S3^S2;
|
||
|
S2 = m_DCcmdBuffer[i];
|
||
|
}
|
||
|
m_DCcmdBuffer[42] = S3;
|
||
|
m_DCcmdBuffer[43] = 0xF0;
|
||
|
|
||
|
// QString msg = "12312";//发送的消息内容
|
||
|
// QByteArray str;// = msg.toUtf8();
|
||
|
|
||
|
}
|
||
|
|
||
|
//赋值后清空TJDCCmdBuffer
|
||
|
void GDDCdlg::clearTJDCCmdBuffer()
|
||
|
{
|
||
|
memset(TJDCCmdBuffer,0,sizeof(TJDCCmdBuffer));
|
||
|
}
|
||
|
|
||
|
//拍一张照 按下
|
||
|
void GDDCdlg::on_pushButton_11_pressed()
|
||
|
{
|
||
|
TJDCCmdBuffer[0]=(std::byte)0x32;
|
||
|
}
|
||
|
//松开
|
||
|
void GDDCdlg::on_pushButton_11_released()
|
||
|
{
|
||
|
clearTJDCCmdBuffer();
|
||
|
}
|
||
|
|