保存程序

This commit is contained in:
hm
2020-08-05 22:39:33 +08:00
parent f33888d422
commit 4d24e68e7d
14 changed files with 320 additions and 91 deletions
+1
View File
@@ -12,6 +12,7 @@ QT += qml
INCLUDEPATH += $$PWD/../ComponentUI/Inputter
INCLUDEPATH += $$PWD/../ComponentUI/MultiSelector
INCLUDEPATH += $$PWD/../ComponentUI/Selector
INCLUDEPATH += $$PWD/../ComponentUI/Confirm
DISTFILES += \
+31 -14
View File
@@ -1532,27 +1532,44 @@ void propertyui::on_pushButton_Param7_clicked()
}
}
//模仿qgc
void propertyui::setLoad(QVariant value)
{
if(value.toBool() == true)
{
QFileDialog *dlg = new QFileDialog(this);
dlg->setWindowTitle(tr("Select Loading File..."));
dlg->show();
QStringList sFileDir;
int ret = dlg->exec();
if (QDialog::Accepted == ret)
{
sFileDir = dlg->selectedFiles();
qDebug() << sFileDir.at(0);
emit WPLoad(sFileDir.at(0));
}
}
else
{
}
}
void propertyui::on_pushButton_Load_clicked()
{
QFileDialog *dlg = new QFileDialog(this);
Confirm *conf = new Confirm(this);
conf->setGeometry(0,0,this->width(),this->height());
dlg->setWindowTitle(tr("Select Loading File..."));
dlg->show();
QStringList sFileDir;
int ret = dlg->exec();
if (QDialog::Accepted == ret)
{
sFileDir = dlg->selectedFiles();
qDebug() << sFileDir.at(0);
emit WPLoad(sFileDir.at(0));
}
conf->setNotice(tr("click to clear all points"));
connect(conf,SIGNAL(confirmValue(QVariant)),
this,SLOT(setLoad(QVariant)));
conf->show();
}
+3
View File
@@ -29,6 +29,7 @@
#include "multiselector.h"
#include "Selector.h"
#include "Inputter.h"
#include "Confirm.h"
#include "QFileDialog"
@@ -266,6 +267,8 @@ private slots:
void setParam6(QVariant value);
void setParam7(QVariant value);
void setLoad(QVariant value);
void WayPointPropertyUpdate(void);
void on_pushButton_friendlyName_clicked();
+1 -1
View File
@@ -523,7 +523,7 @@ void MainWindow::updateUI()//事件驱动式更新数据
+dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,2);
copk->setVerticalSpeed(-dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3);
copk->setVerticalSpeed(dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3);
+48 -21
View File
@@ -84,11 +84,11 @@ void Cockpit::UpdateTimeout(void)
//如果已经设置了新的数据,那么刷新
if(m_State.isUpdate == true)
{
m_State.airspeed = m_State.airspeed*0.9 + m_State.airspeed_t*0.1;
m_State.airspeed = m_State.airspeed*0.75 + m_State.airspeed_t*0.25;
m_State.altitude = m_State.altitude*0.95 + m_State.altitude_t*0.05;
m_State.altitude = m_State.altitude*0.75 + m_State.altitude_t*0.25;
m_State.verticalspeed = m_State.verticalspeed*0.8 + m_State.verticalspeed_t*0.2;
m_State.verticalspeed = m_State.verticalspeed*0.75 + m_State.verticalspeed_t*0.25;
update();
m_State.isUpdate = false;
@@ -141,8 +141,8 @@ void Cockpit::setPitch(double Pitch)
}
#endif
if(Pitch > 360) Pitch = 360;
else if(Pitch < -360) Pitch = -360;
//if(Pitch > 360) Pitch = 360;
//else if(Pitch < -360) Pitch = -360;
int n = Pitch/360;
Pitch = Pitch - n*360;
@@ -169,8 +169,8 @@ void Cockpit::setPitchTarget(double Pitch)
}
#endif
if(Pitch > 360) Pitch = 360;
else if(Pitch < -360) Pitch = -360;
//if(Pitch > 360) Pitch = 360;
//else if(Pitch < -360) Pitch = -360;
int n = Pitch/360;
Pitch = Pitch - n*360;
@@ -198,8 +198,8 @@ void Cockpit::setRoll(double Roll)
return;
}
#endif
if(Roll > 360) Roll = 360;
else if(Roll < -360) Roll = -360;
//if(Roll > 360) Roll = 360;
//else if(Roll < -360) Roll = -360;
int n = Roll/360;
Roll = Roll - n*360;
@@ -226,8 +226,8 @@ void Cockpit::setRollTarget(double Roll)
return;
}
#endif
if(Roll > 360) Roll = 360;
else if(Roll < -360) Roll = -360;
//if(Roll > 360) Roll = 360;
//else if(Roll < -360) Roll = -360;
int n = Roll/360;
Roll = Roll - n*360;
@@ -1596,15 +1596,10 @@ void Cockpit::drawYawScale(QPainter *painter)
//画顶部紫色目标值 (紫色在白色下面,并且在刻度上面,并且有一部分会重叠)
painter->save();
//旋转
float rotate_deg = m_State.yaw - m_Target.yaw;
if(rotate_deg < 0) rotate_deg += 360;
else if(rotate_deg > 360) rotate_deg -= 360;
//qDebug() << rotate_deg;
float rotate_deg = -(m_State.yaw - m_Target.yaw);
int n = rotate_deg/360;
rotate_deg = rotate_deg - n*360;
painter->rotate(rotate_deg);
static const QPointF Tarpoint[8] = {
QPointF(-40,-500),
QPointF(-40,-530),
@@ -1626,6 +1621,29 @@ void Cockpit::drawYawScale(QPainter *painter)
painter->restore();
//画中间大罗盘
painter->save();
painter->rotate(-m_State.yaw);
static const QPointF Npoints[3] = {
QPointF(-70,0),
QPointF( 0,-300),
QPointF( 70,0)};
static const QPointF Spoints[3] = {
QPointF(-70,0),
QPointF( 0,300),
QPointF( 70,0)};
painter->setPen(Qt::NoPen);
painter->setBrush(QColor("#FF0000"));
painter->drawPolygon(Npoints,3);
painter->setBrush(QColor("#0000FF"));
painter->drawPolygon(Spoints,3);
painter->restore();
//画一个中间小飞机
painter->save();
@@ -1673,13 +1691,13 @@ void Cockpit::drawYawScale(QPainter *painter)
painter->save();
painter->translate(i*100,0);
painter->drawEllipse(-5,-5,10,10);
painter->drawEllipse(-8,-8,16,16);
painter->restore();
painter->save();
painter->translate(0,i*100);
painter->drawEllipse(-5,-5,10,10);
painter->drawEllipse(-8,-8,16,16);
painter->restore();
}
@@ -1774,15 +1792,21 @@ void Cockpit::drawYawScale(QPainter *painter)
QString Flag = "";
if((i == 0)||(i == 18)||(i == 36)||(i == 54))
{
painter->save();
switch (i) {
case 0:
Flag = "N";
ePen.setColor(QColor("#FF0000"));
painter->setPen(ePen);
break;
case 18:
Flag = "E";
break;
case 36:
Flag = "S";
ePen.setColor(QColor("#0000FF"));
painter->setPen(ePen);
break;
case 54:
Flag = "W";
@@ -1791,7 +1815,10 @@ void Cockpit::drawYawScale(QPainter *painter)
break;
}
painter->drawText(QRect(-40,-450,80,80),Qt::AlignVCenter|Qt::AlignHCenter,Flag);
painter->restore();
}
else
{
+10 -1
View File
@@ -153,10 +153,14 @@ void commandprocess::WriteCmd_long(float param1, float param2, float param3, fl
//这个函数类似中断,专门处理接收到的状态
void commandprocess::Parse(mavlink_message_t msg)
{
mavlink_command_int_t command_int;
mavlink_command_long_t command_long;
mavlink_command_ack_t command_ack;
switch (msg.msgid) {
case MAVLINK_MSG_ID_COMMAND_INT://几乎不可能收到
mavlink_msg_command_int_decode(&msg,&command_int);
@@ -167,6 +171,11 @@ void commandprocess::Parse(mavlink_message_t msg)
case MAVLINK_MSG_ID_COMMAND_ACK:
mavlink_msg_command_ack_decode(&msg,&command_ack);
if(command_ack.target_system != Current_sysID)
{
break;//如果目标系统不是自己,那么就抛弃该指令
}
if(command_ack.result == MAV_RESULT_ACCEPTED)
{
status.transmit.isWaitingforACK = false;
@@ -417,7 +426,7 @@ void commandprocess::ack(uint16_t command,uint8_t result,uint8_t progress,int32_
command_ack.progress = progress;
command_ack.result_param2 = result_param2;
mavlink_msg_command_ack_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&command_ack);
mavlink_msg_command_ack_encode(Current_sysID,Current_CompID, &msg,&command_ack);
SendMessage(msg);
}
+11 -6
View File
@@ -18,7 +18,13 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
//初始化buff
initbuff();
//初始化ID
int Current_sysID = 0xF1;
int Current_CompID = MAV_COMP_ID_MISSIONPLANNER;
Mission = new MissionProcess();
Mission->setGCSID(Current_sysID,Current_CompID);
connect(Mission,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
this,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);
@@ -31,6 +37,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
Parameter = new ParameterProcess();
Parameter->setGCSID(Current_sysID,Current_CompID);
connect(Parameter,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
this,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);
@@ -39,6 +46,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
Commander = new commandprocess();
Commander->setGCSID(Current_sysID,Current_CompID);
connect(Commander,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
this,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);
@@ -242,16 +250,13 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
mavlink_message_t msg;
mavlink_status_t status;
//qDebug() << "msg parsed";
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
{
if(MAVLINK_FRAMING_OK == mavlink_parse_char(src,*i,&msg,&status))
{
emit recievemsg(msg); //将信息广播出去
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
//qDebug() << "msg parsed";
}
else
{
@@ -300,10 +305,10 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
//qDebug() << "MAVLINK_PARSE_STATE_GOT_CRC1";
}break;
case MAVLINK_PARSE_STATE_GOT_BAD_CRC1:{
//qDebug() << "MAVLINK_PARSE_STATE_GOT_BAD_CRC1";
qDebug() << "MAVLINK_PARSE_STATE_GOT_BAD_CRC1";
}break;
case MAVLINK_PARSE_STATE_SIGNATURE_WAIT:{
//qDebug() << "MAVLINK_PARSE_STATE_SIGNATURE_WAIT";
qDebug() << "MAVLINK_PARSE_STATE_SIGNATURE_WAIT";
}break;
}
}
+1 -1
View File
@@ -128,7 +128,7 @@ private slots:
protected:
int Current_sysID = 0xF1;
int Current_CompID = 0xF1;
int Current_CompID = MAV_COMP_ID_MISSIONPLANNER;
enum SourceType{
c_sock = 0,
+51 -24
View File
@@ -206,22 +206,29 @@ void MissionProcess::transmitPoint(float param1,float param2,float param3,float
//这个函数类似中断,专门处理接收到的状态
void MissionProcess::Parse(mavlink_message_t msg)
{
if(msg.sysid == Current_sysID)
{
qDebug() << "is my mission";
}
switch (msg.msgid) {
case MAVLINK_MSG_ID_MISSION_REQUEST_LIST: {
mavlink_msg_mission_request_list_decode(&msg,&mission_request_list);
}break;
case MAVLINK_MSG_ID_MISSION_COUNT: {
mavlink_msg_mission_count_decode(&msg,&mission_count);
if(mission_count.target_system != Current_sysID)
{
break;//如果目标系统不是自己,那么就抛弃该指令
}
qDebug() << "mission_count" << mission_count.count;
mission_status.recieve.isWaitingforCount = false;
}break;
case MAVLINK_MSG_ID_MISSION_REQUEST_INT: {
mavlink_msg_mission_request_int_decode(&msg,&mission_request_int);
if(mission_count.target_system != Current_sysID)
{
break;//如果目标系统不是自己,那么就抛弃该指令
}
qDebug() << "recieve mission_request_int ";
emit sendItemOK(mission_item_int.seq,true);
mission_item_int.seq++;
@@ -229,6 +236,12 @@ void MissionProcess::Parse(mavlink_message_t msg)
}break;
case MAVLINK_MSG_ID_MISSION_REQUEST: {
mavlink_msg_mission_request_decode(&msg,&mission_request);
if(mission_request.target_system != Current_sysID)
{
break;//如果目标系统不是自己,那么就抛弃该指令
}
qDebug() << "recieve mission_request ";
emit sendItemOK(mission_item_int.seq,true);
mission_item_int.seq++;
@@ -236,6 +249,12 @@ void MissionProcess::Parse(mavlink_message_t msg)
}break;
case MAVLINK_MSG_ID_MISSION_ITEM_INT: {
mavlink_msg_mission_item_int_decode(&msg,&mission_item_int);
if(mission_item_int.target_system != Current_sysID)
{
break;//如果目标系统不是自己,那么就抛弃该指令
}
qDebug() << "recieve mission " << mission_item_int.seq;
//把航点发出去
@@ -254,20 +273,28 @@ void MissionProcess::Parse(mavlink_message_t msg)
}break;
case MAVLINK_MSG_ID_MISSION_ITEM: {
mavlink_msg_mission_item_decode(&msg,&mission_item);
if(mission_item.target_system != Current_sysID)
{
break;//如果目标系统不是自己,那么就抛弃该指令
}
mission_status.recieve.isWaitingforItem = false;
}break;
case MAVLINK_MSG_ID_MISSION_ACK: {
mavlink_msg_mission_ack_decode(&msg,&mission_ack);
if(mission_ack.target_system != Current_sysID)
{
break;//如果目标系统不是自己,那么就抛弃该指令
}
mission_status.transmit.isWaiteforACK = false;
}break;
case MAVLINK_MSG_ID_MISSION_CURRENT: {
mavlink_msg_mission_current_decode(&msg,&mission_current);
//if(mission_current.seq == mission_status.transmit.seq)
{
//收到设置当前点,对比如果一致,那么成功,否则失败
//qDebug() << "mission_current" << mission_current.seq;
emit currentPoint(mission_current.seq);
}
emit currentPoint(mission_current.seq);
}break;
case MAVLINK_MSG_ID_MISSION_SET_CURRENT: {
@@ -596,7 +623,7 @@ void MissionProcess::request_list(void)//读取整列请求
mission_request_list.target_system = sysid;
mission_request_list.target_component = compid;
mavlink_msg_mission_request_list_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_request_list);
mavlink_msg_mission_request_list_encode(Current_sysID,Current_CompID, &msg,&mission_request_list);
SendMessage(msg);
}
@@ -610,7 +637,7 @@ void MissionProcess::count(uint16_t count)//计数值
mission_count.target_system = sysid;
mission_count.target_component = compid;
mavlink_msg_mission_count_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_count);
mavlink_msg_mission_count_encode(Current_sysID,Current_CompID, &msg,&mission_count);
SendMessage(msg);
}
@@ -624,7 +651,7 @@ void MissionProcess::request_int(uint16_t seq)//读取请求
mission_request_int.target_system = sysid;
mission_request_int.target_component = compid;
mavlink_msg_mission_request_int_encode(Current_sysID, MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_request_int);
mavlink_msg_mission_request_int_encode(Current_sysID, Current_CompID, &msg,&mission_request_int);
SendMessage(msg);
}
@@ -637,7 +664,7 @@ void MissionProcess::request(uint16_t seq)//读取请求
mission_request.seq = seq;
mission_request.target_system = sysid;
mission_request.target_component = compid;
mavlink_msg_mission_request_encode(Current_sysID, MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_request);
mavlink_msg_mission_request_encode(Current_sysID, Current_CompID, &msg,&mission_request);
SendMessage(msg);
}
@@ -669,7 +696,7 @@ void MissionProcess::item_int(float param1,float param2,float param3,float param
mission_item_int.autocontinue = autocontinue;
mission_item_int.mission_type = mission_type;
mavlink_msg_mission_item_int_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_item_int);
mavlink_msg_mission_item_int_encode(Current_sysID,Current_CompID, &msg,&mission_item_int);
SendMessage(msg);
}
@@ -701,7 +728,7 @@ void MissionProcess::item(float param1,float param2,float param3,float param4,
mission_item.autocontinue = autocontinue;
mission_item.mission_type = mission_type;
mavlink_msg_mission_item_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_item);
mavlink_msg_mission_item_encode(Current_sysID,Current_CompID, &msg,&mission_item);
SendMessage(msg);
}
@@ -715,7 +742,7 @@ void MissionProcess::ack(void)
mission_ack.mission_type = 0;
mission_ack.type = 0;
mavlink_msg_mission_ack_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_ack);
mavlink_msg_mission_ack_encode(Current_sysID,Current_CompID, &msg,&mission_ack);
SendMessage(msg);
@@ -726,7 +753,7 @@ void MissionProcess::current(void)
static mavlink_message_t msg;
static mavlink_mission_current_t mission_current;
mavlink_msg_mission_current_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_current);
mavlink_msg_mission_current_encode(Current_sysID,Current_CompID, &msg,&mission_current);
SendMessage(msg);
}
@@ -740,7 +767,7 @@ void MissionProcess::setcurrent(uint16_t seq)
mission_set_current.seq = seq;
mavlink_msg_mission_set_current_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_set_current);
mavlink_msg_mission_set_current_encode(Current_sysID,Current_CompID, &msg,&mission_set_current);
SendMessage(msg);
}
@@ -753,7 +780,7 @@ void MissionProcess::clear_all(void)
mission_clear_all.target_component = compid;
mission_clear_all.mission_type = 0;
mavlink_msg_mission_clear_all_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_clear_all);
mavlink_msg_mission_clear_all_encode(Current_sysID,Current_CompID, &msg,&mission_clear_all);
SendMessage(msg);
}
@@ -762,7 +789,7 @@ void MissionProcess::item_reached(void)
static mavlink_message_t msg;
static mavlink_mission_item_reached_t mission_item_reached;
mavlink_msg_mission_item_reached_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_item_reached);
mavlink_msg_mission_item_reached_encode(Current_sysID,Current_CompID, &msg,&mission_item_reached);
SendMessage(msg);
}
@@ -771,7 +798,7 @@ void MissionProcess::request_partial_list(void)
static mavlink_message_t msg;
static mavlink_mission_request_partial_list_t mission_request_partial_list;
mavlink_msg_mission_request_partial_list_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_request_partial_list);
mavlink_msg_mission_request_partial_list_encode(Current_sysID,Current_CompID, &msg,&mission_request_partial_list);
SendMessage(msg);
}
@@ -780,6 +807,6 @@ void MissionProcess::write_partial_list(void)
static mavlink_message_t msg;
static mavlink_mission_write_partial_list_t mission_write_partial_list;
mavlink_msg_mission_write_partial_list_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_write_partial_list);
mavlink_msg_mission_write_partial_list_encode(Current_sysID,Current_CompID, &msg,&mission_write_partial_list);
SendMessage(msg);
}
+7 -8
View File
@@ -171,7 +171,6 @@ void ParameterProcess::Parse(mavlink_message_t msg)
}break;
case MAVLINK_MSG_ID_PARAM_VALUE:{//
mavlink_msg_param_value_decode(&msg,&param_value);
//paramInspect->appendParameter(msg);//发送的时候需要连同当前的sysid 和 compid也发送下去
emit RecieveValue(msg);
@@ -367,7 +366,7 @@ void ParameterProcess::set(const char *id,uint8_t type,float value)//
param_set.target_system = sysid;
param_set.target_component = compid;
mavlink_msg_param_set_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&param_set);
mavlink_msg_param_set_encode(Current_sysID,Current_CompID, &msg,&param_set);
SendMessage(msg);
}
@@ -385,7 +384,7 @@ void ParameterProcess::value(float value)//一般只接收不发送
//param_value. = sysid;
//param_value.target_component = compid;
mavlink_msg_param_value_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&param_value);
mavlink_msg_param_value_encode(Current_sysID,Current_CompID, &msg,&param_value);
SendMessage(msg);
}
@@ -404,7 +403,7 @@ void ParameterProcess::ext_ack(float value)
//param_ext_ack.target_system = sysid;
//param_ext_ack.target_component = compid;
mavlink_msg_param_ext_ack_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&param_ext_ack);
mavlink_msg_param_ext_ack_encode(Current_sysID,Current_CompID, &msg,&param_ext_ack);
SendMessage(msg);
}
@@ -421,7 +420,7 @@ void ParameterProcess::ext_set(const char *id,uint8_t type,float value)
param_ext_set.target_system = sysid;
param_ext_set.target_component = compid;
mavlink_msg_param_ext_set_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&param_ext_set);
mavlink_msg_param_ext_set_encode(Current_sysID,Current_CompID, &msg,&param_ext_set);
SendMessage(msg);
}
@@ -438,7 +437,7 @@ void ParameterProcess::ext_value(float value)
//param_ext_value.target_system = sysid;
//param_ext_value.target_component = compid;
mavlink_msg_param_ext_value_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&param_ext_value);
mavlink_msg_param_ext_value_encode(Current_sysID,Current_CompID, &msg,&param_ext_value);
SendMessage(msg);
}
@@ -450,7 +449,7 @@ void ParameterProcess::request_list(void)//
param_request_list.target_system = sysid;
param_request_list.target_component = compid;
mavlink_msg_param_request_list_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&param_request_list);
mavlink_msg_param_request_list_encode(Current_sysID,Current_CompID, &msg,&param_request_list);
SendMessage(msg);
}
@@ -464,7 +463,7 @@ void ParameterProcess::request_read(const char *id, int16_t index)//
param_request_read.target_system = sysid;
param_request_read.target_component = compid;
mavlink_msg_param_request_read_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&param_request_read);
mavlink_msg_param_request_read_encode(Current_sysID,Current_CompID, &msg,&param_request_read);
SendMessage(msg);
}
+19 -11
View File
@@ -15,17 +15,11 @@ DLink::DLink(QObject *parent) : QObject(parent)
connect(mavlinknode,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
this,SLOT(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);//采用直连的方式,因为是多线程
//connect(mavlinknode,&MavLinkNode::SendMessageTo,
// this,&DLink::SendMessageTo,Qt::DirectConnection);
//connect(mavlinknode,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
// this,&DLink::SendMessageTo,Qt::DirectConnection);
connect(mavlinknode,SIGNAL(showMessage(QString,int)),
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
//mavlinknode->start();
mavlinknode->start();
connect(this,&DLink::REVMessageTo1,
@@ -70,18 +64,20 @@ int DLink::SendMessageTo1(quint8 ch, quint8 *msg, quint16 len)
{
//这里有问题,无法发送数据
/*
QString num;
for (int i = 0; i < len; ++i) {
num.append(QString::number(msg[i],16).toUpper());
num.append(" ");
}
qDebug() << num;
*/
//qDebug() << QThread::currentThread();
qint64 flag = DLink::serialPort->write((const char *)msg,len);
/*
if(flag != -1)
{
qDebug() << "serial send Success,Send " << flag << "bytes";
@@ -89,6 +85,7 @@ int DLink::SendMessageTo1(quint8 ch, quint8 *msg, quint16 len)
qDebug() << QThread::currentThread();
*/
//qDebug() << "serialPort Send Msg" << msg;
}
@@ -126,7 +123,7 @@ bool DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity p
qDebug() << QThread::currentThread();
mavlinknode->start();//启动之后串口就找不到了
//mavlinknode->start();//启动之后串口就找不到了
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagramsSerialPort()));
@@ -188,9 +185,9 @@ void DLink::connectSignal(QVariant m_state,
}
qDebug() << m_Type << m_Param1 << m_Param2 << parity;
qDebug() << m_Type << m_Param1 << m_Param2.toString().toInt() << parity;
if(setupPort(m_Param1.toString(),m_Param2.toInt(),parity))
if(setupPort(m_Param1.toString(),m_Param2.toString().toInt(),parity))
{
emit PortConnected(true,m_usrName,m_Type,m_Param1,m_Param2,m_Param3,m_Param4,m_Param5);
}
@@ -253,6 +250,8 @@ bool DLink::setupClient(const QHostAddress &remote_addr, int remote_port, int lo
<< local_port
<< remote_port;
//mavlinknode->start();//启动
isSuccess = true;
emit showMessage(tr("UdpSocket open"));
}
@@ -278,6 +277,15 @@ void DLink::readPendingDatagramsSerialPort(void)
QByteArray datagram = serialPort->readAll();
mavlinknode->setbuff(SourceType::s_port,datagram);
/*
QString num;
for (int i = 0; i < datagram.size(); ++i) {
num.append(QString::number((uint8_t)datagram.at(i) & 0xFF,16).toUpper());
num.append(" ");
}
qDebug() << num;
*/
//qDebug() << "reci";
}
+125 -4
View File
@@ -1264,15 +1264,139 @@ void OPMapWidget::WPFollowPrevious(bool flag,WayPointItem *w)
}
//先清除再读取
void OPMapWidget::WPLoad(QString path)//带文件目录参数
{
qDebug() << "WPLoad" << path;
//读取
QFile jsonFile(path);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << "Unable to open file" << path << jsonFile.errorString();
return;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qWarning() << path << "Unable to open json document" << jsonParseError.errorString();
return;
}
QJsonObject json = doc.object();
//解码
QJsonValue jsonValue = json.value("mission");
qDebug() << jsonValue.toObject().keys();
}
void OPMapWidget::WPSave(QString path)//带文件目录参数
{
qDebug() << "WPSave" << path;
//保存到文件 *.plan,使用qgc的协议 json读写
QJsonDocument *doc = new QJsonDocument();
QJsonObject root= doc->object();
QJsonObject geoFence;
QJsonObject mission;
QJsonObject rallyPoints;
//geoFence节点写入
{
QJsonArray circles;
QJsonArray polygons;
geoFence.insert("circles",circles);
geoFence.insert("polygons",polygons);
geoFence.insert("version",2);
}
//mission节点写入
{
QJsonArray items;
foreach(QGraphicsItem * i, map->childItems()) {
WayPointItem *w = qgraphicsitem_cast<WayPointItem *>(i);
if (w) {//逐渐往下增加
//存到items
QJsonArray params;
params.append(w->Param1());
params.append(w->Param2());
params.append(w->Param3());
params.append(w->Param4());
params.append(w->Coord().Lat());
params.append(w->Coord().Lng());
params.append(w->Alt());
//可能有点问题
QJsonObject item;
item.insert("AMSLAltAboveTerrain",0);
item.insert("Altitude",w->Alt());
item.insert("AltitudeMode",1);
item.insert("autoContinue",w->AutoContinue());
item.insert("command",w->Command());
item.insert("doJumpId",w->Number());
item.insert("frame",w->Frame());
item.insert("params",params);
item.insert("type","SimpleItem");
//这里有问题
items.append(item);
}
}
QJsonArray plannedHomePosition;
plannedHomePosition.append(0);
plannedHomePosition.append(1);
plannedHomePosition.append(2);
mission.insert("cruiseSpeed",2);
mission.insert("firmwareType",2);
mission.insert("hoverSpeed",2);
mission.insert("items",items);
mission.insert("plannedHomePosition",plannedHomePosition);
mission.insert("vehicleType",20);
mission.insert("version",2);
}
//rallyPoints节点写入
{
QJsonArray points;
rallyPoints.insert("points",points);
rallyPoints.insert("version",2);
}
//根节点写入
root.insert("fileType","Plan");
root.insert("geoFence",geoFence);
root.insert("groundStation","GCS_nf");
root.insert("mission", mission);
root.insert("rallyPoints", rallyPoints);
root.insert("version", 1);
//设置文档
doc->setObject(root);
//如果没有后缀名,那就追加
if(path.right(5) != ".plan")
{
path.append(".plan");
}
QFile file(path);
if(!file.open(QIODevice::ReadWrite|QFile::Truncate)) {
qDebug() << "File open error";
}
file.write(doc->toJson());
file.close();
}
void OPMapWidget::WPDownload(void)
@@ -1283,8 +1407,6 @@ void OPMapWidget::WPDownload(void)
WPDeleteAll();
emit signal_WPDownload(1,0);
}
void OPMapWidget::WPUpload(void)
@@ -1292,7 +1414,6 @@ void OPMapWidget::WPUpload(void)
//发送第一个
QList<mapcontrol::WayPointItem *> list;
//先发送一个清空指令
foreach(QGraphicsItem * i, map->childItems()) {
WayPointItem *w = qgraphicsitem_cast<WayPointItem *>(i);
if (w) {
+2
View File
@@ -48,6 +48,8 @@
#include "AltitudeItem.h"
#include <QJsonObject>
#include "QTextStream"
namespace mapcontrol {
+10
View File
@@ -244,6 +244,16 @@ public:
return property.command;
}
uint8_t Frame(void)
{
return property.frame;
}
uint8_t AutoContinue(void)
{
return property.autocontinue;
}
uint16_t Group(void)
{
return property.group;