‘航线读取状态机完成,可以很快安全的传输航线,关于部分航线功能后面优化,同时发现串口缓存存在bug,明日修复

This commit is contained in:
hm
2020-03-18 00:17:40 +08:00
parent 3555b4ad94
commit f5b3fa5a09
6 changed files with 54 additions and 22 deletions
+1 -1
View File
@@ -109,7 +109,7 @@ void MainWindow::keyPressEvent(QKeyEvent *event) //键盘按下事件
if(event->modifiers() == Qt::AltModifier) if(event->modifiers() == Qt::AltModifier)
{ {
qInfo() << "alt + D"; qInfo() << "alt + D";
dlink->mavlinknode->Mission->ReadCmd(0,0); dlink->mavlinknode->Mission->ReadCmd(1,1);
} }
break; break;
case Qt::Key_U : case Qt::Key_U :
+21 -7
View File
@@ -50,11 +50,11 @@ void MavLinkNode::start()
running_flag = true; running_flag = true;
Nodethread->start(); Nodethread->start();
qDebug() << "thread start" << running_flag; qDebug() << "MavLinkNode thread start" << running_flag;
} }
else else
{ {
qDebug() << "thread has started"; qDebug() << "MavLinkNode thread has started";
} }
} }
@@ -89,6 +89,7 @@ void MavLinkNode::process()//线程函数
datagram = readbuff(SourceType::c_sock);//每次全部读取 datagram = readbuff(SourceType::c_sock);//每次全部读取
if(!datagram.isEmpty()) if(!datagram.isEmpty())
{ {
//qDebug() << "client parse";
Mavlinkparse(SourceType::c_sock,datagram); Mavlinkparse(SourceType::c_sock,datagram);
} }
@@ -131,7 +132,7 @@ void MavLinkNode::setbuff(quint32 src,QByteArray data)
client_buff.buff[client_buff.select].clear(); client_buff.buff[client_buff.select].clear();
} }
client_buff.buff[client_buff.select].append(data); client_buff.buff[client_buff.select].append(data);
//qDebug() << "set buff"; qDebug() << "buff" << client_buff.select << client_buff.buff[client_buff.select].size() ;
break; break;
case SourceType::s_port: case SourceType::s_port:
//当前的buff超过10M字节之后就清除,防爆机制,不然buff太大后容易卡死 //当前的buff超过10M字节之后就清除,防爆机制,不然buff太大后容易卡死
@@ -154,12 +155,16 @@ QByteArray MavLinkNode::readbuff(quint32 src)
if(client_buff.select == 0) if(client_buff.select == 0)
{ {
datagram.setRawData(client_buff.buff[1],client_buff.buff[1].size()); datagram.setRawData(client_buff.buff[1],client_buff.buff[1].size());
//清除这个未选择的buff
client_buff.buff[1].clear();
//读取完成,可以往这个内存里面写数了 //读取完成,可以往这个内存里面写数了
client_buff.select = 1; client_buff.select = 1;
} }
else if(client_buff.select == 1) else if(client_buff.select == 1)
{ {
datagram.setRawData(client_buff.buff[0],client_buff.buff[0].size()); datagram.setRawData(client_buff.buff[0],client_buff.buff[0].size());
//清除这个未选择的buff
client_buff.buff[0].clear();
//读取完成,可以往这个内存里面写数了 //读取完成,可以往这个内存里面写数了
client_buff.select = 0; client_buff.select = 0;
} }
@@ -276,16 +281,25 @@ void MavLinkNode::MAVLinkRcv_Handler(mavlink_message_t msg)
case MAVLINK_MSG_ID_EngineState: case MAVLINK_MSG_ID_EngineState:
case MAVLINK_MSG_ID_VFR_HUD: case MAVLINK_MSG_ID_VFR_HUD:
StatusParse(msg); StatusParse(msg);
//qDebug() << msg.compid << msg.sysid;
break; break;
//航线部分 //航线部分
case MAVLINK_MSG_ID_MISSION_REQUEST_LIST:
case MAVLINK_MSG_ID_MISSION_COUNT: case MAVLINK_MSG_ID_MISSION_COUNT:
case MAVLINK_MSG_ID_MISSION_CURRENT:
case MAVLINK_MSG_ID_MISSION_ITEM:
case MAVLINK_MSG_ID_MISSION_ITEM_INT:
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_REQUEST:
case MAVLINK_MSG_ID_MISSION_ITEM_INT:
case MAVLINK_MSG_ID_MISSION_ITEM:
case MAVLINK_MSG_ID_MISSION_ACK: case MAVLINK_MSG_ID_MISSION_ACK:
case MAVLINK_MSG_ID_MISSION_CURRENT:
case MAVLINK_MSG_ID_MISSION_SET_CURRENT:
case MAVLINK_MSG_ID_MISSION_CLEAR_ALL:
case MAVLINK_MSG_ID_MISSION_ITEM_REACHED:
case MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST:
case MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST:
Mission->MissionParse(msg); Mission->MissionParse(msg);
break; break;
+25 -7
View File
@@ -100,6 +100,7 @@ void MissionProcess::MissionParse(mavlink_message_t msg)
}break; }break;
case MAVLINK_MSG_ID_MISSION_COUNT: { case MAVLINK_MSG_ID_MISSION_COUNT: {
mavlink_msg_mission_count_decode(&msg,&mission_count); mavlink_msg_mission_count_decode(&msg,&mission_count);
//qDebug() << "mission_count" << mission_count.count;
isRecieveCount = true; isRecieveCount = true;
}break; }break;
case MAVLINK_MSG_ID_MISSION_REQUEST_INT: { case MAVLINK_MSG_ID_MISSION_REQUEST_INT: {
@@ -112,10 +113,12 @@ void MissionProcess::MissionParse(mavlink_message_t msg)
}break; }break;
case MAVLINK_MSG_ID_MISSION_ITEM_INT: { case MAVLINK_MSG_ID_MISSION_ITEM_INT: {
mavlink_msg_mission_item_int_decode(&msg,&mission_item_int); mavlink_msg_mission_item_int_decode(&msg,&mission_item_int);
isWaitingforItem = false; //qDebug() << "recieve item int:" << mission_item_int.seq;
isWaitingforItem = false;//已经收到航点,不用再等待
}break; }break;
case MAVLINK_MSG_ID_MISSION_ITEM: { case MAVLINK_MSG_ID_MISSION_ITEM: {
mavlink_msg_mission_item_decode(&msg,&mission_item); mavlink_msg_mission_item_decode(&msg,&mission_item);
//qDebug() << "recieve item:" << mission_item.seq;
isWaitingforItem = false; isWaitingforItem = false;
}break; }break;
case MAVLINK_MSG_ID_MISSION_ACK: { case MAVLINK_MSG_ID_MISSION_ACK: {
@@ -153,9 +156,12 @@ void MissionProcess::ReadStateMachine(void)
if(step == 0) if(step == 0)
{ {
qDebug() << "start reading mission";
isRecieveCount = false;
request_list();//请求读取某一个设备的航线 request_list();//请求读取某一个设备的航线
step++;//下一个阶段 step++;//下一个阶段
time = QTime::currentTime().msecsSinceStartOfDay(); time = QTime::currentTime().msecsSinceStartOfDay();
} }
else if(step == 1)//等待收到Count else if(step == 1)//等待收到Count
{ {
@@ -177,28 +183,38 @@ void MissionProcess::ReadStateMachine(void)
{ {
if(isRecieveCount == true)//收到count if(isRecieveCount == true)//收到count
{ {
qDebug() << "step" << step << "isRecieveCount" << isRecieveCount;
timeout_count = 0; timeout_count = 0;
isWaitingforItem = false; isRecieveCount = false;
isWaitingforItem = true;
request_int(0);//读取0点
step ++; step ++;
} }
} }
} }
else if(step ==3)//请求航点 else if(step ==2)//请求航点
{ {
if(isWaitingforItem == false) if(isWaitingforItem == false)
{ {
//分成两类,int和不带int //分成两类,int和不带int
if(mission_item_int.seq < mission_count.count) if((mission_item_int.seq+1) < mission_count.count)
{ {
qDebug() << "mission_item_int.seq+1" << (mission_item_int.seq+1);
isWaitingforItem = true;
request_int(mission_item_int.seq+1); request_int(mission_item_int.seq+1);
//定时 //定时
time = QTime::currentTime().msecsSinceStartOfDay(); time = QTime::currentTime().msecsSinceStartOfDay();
isWaitingforItem = true;
} }
else else
{ {
qDebug() << "mission recieve all";
step++; step++;
} }
} }
@@ -216,7 +232,7 @@ void MissionProcess::ReadStateMachine(void)
timeout_count = 0; timeout_count = 0;
qDebug() << "mission read fail"; qDebug() << "mission read fail";
} }
isWaitingforItem = false; isWaitingforItem = false;//重新发送一次
} }
else else
{ {
@@ -224,8 +240,10 @@ void MissionProcess::ReadStateMachine(void)
} }
} }
} }
else if(step == 4)//航线传输结束,发送ack else if(step == 3)//航线传输结束,发送ack
{ {
qDebug() << "step" << step << "transmit ok";
ack(); ack();
step = 0; step = 0;
m_TransmitMode = 0;//切换到什么都不做 m_TransmitMode = 0;//切换到什么都不做
+1 -1
View File
@@ -80,7 +80,7 @@ private slots:
signals: signals:
void readError(); void readError();
void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len); void SendMessageTo(quint8 ch, quint8 *data,quint16 len);
private: private:
+4 -4
View File
@@ -9,9 +9,9 @@ DLink::DLink(QObject *parent) : QObject(parent)
{ {
qDebug() << "Dlink " << QThread::currentThreadId(); qDebug() << "Dlink " << QThread::currentThreadId();
mavlinknode = new MavLinkNode(this); mavlinknode = new MavLinkNode();//不允许带参数,因为这是单独的线程
// connect(mavlinknode->Mission,SIGNAL(SendMessageTo(uint8_t,uint8_t*,uint16_t)), connect(mavlinknode->Mission,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
// this,SLOT(SendMessageTo(uint8_t,uint8_t*,uint16_t))); this,SLOT(SendMessageTo(quint8,quint8*,quint16)));
} }
DLink::~DLink() DLink::~DLink()
{ {
@@ -20,7 +20,7 @@ DLink::~DLink()
} }
int DLink::SendMessageTo(uint8_t ch, uint8_t *msg, uint16_t len) int DLink::SendMessageTo(quint8 ch, quint8 *msg, quint16 len)
{ {
if (DLink::Clientsock) if (DLink::Clientsock)
{ {
+1 -1
View File
@@ -51,7 +51,7 @@ public slots:
void readPendingDatagramsClient(void); void readPendingDatagramsClient(void);
int SendMessageTo(uint8_t ch, uint8_t *msg, uint16_t len); int SendMessageTo(quint8 ch, quint8 *msg, quint16 len);
protected: protected: