修正程序后出现一个bug,表现为程序启动后卡死,目前还没找到原因
This commit is contained in:
@@ -192,6 +192,7 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
|
||||
{
|
||||
if(MAVLINK_FRAMING_OK == mavlink_parse_char(src,*i,&msg,&status))
|
||||
{
|
||||
emit recievemsg(msg); //将信息广播出去
|
||||
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
|
||||
}
|
||||
else
|
||||
|
||||
@@ -80,6 +80,9 @@ public:
|
||||
MissionProcess *Mission;
|
||||
|
||||
signals:
|
||||
|
||||
void recievemsg(mavlink_message_t msg);
|
||||
|
||||
void state_updated();
|
||||
void parameter_updated();
|
||||
//void mission_updated();
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
#include "missionprocess.h"
|
||||
|
||||
void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len)
|
||||
{
|
||||
qDebug() << "data to send is:" << ch << data << len;
|
||||
}
|
||||
|
||||
MissionProcess::MissionProcess(QObject *parent) : QObject(parent)
|
||||
{
|
||||
@@ -82,7 +78,7 @@ void MissionProcess::SendMessage(mavlink_message_t msg)
|
||||
{
|
||||
uint8_t buff[256+20];
|
||||
uint16_t len = mavlink_msg_to_send_buffer(buff, &msg);
|
||||
SendMessageTo(0,buff, len);//使用信号和槽
|
||||
emit SendMessageTo(0,buff, len);//使用信号和槽
|
||||
}
|
||||
|
||||
|
||||
@@ -116,10 +112,11 @@ void MissionProcess::MissionParse(mavlink_message_t msg)
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ITEM_INT: {
|
||||
mavlink_msg_mission_item_int_decode(&msg,&mission_item_int);
|
||||
isWaitingforItem = true;
|
||||
isWaitingforItem = false;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ITEM: {
|
||||
mavlink_msg_mission_item_decode(&msg,&mission_item);
|
||||
isWaitingforItem = false;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ACK: {
|
||||
mavlink_msg_mission_ack_decode(&msg,&mission_ack);
|
||||
@@ -247,6 +244,7 @@ void MissionProcess::WriteStateMachine(void)
|
||||
|
||||
if(step == 0)
|
||||
{
|
||||
//向其他线程或者自己读取航点的数量
|
||||
count(20);//发送count
|
||||
time = QTime::currentTime().msecsSinceStartOfDay();
|
||||
step++;//下一个阶段
|
||||
@@ -256,7 +254,7 @@ void MissionProcess::WriteStateMachine(void)
|
||||
//如果超时,那么重新发一次指令
|
||||
if((QTime::currentTime().msecsSinceStartOfDay() - time) > 1000)
|
||||
{
|
||||
step = 0;
|
||||
step = 0;//返回上一个阶段
|
||||
timeout_count ++;
|
||||
if(timeout_count > 5)//如果指令发5次还没发出去,那么结束读取,并报错
|
||||
{
|
||||
@@ -267,39 +265,46 @@ void MissionProcess::WriteStateMachine(void)
|
||||
}
|
||||
else//如果没有超时,那么就进入下一个阶段
|
||||
{
|
||||
if(isRecieveRequest == true)//收到Request
|
||||
{
|
||||
timeout_count = 0;
|
||||
if(isRecieveRequest == true)
|
||||
{
|
||||
step ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if(step ==3)//发送航点
|
||||
else if(step == 3)
|
||||
{
|
||||
if(isWaitingforItem == false)
|
||||
if((QTime::currentTime().msecsSinceStartOfDay() - time) > 1000)
|
||||
{
|
||||
//分成两类,int和不带int
|
||||
|
||||
if(mission_item_int.seq < mission_count.count)
|
||||
{
|
||||
//item_int(mission_item_int.seq+1);//发送航点
|
||||
//开启定时器
|
||||
isWaitingforItem = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
step++;
|
||||
}
|
||||
step = 3;//返回上一个阶段
|
||||
timeout_count ++;
|
||||
if(timeout_count > 5)//如果指令发5次还没发出去,那么结束读取,并报错
|
||||
{
|
||||
step = 0;
|
||||
m_TransmitMode = 0;
|
||||
timeout_count = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//check issended and timeout
|
||||
if(isRecieveRequest == true)//收到Request
|
||||
{
|
||||
//分成两类,int和不带int
|
||||
if(mission_item_int.seq < mission_count.count)
|
||||
{
|
||||
//item_int(mission_item_int.seq+1);//发送航点
|
||||
isRecieveRequest = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
step++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(step == 4)//航线传输结束,等待ack,如果没接收到就算了,超时也结束
|
||||
{
|
||||
//ack();
|
||||
//ack();//wait for ack
|
||||
step = 0;
|
||||
isReadMission = false;
|
||||
isRecieveCount = false;
|
||||
|
||||
@@ -80,7 +80,7 @@ private slots:
|
||||
signals:
|
||||
void readError();
|
||||
|
||||
|
||||
void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len);
|
||||
|
||||
private:
|
||||
|
||||
@@ -127,12 +127,7 @@ private:
|
||||
};
|
||||
|
||||
|
||||
#ifdef QtMavlinkNode
|
||||
#include <mavlinknodeglobal.h>
|
||||
void MAVLINKNODESHARED_EXPORT SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len);
|
||||
#else
|
||||
void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+6
-1
@@ -10,6 +10,8 @@ DLink::DLink(QObject *parent) : QObject(parent)
|
||||
qDebug() << "Dlink " << QThread::currentThreadId();
|
||||
|
||||
mavlinknode = new MavLinkNode(this);
|
||||
// connect(mavlinknode->Mission,SIGNAL(SendMessageTo(uint8_t,uint8_t*,uint16_t)),
|
||||
// this,SLOT(SendMessageTo(uint8_t,uint8_t*,uint16_t)));
|
||||
}
|
||||
DLink::~DLink()
|
||||
{
|
||||
@@ -18,7 +20,7 @@ DLink::~DLink()
|
||||
}
|
||||
|
||||
|
||||
int DLink::SendMessageTo(uint8_t, uint8_t *msg, uint16_t len)
|
||||
int DLink::SendMessageTo(uint8_t ch, uint8_t *msg, uint16_t len)
|
||||
{
|
||||
if (DLink::Clientsock)
|
||||
{
|
||||
@@ -58,6 +60,9 @@ void DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity p
|
||||
mavlinknode->start();
|
||||
|
||||
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagramsSerialPort()));
|
||||
|
||||
|
||||
|
||||
qDebug() << "Serial Port Open Success";
|
||||
}
|
||||
else
|
||||
|
||||
+2
-2
@@ -36,7 +36,7 @@ public:
|
||||
|
||||
|
||||
|
||||
int SendMessageTo(uint8_t, uint8_t *msg, uint16_t len);
|
||||
|
||||
|
||||
|
||||
MavLinkNode *mavlinknode = nullptr;
|
||||
@@ -51,7 +51,7 @@ public slots:
|
||||
|
||||
void readPendingDatagramsClient(void);
|
||||
|
||||
|
||||
int SendMessageTo(uint8_t ch, uint8_t *msg, uint16_t len);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user