删除多余线程,减少CPU支出
This commit is contained in:
+5
-4
@@ -286,11 +286,11 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
|
||||
|
||||
//dlink --- toolui-index3
|
||||
connect(dlink->mavlinknode->Terminal,SIGNAL(Recieve(QString)),
|
||||
connect(dlink->mavlinknode,SIGNAL(Recieve(QString)),
|
||||
toolsui->index3,SLOT(Recieve(QString)));
|
||||
|
||||
connect(toolsui->index3,SIGNAL(Terminal_Transmit(QString)),
|
||||
dlink->mavlinknode->Terminal,SLOT(Transmit(QString)),Qt::DirectConnection);
|
||||
dlink->mavlinknode,SLOT(Transmit(QString)),Qt::DirectConnection);
|
||||
|
||||
|
||||
|
||||
@@ -632,7 +632,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
dlink->mavlinknode,&MavLinkNode::setGCSID,Qt::DirectConnection);
|
||||
|
||||
connect(setting->index0->globalsetting,&GlobalSetting::setHeartBeat,
|
||||
dlink->mavlinknode->Status,&statusprocess::setHeartbeat,Qt::DirectConnection);
|
||||
dlink->mavlinknode,&MavLinkNode::setHeartbeat,Qt::DirectConnection);
|
||||
|
||||
|
||||
//设置地面站ID
|
||||
@@ -1750,7 +1750,8 @@ void MainWindow::updateUI()//事件驱动式更新数据
|
||||
}
|
||||
|
||||
|
||||
healthui->setState(28,getBit(health,31)?(HealthUI::state::inital):(HealthUI::state::failure));
|
||||
healthui->setState(28,getBit(health,31)?(HealthUI::state::inital):(HealthUI::state::failure));//上行有效
|
||||
|
||||
healthui->setState(29,getBit(health,30)?(HealthUI::state::success):(HealthUI::state::inital));
|
||||
//healthui->setValueState(29,getBit(health,30)?(tr("记录已打开")):(tr("")));//sel
|
||||
|
||||
|
||||
@@ -55,15 +55,15 @@ void terminal::Parse(mavlink_message_t msg)
|
||||
switch (msg.msgid) {
|
||||
case MAVLINK_MSG_ID_SERIAL_CONTROL :
|
||||
|
||||
mavlink_serial_control_t serial_control;
|
||||
mavlink_serial_control_t serial_control;
|
||||
|
||||
mavlink_msg_serial_control_decode(&msg,&serial_control);
|
||||
mavlink_msg_serial_control_decode(&msg,&serial_control);
|
||||
|
||||
QByteArray str;
|
||||
QByteArray str;
|
||||
|
||||
str.append((char *)serial_control.data,serial_control.count);
|
||||
str.append((char *)serial_control.data,serial_control.count);
|
||||
|
||||
emit Recieve(str);
|
||||
emit Recieve(str);
|
||||
|
||||
break;
|
||||
|
||||
|
||||
@@ -86,6 +86,7 @@ void ThreadTemplet::pause()
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ThreadTemplet::process()//线程函数
|
||||
{
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ void commandprocess::process()//线程函数
|
||||
|
||||
while (true)
|
||||
{
|
||||
//QThread::msleep((status.m_Mode != 0)?(0):(-1));
|
||||
count ++;
|
||||
switch(status.m_Mode)
|
||||
{
|
||||
|
||||
+133
-10
@@ -110,6 +110,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent)
|
||||
connect(Commander,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
|
||||
/*
|
||||
Status = new statusprocess();
|
||||
Status->setGCSID(Current_sysID,Current_CompID);
|
||||
connect(Status,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
@@ -120,8 +121,9 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent)
|
||||
|
||||
connect(Status,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
Terminal = new terminal();
|
||||
Terminal->setGCSID(Current_sysID,Current_CompID);
|
||||
connect(Terminal,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
@@ -132,6 +134,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent)
|
||||
|
||||
connect(Terminal,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
*/
|
||||
/*
|
||||
RC = new rcprocess();
|
||||
RC->setGCSID(Current_sysID,Current_CompID);
|
||||
@@ -147,6 +150,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent)
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
*/
|
||||
|
||||
/*
|
||||
rtk = new rtkprocess();
|
||||
rtk->setGCSID(Current_sysID,Current_CompID);
|
||||
|
||||
@@ -158,6 +162,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent)
|
||||
|
||||
connect(rtk,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
*/
|
||||
|
||||
isCommunicationLost = false;
|
||||
|
||||
@@ -169,6 +174,14 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent)
|
||||
Parser2_init(&parser);
|
||||
Packer2_init(&packer);
|
||||
|
||||
|
||||
m_heartbeat.autopilot = 1;
|
||||
m_heartbeat.base_mode = 0;
|
||||
m_heartbeat.custom_mode = 0;
|
||||
m_heartbeat.mavlink_version = 3;
|
||||
m_heartbeat.system_status = 0;
|
||||
m_heartbeat.type = 0;
|
||||
|
||||
}
|
||||
|
||||
MavLinkNode::~MavLinkNode()
|
||||
@@ -219,17 +232,20 @@ MavLinkNode::~MavLinkNode()
|
||||
Commander = nullptr;
|
||||
}
|
||||
|
||||
/*
|
||||
if(Status)
|
||||
{
|
||||
delete Status;
|
||||
Status = nullptr;
|
||||
}
|
||||
|
||||
*/
|
||||
/*
|
||||
if(Terminal)
|
||||
{
|
||||
delete Terminal;
|
||||
Terminal = nullptr;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
if(RC)
|
||||
{
|
||||
@@ -238,11 +254,13 @@ MavLinkNode::~MavLinkNode()
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
if(rtk)
|
||||
{
|
||||
delete rtk;
|
||||
rtk = nullptr;
|
||||
}
|
||||
*/
|
||||
|
||||
qDebug() << "stop mavlink" << QThread::currentThreadId();
|
||||
}
|
||||
@@ -268,11 +286,13 @@ void MavLinkNode::setGCSID(int id)
|
||||
Commander->setGCSID(gcsid,MAV_COMP_ID_MISSIONPLANNER);
|
||||
}
|
||||
|
||||
/*
|
||||
if(Status)
|
||||
{
|
||||
Status->setGCSID(gcsid,MAV_COMP_ID_MISSIONPLANNER);
|
||||
}
|
||||
|
||||
|
||||
if(Terminal)
|
||||
{
|
||||
Terminal->setGCSID(gcsid,MAV_COMP_ID_MISSIONPLANNER);
|
||||
@@ -287,6 +307,8 @@ void MavLinkNode::setGCSID(int id)
|
||||
{
|
||||
rtk->setGCSID(gcsid,MAV_COMP_ID_MISSIONPLANNER);
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
void MavLinkNode::CreateCSV(void)
|
||||
@@ -585,6 +607,9 @@ void MavLinkNode::process()//线程函数
|
||||
bool isIdle = true;
|
||||
|
||||
|
||||
int HeartBeatTime = QTime::currentTime().msecsSinceStartOfDay();
|
||||
|
||||
|
||||
QElapsedTimer time;
|
||||
time.start();
|
||||
|
||||
@@ -597,6 +622,27 @@ void MavLinkNode::process()//线程函数
|
||||
QThread::msleep(1000/running_frq);
|
||||
//timer->start();
|
||||
|
||||
if(isSendHeartBeat == true)
|
||||
{
|
||||
if((QTime::currentTime().msecsSinceStartOfDay() - HeartBeatTime) > (1000.0/heartbeatFrq))
|
||||
{
|
||||
heartbeat(m_heartbeat.custom_mode,
|
||||
m_heartbeat.type,
|
||||
m_heartbeat.autopilot,
|
||||
m_heartbeat.base_mode,
|
||||
m_heartbeat.system_status,
|
||||
m_heartbeat.mavlink_version);
|
||||
HeartBeatTime = QTime::currentTime().msecsSinceStartOfDay();
|
||||
}
|
||||
}
|
||||
|
||||
if(isSendTerminal == true)
|
||||
{
|
||||
isSendTerminal = false;
|
||||
serial_control();
|
||||
}
|
||||
|
||||
|
||||
//解码从UDP来的
|
||||
datagram.clear();
|
||||
datagram = readbuff(SourceType::c_sock);//每次全部读取
|
||||
@@ -618,6 +664,8 @@ void MavLinkNode::process()//线程函数
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(isInterruptionRequested())//退出
|
||||
{
|
||||
break;
|
||||
@@ -923,8 +971,19 @@ void MavLinkNode::MAVLinkRcv_Handler(mavlink_message_t msg)
|
||||
|
||||
//终端
|
||||
case MAVLINK_MSG_ID_SERIAL_CONTROL:
|
||||
Terminal->Parse(msg);
|
||||
break;
|
||||
{
|
||||
//Terminal->Parse(msg);
|
||||
mavlink_serial_control_t serial_control;
|
||||
|
||||
mavlink_msg_serial_control_decode(&msg,&serial_control);
|
||||
|
||||
QByteArray str;
|
||||
|
||||
str.append((char *)serial_control.data,serial_control.count);
|
||||
|
||||
emit Recieve(str);
|
||||
|
||||
}break;
|
||||
|
||||
|
||||
//状态
|
||||
@@ -1012,12 +1071,12 @@ void MavLinkNode::StatusParse(mavlink_message_t msg)
|
||||
case MAVLINK_MSG_ID_HEARTBEAT: {
|
||||
mavlink_msg_heartbeat_decode(&msg,&vehicle.heartbeat);
|
||||
|
||||
Status->m_heartbeat.autopilot = vehicle.heartbeat.autopilot;
|
||||
Status->m_heartbeat.base_mode = vehicle.heartbeat.base_mode;
|
||||
Status->m_heartbeat.custom_mode = vehicle.heartbeat.custom_mode;
|
||||
Status->m_heartbeat.mavlink_version = vehicle.heartbeat.mavlink_version;
|
||||
Status->m_heartbeat.system_status = vehicle.heartbeat.system_status;
|
||||
Status->m_heartbeat.type = vehicle.heartbeat.type;
|
||||
m_heartbeat.autopilot = vehicle.heartbeat.autopilot;
|
||||
m_heartbeat.base_mode = vehicle.heartbeat.base_mode;
|
||||
m_heartbeat.custom_mode = vehicle.heartbeat.custom_mode;
|
||||
m_heartbeat.mavlink_version = vehicle.heartbeat.mavlink_version;
|
||||
m_heartbeat.system_status = vehicle.heartbeat.system_status;
|
||||
m_heartbeat.type = vehicle.heartbeat.type;
|
||||
|
||||
QByteArray csvdata;
|
||||
csvdata.clear();
|
||||
@@ -1753,3 +1812,67 @@ void MavLinkNode::setLogfile(QString file)
|
||||
}
|
||||
}
|
||||
|
||||
//发送函数
|
||||
void MavLinkNode::setHeartbeat(QVariant state,QVariant frq)
|
||||
{
|
||||
//给指令赋值
|
||||
|
||||
//开启线程开始传输
|
||||
if(state.toBool() == true)
|
||||
{
|
||||
isSendHeartBeat = true;//发送模式
|
||||
}
|
||||
else
|
||||
{
|
||||
isSendHeartBeat = false;//空闲模式
|
||||
}
|
||||
|
||||
heartbeatFrq = frq.toDouble();
|
||||
}
|
||||
|
||||
void MavLinkNode::heartbeat(uint32_t custom_mode,uint8_t type,uint8_t autopilot,uint8_t base_mode,uint8_t system_status,uint8_t mavlink_version)
|
||||
{
|
||||
static mavlink_message_t msg;
|
||||
static mavlink_heartbeat_t heartbeat;
|
||||
|
||||
heartbeat.custom_mode = custom_mode;
|
||||
heartbeat.type = type;
|
||||
|
||||
heartbeat.autopilot = autopilot;
|
||||
heartbeat.base_mode = base_mode;
|
||||
heartbeat.system_status = system_status;
|
||||
heartbeat.mavlink_version = mavlink_version;
|
||||
|
||||
mavlink_msg_heartbeat_encode(GCS_SysID,GCS_CompID, &msg,&heartbeat);
|
||||
Send(msg);
|
||||
}
|
||||
|
||||
void MavLinkNode::Transmit(QString msg)
|
||||
{
|
||||
|
||||
SerialData.clear();
|
||||
SerialData.append(msg);
|
||||
isSendTerminal = true;
|
||||
|
||||
}
|
||||
|
||||
void MavLinkNode::serial_control(void)
|
||||
{
|
||||
static mavlink_message_t msg;
|
||||
static mavlink_serial_control_t serial_control;
|
||||
|
||||
serial_control.baudrate = 115200;
|
||||
serial_control.count = SerialData.size();
|
||||
|
||||
memcpy(serial_control.data,SerialData.toLocal8Bit().data(),SerialData.size());
|
||||
|
||||
serial_control.flags = SERIAL_CONTROL_FLAG_EXCLUSIVE | SERIAL_CONTROL_FLAG_RESPOND | SERIAL_CONTROL_FLAG_MULTI;
|
||||
serial_control.device = SERIAL_CONTROL_DEV_SHELL;
|
||||
serial_control.timeout = 5000;
|
||||
|
||||
mavlink_msg_serial_control_encode(GCS_SysID,GCS_CompID, &msg,&serial_control);
|
||||
Send(msg);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -205,6 +205,8 @@ signals:
|
||||
void setPos(int sysid,int compid,double x,double y,double z);
|
||||
void setHeading(int sysid,int compid,double x,double y,double z);
|
||||
|
||||
void Recieve(QString msg);
|
||||
|
||||
public slots:
|
||||
//线程对外接口
|
||||
void CreateCSV(void);
|
||||
@@ -222,6 +224,10 @@ public slots:
|
||||
|
||||
void setGCSID(int id);
|
||||
|
||||
void setHeartbeat(QVariant state, QVariant frq );
|
||||
|
||||
void serial_control(void);
|
||||
void Transmit(QString msg);
|
||||
|
||||
private slots:
|
||||
//线程私有接口
|
||||
@@ -247,6 +253,13 @@ private slots:
|
||||
|
||||
bool setLogData(mavlink_message_t msg);
|
||||
|
||||
void heartbeat(uint32_t custom_mode,
|
||||
uint8_t type,
|
||||
uint8_t autopilot,
|
||||
uint8_t base_mode,
|
||||
uint8_t system_status,
|
||||
uint8_t mavlink_version);
|
||||
|
||||
protected:
|
||||
|
||||
int Current_sysID = 0xF1;
|
||||
@@ -294,7 +307,16 @@ protected:
|
||||
mutable QReadWriteLock RWlock;
|
||||
|
||||
|
||||
qreal heartbeatFrq = 1;
|
||||
bool isSendHeartBeat = false;
|
||||
|
||||
mavlink_heartbeat_t m_heartbeat;
|
||||
|
||||
QTimer *heartbeatTimer = nullptr;
|
||||
|
||||
|
||||
bool isSendTerminal = false;
|
||||
QString SerialData;
|
||||
|
||||
|
||||
};
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ void DLink::timeout()
|
||||
|
||||
qint64 time = QDateTime::currentMSecsSinceEpoch() - last;
|
||||
|
||||
if(time >= 2000)
|
||||
if(time >= 3000)
|
||||
{
|
||||
Byte_Out_per = (double)Byte_Out_ALL / (time * 0.001);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user