‘航线读取状态机完成,可以很快安全的传输航线,关于部分航线功能后面优化,同时发现串口缓存存在bug,明日修复
This commit is contained in:
+1
-1
@@ -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 :
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;//切换到什么都不做
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user