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

604 lines
19 KiB
C++

#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;
}