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/gddcStateInfo.cpp

606 lines
22 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "gddcStateInfo.h"
#include "ui_gddcStateInfo.h"
GDDCStateInfo::GDDCStateInfo(QWidget *parent)
: QWidget(parent), ui(new Ui::GDDCStateInfo) {
ui->setupUi(this);
initParam();
}
GDDCStateInfo::~GDDCStateInfo() {
delete m_tableModel;
delete ui;
}
// 初始化参数
void GDDCStateInfo::initParam() {
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->setEditTriggers(
QAbstractItemView::NoEditTriggers); // 不可编辑
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;}");
}
// 设置tabwidget的几何位置
void GDDCStateInfo::setTableViewGeometry(int ax, int ay, int aw, int ah) {
ui->tableViewShowIState->setGeometry(ax, ay, aw, ah);
}
/**
* @brief udp数据接收
* @param da 数据
* @param size 数据大小
*/
void GDDCStateInfo::UDPMessageReceive(QByteArray &da, int size) {
QByteArray data = da;
// data.resize(size);
// 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 GDDCStateInfo::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;
}