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.
PayloadAPP/Src/GDDC/gddcdlg.cpp

1105 lines
33 KiB
C++

#include "gddcdlg.h"
#include "ui_gddcdlg.h"
#include <QDateTime>
#include <QNetworkInterface>
#include <QTabBar>
#include <QTabWidget>
#include <windows.h>
#include <QDir>
#define CONFIG_PATH "config.ini"
GDDCdlg::GDDCdlg(QWidget *parent)
: QWidget(parent)
, ui(new Ui::GDDCdlg)
{
ui->setupUi(this);
initWindow();
initParam();
initSignalSlot();
}
GDDCdlg::~GDDCdlg()
{
//停止所有通信
stopConnectURL1();
stopConnectURL2();
stopConnectSerialCtrl();
stopConnectUDPCtrl();
stopConnectTCPCtrl();
delete m_DlgGDDCSet;
delete m_GDDCCmdDlg;
delete m_tableModel;
delete ui;
}
//初始化window
void GDDCdlg::initWindow()
{
QPalette palette;
//设置主窗口背景颜色
8 months ago
palette.setColor(QPalette::Window,QColor(50, 50, 50));
this->setPalette(palette);
//嵌入到主窗口
//int m_height=this->size().rheight();
//int m_width = (m_height*16)/9;
//ui->WgtffmpegVideo->resize(m_width,m_height);
// ui->WgtffmpegVideo->move();
setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
hide();
m_DlgGDDCSet = new GDDCSet();
m_GDDCCmdDlg = new GDDCCmdDlg(this);
}
//初始化参数
void GDDCdlg::initParam()
{
m_DCcmdBuffer.resize(cmdLength);
detectionAreaSetting = false;
connectFlag.resize(10,false);
ui->pushButShowCmdArea->setIcon(QIcon(":/res/down.png"));
m_tableModel = new QStandardItemModel();
m_tableModel->setHorizontalHeaderItem(0,new QStandardItem("类型"));
m_tableModel->setHorizontalHeaderItem(1,new QStandardItem("详细信息"));
// m_tableModel->setVerticalHeaderItem(0,new QStandardItem("序号"));
ui->tableViewShowIState->setModel(m_tableModel);
//栅格显示或隐藏
ui->tableViewShowIState->setShowGrid(true);
// 固定表格宽度不可扩展,不可手动调整宽度
ui->tableViewShowIState->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
// 表格宽度随内容自动扩展
//ui->tableViewShowIState->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// 表格宽度自动根据UI进行计算不可手动调整宽度
//ui->tableViewShowIState->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 固定表格高度不可扩展,不可手动调整高度
ui->tableViewShowIState->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
// 表格高度随内容自动扩展
//ui->tableViewShowIState->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// 表格高度自动根据UI进行计算不可手动调整高度
//ui->tableViewShowIState->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->tableViewShowIState->setColumnWidth(0,100);
ui->tableViewShowIState->setColumnWidth(1,100);
m_tableModel->setItem(0,0,new QStandardItem("跟踪源类型"));
m_tableModel->setItem(1,0,new QStandardItem("姿态方位角"));
m_tableModel->setItem(2,0,new QStandardItem("姿态俯仰角"));
m_tableModel->setItem(3,0,new QStandardItem("姿态横滚角"));
m_tableModel->setItem(4,0,new QStandardItem("中心点宽坐标"));
m_tableModel->setItem(5,0,new QStandardItem("中心点高坐标"));
m_tableModel->setItem(6,0,new QStandardItem("可见光焦距"));
m_tableModel->setItem(7,0,new QStandardItem("可见光视场角"));
m_tableModel->setItem(8,0,new QStandardItem("红外焦距"));
m_tableModel->setItem(9,0,new QStandardItem("红外视场角"));
m_tableModel->setItem(10,0,new QStandardItem("激光测距值"));
m_tableModel->setItem(11,0,new QStandardItem("命令反馈"));
m_tableModel->setItem(12,0,new QStandardItem("视频输出类型"));
m_tableModel->setItem(13,0,new QStandardItem("红外电子变倍"));
m_tableModel->setItem(14,0,new QStandardItem("可见光电子放大"));
m_tableModel->setItem(15,0,new QStandardItem("吊舱框架方位角"));
m_tableModel->setItem(16,0,new QStandardItem("吊舱框架俯仰角"));
m_tableModel->setItem(17,0,new QStandardItem("吊舱框架横滚角"));
m_tableModel->setItem(18,0,new QStandardItem("TF剩余百分比"));
m_tableModel->setItem(19,0,new QStandardItem("TF卡总容量"));
m_tableModel->setItem(20,0,new QStandardItem("TF插卡状态"));
m_tableModel->setItem(21,0,new QStandardItem("拍照"));
m_tableModel->setItem(22,0,new QStandardItem("视频抓图"));
m_tableModel->setItem(23,0,new QStandardItem("连拍"));
m_tableModel->setItem(24,0,new QStandardItem("视频连续抓图"));
m_tableModel->setItem(25,0,new QStandardItem("录像状态"));
m_tableModel->setItem(26,0,new QStandardItem("文件命名"));
m_tableModel->setItem(27,0,new QStandardItem("当前图像反馈"));
m_tableModel->setItem(28,0,new QStandardItem("载荷类型"));
m_tableModel->setItem(29,0,new QStandardItem("红外机芯"));
m_tableModel->setItem(30,0,new QStandardItem("可见光机芯"));
m_tableModel->setItem(31,0,new QStandardItem("陀螺仪"));
m_tableModel->setItem(32,0,new QStandardItem("角度传感器"));
m_tableModel->setItem(33,0,new QStandardItem("电机"));
m_tableModel->setItem(34,0,new QStandardItem("压缩"));
m_tableModel->setItem(35,0,new QStandardItem("综合控制"));
m_tableModel->setItem(36,0,new QStandardItem("吊舱准备状态"));
m_tableModel->setItem(37,0,new QStandardItem("红外伪彩"));
m_tableModel->setItem(38,0,new QStandardItem("红外图像增强"));
m_tableModel->setItem(39,0,new QStandardItem("当前载荷版本"));
m_tableModel->setItem(40,0,new QStandardItem("目标定位经度"));
m_tableModel->setItem(41,0,new QStandardItem("目标定位纬度"));
m_tableModel->setItem(42,0,new QStandardItem("目标海拔高度"));
m_tableModel->setItem(43,0,new QStandardItem("姿态指示完成反馈"));
m_tableModel->setItem(44,0,new QStandardItem("目标宽"));
m_tableModel->setItem(45,0,new QStandardItem("目标高"));
m_tableModel->setItem(46,0,new QStandardItem("目标类型"));
m_tableModel->setItem(47,0,new QStandardItem("跟踪状态"));
m_tableModel->setItem(48,0,new QStandardItem("最高温"));
m_tableModel->setItem(49,0,new QStandardItem("配置保存"));
m_tableModel->setItem(50,0,new QStandardItem("伺服状态"));
m_tableModel->setItem(51,0,new QStandardItem("超温报警"));
m_tableModel->setItem(52,0,new QStandardItem("红点指示"));
//ui->tableViewShowIState->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(255,228,225);color: black;}");
}
//初始化信号与槽
void GDDCdlg::initSignalSlot()
{
connect(m_DlgGDDCSet,SIGNAL(SignalStartConnect(int)),this,SLOT(startConnect(int)));
connect(m_DlgGDDCSet,SIGNAL(SignalStopConnect(int)),this,SLOT(stopConnect(int)));
}
//槽函数开始连接
void GDDCdlg::startConnect(int type)
{
switch(type)
{
case 1://播放视频1
stopConnectURL2();
startConnectURL1();
break;
case 2://播放视频2
stopConnectURL1();
startConnectURL2();
break;
case 3://串口控制
startConnectSerialCtrl();
break;
case 4://UDP控制
stopConnectTCPCtrl();
startConnectUDPCtrl();
break;
case 5://TCP控制
stopConnectUDPCtrl();
startConnectTCPCtrl();
break;
default:
break;
}
}
//槽函数停止连接
void GDDCdlg::stopConnect(int type)
{
switch(type)
{
case 1:
stopConnectURL1();
break;
case 2:
stopConnectURL2();
break;
case 3:
stopConnectSerialCtrl();
break;
case 4:
stopConnectUDPCtrl();
break;
case 5:
stopConnectTCPCtrl();
break;
default :
break;
}
}
// bool GDDCdlg::eventFilter(QObject *watched, QEvent *event)
// {
// qDebug() << this->geometry().x();
// qDebug() << this->geometry().y();
// QPoint sPoint2=QCursor::pos();
// qDebug()<<"相对于屏幕坐标2:"<<"("<<sPoint2.rx()<<","<<sPoint2.ry()<<")";
// QPoint windowPoint=this->mapFromGlobal(sPoint2);
// qDebug()<<"相对于窗口坐标:"<<"("<<windowPoint.rx()<<","<<windowPoint.ry()<<")";
// return true;
// }
//鼠标左键
void GDDCdlg::mousePressEvent(QMouseEvent *event)
{
//如果鼠标左键按下
if (event->type() == QEvent::MouseButtonPress) {
//AI检测区域设置
if(m_GDDCCmdDlg->detectionAreaSetting==true)
{
QPointF sPoint1 = event->globalPosition();
sPoint1 = QCursor::pos();
QPointF widgetPoint = ui->WgtffmpegVideo->mapFromGlobal(sPoint1);
double a = ui->WgtffmpegVideo->width();
double b = ui->WgtffmpegVideo->height();
double dir = 1920/a*widgetPoint.rx()-960;
double pitch = -(1080/b*widgetPoint.ry()-540);
m_GDDCCmdDlg->ui->lineEdit_6_1->setText(QString::number((int)dir));
m_GDDCCmdDlg->ui->lineEdit_6_2->setText(QString::number((int)pitch));
}
//目标跟踪
if(m_GDDCCmdDlg->pointSelectionTracking == true)
{
QPointF sPoint1 = event->globalPosition();
QPointF widgetPoint = ui->WgtffmpegVideo->mapFromGlobal(sPoint1);
double a = ui->WgtffmpegVideo->width();
double b = ui->WgtffmpegVideo->height();
double dir = 1920/a*widgetPoint.rx()-960;
double pitch = -(1080/b*widgetPoint.ry()-540);
std::byte buffer[10];
buffer[0] = (std::byte)0x3A;
buffer[1] = (std::byte)(dir);
buffer[2] = (std::byte)((int)dir>>8);
buffer[3] = (std::byte)pitch;
buffer[4] = (std::byte)((int)pitch>>8);
buffer[5] = (std::byte)0x00;
buffer[6] = (std::byte)0x00;
buffer[7] = (std::byte)0x00;
buffer[8] = (std::byte)0x00;
buffer[9] = (std::byte)0x00;
//发送5次
sendCurDate(buffer,3);
}
}
}
//鼠标移动
void GDDCdlg::mouseMoveEvent(QMouseEvent *event)
{
if(m_GDDCCmdDlg->detectionAreaSetting==true)
{
qDebug() << this->geometry().x();
qDebug() << this->geometry().y();
QPointF sPoint1=event->globalPosition();
//qDebug()<<"相对于屏幕坐标1:"<<"("<<sPoint1.rx()<<","<<sPoint1.ry()<<")";
QPointF sPoint2=QCursor::pos();
//qDebug()<<"相对于屏幕坐标2:"<<"("<<sPoint2.rx()<<","<<sPoint2.ry()<<")";
QPointF windowPoint=this->mapFromGlobal(sPoint2);
//qDebug()<<"相对于窗口坐标:"<<"("<<windowPoint.rx()<<","<<windowPoint.ry()<<")";
QPointF widgetPoint=ui->WgtffmpegVideo->mapFromGlobal(sPoint1);
//qDebug()<<"相对于控件坐标:"<<"("<<widgetPoint.rx()<<","<<widgetPoint.ry()<<")";
//更新LineEdit信息
double a = ui->WgtffmpegVideo->width();
double b = ui->WgtffmpegVideo->height();
double dir = 1920/a*widgetPoint.rx()-960;
double pitch = -(1080/b*widgetPoint.ry()-540);
m_GDDCCmdDlg->ui->lineEdit_6_1->setText(QString::number((int)dir));
m_GDDCCmdDlg->ui->lineEdit_6_2->setText(QString::number((int)pitch));
}
}
//区域重绘
void GDDCdlg::resizeEvent(QResizeEvent *event)
{
resizeUI(); //重新设置布局
}
//重新设置布局
void GDDCdlg::resizeUI()
{
/* -------------->x
* | (0,0)
* |
* |
* |
* |
* y
*/
double GDDCPageHeight = (double)(this->height());
double GDDCPageWidth = (double)(this->width());
//qDebug()<<"宽度,高度:"<<GDDCPageHeight<<GDDCPageWidth;
/******控制区位置和大小设置*****/
double cmdAreaHeight;
double cmdAreaWidth = GDDCPageWidth-250;
// if(ui->tabWidget->isVisible()){cmdAreaHeight = 250;}
// else{cmdAreaHeight = 0;}
// ui->tabWidget->setGeometry(0,GDDCPageHeight-cmdAreaHeight,(int)cmdAreaWidth,(int)cmdAreaHeight);
if(m_GDDCCmdDlg->isVisible()){
cmdAreaHeight = 250;
}
else{cmdAreaHeight = 0;}
m_GDDCCmdDlg->setGeometry(0,GDDCPageHeight-cmdAreaHeight,(int)cmdAreaWidth,(int)cmdAreaHeight);
/*********状态区位置和大小设置***********/
double stateAreaHeight = GDDCPageHeight;
double stateAreaWidth;
if(ui->tableViewShowIState->isVisible()){stateAreaWidth = 250;}
else{stateAreaWidth = 0;}
ui->tableViewShowIState->setGeometry(GDDCPageWidth-stateAreaWidth,0,stateAreaWidth,stateAreaHeight);
//ui->listViewShowCmdArea->lower();
/*******视频区位置和大小设置********/
double VideoAreaHeight = GDDCPageHeight-cmdAreaHeight; //视频区高度
double VideoAreaWidth = GDDCPageWidth-stateAreaWidth; //视频区宽度
//高度值相对比较大
if(VideoAreaHeight*16>VideoAreaWidth*9)
{
double setVideoAreaWidth = VideoAreaWidth;//等于吊舱页面宽度-状态区高度
double setVideoAreaHeight = VideoAreaWidth*9/16;
ui->WgtffmpegVideo->setGeometry(0,0.5*(VideoAreaHeight-setVideoAreaHeight),(int)setVideoAreaWidth,(int)setVideoAreaHeight);
}
//宽度值相对比较大
else
{
double setVideoAreaHeight = VideoAreaHeight;//等于吊舱页面高度-控制区高度
double setVideoAreaWidth = VideoAreaHeight*16/9;
ui->WgtffmpegVideo->setGeometry(0.5*(VideoAreaWidth-setVideoAreaWidth),0,(int)setVideoAreaWidth,(int)setVideoAreaHeight);
}
/**************设置按钮****************/
ui->pushButtonSet->setGeometry(GDDCPageWidth-stateAreaWidth-45,0,40,40);
/**********控制指令区显示隐藏按钮********/
ui->pushButShowCmdArea->setGeometry((GDDCPageWidth-200)*0.5,GDDCPageHeight-cmdAreaHeight-20,40,20);
ui->pushButShowCmdArea->raise();
}
//定时器处理
void GDDCdlg::GDDCControlTimeOut()
{
if(sendTimes>0)
{
sendTimes-=1;
//UDP控制
if(connectFlag[3])
{
udpSocket->writeDatagram(m_DCcmdBuffer,m_DlgGDDCSet->m_myPairNetwork.getRemoteAddr(),m_DlgGDDCSet->m_myPairNetwork.getRemotePort());
}
//TCP控制
//串口控制
if(sendTimes==0)
{
clearTJDCCmdBuffer();
}
}
else
{
UpdateDataTJDC();
//UDP控制
if(connectFlag[3])
{
udpSocket->writeDatagram(m_DCcmdBuffer,m_DlgGDDCSet->m_myPairNetwork.getRemoteAddr(),m_DlgGDDCSet->m_myPairNetwork.getRemotePort());
}
//TCP控制
//串口控制
}
}
//更新m_DCcmdBuffer
void GDDCdlg::UpdateDataTJDC()
{
m_GDDCCmdDlg->UpdateDataTJDC();
m_DCcmdBuffer = m_GDDCCmdDlg->m_DCcmdBuffer;
}
//赋值后清空TJDCCmdBuffer
void GDDCdlg::clearTJDCCmdBuffer()
{
m_GDDCCmdDlg->clearTJDCCmdBuffer();
}
//设置发送数据和次数
void GDDCdlg::sendCurDate(std::byte *buffer, int num)
{
sendTimes = num;
for(int i=0;i<10;++i)
{
m_GDDCCmdDlg->TJDCCmdBuffer[i] = buffer[i];
}
UpdateDataTJDC();
}
//播放视频1
void GDDCdlg::startConnectURL1()
{
if(!connectFlag[0])
{
connectFlag[0] = true ;
//ui->WgtffmpegVideo->Isplay(Is_openVideo);
ui->WgtffmpegVideo->play();
ui->WgtffmpegVideo->setUrl(m_DlgGDDCSet->m_playURL1);
ui->WgtffmpegVideo->m_PlayStatus =Is_openVideo;
}
}
//关闭视频1
void GDDCdlg::stopConnectURL1()
{
if(connectFlag[0])
{
connectFlag[0] = false ;
ui->WgtffmpegVideo->m_PlayStatus = Is_openVideo;
ui->WgtffmpegVideo->stop();
}
}
//播放视频2
void GDDCdlg::startConnectURL2()
{
if(!connectFlag[1])
{
connectFlag[1] = true ;
}
}
//关闭视频2
void GDDCdlg::stopConnectURL2()
{
if(connectFlag[1])
{
connectFlag[1] = false ;
}
}
void GDDCdlg::startConnectSerialCtrl()
{
if(!connectFlag[2])
{
connectFlag[2] = true ;
}
}
void GDDCdlg::stopConnectSerialCtrl()
{
if(connectFlag[2])
{
connectFlag[2] = false ;
}
}
//开始UDP控制通信
void GDDCdlg::startConnectUDPCtrl()
{
if(!connectFlag[3])
{
/*启动定时器*/
GDDCControlTimer = new QTimer();
GDDCControlTimer->setInterval(100);
connect(GDDCControlTimer,&QTimer::timeout,this,[=](){
GDDCControlTimeOut();
});
GDDCControlTimer->start();
//创建udp socket对象
udpSocket = new QUdpSocket(this);
/*接收*/
//QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();//获取本机ip
udpSocket->bind(m_DlgGDDCSet->m_myPairNetwork.getLocalPort());
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(UDPMessageReceive()));
connectFlag[3] = true;
}
}
//停止UDP控制通信
void GDDCdlg::stopConnectUDPCtrl()
{
if(connectFlag[3])
{
//关闭定时器
GDDCControlTimer->stop();
delete GDDCControlTimer;
udpSocket->abort();//关闭套接字,并丢缓冲区中的所有待处理数据
delete udpSocket;
connectFlag[3] = false;
}
}
//开始TCP控制通信
void GDDCdlg::startConnectTCPCtrl()
{
if(!connectFlag[4])
{
connectFlag[4] = true;
}
}
//停止TCP控制通信
void GDDCdlg::stopConnectTCPCtrl()
{
if(connectFlag[4])
{
connectFlag[4] = false;
}
}
//设置页面弹出
void GDDCdlg::on_pushButtonSet_clicked()
{
m_DlgGDDCSet->show();
m_DlgGDDCSet->activateWindow();
}
//udp数据接收
void GDDCdlg::UDPMessageReceive()
{
QByteArray data;
data.resize(udpSocket->pendingDatagramSize());
QHostAddress addr;
quint16 port;
udpSocket->readDatagram(data.data(),data.size(),&addr,&port);
//const char* chardata= data.constData();
qDebug()<<data.data();
if(checkdata(data,data.size(),1))
{
QString str;
double dou;
float flo;
//载荷类型
switch(data.at(2))
{
case '\x01':
str = "白光";
break;
case '\x02':
str = "红外";
break;
case '\x03':
str = "双光";
break;
case '\x04':
str = "三光";
break;
case '\x05':
str = "四光";
break;
default:
str = "未知";
break;
}
m_tableModel->setItem(28,1,new QStandardItem(str));
/*****自检结果*****/
//红外机芯
if((data.at(3)&'\x01')==0x01){
str = "正常";
}
else{
str = "异常";
}
m_tableModel->setItem(29,1,new QStandardItem(str));
//可见光机芯
if((data.at(3)>>1)&'\x01'){
str = "正常";
}
else{
str = "异常";
}
m_tableModel->setItem(30,1,new QStandardItem(str));
//陀螺仪
if((data.at(3)>>2)&'\x01'){
str = "正常";
}
else{
str = "异常";
}
m_tableModel->setItem(31,1,new QStandardItem(str));
//角度传感器
if((data.at(3)>>3)&'\x01'){
str = "正常";
}
else{
str = "异常";
}
m_tableModel->setItem(32,1,new QStandardItem(str));
//驱动板-电机
if((data.at(3)>>4)&'\x01'){
str = "正常";
}
else{
str = "异常";
}
m_tableModel->setItem(33,1,new QStandardItem(str));
//压缩存储
if((data.at(3)>>5)&'\x01'){
str = "正常";
}
else{
str = "异常";
}
m_tableModel->setItem(34,1,new QStandardItem(str));
//综合处理
if((data.at(3)>>6)&'\x01'){
str = "正常";
}
else{
str = "异常";
}
m_tableModel->setItem(35,1,new QStandardItem(str));
//吊舱准备状态
if((data.at(3)>>7)&'\x01'){
str = "已准备好";
}
else{
str = "未准备好";
}
m_tableModel->setItem(36,1,new QStandardItem(str));
/*****吊舱状态1******/
//拍照
if(data.at(4)&'\x01'){
str = "正在拍照";
}
else{
str = "未拍照";
}
m_tableModel->setItem(21,1,new QStandardItem(str));
//视频抓图
if((data.at(4)>>1)&'\x01'){
str = "正在抓图";
}
else{
str = "未抓图";
}
m_tableModel->setItem(22,1,new QStandardItem(str));
//连拍
if((data.at(4)>>2)&'\x01'){
str = "正在连拍";
}
else{
str = "未连拍";
}
m_tableModel->setItem(23,1,new QStandardItem(str));
//视频连续抓图
if((data.at(4)>>3)&'\x01'){
str = "正在连续抓图";
}
else{
str = "未连续抓图";
}
m_tableModel->setItem(24,1,new QStandardItem(str));
//录像状态
if((data.at(4)>>4)&'\x01'){
str = "正在录像";
}
else{
str = "未开始录像";
}
m_tableModel->setItem(25,1,new QStandardItem(str));
//文件命名
if((data.at(4)>>5)&'\x01'){
str = "信息导入完毕";
}
else{
str = "未成功导入";
}
m_tableModel->setItem(26,1,new QStandardItem(str));
//TF插卡状态
if((data.at(4)>>6)&'\x01'){
str = "TF卡已插入";
}
else{
str = "TF卡未插入";
}
m_tableModel->setItem(20,1,new QStandardItem(str));
//超温报警状态
if((data.at(4)>>7)&'\x01'){
str = "超温";
}
else{
str = "未超温";
}
m_tableModel->setItem(51,1,new QStandardItem(str));
//红点指示
if(data.at(5)&'\x01'){
str = "";
}
else{
str = "";
}
m_tableModel->setItem(52,1,new QStandardItem(str));
//备用
//红外图像增强
str = QString::number((data.at(5)>>3)&'\x0F');
m_tableModel->setItem(38,1,new QStandardItem(str));
//备用
//备用
/*****吊舱状态2******/
//备用
//跟踪源类型
if(data.at(6)&'\x02'){
str = "可见光";
}
else{
str = "红外";
}
m_tableModel->setItem(0,1,new QStandardItem(str));
//红外电子变倍
str = QString::number(((data.at(6)>>2)&'\x7F')*0.1,'f', 1);
m_tableModel->setItem(13,1,new QStandardItem(str));
//配置保存
if(data.at(7)&'\x01'){
str = "保存成功";
}
else{
str = "未保存";
}
m_tableModel->setItem(49,1,new QStandardItem(str));
//可见光电子变倍
switch((data.at(7)>>1)&'\x03')
{
case 0:
str = "1x";
break;
case 1:
str = "2x";
break;
case 2:
str = "4x";
break;
default:
str = "未知";
break;
}
m_tableModel->setItem(14,1,new QStandardItem(str));
//红外伪彩-色带
switch((data.at(7)>>3)&'\x1F')
{
case 0x00:
str = "白热";
break;
case 0x01:
str = "黑热";
break;
case 0x02:
str = "彩虹";
break;
case 0x03:
str = "高对比度彩虹";
break;
case 0x04:
str = "铁红";
break;
case 0x05:
str = "熔岩";
break;
case 0x06:
str = "天空";
break;
case 0x07:
str = "中灰";
break;
case 0x08:
str = "灰红";
break;
case 0x09:
str = "紫橙";
break;
case 0x0b:
str = "警示红";
break;
case 0x0c:
str = "冰火";
break;
default:
str = "未知";
break;
}
m_tableModel->setItem(37,1,new QStandardItem(str));
/*********伺服状态********/
//红外伪彩-色带
switch((data.at(7)>>3)&'\x1F')
{
case 0x00:
str = "待命";
break;
case 0x01:
str = "关伺服";
break;
case 0x02:
str = "手动";
break;
case 0x03:
str = "收藏";
break;
case 0x04:
str = "数引";
break;
case 0x05:
str = "航向锁定";
break;
case 0x06:
str = "扫描";
break;
case 0x07:
str = "跟踪";
break;
case 0x08:
str = "垂直下视";
break;
case 0x09:
str = "陀螺自动较漂";
break;
case 0xA0:
str = "陀螺温度较漂";
break;
case 0x0B:
str = "航向随动";
break;
case 0x0C:
str = "归中";
break;
case 0x0D:
str = "手动陀螺较漂";
break;
case 0x0F:
str = "姿态指引";
break;
default:
str = "";
break;
}
m_tableModel->setItem(50,1,new QStandardItem(str));
//吊舱框架方位角
dou = (data.at(9)+data.at(10)*256)*0.01;
str = QString::number(dou,'f', 2);
m_tableModel->setItem(15,1,new QStandardItem(str));
//吊舱框架俯仰角
dou = (data.at(11)+data.at(12)*256)*0.01;
str = QString::number(dou,'f', 2);
m_tableModel->setItem(16,1,new QStandardItem(str));
//吊舱框架横滚角
dou = (data.at(13)+data.at(14)*256)*0.01;
str = QString::number(dou,'f', 2);
m_tableModel->setItem(17,1,new QStandardItem(str));
//当前载荷版本号
str = QString::number(data.at(15)>>4) + "." + QString::number(data.at(15)&'\x07');
m_tableModel->setItem(39,1,new QStandardItem(str));
//红外视场角
dou = ((UINT8)data[16]+(UINT16)data[17]*256)*0.1;
str = QString::number(dou,'f', 1);
m_tableModel->setItem(9,1,new QStandardItem(str));
//TF使用容量百分比
str = QString::number((UINT8)data.at(18))+"%";
m_tableModel->setItem(18,1,new QStandardItem(str));
//可见光视场角
dou = ((UINT8)data.at(19)+(UINT16)data.at(20)*256)*0.1;
str = QString::number(dou,'f', 1);
m_tableModel->setItem(7,1,new QStandardItem(str));
//TF卡总容量
dou = ((UINT8)data.at(21)+(UINT16)data.at(22)*256)*0.1;
str = QString::number(dou,'f', 1);
m_tableModel->setItem(19,1,new QStandardItem(str));
//红外焦距
dou = ((UINT8)data.at(23)+(UINT16)data.at(24)*256)*0.1;
str = QString::number(dou,'f', 1);
m_tableModel->setItem(8,1,new QStandardItem(str));
//可见光焦距-白光
dou = ((UINT8)data.at(25)+(UINT16)data.at(26)*256)*0.1;
str = QString::number(dou,'f', 1);
m_tableModel->setItem(6,1,new QStandardItem(str));
//激光测距距离
str = QString::number((UINT8)data.at(27)+(UINT16)data.at(28)*256);
m_tableModel->setItem(10,1,new QStandardItem(str));
//目标定位经度
flo = m_uint32_to_float(data.at(29),data.at(30),data.at(31),data.at(32));
str = QString::number(flo,'f',6);
m_tableModel->setItem(40,1,new QStandardItem(str));
//目标定位纬度
flo = m_uint32_to_float(data.at(33),data.at(34),data.at(35),data.at(36));
str = QString::number(flo,'f',6);
m_tableModel->setItem(41,1,new QStandardItem(str));
//目标海拔高度
str = QString::number(data.at(37)+data.at(38)*256);
m_tableModel->setItem(42,1,new QStandardItem(str));
//最高温-温度
// dou = (data.at(39)+data.at(40)*256)*0.1;
// str = QString::number(dou,'f',1);
// m_tableModel->setItem(42,1,new QStandardItem(str));
//吊舱姿态方位角
dou = (data.at(41)+data.at(42)*256)*0.01;
str = QString::number(dou,'f',2);
m_tableModel->setItem(1,1,new QStandardItem(str));
//吊舱姿态俯仰角
dou = (data.at(43)+data.at(44)*256)*0.01;
str = QString::number(dou,'f',2);
m_tableModel->setItem(2,1,new QStandardItem(str));
//吊舱姿态横滚角
dou = (data.at(45)+data.at(46)*256)*0.01;
str = QString::number(dou,'f',2);
m_tableModel->setItem(3,1,new QStandardItem(str));
//当前显示图像反馈
switch (data.at(47)) {
case 0x00:
str = "红外";
break;
case 0x01:
str = "可见光";
break;
case 0x02:
str = "上下分屏";
break;
case 0x03:
str = "可见光画中画";
break;
case 0x04:
str = "红外画中画";
break;
case 0x05:
str = "左右分屏";
break;
default:
str = "未知";
break;
}
m_tableModel->setItem(27,1,new QStandardItem(str));
//接收到的命令字反馈
str = QString::number(data.at(48));
m_tableModel->setItem(11,1,new QStandardItem(str));
//姿态指示完成反馈
switch (data.at(49)) {
case 0x12:
str = "姿态指示中";
break;
case 0x13:
str = "姿态指示完成";
break;
default:
str = "------";
break;
}
m_tableModel->setItem(43,1,new QStandardItem(str));
//跟踪中心点宽方向坐标
str = QString::number((UINT8)data[50]+(UINT16)data[51]*256);
m_tableModel->setItem(4,1,new QStandardItem(str));
//跟踪中心点高方向坐标
str = QString::number((UINT8)data[52]+(UINT16)data[53]*256);
m_tableModel->setItem(5,1,new QStandardItem(str));
//目标宽
str = QString::number((UINT8)data.at(54)+data.at(55)*256);
m_tableModel->setItem(44,1,new QStandardItem(str));
//目标高
str = QString::number((UINT8)data.at(56)+data.at(57)*256);
m_tableModel->setItem(45,1,new QStandardItem(str));
//目标类型
switch (data.at(58)) {
case 0x00:
if(data.at(6)&'\x02'){//可见光
str = "";
}
else{//红外
str = "";
}
break;
case 0x01:
if(data.at(6)&'\x02'){//可见光
str = "小汽车";
}
else{//红外
str = "";
}
break;
case 0x02:
if(data.at(6)&'\x02'){//可见光
str = "公交车";
}
break;
case 0x03:
if(data.at(6)&'\x02'){//可见光
str = "卡车";
}
break;
default:
str = "未知";
break;
}
m_tableModel->setItem(46,1,new QStandardItem(str));
//跟踪状态
switch (data.at(59)) {
case 0x00:
str = "空闲状态";
break;
case 0x01:
str = "稳定跟踪";
break;
case 0x02:
str = "记忆跟踪";
break;
case 0x03:
str = "目标丢失";
break;
case 0x05:
str = "截获状态";
break;
default:
str = "未知";
break;
}
m_tableModel->setItem(47,1,new QStandardItem(str));
//最高温
dou = (data.at(60)+data.at(61)*256)*0.1;
str = QString::number(dou,'f',1)+"";
m_tableModel->setItem(48,1,new QStandardItem(str));
//
}
}
bool GDDCdlg::checkdata(QByteArray buffer,int length, int type)
{
if(length!=64){
return false;
}
if((buffer.at(0) != '\xFC')||(buffer.at(1) != '\x2C')||buffer.at(63) !='\xF0')
{
return false;
}
if(type==1)
{
//亦或校验
// for(int i = 2;i<62;++i)
// {
// buffer.at(i)^buffer.at(i+1);
// }
}
else if (type==2)
{
//和校验
}
return true;
}
//控制页面隐藏与显示
void GDDCdlg::on_pushButShowCmdArea_clicked()
{
if(isCmdAreaShow)
{
m_GDDCCmdDlg->setVisible(false);
ui->tableViewShowIState->setVisible(false);
isCmdAreaShow = false;
resizeUI();
ui->pushButShowCmdArea->setIcon(QIcon(":/res/up.png"));
//ui->pushButton->setGeometry(this->width()/2,this->height()-50,50,50);
}
else
{
m_GDDCCmdDlg->setVisible(true);
ui->tableViewShowIState->setVisible(true);
isCmdAreaShow = true;
resizeUI();
ui->pushButShowCmdArea->setIcon(QIcon(":/res/down.png"));
//ui->pushButton->setGeometry(this->width()/2,ui->tabWidget->height(),50,50);
}
}