有bug,会死机,注意协调各个线程之间的通讯
This commit is contained in:
+178
-178
@@ -1,178 +1,178 @@
|
|||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
#include "QPushButton"
|
#include "QPushButton"
|
||||||
#include "QAction"
|
#include "QAction"
|
||||||
|
|
||||||
|
|
||||||
#include "QHBoxLayout"
|
#include "QHBoxLayout"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
: QMainWindow(parent)
|
: QMainWindow(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
dlink = new DLink();
|
dlink = new DLink();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
connect(dlink->mavlinknode,&MavLinkNode::state_updated,
|
connect(dlink->mavlinknode,&MavLinkNode::state_updated,
|
||||||
this,&MainWindow::updateUI);
|
this,&MainWindow::updateUI);
|
||||||
*/
|
*/
|
||||||
connect(dlink->mavlinknode,SIGNAL(state_updated()),
|
connect(dlink->mavlinknode,SIGNAL(state_updated()),
|
||||||
this,SLOT(updateUI()));
|
this,SLOT(updateUI()));
|
||||||
|
|
||||||
|
|
||||||
map = new mapcontrol::OPMapWidget(this);
|
map = new mapcontrol::OPMapWidget(this);
|
||||||
|
|
||||||
map->SetShowHome(false);
|
map->SetShowHome(false);
|
||||||
map->SetShowCompass(false);
|
map->SetShowCompass(false);
|
||||||
map->SetUseOpenGL(true);
|
map->SetUseOpenGL(true);
|
||||||
|
|
||||||
//QString maptype = myinifile->ReadIni("FGCS.ini","Map","Type");
|
//QString maptype = myinifile->ReadIni("FGCS.ini","Map","Type");
|
||||||
map->SetMapType(mapcontrol::Helper::MapTypeFromString("BingSatellite"));
|
map->SetMapType(mapcontrol::Helper::MapTypeFromString("BingSatellite"));
|
||||||
map->setGeometry(0,
|
map->setGeometry(0,
|
||||||
0,
|
0,
|
||||||
this->width(),
|
this->width(),
|
||||||
this->height());
|
this->height());
|
||||||
|
|
||||||
|
|
||||||
nav = new QNavigationWidget(this);
|
nav = new QNavigationWidget(this);
|
||||||
nav->setGeometry(0,0,50,this->height());
|
nav->setGeometry(0,0,50,this->height());
|
||||||
nav->setRowHeight(50);
|
nav->setRowHeight(50);
|
||||||
nav->addItem(tr("DRV"));
|
nav->addItem(tr("DRV"));
|
||||||
nav->addItem(tr("MAP"));
|
nav->addItem(tr("MAP"));
|
||||||
nav->addItem(tr("CMD"));
|
nav->addItem(tr("CMD"));
|
||||||
nav->addItem(tr("CHK"));
|
nav->addItem(tr("CHK"));
|
||||||
nav->addItem(tr("WAY"));
|
nav->addItem(tr("WAY"));
|
||||||
nav->addItem(tr("MIS"));
|
nav->addItem(tr("MIS"));
|
||||||
nav->addItem(tr("DAT"));
|
nav->addItem(tr("DAT"));
|
||||||
nav->addItem(tr("REP"));
|
nav->addItem(tr("REP"));
|
||||||
nav->addItem(tr("COM"));
|
nav->addItem(tr("COM"));
|
||||||
|
|
||||||
connect(nav,SIGNAL(ItemChanged(int)),
|
connect(nav,SIGNAL(ItemChanged(int)),
|
||||||
this,SLOT(onTabIndexChanged(int)));
|
this,SLOT(onTabIndexChanged(int)));
|
||||||
|
|
||||||
copk = new Cockpit(this);
|
copk = new Cockpit(this);
|
||||||
copk->setGeometry(this->width() - copk->width(),0,300,340);
|
copk->setGeometry(this->width() - copk->width(),0,300,340);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
updateTimer = new QTimer();
|
updateTimer = new QTimer();
|
||||||
|
|
||||||
connect(updateTimer,&QTimer::timeout,
|
connect(updateTimer,&QTimer::timeout,
|
||||||
this,&MainWindow::updateUI);
|
this,&MainWindow::updateUI);
|
||||||
|
|
||||||
//updateTimer->start(20);
|
updateTimer->start(200);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
{
|
{
|
||||||
map->close();
|
map->close();
|
||||||
delete map;
|
delete map;
|
||||||
|
|
||||||
copk->deleteLater();
|
copk->deleteLater();
|
||||||
delete copk;
|
delete copk;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MainWindow::resizeEvent(QResizeEvent *e)
|
void MainWindow::resizeEvent(QResizeEvent *e)
|
||||||
{
|
{
|
||||||
Q_UNUSED(e);
|
Q_UNUSED(e);
|
||||||
|
|
||||||
map->setGeometry(0,
|
map->setGeometry(0,
|
||||||
0,
|
0,
|
||||||
this->width(),
|
this->width(),
|
||||||
this->height());
|
this->height());
|
||||||
|
|
||||||
nav->setGeometry(0,0,nav->width(),this->height());
|
nav->setGeometry(0,0,nav->width(),this->height());
|
||||||
|
|
||||||
copk->setGeometry(this->width() - copk->width(),0,copk->width(),copk->height());
|
copk->setGeometry(this->width() - copk->width(),0,copk->width(),copk->height());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onTabIndexChanged(const int &index)
|
void MainWindow::onTabIndexChanged(const int &index)
|
||||||
{
|
{
|
||||||
if(index == 1)
|
if(index == 1)
|
||||||
{
|
{
|
||||||
dlink_triggered();
|
dlink_triggered();
|
||||||
}
|
}
|
||||||
else if (index == 2)
|
else if (index == 2)
|
||||||
{
|
{
|
||||||
client_triggered();
|
client_triggered();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MainWindow::dlink_triggered()
|
void MainWindow::dlink_triggered()
|
||||||
{
|
{
|
||||||
|
|
||||||
if(dlink->statesPort())
|
if(dlink->statesPort())
|
||||||
{
|
{
|
||||||
disconnectdialog dlg(this);
|
disconnectdialog dlg(this);
|
||||||
|
|
||||||
dlg.setWindowTitle(tr("SerialPort"));
|
dlg.setWindowTitle(tr("SerialPort"));
|
||||||
//dlg.setWindowIcon(ui->action_dlink->icon());
|
//dlg.setWindowIcon(ui->action_dlink->icon());
|
||||||
|
|
||||||
int ret = dlg.exec();
|
int ret = dlg.exec();
|
||||||
if (QDialog::Accepted == ret)
|
if (QDialog::Accepted == ret)
|
||||||
{
|
{
|
||||||
dlink->stopPort();
|
dlink->stopPort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ConnectDialog dlg(this);
|
ConnectDialog dlg(this);
|
||||||
|
|
||||||
dlg.setWindowTitle(tr("SerialPort"));
|
dlg.setWindowTitle(tr("SerialPort"));
|
||||||
//dlg.setWindowIcon(ui->action_dlink->icon());
|
//dlg.setWindowIcon(ui->action_dlink->icon());
|
||||||
|
|
||||||
dlg.baudrate = 115200;
|
dlg.baudrate = 115200;
|
||||||
dlg.parity = QSerialPort::NoParity;
|
dlg.parity = QSerialPort::NoParity;
|
||||||
int ret = dlg.exec();
|
int ret = dlg.exec();
|
||||||
if (QDialog::Accepted == ret)
|
if (QDialog::Accepted == ret)
|
||||||
{
|
{
|
||||||
dlink->setupPort(dlg.port, dlg.baudrate,dlg.parity);
|
dlink->setupPort(dlg.port, dlg.baudrate,dlg.parity);
|
||||||
//qDebug() << "setup serial port";
|
//qDebug() << "setup serial port";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::client_triggered()
|
void MainWindow::client_triggered()
|
||||||
{
|
{
|
||||||
ClientLinkDialog dlg(this);
|
ClientLinkDialog dlg(this);
|
||||||
|
|
||||||
dlg.setWindowTitle(tr("ClientLink"));
|
dlg.setWindowTitle(tr("ClientLink"));
|
||||||
//dlg.setWindowIcon(ui->action_dlink->icon());
|
//dlg.setWindowIcon(ui->action_dlink->icon());
|
||||||
|
|
||||||
int ret = dlg.exec();
|
int ret = dlg.exec();
|
||||||
if (QDialog::Accepted == ret)
|
if (QDialog::Accepted == ret)
|
||||||
{
|
{
|
||||||
dlink->setupClient(dlg.remote_addr,dlg.remote_port,dlg.local_port);
|
dlink->setupClient(dlg.remote_addr,dlg.remote_port,dlg.local_port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MainWindow::updateUI()
|
void MainWindow::updateUI()
|
||||||
{
|
{
|
||||||
|
|
||||||
qDebug() << "updateUI";
|
//qDebug() << "updateUI";
|
||||||
|
|
||||||
copk->setAttitude(dlink->mavlinknode->vehicle.attitude.pitch * 57.3,
|
copk->setAttitude(dlink->mavlinknode->vehicle.attitude.pitch * 57.3,
|
||||||
dlink->mavlinknode->vehicle.attitude.roll * 57.3,
|
dlink->mavlinknode->vehicle.attitude.roll * 57.3,
|
||||||
dlink->mavlinknode->vehicle.attitude.yaw * 57.3);
|
dlink->mavlinknode->vehicle.attitude.yaw * 57.3);
|
||||||
|
|
||||||
|
|
||||||
copk->setAltitude(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-3 );
|
copk->setAltitude(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-3 );
|
||||||
copk->setAirSpeed(dlink->mavlinknode->vehicle.airspeed_autocal.vx);
|
copk->setAirSpeed(dlink->mavlinknode->vehicle.airspeed_autocal.vx);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+20
-56
@@ -13,11 +13,11 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
|||||||
|
|
||||||
Mission = new MissionProcess();
|
Mission = new MissionProcess();
|
||||||
Mission->setRunFrq(200);
|
Mission->setRunFrq(200);
|
||||||
Mission->start();
|
//Mission->start();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Parameterthread = new QThread();
|
//Parameterthread = new QThread();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -200,52 +200,52 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
|
|||||||
switch(status.parse_state)
|
switch(status.parse_state)
|
||||||
{
|
{
|
||||||
case MAVLINK_PARSE_STATE_UNINIT:{
|
case MAVLINK_PARSE_STATE_UNINIT:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_UNINIT";
|
//qDebug() << "MAVLINK_PARSE_STATE_UNINIT";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_IDLE:{
|
case MAVLINK_PARSE_STATE_IDLE:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_IDLE";
|
//qDebug() << "MAVLINK_PARSE_STATE_IDLE";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_STX:{
|
case MAVLINK_PARSE_STATE_GOT_STX:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_STX";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_STX";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_LENGTH:{
|
case MAVLINK_PARSE_STATE_GOT_LENGTH:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_LENGTH";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_LENGTH";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS:{
|
case MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS:{
|
case MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_SEQ:{
|
case MAVLINK_PARSE_STATE_GOT_SEQ:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_SEQ";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_SEQ";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_SYSID:{
|
case MAVLINK_PARSE_STATE_GOT_SYSID:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_SYSID";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_SYSID";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_COMPID:{
|
case MAVLINK_PARSE_STATE_GOT_COMPID:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_COMPID";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_COMPID";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_MSGID1:{
|
case MAVLINK_PARSE_STATE_GOT_MSGID1:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_MSGID1";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_MSGID1";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_MSGID2:{
|
case MAVLINK_PARSE_STATE_GOT_MSGID2:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_MSGID2";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_MSGID2";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_MSGID3:{
|
case MAVLINK_PARSE_STATE_GOT_MSGID3:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_MSGID3";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_MSGID3";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_PAYLOAD:{
|
case MAVLINK_PARSE_STATE_GOT_PAYLOAD:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_PAYLOAD";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_PAYLOAD";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_CRC1:{
|
case MAVLINK_PARSE_STATE_GOT_CRC1:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_CRC1";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_CRC1";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_GOT_BAD_CRC1:{
|
case MAVLINK_PARSE_STATE_GOT_BAD_CRC1:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_BAD_CRC1";
|
//qDebug() << "MAVLINK_PARSE_STATE_GOT_BAD_CRC1";
|
||||||
}break;
|
}break;
|
||||||
case MAVLINK_PARSE_STATE_SIGNATURE_WAIT:{
|
case MAVLINK_PARSE_STATE_SIGNATURE_WAIT:{
|
||||||
qDebug() << "MAVLINK_PARSE_STATE_SIGNATURE_WAIT";
|
//qDebug() << "MAVLINK_PARSE_STATE_SIGNATURE_WAIT";
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -286,8 +286,9 @@ void MavLinkNode::MAVLinkRcv_Handler(mavlink_message_t msg)
|
|||||||
//case MAVLINK_MSG_ID_MISSION_REQUEST:
|
//case MAVLINK_MSG_ID_MISSION_REQUEST:
|
||||||
case MAVLINK_MSG_ID_MISSION_REQUEST_INT:
|
case MAVLINK_MSG_ID_MISSION_REQUEST_INT:
|
||||||
case MAVLINK_MSG_ID_MISSION_ACK:
|
case MAVLINK_MSG_ID_MISSION_ACK:
|
||||||
MissionParse(msg);
|
Mission->MissionParse(msg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//参数
|
//参数
|
||||||
case MAVLINK_MSG_ID_PARAM_REQUEST_LIST:
|
case MAVLINK_MSG_ID_PARAM_REQUEST_LIST:
|
||||||
case MAVLINK_MSG_ID_PARAM_REQUEST_READ:
|
case MAVLINK_MSG_ID_PARAM_REQUEST_READ:
|
||||||
@@ -404,43 +405,6 @@ void MavLinkNode::CommandParse(mavlink_message_t msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MavLinkNode::MissionParse(mavlink_message_t msg)
|
|
||||||
{
|
|
||||||
switch (msg.msgid) {
|
|
||||||
//航线部分
|
|
||||||
case MAVLINK_MSG_ID_MISSION_COUNT: {//飞控发来计数值,然后开始读取
|
|
||||||
mavlink_msg_mission_count_decode(&msg,&vehicle.mission_count);
|
|
||||||
|
|
||||||
//Mavlink_msg_mission_request_int(0);
|
|
||||||
|
|
||||||
}break;
|
|
||||||
case MAVLINK_MSG_ID_MISSION_ITEM: {
|
|
||||||
mavlink_msg_mission_item_decode(&msg,&vehicle.mission_item);
|
|
||||||
}break;
|
|
||||||
case MAVLINK_MSG_ID_MISSION_ITEM_INT: {
|
|
||||||
mavlink_msg_mission_item_int_decode(&msg,&vehicle.mission_item_int);
|
|
||||||
|
|
||||||
//emit mission_recieve_item(vehicle.mission_item_int);
|
|
||||||
if((vehicle.mission_count.count-1) >= (vehicle.mission_item_int.seq+1))
|
|
||||||
{
|
|
||||||
//Mavlink_msg_mission_request_int(vehicle.mission_item_int.seq + 1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//Mavlink_msg_mission_ack();
|
|
||||||
}
|
|
||||||
|
|
||||||
}break;
|
|
||||||
case MAVLINK_MSG_ID_MISSION_REQUEST: {
|
|
||||||
mavlink_msg_mission_request_decode(&msg,&vehicle.mission_request);
|
|
||||||
//emit mission_item_request(vehicle.mission_request.seq);
|
|
||||||
}break;
|
|
||||||
case MAVLINK_MSG_ID_MISSION_REQUEST_INT: {
|
|
||||||
mavlink_msg_mission_request_int_decode(&msg,&vehicle.mission_request_int);
|
|
||||||
//emit mission_item_request_int(vehicle.mission_request_int.seq);
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -51,12 +51,6 @@ class MavLinkNode : public QObject
|
|||||||
mavlink_vfr_hud_t vfr_hud;
|
mavlink_vfr_hud_t vfr_hud;
|
||||||
|
|
||||||
mavlink_command_int_t command_int;
|
mavlink_command_int_t command_int;
|
||||||
mavlink_mission_count_t mission_count;
|
|
||||||
mavlink_mission_item_t mission_item;
|
|
||||||
mavlink_mission_item_int_t mission_item_int;
|
|
||||||
mavlink_mission_request_t mission_request;
|
|
||||||
mavlink_mission_request_int_t mission_request_int;
|
|
||||||
mavlink_mission_ack_t mission_ack;
|
|
||||||
|
|
||||||
mavlink_param_set_t param_set;//
|
mavlink_param_set_t param_set;//
|
||||||
mavlink_param_union_t param_union;
|
mavlink_param_union_t param_union;
|
||||||
@@ -88,7 +82,7 @@ public:
|
|||||||
signals:
|
signals:
|
||||||
void state_updated();
|
void state_updated();
|
||||||
void parameter_updated();
|
void parameter_updated();
|
||||||
void mission_updated();
|
//void mission_updated();
|
||||||
public slots:
|
public slots:
|
||||||
//线程对外接口
|
//线程对外接口
|
||||||
void setRunFrq(uint32_t frq);
|
void setRunFrq(uint32_t frq);
|
||||||
@@ -115,7 +109,7 @@ private slots:
|
|||||||
void StatusParse(mavlink_message_t msg);
|
void StatusParse(mavlink_message_t msg);
|
||||||
void ParamParse(mavlink_message_t msg);
|
void ParamParse(mavlink_message_t msg);
|
||||||
void CommandParse(mavlink_message_t msg);
|
void CommandParse(mavlink_message_t msg);
|
||||||
void MissionParse(mavlink_message_t msg);
|
//
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|||||||
@@ -2,17 +2,9 @@
|
|||||||
|
|
||||||
MissionProcess::MissionProcess(QObject *parent) : QObject(parent)
|
MissionProcess::MissionProcess(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
//mission thread
|
|
||||||
/*
|
|
||||||
Missionthread = new QThread();
|
|
||||||
this->moveToThread(Missionthread);
|
|
||||||
connect(Missionthread, &QThread::started, this, &MavLinkNode::process);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MissionProcess::setRunFrq(uint32_t frq)
|
void MissionProcess::setRunFrq(uint32_t frq)
|
||||||
{
|
{
|
||||||
if((frq != 0)||(frq <= 1000))
|
if((frq != 0)||(frq <= 1000))
|
||||||
@@ -22,7 +14,6 @@ void MissionProcess::setRunFrq(uint32_t frq)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MissionProcess::start()
|
void MissionProcess::start()
|
||||||
{
|
{
|
||||||
if(Missionthread == nullptr)
|
if(Missionthread == nullptr)
|
||||||
@@ -44,7 +35,6 @@ void MissionProcess::start()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MissionProcess::stop()
|
void MissionProcess::stop()
|
||||||
{
|
{
|
||||||
if(Missionthread->isRunning())
|
if(Missionthread->isRunning())
|
||||||
@@ -58,8 +48,6 @@ void MissionProcess::stop()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//这里一直传输和接收航线信息
|
|
||||||
void MissionProcess::process()//线程函数
|
void MissionProcess::process()//线程函数
|
||||||
{
|
{
|
||||||
uint8_t count = 0;
|
uint8_t count = 0;
|
||||||
@@ -67,14 +55,55 @@ void MissionProcess::process()//线程函数
|
|||||||
{
|
{
|
||||||
count ++;
|
count ++;
|
||||||
QThread::msleep(1000/running_frq);
|
QThread::msleep(1000/running_frq);
|
||||||
|
//状态机
|
||||||
|
|
||||||
|
|
||||||
|
//如果要读取航线,线发送读取指令,然后等待返回,如果返回,那么启动线程进入循环接收
|
||||||
|
|
||||||
|
//如果要写入,那么先发,然后等待,如果反馈,那么继续发送,如果不反馈,发送10次,无响应超时
|
||||||
}
|
}
|
||||||
//退出线程
|
//退出线程
|
||||||
Missionthread->quit();
|
Missionthread->quit();
|
||||||
Missionthread->deleteLater();
|
Missionthread->deleteLater();
|
||||||
Missionthread = nullptr;
|
Missionthread = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MissionProcess::MissionParse(mavlink_message_t msg)
|
||||||
|
{
|
||||||
|
switch (msg.msgid) {
|
||||||
|
//航线部分
|
||||||
|
case MAVLINK_MSG_ID_MISSION_COUNT: {//飞控发来计数值,然后开始读取
|
||||||
|
mavlink_msg_mission_count_decode(&msg,&mission_count);
|
||||||
|
|
||||||
|
//Mavlink_msg_mission_request_int(0);
|
||||||
|
|
||||||
|
}break;
|
||||||
|
case MAVLINK_MSG_ID_MISSION_ITEM: {
|
||||||
|
mavlink_msg_mission_item_decode(&msg,&mission_item);
|
||||||
|
}break;
|
||||||
|
case MAVLINK_MSG_ID_MISSION_ITEM_INT: {
|
||||||
|
mavlink_msg_mission_item_int_decode(&msg,&mission_item_int);
|
||||||
|
|
||||||
|
//emit mission_recieve_item(vehicle.mission_item_int);
|
||||||
|
if((mission_count.count-1) >= (mission_item_int.seq+1))
|
||||||
|
{
|
||||||
|
//Mavlink_msg_mission_request_int(vehicle.mission_item_int.seq + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Mavlink_msg_mission_ack();
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
case MAVLINK_MSG_ID_MISSION_REQUEST: {
|
||||||
|
mavlink_msg_mission_request_decode(&msg,&mission_request);
|
||||||
|
//emit mission_item_request(vehicle.mission_request.seq);
|
||||||
|
}break;
|
||||||
|
case MAVLINK_MSG_ID_MISSION_REQUEST_INT: {
|
||||||
|
mavlink_msg_mission_request_int_decode(&msg,&mission_request_int);
|
||||||
|
//emit mission_item_request_int(vehicle.mission_request_int.seq);
|
||||||
|
}break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -84,4 +113,3 @@ void MissionProcess::process()//线程函数
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#include "QDebug"
|
#include "QDebug"
|
||||||
#include "QThread"
|
#include "QThread"
|
||||||
|
#include "mavlink.h"
|
||||||
|
|
||||||
#ifdef QtMavlinkNode
|
#ifdef QtMavlinkNode
|
||||||
#include <mavlinknodeglobal.h>
|
#include <mavlinknodeglobal.h>
|
||||||
@@ -15,7 +15,6 @@ class MAVLINKNODESHARED_EXPORT MissionProcess : public QObject {
|
|||||||
class MissionProcess : public QObject
|
class MissionProcess : public QObject
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit MissionProcess(QObject *parent = nullptr);
|
explicit MissionProcess(QObject *parent = nullptr);
|
||||||
@@ -27,6 +26,9 @@ public slots:
|
|||||||
void start();
|
void start();
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
|
|
||||||
|
void MissionParse(mavlink_message_t msg);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
//线程私有接口
|
//线程私有接口
|
||||||
void process();
|
void process();
|
||||||
@@ -36,6 +38,16 @@ signals:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
mavlink_mission_count_t mission_count;
|
||||||
|
mavlink_mission_item_t mission_item;
|
||||||
|
mavlink_mission_item_int_t mission_item_int;
|
||||||
|
mavlink_mission_request_t mission_request;
|
||||||
|
mavlink_mission_request_int_t mission_request_int;
|
||||||
|
mavlink_mission_ack_t mission_ack;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool running_flag = false;
|
bool running_flag = false;
|
||||||
quint32 running_frq = 200;//200Hz
|
quint32 running_frq = 200;//200Hz
|
||||||
QThread *Missionthread = nullptr;
|
QThread *Missionthread = nullptr;
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user