‘航线读取状态机完成,可以很快安全的传输航线,关于部分航线功能后面优化,同时发现串口缓存存在bug,明日修复
This commit is contained in:
+1
-1
@@ -109,7 +109,7 @@ void MainWindow::keyPressEvent(QKeyEvent *event) //键盘按下事件
|
||||
if(event->modifiers() == Qt::AltModifier)
|
||||
{
|
||||
qInfo() << "alt + D";
|
||||
dlink->mavlinknode->Mission->ReadCmd(0,0);
|
||||
dlink->mavlinknode->Mission->ReadCmd(1,1);
|
||||
}
|
||||
break;
|
||||
case Qt::Key_U :
|
||||
|
||||
@@ -50,11 +50,11 @@ void MavLinkNode::start()
|
||||
|
||||
running_flag = true;
|
||||
Nodethread->start();
|
||||
qDebug() << "thread start" << running_flag;
|
||||
qDebug() << "MavLinkNode thread start" << running_flag;
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "thread has started";
|
||||
qDebug() << "MavLinkNode thread has started";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,6 +89,7 @@ void MavLinkNode::process()//线程函数
|
||||
datagram = readbuff(SourceType::c_sock);//每次全部读取
|
||||
if(!datagram.isEmpty())
|
||||
{
|
||||
//qDebug() << "client parse";
|
||||
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].append(data);
|
||||
//qDebug() << "set buff";
|
||||
qDebug() << "buff" << client_buff.select << client_buff.buff[client_buff.select].size() ;
|
||||
break;
|
||||
case SourceType::s_port:
|
||||
//当前的buff超过10M字节之后就清除,防爆机制,不然buff太大后容易卡死
|
||||
@@ -154,12 +155,16 @@ QByteArray MavLinkNode::readbuff(quint32 src)
|
||||
if(client_buff.select == 0)
|
||||
{
|
||||
datagram.setRawData(client_buff.buff[1],client_buff.buff[1].size());
|
||||
//清除这个未选择的buff
|
||||
client_buff.buff[1].clear();
|
||||
//读取完成,可以往这个内存里面写数了
|
||||
client_buff.select = 1;
|
||||
}
|
||||
else if(client_buff.select == 1)
|
||||
{
|
||||
datagram.setRawData(client_buff.buff[0],client_buff.buff[0].size());
|
||||
//清除这个未选择的buff
|
||||
client_buff.buff[0].clear();
|
||||
//读取完成,可以往这个内存里面写数了
|
||||
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_VFR_HUD:
|
||||
StatusParse(msg);
|
||||
//qDebug() << msg.compid << msg.sysid;
|
||||
|
||||
break;
|
||||
|
||||
//航线部分
|
||||
case MAVLINK_MSG_ID_MISSION_REQUEST_LIST:
|
||||
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:
|
||||
case MAVLINK_MSG_ID_MISSION_ITEM_INT:
|
||||
case MAVLINK_MSG_ID_MISSION_ITEM:
|
||||
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);
|
||||
break;
|
||||
|
||||
|
||||
@@ -100,6 +100,7 @@ void MissionProcess::MissionParse(mavlink_message_t msg)
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_COUNT: {
|
||||
mavlink_msg_mission_count_decode(&msg,&mission_count);
|
||||
//qDebug() << "mission_count" << mission_count.count;
|
||||
isRecieveCount = true;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_REQUEST_INT: {
|
||||
@@ -112,10 +113,12 @@ 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 = false;
|
||||
//qDebug() << "recieve item int:" << mission_item_int.seq;
|
||||
isWaitingforItem = false;//已经收到航点,不用再等待
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ITEM: {
|
||||
mavlink_msg_mission_item_decode(&msg,&mission_item);
|
||||
//qDebug() << "recieve item:" << mission_item.seq;
|
||||
isWaitingforItem = false;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ACK: {
|
||||
@@ -153,9 +156,12 @@ void MissionProcess::ReadStateMachine(void)
|
||||
|
||||
if(step == 0)
|
||||
{
|
||||
qDebug() << "start reading mission";
|
||||
isRecieveCount = false;
|
||||
request_list();//请求读取某一个设备的航线
|
||||
step++;//下一个阶段
|
||||
time = QTime::currentTime().msecsSinceStartOfDay();
|
||||
|
||||
}
|
||||
else if(step == 1)//等待收到Count
|
||||
{
|
||||
@@ -177,28 +183,38 @@ void MissionProcess::ReadStateMachine(void)
|
||||
{
|
||||
if(isRecieveCount == true)//收到count
|
||||
{
|
||||
qDebug() << "step" << step << "isRecieveCount" << isRecieveCount;
|
||||
timeout_count = 0;
|
||||
isWaitingforItem = false;
|
||||
isRecieveCount = false;
|
||||
|
||||
isWaitingforItem = true;
|
||||
|
||||
request_int(0);//读取0点
|
||||
|
||||
step ++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if(step ==3)//请求航点
|
||||
else if(step ==2)//请求航点
|
||||
{
|
||||
if(isWaitingforItem == false)
|
||||
{
|
||||
//分成两类,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);
|
||||
//定时
|
||||
time = QTime::currentTime().msecsSinceStartOfDay();
|
||||
isWaitingforItem = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "mission recieve all";
|
||||
step++;
|
||||
}
|
||||
}
|
||||
@@ -216,7 +232,7 @@ void MissionProcess::ReadStateMachine(void)
|
||||
timeout_count = 0;
|
||||
qDebug() << "mission read fail";
|
||||
}
|
||||
isWaitingforItem = false;
|
||||
isWaitingforItem = false;//重新发送一次
|
||||
}
|
||||
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();
|
||||
step = 0;
|
||||
m_TransmitMode = 0;//切换到什么都不做
|
||||
|
||||
@@ -80,7 +80,7 @@ private slots:
|
||||
signals:
|
||||
void readError();
|
||||
|
||||
void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len);
|
||||
void SendMessageTo(quint8 ch, quint8 *data,quint16 len);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
+4
-4
@@ -9,9 +9,9 @@ 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)));
|
||||
mavlinknode = new MavLinkNode();//不允许带参数,因为这是单独的线程
|
||||
connect(mavlinknode->Mission,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
this,SLOT(SendMessageTo(quint8,quint8*,quint16)));
|
||||
}
|
||||
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)
|
||||
{
|
||||
|
||||
+1
-1
@@ -51,7 +51,7 @@ public slots:
|
||||
|
||||
void readPendingDatagramsClient(void);
|
||||
|
||||
int SendMessageTo(uint8_t ch, uint8_t *msg, uint16_t len);
|
||||
int SendMessageTo(quint8 ch, quint8 *msg, quint16 len);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user