可以接受数据,目前可能会死机,需要验证

This commit is contained in:
hm
2020-02-28 00:04:00 +08:00
parent 9b4ce69c41
commit bf5b1b78b8
6 changed files with 56 additions and 21 deletions
+20 -15
View File
@@ -70,29 +70,32 @@ void MavLinkNode::stop()
void MavLinkNode::process()//线程函数
{
uint8_t count = 0;
QByteArray datagram = NULL;
while (running_flag)
{
count ++;
QThread::msleep(1000/running_frq);//50Hz
QByteArray datagram = NULL;
QThread::msleep(1000/running_frq);
//解码从UDP来的
datagram.clear();
datagram = readbuff(SourceType::c_sock);//每次全部读取
//qDebug() << datagram;
if(!datagram.isEmpty())
{
Mavlinkparse(SourceType::c_sock,datagram);
}
/*
//解码从串口来的
datagram.clear();
datagram = readbuff(SourceType::c_sock);//每次全部读取
datagram = readbuff(SourceType::s_port);//每次全部读取
if(!datagram.isEmpty())
{
Mavlinkparse(SourceType::c_sock,datagram);
Mavlinkparse(SourceType::s_port,datagram);
}
*/
}
//退出线程
Nodethread->quit();
@@ -115,15 +118,16 @@ void MavLinkNode::setbuff(quint32 src,QByteArray data)
{
switch (src) {
default:
case 0:
case SourceType::c_sock:
//当前的buff超过10M字节之后就清除,防爆机制,不然buff太大后容易卡死
if(client_buff.buff[client_buff.select].size() >= client_buff.max_size)
{
client_buff.buff[client_buff.select].clear();
}
client_buff.buff[client_buff.select].append(data);
//qDebug() << "set buff";
break;
case 1:
case SourceType::s_port:
//当前的buff超过10M字节之后就清除,防爆机制,不然buff太大后容易卡死
if(serial_buff.buff[serial_buff.select].size() >= serial_buff.max_size)
{
@@ -138,8 +142,6 @@ QByteArray MavLinkNode::readbuff(quint32 src)
{
QByteArray datagram;
//从buff里面读取
switch (src) {
default:
case SourceType::c_sock:
@@ -151,7 +153,7 @@ QByteArray MavLinkNode::readbuff(quint32 src)
}
else if(client_buff.select == 1)
{
datagram.setRawData(client_buff.buff[1],client_buff.buff[1].size());
datagram.setRawData(client_buff.buff[0],client_buff.buff[0].size());
//读取完成,可以往这个内存里面写数了
client_buff.select = 0;
}
@@ -165,12 +167,15 @@ QByteArray MavLinkNode::readbuff(quint32 src)
}
else if(serial_buff.select == 1)
{
datagram.setRawData(serial_buff.buff[1],serial_buff.buff[1].size());
datagram.setRawData(serial_buff.buff[0],serial_buff.buff[0].size());
//读取完成,可以往这个内存里面写数了
serial_buff.select = 0;
}
break;
}
//qDebug() << datagram;
return datagram;
}
@@ -186,7 +191,6 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
if(MAVLINK_FRAMING_OK == mavlink_parse_char(src,*i,&msg,&status))
{
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
//qDebug() << "re";
}
else
{
@@ -214,6 +218,7 @@ void MavLinkNode::MAVLinkRcv_Handler(mavlink_message_t msg)
}break;
case MAVLINK_MSG_ID_ATTITUDE: {
mavlink_msg_attitude_decode(&msg,&vehicle.attitude);
qDebug() << "vehicle.attitude.pitch" << vehicle.attitude.pitch;
}break;
case MAVLINK_MSG_ID_GPS_RAW_INT: {
mavlink_msg_gps_raw_int_decode(&msg,&vehicle.gps_raw_int);
@@ -282,7 +287,7 @@ void MavLinkNode::MAVLinkRcv_Handler(mavlink_message_t msg)
//最后更新一下界面
//emit vehicleUpdate();
qDebug() << vehicle.heartbeat.type;
}