diff --git a/App/CommandUI/CommandUI.cpp b/App/CommandUI/CommandUI.cpp index 0698d3e..c4cfc97 100644 --- a/App/CommandUI/CommandUI.cpp +++ b/App/CommandUI/CommandUI.cpp @@ -51,6 +51,7 @@ CommandUI::CommandUI(QWidget *parent) : + } CommandUI::~CommandUI() diff --git a/App/CommandUI/CommandUI.qss b/App/CommandUI/CommandUI.qss index 93a87c3..61d6adb 100644 --- a/App/CommandUI/CommandUI.qss +++ b/App/CommandUI/CommandUI.qss @@ -56,35 +56,50 @@ CommandButton:pressed[state="2"] { font: 15px "黑体"; } -.QToolBar QToolButton::right-arrow { - background-color:rgb(132, 171, 255); - border-width: 0; +.QTabBar::tab{ + max-width: 75px; + min-width: 75px; + min-height: 40px; } -.QToolBar QToolButton::right-arrow:hover { +.QTabBar::tab:!selected { + color:#000000; +} + +.QTabBar::tab:selected { + color:#000000; + background-color: #FE9A2E; +} + + +QTabBar::scroller { /* the width of the scroll buttons */ + width: 80px; +} + +QTabBar QToolButton { /* the scroll buttons are tool buttons */ + border-width: 2px; +} + +QTabBar QToolButton::right-arrow { /* the arrow mark in the tool buttons */ + image: url(:/img/right.png); +} + +QTabBar QToolButton::left-arrow { + image: url(:/img/left.png); +} + + +.QTabBar QToolButton::right-arrow:hover { background-color:rgb(255, 171, 208); border-width: 0; } -.QToolBar QToolButton::right-arrow:disabled { - background-color:rgb(132, 255, 208); - border-width: 0; -} -.QToolBar QToolButton::left-arrow { - background-color:rgb(132, 171, 255); - border-width: 0; -} - -.QToolBar QToolButton::left-arrow:hover { +.QTabBar QToolButton::left-arrow:hover { background-color:rgb(255, 171, 208); border-width: 0; } -.QToolBar QToolButton::left-arrow:disabled { - background-color:rgb(132, 255, 208); - border-width: 0; -} diff --git a/App/CommandUI/CommandUIres.qrc b/App/CommandUI/CommandUIres.qrc index 8496fd6..4b28cac 100644 --- a/App/CommandUI/CommandUIres.qrc +++ b/App/CommandUI/CommandUIres.qrc @@ -5,4 +5,8 @@ Command.json + + left.png + right.png + diff --git a/App/CommandUI/left.png b/App/CommandUI/left.png new file mode 100644 index 0000000..50a6bd0 Binary files /dev/null and b/App/CommandUI/left.png differ diff --git a/App/CommandUI/right.png b/App/CommandUI/right.png new file mode 100644 index 0000000..6c2e757 Binary files /dev/null and b/App/CommandUI/right.png differ diff --git a/App/GCS_zh_CN.qm b/App/GCS_zh_CN.qm index 126c78e..a1f097e 100644 Binary files a/App/GCS_zh_CN.qm and b/App/GCS_zh_CN.qm differ diff --git a/App/GCS_zh_CN.ts b/App/GCS_zh_CN.ts index 2824968..84ae6d2 100644 --- a/App/GCS_zh_CN.ts +++ b/App/GCS_zh_CN.ts @@ -414,112 +414,112 @@ Group 1 - + 组 1 Group 2 - + 组 2 Group 3 - + 组 3 Group 4 - + 组 4 - + Selete Command File... 选择指令脚本... - + command file (*.json) 指令脚本 (*.json) - + .json - + .qml - - + + 发送指令 %1 %2 - + 无人机 %1 %2 %3 %4 - + set parameter - + %1,%2 accepted and executed %1,%2 发送成功 - + %1,%2 rejected %1,%2 拒绝执行 - + %1,%2 permanently denied %1,%2 永久拒绝 - + %1,%2 unsupported %1,%2 不支持 - + %1,%2 failed %1,%2 发送失败 - + %1,%2 being executed %1,%2 正在执行 - + %1,%2 time out %1,%2 发送超时 - + Please do not operate too fast, the last instruction has not been sent 请不要操作过快,上一个指令未发送完成 - + 设置航点 %1 - + point: - + 航点: - + click confirm to set uav %1 as current @@ -548,7 +548,7 @@ %1 正在执行 - + click confirm to set Point %1 as current point 点击设置航点%1为当前航点 @@ -2142,36 +2142,36 @@ 参数 - - + + Communication Lost 通讯丢失 - - + + Communication Regain 通讯已恢复 - + R:%1 / T:%2 收:%1/发:%2 - - - + + + 未定位 - + %1D[%2颗] %1D[%2颗] - + fix[%1颗] %1D Fix 差分[%1颗] @@ -2189,256 +2189,256 @@ GPS错误 - + float[%1颗] 浮点[%1颗] - + err[%1颗] 错误[%1颗] - + ARM 解锁 - + DISARM 上锁 - + MANUAL 手动 - + ALTCTL 定高 - + POSCTL 定点 - + AUTO 自主 - + ACRO - + OFFBOARD - + STABILIZED 增稳 - + RATTITUDE 速率 - + STANDBY 待机 - + BIT 测试 - + AUTO_READY 就绪 - + AUTO_TAKEOFF 起飞 - + AUTO_LOITER 盘旋 - + AUTO_MISSION 任务 - + AUTO_RTL 返航 - + AUTO_LAND 着陆 - + AUTO_RTGS RTGS - + AUTO_FOLLOW_TARGET 目标跟随 - + 开加力 - + 半加力 - + 全加力 - - + + 关加力 - + 伞舱开 - + 伞舱关 - + INS解算正常 - + INS星数不足 - + INS内部错误 - + INS速度超限 - + SBG解算正常 - + SBG星数不足 - + SBG内部错误 - + SBG速度超限 - + 安控区内 - + 安控区外 - + mission group has changed, current group is %1 航线切换,当前航线为 %1 - + VERT_OFF OFF 纵向制导关闭 - + VNAV2THT 消除纵向偏差 - + HDOT2THT 控制升降速率 - + GAMMA2THT 控制航迹角 - + AS2THT 俯仰控制速度 - + H2THT 控制绝对高度 - + AGL2THT 控制相对高度 - + LAT_OFF 横向制导关闭 - + LNAV2PHI 滚转消除侧偏 - + PSI2PHI 滚转控制航向 - - - + + + @@ -2447,156 +2447,156 @@ 未定位 - - + + 未初始化 - - + + 垂直陀螺 - - + + AHRS - - + + 速度导航 - - + + 位置导航 - - - - - - - - + + + + + + + + 正常 - - - - - - - - - - + + + + + + + + + + 无效 - - + + 解算正常 - - + + 卫星数不足 - - + + 内部错误 - - - - 速度超限 - - - - - - - - 未知 - - - - - - 多普勒 - - - - - - 微分 - - - - - - 单点 - - - 伪距差分 + 速度超限 - - - SBAS广域差分 - - - - - - 广域差分 - - - - - - RTK_FLOAT - - - - - - RTK_INT - - - - - - PPP_FLOAT + + + + + 未知 + 多普勒 + + + + + + 微分 + + + + + + 单点 + + + + + + 伪距差分 + + + + + + SBAS广域差分 + + + + + + 广域差分 + + + + + + RTK_FLOAT + + + + + + RTK_INT + + + + + + PPP_FLOAT + + + + + PPP_INT - - + + FIXED @@ -2605,17 +2605,17 @@ 未支持 - + flight mode 飞行模式 - + 连接内置惯导 - + 连接SBG @@ -2761,38 +2761,38 @@ 界面 - + save 保存 - + insert 插入 - + upload 上传 - + add 增加 - + download downlload 下载 - + load 打开 - + delete 删除 @@ -2802,7 +2802,7 @@ 围栏 - + clean 清空 @@ -2852,186 +2852,192 @@ 起飞 - + number 航点 - + command 类型 - + par1 参数1 - + par2 参数2 - + par3 参数3 - + par4 参数4 - - + + lat 纬度 - addCircle - 添加圆形 + 添加圆形 - addPolygon - 添加多边形 + 添加多边形 - delCircle - 删除圆形 + 删除圆形 - delPolygon - 删除多边形 + 删除多边形 - - + + lng 经度 - + group 组别 - - - - - + + + + + + + + inclusion 包含 - + par 参数 - + type 类型 - + alt 海拔 - - - - - - + + + + + + + Circle 圆形 - - - - + + + + + + + exclusion 除外 - - - - - + + + + + + + + Polygon 多边形 - - + + 航点 - - + + 返航 - - + + 降落 - - + + 起飞 - - + + 保持 - - + + 表速 - - + + 快升 - - + + 开加力 - - + + 关加力 - - + + Selete Way Point File... 选择载入文件... - - + + plan file (*.plan) 任务文件 (*.plan) @@ -5134,87 +5140,87 @@ p, li { white-space: pre-wrap; } - - - + + + Relative 相对 - - - + + + Absolutely 绝对 - + param1 - + param2 - + param3 - + param4 - + param5 - + param6 - + param7 - + set 设置 - + Altitude 海拔 - + setLatitude 设置纬度 - + setLongitude 设置经度 - - + + plan file (*.plan) 任务文件 (*.plan) - + click to clear all points 点击清除所有航点 - + Measuring 测量中 @@ -5270,7 +5276,7 @@ p, li { white-space: pre-wrap; } - + Measure 测量 @@ -5284,8 +5290,8 @@ p, li { white-space: pre-wrap; } 组别 - - + + Selete Way Point File... Select Loading File... 选择载入文件... diff --git a/App/MissionUI/MissionUI.cpp b/App/MissionUI/MissionUI.cpp index dd474f6..1b24a49 100644 --- a/App/MissionUI/MissionUI.cpp +++ b/App/MissionUI/MissionUI.cpp @@ -7,7 +7,7 @@ MissionUI::MissionUI(QWidget *parent) : { ui->setupUi(this); setWindowTitle(tr("Mission Table")); - //setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); + setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); //load qss QFile file(":/qss/propertyui.qss"); @@ -180,6 +180,7 @@ MissionUI::MissionUI(QWidget *parent) : } //删除完成后,刷新一次所有航点 emit getAllPoints(group); + emit getCurrentPoint(group); }); connect(btn_delete,&CustomButton::clicked,[=](){ @@ -903,6 +904,19 @@ void MissionUI::pointDelete(int idx) */ } +void MissionUI::currentPointSeleted(int group,int point) +{ + /* + qDebug() << "Selete" << group << point; + + QTableWidget *widget = tablelist.value(group); + if(widget) + { + widget->selectRow(point - 1); + } + */ +} + void MissionUI::setCurrent(int group,int idx) { QTableWidget *widget = tablelist.value(group); @@ -1271,7 +1285,6 @@ void MissionUI::itemDoubleClicked(QTableWidgetItem *item) } emit setFencePolygon(gidx,par,inclusion,latlng); - } }); } diff --git a/App/MissionUI/MissionUI.h b/App/MissionUI/MissionUI.h index b7a3574..8cc6cd7 100644 --- a/App/MissionUI/MissionUI.h +++ b/App/MissionUI/MissionUI.h @@ -51,7 +51,7 @@ public slots: void updateFenceCircle(int group,qreal radius, bool inclusion, qreal lat, qreal lng); void updateFencePolygon(int group,qreal vertex,bool inclusion,QList latlng); - + void currentPointSeleted(int group,int point); protected slots: void closeEvent(QCloseEvent *event); void resizeEvent(QResizeEvent *event); @@ -103,6 +103,8 @@ signals: void addPolygon(); void delFence(int group); + void getCurrentPoint(int group); + private: Ui::MissionUI *ui; diff --git a/App/MissionUI/propertyui.cpp b/App/MissionUI/propertyui.cpp index 6ca001b..1544b9f 100644 --- a/App/MissionUI/propertyui.cpp +++ b/App/MissionUI/propertyui.cpp @@ -198,6 +198,12 @@ propertyui::propertyui(QWidget *parent) : table,&MissionUI::updateFencePolygon); + connect(this,SIGNAL(currentPointSeleted(int,int)), + table,SLOT(currentPointSeleted(int,int))); + + connect(table,&MissionUI::getCurrentPoint, + this,&propertyui::getCurrentPoint); + //初始化参数 setWayPointProperty(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3); diff --git a/App/MissionUI/propertyui.h b/App/MissionUI/propertyui.h index dc62920..42f7c8f 100644 --- a/App/MissionUI/propertyui.h +++ b/App/MissionUI/propertyui.h @@ -276,6 +276,9 @@ Q_SIGNALS: void addPolygon(); void delFence(int group); + void currentPointSeleted(int group,int point); + void getCurrentPoint(int group); + private slots: void GroupChanged(int value); diff --git a/App/MissionUI/propertyui.qss b/App/MissionUI/propertyui.qss index c3c2006..3c6aec0 100644 --- a/App/MissionUI/propertyui.qss +++ b/App/MissionUI/propertyui.qss @@ -83,6 +83,11 @@ stop: 0 #dadbde, stop: 1 #f6f7fa); } +.QTabBar::tab{ + max-width: 75px; + min-width: 75px; + min-height: 40px; +} .QTabBar::tab:!selected { color:#000000; diff --git a/App/mainwindow.cpp b/App/mainwindow.cpp index 9d84c9d..f88b5ec 100644 --- a/App/mainwindow.cpp +++ b/App/mainwindow.cpp @@ -457,6 +457,13 @@ MainWindow::MainWindow(QWidget *parent) missionUI,SIGNAL(updateFencePolygon(int,qreal,bool,QList))); + connect(map,SIGNAL(currentPointSeleted(int,int)), + missionUI,SIGNAL(currentPointSeleted(int,int)),Qt::DirectConnection); + + + connect(missionUI,SIGNAL(getCurrentPoint(int)), + map,SLOT(getCurrentPoint(int)),Qt::DirectConnection); + //dlink ----- map connect(map,SIGNAL(signal_WPDownload(uint8_t,uint8_t,int)), @@ -1373,7 +1380,11 @@ void MainWindow::updateUI()//事件驱动式更新数据 dlink->mavlinknode->vehicle.attitude.yaw * 57.3); - //QApplication::processEvents(); + map->setUAVSpeed(dlink->mavlinknode->vehicle.sysid, + dlink->mavlinknode->vehicle.compid, + dlink->mavlinknode->vehicle.emb_atom_com.mach, + dlink->mavlinknode->vehicle.emb_atom_com.Airspeed); + @@ -1384,8 +1395,12 @@ void MainWindow::updateUI()//事件驱动式更新数据 menuBarUI->setTargetAlt(dlink->mavlinknode->vehicle.sys_status.load); - uint8_t hour = time / 10000; + + if(hour >= 24){ + hour -= 24; + } + uint8_t min = (time % 10000)/100; uint8_t sec = time % 100; @@ -1405,9 +1420,6 @@ void MainWindow::updateUI()//事件驱动式更新数据 - - - /* if(MainIndex == 3)//飞行界面 { @@ -1692,16 +1704,12 @@ void MainWindow::updateUI()//事件驱动式更新数据 //get 9-10 - - //得到航线组数,数据为1,2,3,4 group = (int)(getBit(enable,11) << 2) | (int)(getBit(enable,10) << 1) | (int)(getBit(enable,9)); if(group_old != group)//有变化的时候就发出去 { emit currentGroup(group + 2); - //qDebug() << "group change" << group; - showMessage(tr("mission group has changed, current group is %1").arg(group)); } @@ -1799,6 +1807,8 @@ void MainWindow::updateUI()//事件驱动式更新数据 + + if(toolsui->senser) { diff --git a/MavLinkNode/MavLinkNode.pro b/MavLinkNode/MavLinkNode.pro index f8ccacf..cb3399f 100644 --- a/MavLinkNode/MavLinkNode.pro +++ b/MavLinkNode/MavLinkNode.pro @@ -49,6 +49,7 @@ DEFINES += QtMavlinkNode HEADERS += \ + ParsePack.h \ Terminal.h \ ThreadTemplet.h \ commandprocess.h \ @@ -63,6 +64,7 @@ HEADERS += \ statusprocess.h SOURCES += \ + ParsePack.c \ Terminal.cpp \ ThreadTemplet.cpp \ commandprocess.cpp \ diff --git a/MavLinkNode/ParsePack.c b/MavLinkNode/ParsePack.c new file mode 100644 index 0000000..0c7f040 --- /dev/null +++ b/MavLinkNode/ParsePack.c @@ -0,0 +1,230 @@ +/* + * ParserPack.c + * + * Created on: Jun 24, 2020 + * Author: matth + */ + +#include "ParsePack.h" + +static uint16_t CRC_CheckSum (uint8_t *pBuffer, uint16_t len) +{ + uint16_t poly = 0x8408; + uint16_t crc = 0; + uint8_t carry; + uint8_t i_bits; + uint16_t j; + + for (j = 0; j < len; j++) { + crc = (uint16_t) (crc ^ (uint8_t) pBuffer[j]); + for (i_bits = 0; i_bits < 8; i_bits++) { + carry = (uint8_t) (crc & 1); + crc = (uint16_t) (crc / 2); + if (carry) { + crc = (uint16_t) (crc ^ poly); + } + } + } + return crc; +} + + +void Packer_init(Packer_t *pack) +{ + pack->buff[0] = 0xEB; + pack->buff[1] = 0x90; + pack->seq = 0; +} + +size_t Packer_pack(Packer_t *pack, uint8_t id, uint8_t pkg[], uint16_t len) +{ + uint16_t j; + size_t i; + + pack->buff[2] = pack->seq++; + pack->buff[3] = id; + pack->buff[4] = (len >> 8) & 0xFF; + pack->buff[5] = len & 0xFF; + for (i=6,j=0u;jbuff[i] = pkg[j]; + } + uint16_t crc16 = CRC_CheckSum(&pack->buff[6], len); + pack->buff[i++] = (crc16 & 0xFF); + pack->buff[i++] = (crc16 >> 8)&0xFF; + return i; +} + +void Parser_init(Parser_t *parser) +{ + parser->stage = 0; + parser->crc_err_cnt = 0; + parser->head_err_cnt = 0; +} + +int Parser_char(Parser_t *parser, uint8_t c) +{ + int rslt = -1; + + switch (parser->stage) + { + case 0: + if (c == 0xEB) + { + parser->stage++; + } + else + { + parser->head_err_cnt++; + } + break; + case 1: + if (c == 0x90) + { + parser->stage++; + } + else + { + parser->stage = 0; + parser->head_err_cnt++; + } + break; + case 2: + parser->seq = c; + parser->stage++; + break; + case 3: + parser->id = c; + parser->stage++; + break; + case 4: + parser->len = c; + parser->stage++; + break; + case 5: + parser->len = (parser->len << 8) + c; + if (parser->len <=PARSER_BUFF_LEN) + { + parser->idx = 0; + parser->stage++; + } + else + { + parser->stage = 0; + } + break; + case 6: + parser->buff[parser->idx++] = c; + if (parser->idx == parser->len) + { + parser->stage++; + } + break; + case 7: + parser->crc16 = c; + parser->stage++; + break; + case 8: + parser->crc16 += (c<<8); + if (parser->crc16 == CRC_CheckSum(parser->buff, parser->len)) + { + rslt = parser->id; + } + else + { + parser->crc_err_cnt++; + } + parser->stage = 0; + break; + default: + parser->stage = 0; + break; + } + + return rslt; +} + +void Packer2_init(Packer2_t *pack) +{ + pack->buff[0] = 0xEB; + pack->buff[1] = 0x90; +} + +size_t Packer2_pack(Packer2_t *pack, uint8_t id, uint8_t pkg[], uint8_t len) +{ + uint8_t j; + size_t i; + uint8_t sum; + + pack->buff[2] = id; + pack->buff[3] = len; + sum = 0u; + for (i=4,j=0u;jbuff[i] = pkg[j]; + sum += pkg[j]; + } + pack->buff[i++] = sum; + return i; +} + +void Parser2_init(Parser2_t *parser) +{ + parser->stage = 0; +} + + +int Parser2_char(Parser2_t *parser, uint8_t c) +{ + int rslt = -1; + + switch (parser->stage) + { + case 0: + if (c == 0xEB) + { + parser->stage++; + } + break; + case 1: + if (c == 0x90) + { + parser->stage++; + } + else + { + parser->stage = 0; + } + break; + case 2: + parser->id = c; + parser->stage++; + break; + case 3: + parser->len = c; + parser->stage++; + parser->idx = 0; + parser->sum = 0; + break; + case 4: + parser->buff[parser->idx++] = c; + parser->sum += c; + if (parser->idx == parser->len) + { + parser->stage++; + } + break; + case 5: + if (parser->sum == c) + { + rslt = parser->id; + } + parser->stage = 0; + break; + default: + parser->stage = 0; + break; + } + + return rslt; +} diff --git a/MavLinkNode/ParsePack.h b/MavLinkNode/ParsePack.h new file mode 100644 index 0000000..c1c1a9e --- /dev/null +++ b/MavLinkNode/ParsePack.h @@ -0,0 +1,72 @@ +/* + * ParserPack.h + * + * Created on: Jun 24, 2020 + * Author: matth + */ + +#ifndef MATT_PARSEPACK_H_ +#define MATT_PARSEPACK_H_ + +#include +#include + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef PARSER_BUFF_LEN +#define PARSER_BUFF_LEN (512) +#endif + +#ifndef PACKER_BUFF_LEN +#define PACKER_BUFF_LEN (512+6) +#endif + +typedef struct{ + int stage; + uint16_t idx; + uint16_t len; + uint8_t seq; + uint16_t id; + uint16_t crc16; + uint32_t crc_err_cnt; + uint32_t head_err_cnt; + uint8_t buff[PARSER_BUFF_LEN]; +} Parser_t; + +typedef struct{ + uint8_t seq; + uint8_t buff[PARSER_BUFF_LEN]; +} Packer_t; + +void Parser_init(Parser_t *parser); +void Packer_init(Packer_t *pack); + +int Parser_char(Parser_t *parser, uint8_t c); +size_t Packer_pack(Packer_t *pack, uint8_t id, uint8_t pkg[], uint16_t len); + +typedef struct{ + int stage; + uint8_t idx; + uint8_t len; + uint16_t id; + uint8_t sum; + uint8_t buff[255]; +} Parser2_t; + +typedef struct{ + uint8_t buff[260]; +} Packer2_t; + +void Parser2_init(Parser2_t *parser); +void Packer2_init(Packer2_t *pack); + +int Parser2_char(Parser2_t *parser, uint8_t c); +size_t Packer2_pack(Packer2_t *pack, uint8_t id, uint8_t pkg[], uint8_t len); + +#ifdef __cplusplus + } +#endif + +#endif /* MATT_PARSEPACK_H_ */ diff --git a/MavLinkNode/mavlinknode.cpp b/MavLinkNode/mavlinknode.cpp index b9758cb..e27d487 100644 --- a/MavLinkNode/mavlinknode.cpp +++ b/MavLinkNode/mavlinknode.cpp @@ -163,11 +163,19 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent) qDebug() << "mavlink" << QThread::currentThreadId(); + CreateCSV(); + + + Parser2_init(&parser); + Packer2_init(&packer); + } MavLinkNode::~MavLinkNode() { - CreateCSV(); + //CreateCSV(); + + CloseCSV(); if (mavLogFile) { @@ -305,179 +313,273 @@ void MavLinkNode::CreateCSV(void) filetime.append("/"); - autopilot_version_file = new QFile(filetime + "autopilot_version_file.csv"); + autopilot_version_file = new QFile(filetime + "autopilot_version.csv"); autopilot_version_file->open(QIODevice::WriteOnly); - sys_status_file = new QFile(filetime + "sys_status_file.csv"); + sys_status_file = new QFile(filetime + "sys_status.csv"); sys_status_file->open(QIODevice::WriteOnly); heartbeat_file = new QFile(filetime + "heartbeat.csv"); heartbeat_file->open(QIODevice::WriteOnly); - ping_file = new QFile(filetime + "ping_file.csv"); + ping_file = new QFile(filetime + "ping.csv"); ping_file->open(QIODevice::WriteOnly); - attitude_file = new QFile(filetime + "attitude_file.csv"); + attitude_file = new QFile(filetime + "attitude.csv"); attitude_file->open(QIODevice::WriteOnly); - ins1_file = new QFile(filetime + "ins1_file.csv"); + ins1_file = new QFile(filetime + "ins1.csv"); ins1_file->open(QIODevice::WriteOnly); - ins2_file = new QFile(filetime + "ins2_file.csv"); + ins2_file = new QFile(filetime + "ins2.csv"); ins2_file->open(QIODevice::WriteOnly); - gps_raw_int_file = new QFile(filetime + "gps_raw_int_file.csv"); + gps_raw_int_file = new QFile(filetime + "gps_raw_int.csv"); gps_raw_int_file->open(QIODevice::WriteOnly); - global_position_int_file = new QFile(filetime + "global_position_int_file.csv"); + global_position_int_file = new QFile(filetime + "global_position_int.csv"); global_position_int_file->open(QIODevice::WriteOnly); - servo_output_raw_file = new QFile(filetime + "servo_output_raw_file.csv"); + servo_output_raw_file = new QFile(filetime + "servo_output_raw.csv"); servo_output_raw_file->open(QIODevice::WriteOnly); - rc_channels_raw_file = new QFile(filetime + "rc_channels_raw_file.csv"); + rc_channels_raw_file = new QFile(filetime + "rc_channels_raw.csv"); rc_channels_raw_file->open(QIODevice::WriteOnly); - nav_controller_output_file = new QFile(filetime + "nav_controller_output_file.csv"); + nav_controller_output_file = new QFile(filetime + "nav_controller_output.csv"); nav_controller_output_file->open(QIODevice::WriteOnly); - airspeed_autocal_file = new QFile(filetime + "airspeed_autocal_file.csv"); + airspeed_autocal_file = new QFile(filetime + "airspeed_autocal.csv"); airspeed_autocal_file->open(QIODevice::WriteOnly); - rpm_file = new QFile(filetime + "rpm_file.csv"); + rpm_file = new QFile(filetime + "rpm.csv"); rpm_file->open(QIODevice::WriteOnly); - scaled_pressure_file = new QFile(filetime + "scaled_pressure_file.csv"); + scaled_pressure_file = new QFile(filetime + "scaled_pressure.csv"); scaled_pressure_file->open(QIODevice::WriteOnly); - extended_sys_state_file = new QFile(filetime + "extended_sys_state_file.csv"); + extended_sys_state_file = new QFile(filetime + "extended_sys_state.csv"); extended_sys_state_file->open(QIODevice::WriteOnly); - battery_status_file = new QFile(filetime + "battery_status_file.csv"); + battery_status_file = new QFile(filetime + "battery_status.csv"); battery_status_file->open(QIODevice::WriteOnly); - vibration_file = new QFile(filetime + "vibration_file.csv"); + vibration_file = new QFile(filetime + "vibration.csv"); vibration_file->open(QIODevice::WriteOnly); - enginestate_file = new QFile(filetime + "enginestate_file.csv"); + enginestate_file = new QFile(filetime + "enginestate.csv"); enginestate_file->open(QIODevice::WriteOnly); - vfr_hud_file = new QFile(filetime + "vfr_hud_file.csv"); + vfr_hud_file = new QFile(filetime + "vfr_hud.csv"); vfr_hud_file->open(QIODevice::WriteOnly); - aoa_ssa_file = new QFile(filetime + "aoa_ssa_file.csv"); + aoa_ssa_file = new QFile(filetime + "aoa_ssa.csv"); aoa_ssa_file->open(QIODevice::WriteOnly); - emb_atom_com_file = new QFile(filetime + "emb_atom_com_file.csv"); + emb_atom_com_file = new QFile(filetime + "emb_atom_com.csv"); emb_atom_com_file->open(QIODevice::WriteOnly); - turbinstate_file = new QFile(filetime + "turbinstate_file.csv"); + turbinstate_file = new QFile(filetime + "turbinstate.csv"); turbinstate_file->open(QIODevice::WriteOnly); - bmustate_file = new QFile(filetime + "bmustate_file.csv"); + bmustate_file = new QFile(filetime + "bmustate.csv"); bmustate_file->open(QIODevice::WriteOnly); - ccmstate_file = new QFile(filetime + "ccmstate_file.csv"); + ccmstate_file = new QFile(filetime + "ccmstate.csv"); ccmstate_file->open(QIODevice::WriteOnly); - serial_control_file = new QFile(filetime + "serial_control_file.csv"); + serial_control_file = new QFile(filetime + "serial_control.csv"); serial_control_file->open(QIODevice::WriteOnly); - - autopilot_version_file->write(autopilot_version_csv); - sys_status_file->write(sys_status_csv); - heartbeat_file->write(heartbeat_csv); - ping_file->write(ping_csv); - attitude_file->write(attitude_csv); - ins1_file->write(ins1_csv); - ins2_file->write(ins2_csv); - gps_raw_int_file->write(gps_raw_int_csv); - global_position_int_file->write(global_position_int_csv); - - for(int i = 0;i < 10;i++) - { - servo_output_raw_file->write(servo_output_raw_csv[i]); - } - rc_channels_raw_file->write(rc_channels_raw_csv); - nav_controller_output_file->write(nav_controller_output_csv); - airspeed_autocal_file->write(airspeed_autocal_csv); - rpm_file->write(rpm_csv); - scaled_pressure_file->write(scaled_pressure_csv); - extended_sys_state_file->write(extended_sys_state_csv); - battery_status_file->write(battery_status_csv); - vibration_file->write(vibration_csv); - enginestate_file->write(enginestate_csv); - vfr_hud_file->write(vfr_hud_csv); - aoa_ssa_file->write(aoa_ssa_csv); - emb_atom_com_file->write(emb_atom_com_csv); - turbinstate_file->write(turbinstate_csv); - bmustate_file->write(bmustate_csv); - ccmstate_file->write(ccmstate_csv); - serial_control_file->write(serial_control_csv); - - autopilot_version_file->close(); - sys_status_file->close(); - heartbeat_file->close(); - ping_file->close(); - attitude_file->close(); - ins1_file->close(); - ins2_file->close(); - gps_raw_int_file->close(); - global_position_int_file->close(); - servo_output_raw_file->close(); - rc_channels_raw_file->close(); - nav_controller_output_file->close(); - airspeed_autocal_file->close(); - rpm_file->close(); - scaled_pressure_file->close(); - extended_sys_state_file->close(); - battery_status_file->close(); - vibration_file->close(); - enginestate_file->close(); - vfr_hud_file->close(); - aoa_ssa_file->close(); - emb_atom_com_file->close(); - turbinstate_file->close(); - bmustate_file->close(); - ccmstate_file->close(); - serial_control_file->close(); - } +void MavLinkNode::CloseCSV(void) +{ + if(autopilot_version_file) + { + autopilot_version_file->close(); + } + + if(sys_status_file) + { + sys_status_file->close(); + } + + if(heartbeat_file) + { + heartbeat_file->close(); + } + + if(ping_file) + { + ping_file->close(); + } + + if(attitude_file) + { + attitude_file->close(); + } + + if(ins1_file) + { + ins1_file->close(); + } + + if(ins2_file) + { + ins2_file->close(); + } + + if(gps_raw_int_file) + { + gps_raw_int_file->close(); + } + + if(global_position_int_file) + { + global_position_int_file->close(); + } + + if(servo_output_raw_file) + { + servo_output_raw_file->close(); + } + + if(rc_channels_raw_file) + { + rc_channels_raw_file->close(); + } + + if(nav_controller_output_file) + { + nav_controller_output_file->close(); + } + + if(airspeed_autocal_file) + { + airspeed_autocal_file->close(); + } + + if(rpm_file) + { + rpm_file->close(); + } + + if(scaled_pressure_file) + { + scaled_pressure_file->close(); + } + + if(extended_sys_state_file) + { + extended_sys_state_file->close(); + } + + if(battery_status_file) + { + battery_status_file->close(); + } + + if(vibration_file) + { + vibration_file->close(); + } + + if(enginestate_file) + { + enginestate_file->close(); + } + + if(vfr_hud_file) + { + vfr_hud_file->close(); + } + + if(aoa_ssa_file) + { + aoa_ssa_file->close(); + } + + if(emb_atom_com_file) + { + emb_atom_com_file->close(); + } + + if(turbinstate_file) + { + turbinstate_file->close(); + } + + if(bmustate_file) + { + bmustate_file->close(); + } + + if(ccmstate_file) + { + ccmstate_file->close(); + } + + if(serial_control_file) + { + serial_control_file->close(); + } +} + + +bool MavLinkNode::setFileData(QFile *file,const QByteArray &data) +{ + if(data.size() == 0) + { + return false; + } + + if((file)&&(file->isOpen())) + { + QTextStream out(file); + out << data; + return file->flush(); + } + return false; +} + + + //这里一直在解码,一直检查双缓冲里面是否有数据,有就解码,没有就休息 void MavLinkNode::process()//线程函数 { QThread::msleep(5000);//5s后再发送 - autopilot_version_csv.append("capabilities,flight_sw_version,middleware_sw_version,os_sw_version,board_version,uid,vendor_id,product_id,flight_custom_version[8],middleware_custom_version[8],os_custom_version[8],uid2[18]\n"); - sys_status_csv.append("present,enabled,health,load,voltage,current,remaining,drop_rate_comm,errors_comm,errors_count1,errors_count2,errors_count3,errors_count4\n"); - heartbeat_csv.append("type,autopilot,base_mode,custom_mode,system_status,mavlink\n"); - ping_csv; - attitude_csv.append("time_boot_ms,roll,pitch,yaw,rollspeed,pitchspeed,yawspeed\n"); - ins1_csv.append("time_boot_ms,pitch,roll,yaw,lon,lat,alt,v_north,v_up,v_east,gx,gy,gz,ax,ay,az,time,sys,com,gps,bit,seq,eph,epv,svn\n"); - ins2_csv.append("time_boot_ms,pitch,roll,yaw,lon,lat,alt,v_north,v_up,v_east,gx,gy,gz,ax,ay,az,time,sys,com,gps,bit,seq,eph,epv,svn\n"); - gps_raw_int_csv.append("time_usec,lat,lon,alt,eph,epv,vel,cog,fix_type,satellites_visible,alt_ellipsoid,h_acc,v_acc,vel_acc,hdg_acc,yaw\n"); - global_position_int_csv.append("time_boot_ms,lat,lon,alt,relative_alt,vx,vy,vz,hdg\n"); - servo_output_raw_csv[0].append("time_usec,port,ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8,ch9,ch10,ch11,ch12,ch13,ch14,ch15,ch16\n"); - rc_channels_raw_csv; - nav_controller_output_csv.append("nav_roll,nav_pitch,nav_bearing,target_bearing,wp_dist,alt_err,as_err,xtrack_err\n"); - airspeed_autocal_csv.append("vx,vy,vz,diff_pressure,EAS2TAS,ratio,state_x,state_y,state_z,Pax,Pby,Pcz\n"); - rpm_csv.append("rpm1,rpm2,rpm3,rpm4,rpm5\n"); - scaled_pressure_csv.append("time_boot_ms,press_abs,press_diff,temperature,temperature_diff\n"); - extended_sys_state_csv; - battery_status_csv; - vibration_csv; - enginestate_csv.append("time_boot_ms,ChokeFlag,Ignition2Flag,AmbientTemperatur,AirPressure,ActualFuelPressure,FuelPumpDutyCycle,ActualJet1DutyCycle,ActualRPM,CHTemperature1,counts\n"); - vfr_hud_csv.append("airspeed,groundspeed,alt,climb,heading,throttle\n"); - aoa_ssa_csv; - emb_atom_com_csv.append("time_boot_ms,airspeed,beta,alpha,ps,qbar,seq,mach\n"); - turbinstate_csv.append("time_boot_ms,RPM_mea,T5,Kfuel,RPM_des,RPM_des_ap,RPM_bak,IOState,SysState,Fault,stage_ap,temp_ap,tas_ap,asl_ap,KabMain,KabFire,KDj,T1t,P1t,P3t,P5t,DJS,Vcc,Tbak,rev,CFuelMode,Cmd\n"); - bmustate_csv.append("time_boot_ms,BAT1_group_voltage_mv,BAT1_group_current_dA,BAT1_remain_perc,BAT1_low_temp_degC,AT1_hi_temp_degC,BAT1_voltages_mv[7],BAT1_hi_voltage_mv,BAT1_low_voltage_mv,BAT2_group_voltage_mv,BAT2_group_current_dA,BAT2_remain_perc,BAT2_low_temp_degC,BAT2_hi_temp_degC,BAT2_voltages_mv[14],BAT2_hi_voltage_mv,BAT2_low_voltage_mv,BAT1_STA1,BAT1_STA2,BAT2_STA1,BAT2_STA2,p500w_enabled\n"); - ccmstate_csv.append("time_boot_ms,fuel_level,temp[0],temp[1],temp[2],temp[3],volts[0],volts[1],volts[2],volts[3],echo_seq\n"); - serial_control_csv.append("baudrate,timeout,device,flags,count,data\n"); + setFileData(autopilot_version_file,QByteArray("capabilities,flight_sw_version,middleware_sw_version,os_sw_version,board_version,uid,vendor_id,product_id,flight_custom_version[8],middleware_custom_version[8],os_custom_version[8],uid2[18]\n")); + setFileData(sys_status_file, QByteArray("present,enabled,health,load,voltage,current,remaining,drop_rate_comm,errors_comm,errors_count1,errors_count2,errors_count3,errors_count4\n")); + setFileData(heartbeat_file, QByteArray("type,autopilot,base_mode,custom_mode,system_status,mavlink\n")); + setFileData(ping_file, QByteArray("time_usec,seq,target_system,target_component\n")); + setFileData(attitude_file, QByteArray("time_boot_ms,roll,pitch,yaw,rollspeed,pitchspeed,yawspeed\n")); + setFileData(ins1_file, QByteArray("time_boot_ms,pitch,roll,yaw,lon,lat,alt,v_north,v_up,v_east,gx,gy,gz,ax,ay,az,time,sys,com,gps,bit,seq,eph,epv,svn\n")); + setFileData(ins2_file, QByteArray("time_boot_ms,pitch,roll,yaw,lon,lat,alt,v_north,v_up,v_east,gx,gy,gz,ax,ay,az,time,sys,com,gps,bit,seq,eph,epv,svn\n")); + setFileData(gps_raw_int_file, QByteArray("time_usec,lat,lon,alt,eph,epv,vel,cog,fix_type,satellites_visible,alt_ellipsoid,h_acc,v_acc,vel_acc,hdg_acc,yaw\n")); + setFileData(global_position_int_file,QByteArray("time_boot_ms,lat,lon,alt,relative_alt,vx,vy,vz,hdg\n")); + setFileData(servo_output_raw_file, QByteArray("time_usec,port,ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8,ch9,ch10,ch11,ch12,ch13,ch14,ch15,ch16\n")); + setFileData(rc_channels_raw_file, QByteArray("time_boot_ms,port,rssi,chan1_raw,chan2_raw,chan3_raw,chan4_raw,chan5_raw,chan6_raw,chan7_raw,chan8_raw,chan9_raw,chan10_raw,chan11_raw,chan12_raw,chan13_raw,chan14_raw,chan15_raw,chan16_raw\n")); + setFileData(nav_controller_output_file,QByteArray("nav_roll,nav_pitch,nav_bearing,target_bearing,wp_dist,alt_err,as_err,xtrack_err\n")); + setFileData(airspeed_autocal_file, QByteArray("vx,vy,vz,diff_pressure,EAS2TAS,ratio,state_x,state_y,state_z,Pax,Pby,Pcz\n")); + setFileData(rpm_file, QByteArray("rpm1,rpm2,rpm3,rpm4,rpm5\n")); + setFileData(scaled_pressure_file, QByteArray("time_boot_ms,press_abs,press_diff,temperature,temperature_diff\n")); + setFileData(extended_sys_state_file,QByteArray("vtol_state,landed_state\n")); + setFileData(battery_status_file, QByteArray("current_consumed,energy_consumed,temperature,voltages[0],voltages[1],voltages[2],voltages[3],voltages[4],voltages[5],voltages[6],voltages[7],voltages[8],voltages[9],current_battery,id,battery_function,type,battery_remaining,time_remaining,charge_state,voltages_ext[0],voltages_ext[1],voltages_ext[2],voltages_ext[3]\n")); + setFileData(vibration_file, QByteArray("")); + setFileData(enginestate_file, QByteArray("time_boot_ms,ChokeFlag,Ignition2Flag,AmbientTemperatur,AirPressure,ActualFuelPressure,FuelPumpDutyCycle,ActualJet1DutyCycle,ActualRPM,CHTemperature1,counts\n")); + setFileData(vfr_hud_file, QByteArray("airspeed,groundspeed,alt,climb,heading,throttle\n")); + setFileData(aoa_ssa_file, QByteArray("")); + setFileData(emb_atom_com_file, QByteArray("time_boot_ms,airspeed,beta,alpha,ps,qbar,seq,mach\n")); + setFileData(turbinstate_file, QByteArray("time_boot_ms,RPM_mea,T5,Kfuel,RPM_des,RPM_des_ap,RPM_bak,IOState,SysState,Fault,stage_ap,temp_ap,tas_ap,asl_ap,KabMain,KabFire,KDj,T1t,P1t,P3t,P5t,DJS,Vcc,Tbak,rev,CFuelMode,Cmd\n")); + setFileData(bmustate_file, QByteArray("time_boot_ms,BAT1_group_voltage_mv,BAT1_group_current_dA,BAT1_remain_perc,BAT1_low_temp_degC,AT1_hi_temp_degC,BAT1_voltages_mv[7],BAT1_hi_voltage_mv,BAT1_low_voltage_mv,BAT2_group_voltage_mv,BAT2_group_current_dA,BAT2_remain_perc,BAT2_low_temp_degC,BAT2_hi_temp_degC,BAT2_voltages_mv[14],BAT2_hi_voltage_mv,BAT2_low_voltage_mv,BAT1_STA1,BAT1_STA2,BAT2_STA1,BAT2_STA2,p500w_enabled\n")); + setFileData(ccmstate_file, QByteArray("time_boot_ms,fuel_level,temp[0],temp[1],temp[2],temp[3],volts[0],volts[1],volts[2],volts[3],echo_seq\n")); + setFileData(serial_control_file, QByteArray("baudrate,timeout,device,flags,count,data\n")); - qDebug() << "mavlinknode" << QThread::currentThreadId(); + + qDebug() << "mavlinknode" << QThread::currentThreadId(); uint8_t count = 0; QByteArray datagram = nullptr; @@ -588,6 +690,36 @@ void MavLinkNode::LogTimerOut(void) */ } + + +bool MavLinkNode::setLogData(mavlink_message_t msg) +{ + + uint8_t buff[MAVLINK_MAX_PACKET_LEN+sizeof(quint64)]; + quint64 currentTimestamp = ((quint64)QDateTime::currentMSecsSinceEpoch()) * 1000; + qToBigEndian(currentTimestamp, buff); + uint16_t len = mavlink_msg_to_send_buffer(buff+sizeof(quint64), &msg); + if (mavLogFile) + { + auto size = Packer2_pack(&packer,1,buff,len); + + + QByteArray data; + + data.clear(); + data.append((const char *)packer.buff,size); + + QDataStream stream(mavLogFile); + + stream << data; + + return mavLogFile->flush(); + } + return false; +} + + + void MavLinkNode::timer_1s_Out(void) { static qint64 last = QDateTime::currentMSecsSinceEpoch(); @@ -651,16 +783,17 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram) last_seq = msg.seq; + setLogData(msg); + + + /* uint8_t buff[MAVLINK_MAX_PACKET_LEN+sizeof(quint64)]; quint64 currentTimestamp = ((quint64)QDateTime::currentMSecsSinceEpoch()) * 1000; qToBigEndian(currentTimestamp, buff); uint16_t len = mavlink_msg_to_send_buffer(buff+sizeof(quint64), &msg); if (mavLogFile) { - /* - mavLogFile->write((const char *)buff, len+sizeof(quint64)); - mavLogFile->flush(); - */ + QByteArray data; data.clear(); @@ -673,6 +806,7 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram) mavLogFile->flush(); } + */ count++; @@ -812,24 +946,48 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) switch (msg.msgid) { case MAVLINK_MSG_ID_AUTOPILOT_VERSION: { mavlink_msg_autopilot_version_decode(&msg,&vehicle.autopilot_version); + + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.autopilot_version.capabilities)); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.flight_sw_version)); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.middleware_sw_version)); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.os_sw_version)); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.board_version)); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.uid)); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.vendor_id)); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.product_id)); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.flight_custom_version[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.middleware_custom_version[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.os_custom_version[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.autopilot_version.uid2[0])); csvdata.append('\n'); + + setFileData(autopilot_version_file,csvdata); + + }break; case MAVLINK_MSG_ID_SYS_STATUS: { mavlink_msg_sys_status_decode(&msg,&vehicle.sys_status); + QByteArray csvdata; + csvdata.clear(); - sys_status_csv.append(QString::number(vehicle.sys_status.onboard_control_sensors_present)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.onboard_control_sensors_enabled)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.onboard_control_sensors_health)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.load)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.voltage_battery)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.current_battery)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.battery_remaining)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.drop_rate_comm)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.errors_comm)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.errors_count1)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.errors_count2)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.errors_count3)); sys_status_csv.append(','); - sys_status_csv.append(QString::number(vehicle.sys_status.errors_count4)); sys_status_csv.append('\n'); + csvdata.append(QString::number(vehicle.sys_status.onboard_control_sensors_present)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.onboard_control_sensors_enabled)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.onboard_control_sensors_health)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.load)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.voltage_battery)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.current_battery)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.battery_remaining)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.drop_rate_comm)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.errors_comm)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.errors_count1)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.errors_count2)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.errors_count3)); csvdata.append(','); + csvdata.append(QString::number(vehicle.sys_status.errors_count4)); csvdata.append('\n'); + + setFileData(sys_status_file,csvdata); }break; @@ -843,61 +1001,85 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) Status->m_heartbeat.system_status = vehicle.heartbeat.system_status; Status->m_heartbeat.type = vehicle.heartbeat.type; + QByteArray csvdata; + csvdata.clear(); - heartbeat_csv.append(QString::number(vehicle.heartbeat.type)); heartbeat_csv.append(','); - heartbeat_csv.append(QString::number(vehicle.heartbeat.autopilot)); heartbeat_csv.append(','); - heartbeat_csv.append(QString::number(vehicle.heartbeat.base_mode)); heartbeat_csv.append(','); - heartbeat_csv.append(QString::number(vehicle.heartbeat.custom_mode)); heartbeat_csv.append(','); - heartbeat_csv.append(QString::number(vehicle.heartbeat.system_status)); heartbeat_csv.append(','); - heartbeat_csv.append(QString::number(vehicle.heartbeat.mavlink_version)); heartbeat_csv.append('\n'); + csvdata.append(QString::number(vehicle.heartbeat.type)); csvdata.append(','); + csvdata.append(QString::number(vehicle.heartbeat.autopilot)); csvdata.append(','); + csvdata.append(QString::number(vehicle.heartbeat.base_mode)); csvdata.append(','); + csvdata.append(QString::number(vehicle.heartbeat.custom_mode)); csvdata.append(','); + csvdata.append(QString::number(vehicle.heartbeat.system_status)); csvdata.append(','); + csvdata.append(QString::number(vehicle.heartbeat.mavlink_version)); csvdata.append('\n'); + + setFileData(heartbeat_file,csvdata); emit beep(msg.sysid); }break; case MAVLINK_MSG_ID_PING: { mavlink_msg_ping_decode(&msg,&vehicle.ping); + + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.ping.time_usec)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ping.seq)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ping.target_system)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ping.target_component)); csvdata.append(','); + + + setFileData(ping_file,csvdata); }break; case MAVLINK_MSG_ID_ATTITUDE: { mavlink_msg_attitude_decode(&msg,&vehicle.attitude); - attitude_csv.append(QString::number(vehicle.attitude.time_boot_ms)); attitude_csv.append(','); - attitude_csv.append(QString::number(vehicle.attitude.roll)); attitude_csv.append(','); - attitude_csv.append(QString::number(vehicle.attitude.pitch)); attitude_csv.append(','); - attitude_csv.append(QString::number(vehicle.attitude.yaw)); attitude_csv.append(','); - attitude_csv.append(QString::number(vehicle.attitude.rollspeed)); attitude_csv.append(','); - attitude_csv.append(QString::number(vehicle.attitude.pitchspeed)); attitude_csv.append(','); - attitude_csv.append(QString::number(vehicle.attitude.yawspeed)); attitude_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.attitude.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.attitude.roll)); csvdata.append(','); + csvdata.append(QString::number(vehicle.attitude.pitch)); csvdata.append(','); + csvdata.append(QString::number(vehicle.attitude.yaw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.attitude.rollspeed)); csvdata.append(','); + csvdata.append(QString::number(vehicle.attitude.pitchspeed)); csvdata.append(','); + csvdata.append(QString::number(vehicle.attitude.yawspeed)); csvdata.append('\n'); + + setFileData(attitude_file,csvdata); }break; case MAVLINK_MSG_ID_INS1: { mavlink_msg_ins1_decode(&msg,&vehicle.ins1); - ins1_csv.append(QString::number(vehicle.ins1.time_boot_ms)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.pitch)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.roll)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.yaw)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.lon,'f',8)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.lat,'f',8)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.alt)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.v_north)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.v_up)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.v_east)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.gx)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.gy)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.gz)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.ax)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.ay)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.az)); ins1_csv.append(','); - ins1_csv.append(QString::number((uint64_t)vehicle.ins1.time,'f',0)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.sys_status)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.com_status)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.gps_status)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.BIT)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.seq)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.eph)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.epv)); ins1_csv.append(','); - ins1_csv.append(QString::number(vehicle.ins1.satellites_visible)); ins1_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.ins1.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.pitch)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.roll)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.yaw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.lon,'f',8)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.lat,'f',8)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.alt)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.v_north)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.v_up)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.v_east)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.gx)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.gy)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.gz)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.ax)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.ay)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.az)); csvdata.append(','); + csvdata.append(QString::number((uint64_t)vehicle.ins1.time,'f',0)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.sys_status)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.com_status)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.gps_status)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.BIT)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.seq)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.eph)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.epv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins1.satellites_visible)); csvdata.append('\n'); + + setFileData(ins1_file,csvdata); emit signal_ins1(vehicle.ins1); @@ -905,31 +1087,36 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) case MAVLINK_MSG_ID_INS2: { mavlink_msg_ins2_decode(&msg,&vehicle.ins2); - ins2_csv.append(QString::number(vehicle.ins2.time_boot_ms)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.pitch)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.roll)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.yaw)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.lon,'f',8)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.lat,'f',8)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.alt)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.v_north)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.v_up)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.v_east)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.gx)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.gy)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.gz)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.ax)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.ay)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.az)); ins2_csv.append(','); - ins2_csv.append(QString::number((uint64_t)vehicle.ins2.time,'f',0)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.sys_status)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.com_status)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.gps_status)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.BIT)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.seq)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.eph)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.epv)); ins2_csv.append(','); - ins2_csv.append(QString::number(vehicle.ins2.satellites_visible)); ins2_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.ins2.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.pitch)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.roll)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.yaw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.lon,'f',8)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.lat,'f',8)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.alt)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.v_north)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.v_up)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.v_east)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.gx)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.gy)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.gz)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.ax)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.ay)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.az)); csvdata.append(','); + csvdata.append(QString::number((uint64_t)vehicle.ins2.time,'f',0)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.sys_status)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.com_status)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.gps_status)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.BIT)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.seq)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.eph)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.epv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ins2.satellites_visible)); csvdata.append('\n'); + + setFileData(ins2_file,csvdata); emit signal_ins2(vehicle.ins2); @@ -937,50 +1124,74 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) case MAVLINK_MSG_ID_GPS_RAW_INT: { mavlink_msg_gps_raw_int_decode(&msg,&vehicle.gps_raw_int); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.time_usec));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.lat));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.lon));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.alt));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.eph));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.epv));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.vel));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.cog));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.fix_type));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.satellites_visible));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.alt_ellipsoid));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.time_usec));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.h_acc));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.v_acc));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.vel_acc));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.hdg_acc));gps_raw_int_csv.append(','); - gps_raw_int_csv.append(QString::number(vehicle.gps_raw_int.yaw));gps_raw_int_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.gps_raw_int.time_usec)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.lat)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.lon)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.alt)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.eph)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.epv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.vel)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.cog)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.fix_type)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.satellites_visible)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.alt_ellipsoid)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.time_usec)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.h_acc)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.v_acc)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.vel_acc)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.hdg_acc)); csvdata.append(','); + csvdata.append(QString::number(vehicle.gps_raw_int.yaw)); csvdata.append('\n'); + setFileData(gps_raw_int_file,csvdata); }break; case MAVLINK_MSG_ID_GLOBAL_POSITION_INT: { mavlink_msg_global_position_int_decode(&msg,&vehicle.global_position_int); + + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.global_position_int.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.global_position_int.lat)); csvdata.append(','); + csvdata.append(QString::number(vehicle.global_position_int.lon)); csvdata.append(','); + csvdata.append(QString::number(vehicle.global_position_int.alt)); csvdata.append(','); + csvdata.append(QString::number(vehicle.global_position_int.relative_alt)); csvdata.append(','); + csvdata.append(QString::number(vehicle.global_position_int.vx)); csvdata.append(','); + csvdata.append(QString::number(vehicle.global_position_int.vy)); csvdata.append(','); + csvdata.append(QString::number(vehicle.global_position_int.vz)); csvdata.append(','); + csvdata.append(QString::number(vehicle.global_position_int.hdg)); csvdata.append('\n'); + + setFileData(global_position_int_file,csvdata); + }break; case MAVLINK_MSG_ID_SERVO_OUTPUT_RAW: { mavlink_msg_servo_output_raw_decode(&msg,&vehicle.servo_output_raw); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.time_usec)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.port)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo1_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo2_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo3_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo4_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo5_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo6_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo7_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo8_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo9_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo10_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo11_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo12_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo13_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo14_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo15_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append(','); - servo_output_raw_csv[vehicle.servo_output_raw.port].append(QString::number(vehicle.servo_output_raw.servo16_raw)); servo_output_raw_csv[vehicle.servo_output_raw.port].append('\n'); + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.servo_output_raw.time_usec)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.port)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo1_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo2_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo3_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo4_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo5_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo6_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo7_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo8_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo9_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo10_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo11_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo12_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo13_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo14_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo15_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.servo_output_raw.servo16_raw)); csvdata.append('\n'); + + setFileData(servo_output_raw_file,csvdata); emit signal_servo_output_raw(vehicle.servo_output_raw); @@ -989,175 +1200,290 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) }break; case MAVLINK_MSG_ID_RC_CHANNELS_RAW: { mavlink_msg_rc_channels_raw_decode(&msg,&vehicle.rc_channels_raw); + + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.rc_channels_raw.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.port)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.rssi)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan1_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan2_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan3_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan4_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan5_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan6_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan7_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan8_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan9_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan10_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan11_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan12_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan13_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan14_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan15_raw)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rc_channels_raw.chan16_raw)); csvdata.append('\n'); + + + setFileData(rc_channels_raw_file,csvdata); }break; case MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT: { mavlink_msg_nav_controller_output_decode(&msg,&vehicle.nav_controller_output); - nav_controller_output_csv.append(QString::number(vehicle.nav_controller_output.nav_roll)); nav_controller_output_csv.append(','); - nav_controller_output_csv.append(QString::number(vehicle.nav_controller_output.nav_pitch)); nav_controller_output_csv.append(','); - nav_controller_output_csv.append(QString::number(vehicle.nav_controller_output.nav_bearing)); nav_controller_output_csv.append(','); - nav_controller_output_csv.append(QString::number(vehicle.nav_controller_output.target_bearing)); nav_controller_output_csv.append(','); - nav_controller_output_csv.append(QString::number(vehicle.nav_controller_output.wp_dist)); nav_controller_output_csv.append(','); - nav_controller_output_csv.append(QString::number(vehicle.nav_controller_output.alt_error)); nav_controller_output_csv.append(','); - nav_controller_output_csv.append(QString::number(vehicle.nav_controller_output.aspd_error)); nav_controller_output_csv.append(','); - nav_controller_output_csv.append(QString::number(vehicle.nav_controller_output.xtrack_error)); nav_controller_output_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.nav_controller_output.nav_roll)); csvdata.append(','); + csvdata.append(QString::number(vehicle.nav_controller_output.nav_pitch)); csvdata.append(','); + csvdata.append(QString::number(vehicle.nav_controller_output.nav_bearing)); csvdata.append(','); + csvdata.append(QString::number(vehicle.nav_controller_output.target_bearing)); csvdata.append(','); + csvdata.append(QString::number(vehicle.nav_controller_output.wp_dist)); csvdata.append(','); + csvdata.append(QString::number(vehicle.nav_controller_output.alt_error)); csvdata.append(','); + csvdata.append(QString::number(vehicle.nav_controller_output.aspd_error)); csvdata.append(','); + csvdata.append(QString::number(vehicle.nav_controller_output.xtrack_error)); csvdata.append('\n'); + setFileData(nav_controller_output_file,csvdata); }break; case MAVLINK_MSG_ID_AIRSPEED_AUTOCAL: { mavlink_msg_airspeed_autocal_decode(&msg,&vehicle.airspeed_autocal); + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.airspeed_autocal.vx)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.vy)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.vz)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.diff_pressure)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.EAS2TAS)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.ratio)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.state_x)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.state_y)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.state_z)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.Pax)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.Pby)); csvdata.append(','); + csvdata.append(QString::number(vehicle.airspeed_autocal.Pcz)); csvdata.append(','); + + setFileData(airspeed_autocal_file,csvdata); }break; case MAVLINK_MSG_ID_RPM: { mavlink_msg_rpm_decode(&msg,&vehicle.rpm); + + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.rpm.rpm1)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rpm.rpm2)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rpm.rpm3)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rpm.rpm4)); csvdata.append(','); + csvdata.append(QString::number(vehicle.rpm.rpm5)); csvdata.append('\n'); + + setFileData(rpm_file,csvdata); }break; case MAVLINK_MSG_ID_SCALED_PRESSURE: { mavlink_msg_scaled_pressure_decode(&msg,&vehicle.scaled_pressure); - scaled_pressure_csv.append(QString::number(vehicle.scaled_pressure.time_boot_ms)); scaled_pressure_csv.append(','); - scaled_pressure_csv.append(QString::number(vehicle.scaled_pressure.press_abs)); scaled_pressure_csv.append(','); - scaled_pressure_csv.append(QString::number(vehicle.scaled_pressure.press_diff)); scaled_pressure_csv.append(','); - scaled_pressure_csv.append(QString::number(vehicle.scaled_pressure.temperature)); scaled_pressure_csv.append(','); - scaled_pressure_csv.append(QString::number(vehicle.scaled_pressure.temperature_press_diff)); scaled_pressure_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.scaled_pressure.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.scaled_pressure.press_abs)); csvdata.append(','); + csvdata.append(QString::number(vehicle.scaled_pressure.press_diff)); csvdata.append(','); + csvdata.append(QString::number(vehicle.scaled_pressure.temperature)); csvdata.append(','); + csvdata.append(QString::number(vehicle.scaled_pressure.temperature_press_diff)); csvdata.append('\n'); + setFileData(scaled_pressure_file,csvdata); }break; case MAVLINK_MSG_ID_EXTENDED_SYS_STATE: { mavlink_msg_extended_sys_state_decode(&msg,&vehicle.extended_sys_state); + + QByteArray csvdata; + csvdata.clear(); + + csvdata.append(QString::number(vehicle.extended_sys_state.vtol_state)); csvdata.append(','); + csvdata.append(QString::number(vehicle.extended_sys_state.landed_state)); csvdata.append('\n'); + + setFileData(extended_sys_state_file,csvdata); }break; case MAVLINK_MSG_ID_BATTERY_STATUS: { mavlink_msg_battery_status_decode(&msg,&vehicle.battery_status); - /* - battery_status_csv.append(QString::number(vehicle.battery_status.time_boot_ms)); battery_status_csv.append(','); - battery_status_csv.append(QString::number(vehicle.battery_status.Airspeed)); battery_status_csv.append(','); - battery_status_csv.append(QString::number(vehicle.battery_status.beta)); battery_status_csv.append(','); - battery_status_csv.append(QString::number(vehicle.battery_status.alpha)); battery_status_csv.append(','); - battery_status_csv.append(QString::number(vehicle.battery_status.ps)); battery_status_csv.append(','); - battery_status_csv.append(QString::number(vehicle.battery_status.qbar)); battery_status_csv.append(','); - battery_status_csv.append(QString::number(vehicle.battery_status.seq)); battery_status_csv.append(','); - battery_status_csv.append(QString::number(vehicle.battery_status.mach)); battery_status_csv.append('\n'); - */ + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.battery_status.current_consumed)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.energy_consumed)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.temperature)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[1])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[2])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[3])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[4])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[5])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[6])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[7])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[8])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages[9])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.current_battery)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.id)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.battery_function)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.type)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.battery_remaining)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.time_remaining)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.charge_state)); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages_ext[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages_ext[1])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages_ext[2])); csvdata.append(','); + csvdata.append(QString::number(vehicle.battery_status.voltages_ext[3])); csvdata.append('\n'); + + setFileData(battery_status_file,csvdata); }break; case MAVLINK_MSG_ID_VIBRATION: { mavlink_msg_vibration_decode(&msg,&vehicle.vibration); + + QByteArray csvdata; + csvdata.clear(); + + + + setFileData(vibration_file,csvdata); }break; case MAVLINK_MSG_ID_EngineState: { mavlink_msg_enginestate_decode(&msg,&vehicle.enginestate); - enginestate_csv.append(QString::number(vehicle.enginestate.time_boot_ms)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.ChokeFlag)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.Ignition2Flag)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.AmbientTemperatur)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.AirPressure)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.ActualFuelPressure)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.FuelPumpDutyCycle)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.ActualJet1DutyCycle)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.ActualRPM)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.CHTemperature1)); enginestate_csv.append(','); - enginestate_csv.append(QString::number(vehicle.enginestate.counts)); enginestate_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.enginestate.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.ChokeFlag)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.Ignition2Flag)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.AmbientTemperatur)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.AirPressure)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.ActualFuelPressure)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.FuelPumpDutyCycle)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.ActualJet1DutyCycle)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.ActualRPM)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.CHTemperature1)); csvdata.append(','); + csvdata.append(QString::number(vehicle.enginestate.counts)); csvdata.append('\n'); + setFileData(enginestate_file,csvdata); }break; case MAVLINK_MSG_ID_VFR_HUD: { mavlink_msg_vfr_hud_decode(&msg,&vehicle.vfr_hud); - vfr_hud_csv.append(QString::number(vehicle.vfr_hud.airspeed)); vfr_hud_csv.append(','); - vfr_hud_csv.append(QString::number(vehicle.vfr_hud.groundspeed)); vfr_hud_csv.append(','); - vfr_hud_csv.append(QString::number(vehicle.vfr_hud.alt)); vfr_hud_csv.append(','); - vfr_hud_csv.append(QString::number(vehicle.vfr_hud.climb)); vfr_hud_csv.append(','); - vfr_hud_csv.append(QString::number(vehicle.vfr_hud.heading)); vfr_hud_csv.append(','); - vfr_hud_csv.append(QString::number(vehicle.vfr_hud.throttle)); vfr_hud_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.vfr_hud.airspeed)); csvdata.append(','); + csvdata.append(QString::number(vehicle.vfr_hud.groundspeed)); csvdata.append(','); + csvdata.append(QString::number(vehicle.vfr_hud.alt)); csvdata.append(','); + csvdata.append(QString::number(vehicle.vfr_hud.climb)); csvdata.append(','); + csvdata.append(QString::number(vehicle.vfr_hud.heading)); csvdata.append(','); + csvdata.append(QString::number(vehicle.vfr_hud.throttle)); csvdata.append('\n'); + + setFileData(vfr_hud_file,csvdata); }break; case MAVLINK_MSG_ID_EMB_ATMO_COM: { mavlink_msg_emb_atmo_com_decode(&msg,&vehicle.emb_atom_com); - emb_atom_com_csv.append(QString::number(vehicle.emb_atom_com.time_boot_ms)); emb_atom_com_csv.append(','); - emb_atom_com_csv.append(QString::number(vehicle.emb_atom_com.Airspeed)); emb_atom_com_csv.append(','); - emb_atom_com_csv.append(QString::number(vehicle.emb_atom_com.beta)); emb_atom_com_csv.append(','); - emb_atom_com_csv.append(QString::number(vehicle.emb_atom_com.alpha)); emb_atom_com_csv.append(','); - emb_atom_com_csv.append(QString::number(vehicle.emb_atom_com.ps)); emb_atom_com_csv.append(','); - emb_atom_com_csv.append(QString::number(vehicle.emb_atom_com.qbar)); emb_atom_com_csv.append(','); - emb_atom_com_csv.append(QString::number(vehicle.emb_atom_com.seq)); emb_atom_com_csv.append(','); - emb_atom_com_csv.append(QString::number(vehicle.emb_atom_com.mach)); emb_atom_com_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.emb_atom_com.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.emb_atom_com.Airspeed)); csvdata.append(','); + csvdata.append(QString::number(vehicle.emb_atom_com.beta)); csvdata.append(','); + csvdata.append(QString::number(vehicle.emb_atom_com.alpha)); csvdata.append(','); + csvdata.append(QString::number(vehicle.emb_atom_com.ps)); csvdata.append(','); + csvdata.append(QString::number(vehicle.emb_atom_com.qbar)); csvdata.append(','); + csvdata.append(QString::number(vehicle.emb_atom_com.seq)); csvdata.append(','); + csvdata.append(QString::number(vehicle.emb_atom_com.mach)); csvdata.append('\n'); + + setFileData(emb_atom_com_file,csvdata); }break; case MAVLINK_MSG_ID_TurbineState: { mavlink_msg_turbinestate_decode(&msg,&vehicle.turbinstate); - turbinstate_csv.append(QString::number(vehicle.turbinstate.time_boot_ms)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.RPM_mea)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.T5)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.Kfuel)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.RPM_des)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.RPM_des_ap)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.RPM_bak)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.IOState)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.SysState)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.Fault)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.stage_ap)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.temp_ap)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.tas_ap)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.asl_ap)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.KabMain)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.KabFire)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.KDj)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.T1t)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.P1t)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.P3t)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.P5t)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.DJS)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.Vcc)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.Tbak)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.rev)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.CFuelMode)); turbinstate_csv.append(','); - turbinstate_csv.append(QString::number(vehicle.turbinstate.Cmd)); turbinstate_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.turbinstate.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.RPM_mea)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.T5)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.Kfuel)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.RPM_des)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.RPM_des_ap)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.RPM_bak)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.IOState)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.SysState)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.Fault)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.stage_ap)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.temp_ap)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.tas_ap)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.asl_ap)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.KabMain)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.KabFire)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.KDj)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.T1t)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.P1t)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.P3t)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.P5t)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.DJS)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.Vcc)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.Tbak)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.rev)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.CFuelMode)); csvdata.append(','); + csvdata.append(QString::number(vehicle.turbinstate.Cmd)); csvdata.append('\n'); + + setFileData(turbinstate_file,csvdata); }break; case MAVLINK_MSG_ID_BMUState: { mavlink_msg_bmustate_decode(&msg,&vehicle.bmustate); - bmustate_csv.append(QString::number(vehicle.bmustate.time_boot_ms)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_group_voltage_mv)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_group_current_dA)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_remain_perc)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_low_temp_degC)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_voltages_mv[0])); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_hi_voltage_mv)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_low_voltage_mv)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_group_voltage_mv)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_group_current_dA)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_remain_perc)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_low_temp_degC)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_hi_temp_degC)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_voltages_mv[0])); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_hi_voltage_mv)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_low_voltage_mv)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_STA1)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT1_STA2)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_STA1)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.BAT2_STA2)); bmustate_csv.append(','); - bmustate_csv.append(QString::number(vehicle.bmustate.p500w_enabled)); bmustate_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.bmustate.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_group_voltage_mv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_group_current_dA)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_remain_perc)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_low_temp_degC)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_voltages_mv[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_hi_voltage_mv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_low_voltage_mv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_group_voltage_mv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_group_current_dA)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_remain_perc)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_low_temp_degC)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_hi_temp_degC)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_voltages_mv[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_hi_voltage_mv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_low_voltage_mv)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_STA1)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT1_STA2)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_STA1)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.BAT2_STA2)); csvdata.append(','); + csvdata.append(QString::number(vehicle.bmustate.p500w_enabled)); csvdata.append('\n'); + + setFileData(bmustate_file,csvdata); }break; case MAVLINK_MSG_ID_CCMState: { mavlink_msg_ccmstate_decode(&msg,&vehicle.ccmstate); - ccmstate_csv.append(QString::number(vehicle.ccmstate.time_boot_ms)); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.fuel_level)); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.temp[0])); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.temp[1])); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.temp[2])); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.temp[3])); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.volts[0])); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.volts[1])); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.volts[2])); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.volts[3])); ccmstate_csv.append(','); - ccmstate_csv.append(QString::number(vehicle.ccmstate.echo_seq)); ccmstate_csv.append('\n'); + QByteArray csvdata; + csvdata.clear(); + csvdata.append(QString::number(vehicle.ccmstate.time_boot_ms)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.fuel_level)); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.temp[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.temp[1])); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.temp[2])); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.temp[3])); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.volts[0])); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.volts[1])); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.volts[2])); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.volts[3])); csvdata.append(','); + csvdata.append(QString::number(vehicle.ccmstate.echo_seq)); csvdata.append('\n'); + setFileData(ccmstate_file,csvdata); }break; } @@ -1166,15 +1492,8 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) //vehicleList.insert(msg.sysid,vehicle);//直接覆盖 - - //emit signal_vehicle(vehicle); - - - - - static qint64 frq_time = 0; if((QDateTime::currentMSecsSinceEpoch() - frq_time) >= 200) { diff --git a/MavLinkNode/mavlinknode.h b/MavLinkNode/mavlinknode.h index 512e2a0..58434e9 100644 --- a/MavLinkNode/mavlinknode.h +++ b/MavLinkNode/mavlinknode.h @@ -21,6 +21,9 @@ #include "ThreadTemplet.h" +#include "ParsePack.h" + + #ifdef QtMavlinkNode #include class MAVLINKNODESHARED_EXPORT MavLinkNode : public ThreadTemplet { @@ -109,36 +112,6 @@ public: QByteArray rtkrawdata; - QByteArray csvData; - - QByteArray autopilot_version_csv; - QByteArray sys_status_csv; - QByteArray heartbeat_csv; - QByteArray ping_csv; - QByteArray attitude_csv; - QByteArray ins1_csv; - QByteArray ins2_csv; - QByteArray gps_raw_int_csv; - QByteArray global_position_int_csv; - QByteArray servo_output_raw_csv[10]; - QByteArray rc_channels_raw_csv; - QByteArray nav_controller_output_csv; - QByteArray airspeed_autocal_csv; - QByteArray rpm_csv; - QByteArray scaled_pressure_csv; - QByteArray extended_sys_state_csv; - QByteArray battery_status_csv; - QByteArray vibration_csv; - QByteArray enginestate_csv; - QByteArray vfr_hud_csv; - QByteArray aoa_ssa_csv; - QByteArray emb_atom_com_csv; - QByteArray turbinstate_csv; - QByteArray bmustate_csv; - QByteArray ccmstate_csv; - QByteArray serial_control_csv; - - QFile * autopilot_version_file = nullptr; QFile * sys_status_file = nullptr; QFile * heartbeat_file = nullptr; @@ -222,6 +195,10 @@ signals: public slots: //线程对外接口 void CreateCSV(void); + void CloseCSV(void); + + bool setFileData(QFile *file,const QByteArray &data); + //缓存对外接口 void readPendingDatagramsReplay(void); @@ -255,6 +232,7 @@ private slots: //check for new vehicle void CheckVehicle(int sysid, int compid); + bool setLogData(mavlink_message_t msg); protected: @@ -295,6 +273,9 @@ protected: QTimer *timer_1s = nullptr; + Parser2_t parser; + Packer2_t packer; + mutable QReadWriteLock RWlock; }; diff --git a/MavLinkNode/replay.cpp b/MavLinkNode/replay.cpp index 8da2b1d..8ea0876 100644 --- a/MavLinkNode/replay.cpp +++ b/MavLinkNode/replay.cpp @@ -6,6 +6,10 @@ Replay::Replay(QObject *parent) : ThreadTemplet(parent) setRunFrq(5);//100 logFile.clear(); + + Parser2_init(&parser); + Packer2_init(&packer); + } Replay::~Replay() @@ -31,85 +35,95 @@ void Replay::process()//线程函数 { if(position <= file->size()) { - QByteArray raw; + QByteArray data; QByteArray time; - file->seek(position); + //file->seek(position); - raw = file->read(MAVLINK_MAX_PACKET_LEN + sizeof(quint64)); + data = file->readAll(); + //data = file->read(MAVLINK_MAX_PACKET_LEN + sizeof(quint64)); - if(raw.indexOf(0xFD) >= 8) + for (QByteArray::const_iterator i = data.cbegin(); i != data.cend(); ++i) { - time = raw.mid(raw.indexOf(0xFD) - 8,8); - } - else - { - position -= 8 - raw.indexOf(0xFD); - - file->seek(position); - - raw = file->read(MAVLINK_MAX_PACKET_LEN + sizeof(quint64)); - - time = raw.mid(raw.indexOf(0xFD) - 8,8); - } - - union {uint8_t B[8];uint64_t DW;}src; - - src.B[0] = time.data()[7]; - src.B[1] = time.data()[6]; - src.B[2] = time.data()[5]; - src.B[3] = time.data()[4]; - src.B[4] = time.data()[3]; - src.B[5] = time.data()[2]; - src.B[6] = time.data()[1]; - src.B[7] = time.data()[0]; - - currentTimestamp = src.DW; - - if(lastTimestamp == 0) - { - lastTimestamp = currentTimestamp - 50; - } - - if(((currentTimestamp - lastTimestamp) >0)&&((currentTimestamp - lastTimestamp) < 5000000)) - { - timeStamp = currentTimestamp - lastTimestamp; - } - - if((currentTimestamp - lastTimestamp) >0) - { - - if((((double)timeStamp)/ multiple) > 50) - { - QThread::usleep(uint64_t(timeStamp / multiple)); - } - else - { - QThread::usleep(1000); - //qDebug() << "1000 us"; - } - - if(timeStamp < 50) + if(0x01 == Parser2_char(&parser,*i)) { - timeStamp = 50; + QByteArray raw; + raw.setRawData((const char*)parser.buff,parser.len); + + if(raw.indexOf(0xFD) >= 8) + { + time = raw.mid(raw.indexOf(0xFD) - 8,8); + } + else + { + position -= 8 - raw.indexOf(0xFD); + + file->seek(position); + + raw = file->read(MAVLINK_MAX_PACKET_LEN + sizeof(quint64)); + + time = raw.mid(raw.indexOf(0xFD) - 8,8); + } + + union {uint8_t B[8];uint64_t DW;}src; + + src.B[0] = time.data()[7]; + src.B[1] = time.data()[6]; + src.B[2] = time.data()[5]; + src.B[3] = time.data()[4]; + src.B[4] = time.data()[3]; + src.B[5] = time.data()[2]; + src.B[6] = time.data()[1]; + src.B[7] = time.data()[0]; + + currentTimestamp = src.DW; + + if(lastTimestamp == 0) + { + lastTimestamp = currentTimestamp - 50; + } + + if(((currentTimestamp - lastTimestamp) >0)&&((currentTimestamp - lastTimestamp) < 5000000)) + { + timeStamp = currentTimestamp - lastTimestamp; + } + + if((currentTimestamp - lastTimestamp) >0) + { + + if((((double)timeStamp)/ multiple) > 50) + { + QThread::usleep(uint64_t(timeStamp / multiple)); + } + else + { + QThread::usleep(1000); + } + + if(timeStamp < 50) + { + timeStamp = 50; + } + } + + + position += (uint8_t)raw.at(raw.indexOf(0xFD)+1) + 20; + + buff.clear(); + buff = raw.mid(raw.indexOf(0xFD),(uint8_t)raw.at(raw.indexOf(0xFD) +1) + 12); + + //读取一帧数据 + //将百分比增加,或者位置增加 + percentage = (float)position / file->size(); + emit currentPercentage(percentage); + emit readReady(); + + lastTimestamp = currentTimestamp; + + + break; } } - - - position += (uint8_t)raw.at(raw.indexOf(0xFD)+1) + 20; - - buff.clear(); - buff = raw.mid(raw.indexOf(0xFD),(uint8_t)raw.at(raw.indexOf(0xFD) +1) + 12); - - //读取一帧数据 - //将百分比增加,或者位置增加 - percentage = (float)position / file->size(); - emit currentPercentage(percentage); - emit readReady(); - - lastTimestamp = currentTimestamp; - - //QApplication::processEvents(); } else { @@ -125,7 +139,6 @@ void Replay::process()//线程函数 } else { - //QThread::yieldCurrentThread();//放弃运行 QThread::msleep(1000);//如果没有播放,那么每秒钟检测一下是否要播放 } @@ -133,12 +146,10 @@ void Replay::process()//线程函数 { break; } - //QThread::yieldCurrentThread(); } } //类相关函数 - QByteArray Replay::readAll(void) { //把buff里面的数据返回 diff --git a/MavLinkNode/replay.h b/MavLinkNode/replay.h index 584f380..f5410aa 100644 --- a/MavLinkNode/replay.h +++ b/MavLinkNode/replay.h @@ -16,6 +16,8 @@ #include "ThreadTemplet.h" +#include "ParsePack.h" + #ifdef QtMavlinkNode #include class MAVLINKNODESHARED_EXPORT Replay : public ThreadTemplet { @@ -61,6 +63,9 @@ protected: bool isplaying = false;//控制开始和结束 QByteArray buff; + Parser2_t parser; + Packer2_t packer; + double multiple = 1; diff --git a/opmap/MAP_zh_CN.qm b/opmap/MAP_zh_CN.qm index b88cb57..2e3fa9f 100644 Binary files a/opmap/MAP_zh_CN.qm and b/opmap/MAP_zh_CN.qm differ diff --git a/opmap/MAP_zh_CN.ts b/opmap/MAP_zh_CN.ts index eb24b88..5e0ead1 100644 --- a/opmap/MAP_zh_CN.ts +++ b/opmap/MAP_zh_CN.ts @@ -83,27 +83,27 @@ Please first select the area of the map to rip with <CTRL>+Left mouse clic - + + 开始上传围栏,总数%1 + + + + 开始上传航点,总数%1 - + 上传失败%1 - - polygons - + + fence + 围栏 - - circles - - - - + recieve way point group:%1 seq:%2 收到航点:第%1组,第%2点 @@ -126,6 +126,23 @@ Please first select the area of the map to rip with <CTRL>+Left mouse clic 时间: + + mapcontrol::UAVItem + + + Speed: %1m/s +Ma:%2 + 表速:%1m/s +马赫数:%2 + + + + Height: %1m +%2 + 高度:%1m +%2 + + mapcontrol::WayPointItem diff --git a/opmap/mapwidget/geoFencecircle.h b/opmap/mapwidget/geoFencecircle.h index 5244e20..be592ff 100644 --- a/opmap/mapwidget/geoFencecircle.h +++ b/opmap/mapwidget/geoFencecircle.h @@ -38,6 +38,8 @@ public: void setGroup(int value) { m_group = value; + + //emit updateFenceCircle(m_group,m_radius,m_inclusion,m_latitude,m_longitide); update(); } diff --git a/opmap/mapwidget/geoFenceitem.cpp b/opmap/mapwidget/geoFenceitem.cpp index 6e0f30b..8dec006 100644 --- a/opmap/mapwidget/geoFenceitem.cpp +++ b/opmap/mapwidget/geoFenceitem.cpp @@ -208,6 +208,8 @@ void geoFenceitem::setPoints(QList p) m_Vertex = p.size(); RefreshPos(); } + + } diff --git a/opmap/mapwidget/geoFenceitem.h b/opmap/mapwidget/geoFenceitem.h index e791015..abeb7eb 100644 --- a/opmap/mapwidget/geoFenceitem.h +++ b/opmap/mapwidget/geoFenceitem.h @@ -45,6 +45,17 @@ public: void setGroup(int value) { m_group = value; + + QList latlng; + + + for(internals::PointLatLng p:points) + { + latlng.push_back(QPointF(p.Lat(),p.Lng())); + } + + //emit updateFencePolygon(m_group,m_Vertex,m_inclusion,latlng); + RefreshPos(); } diff --git a/opmap/mapwidget/opmapwidget.cpp b/opmap/mapwidget/opmapwidget.cpp index b3d4d87..502fe4e 100644 --- a/opmap/mapwidget/opmapwidget.cpp +++ b/opmap/mapwidget/opmapwidget.cpp @@ -147,6 +147,8 @@ OPMapWidget::OPMapWidget(QWidget *parent, Configuration *config) : QGraphicsView //missiontable->hide(); + + point_begin.SetLat(0); point_begin.SetLng(0); @@ -571,9 +573,25 @@ void OPMapWidget::setUAVHeading(int sysid,int compid,float Heading) } } } - } +void OPMapWidget::setUAVSpeed(int sysid,int compid,qreal Ma,qreal Speed) +{ + Q_UNUSED(compid) + foreach(QGraphicsItem * i, map->childItems()) { + UAVItem *u = qgraphicsitem_cast(i); + if (u) { + if(u->SysID() == sysid) + { + u->setMa(Ma); + u->setSpeed(Speed); + } + } + } +} + + + int OPMapWidget::getUAVCurrent(void) { int num = -1; @@ -1221,17 +1239,27 @@ void OPMapWidget::WPInsert() { WPLineCreate(item,w_next,Qt::green,false,2); } + + } - //设置跟随 - /* + // + foreach(QGraphicsItem * i, map->childItems()) { WayPointItem *w = qgraphicsitem_cast(i); if (w) { - WPFollowPrevious(w->FollowPrevious(),w); + if(w->isSelected()) + { + w->emitWPProperty(); + } } } - */ + + + + + + } void OPMapWidget::WPInsert(WayPointItem *item, const int &position) @@ -1653,6 +1681,9 @@ void OPMapWidget::setSelectedWP(int number) if(!wp->FollowPrevious()) altitudeitem->setCurrentPoint(wp->Number()); } + + emit currentPointSeleted(wp->MissionType(),wp->Number()); + } } @@ -2163,6 +2194,29 @@ void OPMapWidget::delFence(int group) } } } + + //重新整理一下fenceCount + + /* + fenceCount = 0; + foreach(QGraphicsItem * i, map->childItems()) { + geoFenceitem *w = qgraphicsitem_cast(i); + if (w) { + w->setGroup(fenceCount++); + } + } + + foreach(QGraphicsItem * i, map->childItems()) { + geoFencecircle *w = qgraphicsitem_cast(i); + if (w) { + w->setGroup(fenceCount++); + } + } + */ + + + + } @@ -2519,7 +2573,7 @@ void OPMapWidget::WPDownload(void) if(currentGroup == 1) { - //fenceCount = 0; + fenceCount = 0; } int sysid = 0; @@ -3014,8 +3068,8 @@ void OPMapWidget::receivedPoint(float param1,float param2,float param3,float par bool inclusion = true; qreal radius = param1; - geoFencecircle *c = new geoFencecircle(fenceCount++,inclusion,0,internals::PointLatLng(x * 10e-8,y * 10e-8),radius,QColor("#FF8000"),map); - emit createFenceCircle(0,radius,inclusion,x * 10e-8,y * 10e-8); + geoFencecircle *c = new geoFencecircle(fenceCount,inclusion,0,internals::PointLatLng(x * 10e-8,y * 10e-8),radius,QColor("#FF8000"),map); + emit createFenceCircle(fenceCount++,radius,inclusion,x * 10e-8,y * 10e-8); connect(c,SIGNAL(updateFenceCircle(int,qreal,bool,qreal,qreal)), this,SIGNAL(updateFenceCircle(int,qreal,bool,qreal,qreal))); @@ -3025,8 +3079,8 @@ void OPMapWidget::receivedPoint(float param1,float param2,float param3,float par bool inclusion = false; qreal radius = param1; - geoFencecircle *c = new geoFencecircle(fenceCount++,inclusion,0,internals::PointLatLng(x * 10e-8,y * 10e-8),radius,QColor("#FF8000"),map); - emit createFenceCircle(0,radius,inclusion,x * 10e-8,y * 10e-8); + geoFencecircle *c = new geoFencecircle(fenceCount,inclusion,0,internals::PointLatLng(x * 10e-8,y * 10e-8),radius,QColor("#FF8000"),map); + emit createFenceCircle(fenceCount++,radius,inclusion,x * 10e-8,y * 10e-8); connect(c,SIGNAL(updateFenceCircle(int,qreal,bool,qreal,qreal)), this,SIGNAL(updateFenceCircle(int,qreal,bool,qreal,qreal))); @@ -3190,13 +3244,29 @@ void OPMapWidget::AltitudeChanged(int seq,double value) void OPMapWidget::setCurrentPoint(int value) { + //qDebug() << "current point" << value; if(altitudeitem) { altitudeitem->setCurrentPoint(value); } } - +void OPMapWidget::getCurrentPoint(int group) +{ + foreach(QGraphicsItem * i, map->childItems()) { + WayPointItem *w = qgraphicsitem_cast(i); + if (w) + { + if(w->MissionType() == group) + { + if(w->isSelected()) + { + w->emitWPProperty(); + } + } + } + } +} void OPMapWidget::updateMessage(void) diff --git a/opmap/mapwidget/opmapwidget.h b/opmap/mapwidget/opmapwidget.h index 80c9789..23f9ddb 100644 --- a/opmap/mapwidget/opmapwidget.h +++ b/opmap/mapwidget/opmapwidget.h @@ -397,7 +397,6 @@ public: WayPointSetting *waypointsetting; - MeasureLine *measureline = nullptr; int currentGroup = 3;//编辑情况 @@ -457,6 +456,7 @@ public: void setUAVPos(int sysid,int compid,double x,double y,double z); void setUAVHeading(int sysid,int compid,float Heading); + void setUAVSpeed(int sysid,int compid,qreal Ma,qreal Speed); void DeleteTrail(void); @@ -664,7 +664,7 @@ signals: uint16_t compid, uint16_t currentGroup); - + void currentPointSeleted(int group,int point); public slots: @@ -681,6 +681,7 @@ public slots: + void getMapTypes(void); void setMapTypes(QVariant value); @@ -759,7 +760,7 @@ public slots: void addPolygon(); void delFence(int group); - + void getCurrentPoint(int group); }; } diff --git a/opmap/mapwidget/ruledialog.cpp b/opmap/mapwidget/ruledialog.cpp index bc102a9..0b17e69 100644 --- a/opmap/mapwidget/ruledialog.cpp +++ b/opmap/mapwidget/ruledialog.cpp @@ -14,7 +14,6 @@ RuleDialog::RuleDialog(QWidget *parent) : RuleDialog::~RuleDialog() { - emit isWindowClose(ID); delete ui; } diff --git a/opmap/mapwidget/ruledialog.h b/opmap/mapwidget/ruledialog.h index 4598fd8..71cbee7 100644 --- a/opmap/mapwidget/ruledialog.h +++ b/opmap/mapwidget/ruledialog.h @@ -13,11 +13,11 @@ class RuleDialog; #ifdef QtopmapWidget #include -class OPMAPWIDGETSHARED_EXPORT RuleDialog : public QDialog +class OPMAPWIDGETSHARED_EXPORT RuleDialog : public QDialog { #else class RuleDialog : public QDialog -#endif { +#endif Q_OBJECT public: @@ -26,9 +26,6 @@ public: explicit RuleDialog(QWidget *parent = 0); ~RuleDialog(); - - - signals: void isWindowClose(char); void GetPoint(quint8); diff --git a/opmap/mapwidget/uavitem.cpp b/opmap/mapwidget/uavitem.cpp index 9388cef..1601af7 100644 --- a/opmap/mapwidget/uavitem.cpp +++ b/opmap/mapwidget/uavitem.cpp @@ -127,6 +127,12 @@ void UAVItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q painter->restore(); + + + + + + painter->save(); // Rotate the text back to vertical @@ -148,6 +154,49 @@ void UAVItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q painter->restore(); + + if(isShowTip) + { + painter->save(); + + qreal rot = this->rotation(); + painter->rotate(-1 * rot); + + QRectF rect = QRectF(-50,-80,100,50); + + //画一块底色#58ACFA + painter->setBrush(QColor("#BEF781")); + //painter->setBrush(Qt::NoBrush); + painter->setOpacity(TipOpacity); + + + pen.setColor(QColor("#58ACFA")); + pen.setWidth(2); + painter->setPen(pen); + painter->drawRoundedRect(rect,5,5); + + //画字 + QFont font; + font.setWeight(QFont::ExtraLight); + font.setFamily("Arial");//非衬线 + font.setPixelSize(12); + painter->setFont(font); + + pen.setColor(QColor("#000000")); + painter->setPen(pen); + + QString _h; + QString _v; + + + _v = tr("Speed: %1m/s\nMa:%2").arg(QString::number(Vc,'f',0)).arg(QString::number(Ma,'f',2)); + + _h.append(tr("Height: %1m\n%2").arg(QString::number(altitude,'f',0)).arg(_v)); + painter->drawText(QRectF(rect.x() + 2,rect.y()+2,rect.width() - 4,rect.height() - 4),Qt::AlignLeft | Qt::AlignVCenter,_h); + + painter->restore(); + } + } @@ -185,6 +234,9 @@ void UAVItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) } qDebug() << "emit select" << sysid << compid; emit selected(sysid,compid); + + isShowTip = (isShowTip)?(false):(true); + update(); } @@ -288,7 +340,7 @@ QRectF UAVItem::boundingRect() const return QRectF(-boundingRectSize, -boundingRectSize, 2 * boundingRectSize, 2 * boundingRectSize); } } else { - return QRectF(-pic.width() / 2, -pic.height() / 2, pic.width(), pic.height()); + return QRectF(-pic.width() * 2, -pic.height() * 2, pic.width() * 4, pic.height() * 4); } } diff --git a/opmap/mapwidget/uavitem.h b/opmap/mapwidget/uavitem.h index b7b7289..4915639 100644 --- a/opmap/mapwidget/uavitem.h +++ b/opmap/mapwidget/uavitem.h @@ -239,6 +239,13 @@ private: bool isEdit = false; + qreal TipOpacity = 1; + bool isShowTip = false; + + qreal Ma = 0; + qreal Vc = 0; + + protected: void mouseMoveEvent(QGraphicsSceneMouseEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event); @@ -254,6 +261,20 @@ public slots: void RefreshPos(); void setOpacitySlot(qreal opacity); void zoomChangedSlot(); + + void setMa(qreal value) + { + Ma = value; + update(); + } + + void setSpeed(qreal value) + { + Vc = value; + update(); + } + + signals: void selected(int sys,int comp); diff --git a/opmap/mapwidget/waypointitem.cpp b/opmap/mapwidget/waypointitem.cpp index 8bc0da7..e3e7bbd 100644 --- a/opmap/mapwidget/waypointitem.cpp +++ b/opmap/mapwidget/waypointitem.cpp @@ -492,6 +492,7 @@ void WayPointItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) ElevationTrig(); //发送航点的属性 + emit WPProperty(property.param1,property.param2,property.param3,property.param4, property.x,property.y,property.z, property.seq, @@ -504,6 +505,7 @@ void WayPointItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) property.autocontinue, property.mission_type); + emit setCurrentPoint(this->Number()); } else//这时候是在飞行界面