This commit is contained in:
hm
2020-03-23 18:39:05 +08:00
parent 5db211d510
commit 20787ce3fc
8 changed files with 322 additions and 289 deletions
+64 -14
View File
@@ -6,6 +6,24 @@ ParameterProcess::ParameterProcess(QObject *parent) : QObject(parent)
paramInspect = new ParameterInspector();
qRegisterMetaType<uint8_t>("uint8_t");
qRegisterMetaType<uint16_t>("uint16_t");
qRegisterMetaType<uint32_t>("uint32_t");
//开启线程之后signal失效
connect(paramInspect,SIGNAL(ReadCmd(uint8_t,uint8_t,uint8_t)),
this,SLOT(ReadCmd(uint8_t,uint8_t,uint8_t)),Qt::DirectConnection);//多线程连接方式
connect(paramInspect,SIGNAL(WriteCmd(uint8_t,uint8_t,uint32_t)),
this,SLOT(WriteCmd(uint8_t,uint8_t,uint32_t)),Qt::DirectConnection);
paramInspect->show();
}
@@ -56,6 +74,13 @@ void ParameterProcess::stop()
void ParameterProcess::process()//线程函数
{
uint8_t count = 0;
connect(paramInspect,SIGNAL(ReadCmd(uint8_t,uint8_t,uint8_t)),
this,SLOT(ReadCmd(uint8_t,uint8_t,uint8_t)));
connect(paramInspect,SIGNAL(WriteCmd(uint8_t,uint8_t,uint32_t)),
this,SLOT(WriteCmd(uint8_t,uint8_t,uint32_t)));
while (running_flag)
{
count ++;
@@ -92,6 +117,13 @@ void ParameterProcess::ReadCmd(uint8_t m_sysid, uint8_t m_compid,uint8_t type)
compid = m_compid;
status.m_Mode = RecieveMode;//接收模式
status.recieve.type = (type)?(_readtype::One):(_readtype::All);
qDebug() << "sysid" << sysid << endl
<< "compid" << compid << endl
<< "Mode" << status.m_Mode << endl
<< "type" << status.recieve.type << endl
<< "start...";
start();//开启线程
}
@@ -102,6 +134,12 @@ void ParameterProcess::WriteCmd(uint8_t m_sysid, uint8_t m_compid ,uint32_t coun
//mission_status.transmit.count = count;
status.m_Mode = TransmitMode;//发送模式
qDebug() << "sysid" << sysid << endl
<< "compid" << compid << endl
<< "Mode" << status.m_Mode << endl
<< "type" << status.recieve.type << endl
<< "start...";
start();//开启线程
}
@@ -120,7 +158,7 @@ void ParameterProcess::ParameterParse(mavlink_message_t msg)
paramInspect->appendParameter(msg);//发送的时候需要连同当前的sysid 和 compid也发送下去
status.recieve.isWaitingforValue = false;
status.transmit.isWaitingforValue = false;
qDebug() << "param_value.param_index" << param_value.param_index;
//qDebug() << "param_value.param_index" << param_value.param_index;
}break;
case MAVLINK_MSG_ID_PARAM_EXT_ACK:{
mavlink_msg_param_ext_ack_decode(&msg,&param_ext_ack);
@@ -161,14 +199,8 @@ void ParameterProcess::ReadStateMachine(void)//一整列
qDebug() << "start reading parameter";
status.recieve.isWaitingforValue = true;
if(status.recieve.type == _readtype::All)
{
request_list();//一整列,也可以一个,龚老师飞控并不支持这个
}
else if(status.recieve.type == _readtype::One)
{
request_read("xxx",0);//读取0
}
request_list();//一整列,也可以一个,龚老师飞控并不支持这个
step++;
time = QTime::currentTime().msecsSinceStartOfDay();
}
@@ -177,17 +209,35 @@ void ParameterProcess::ReadStateMachine(void)//一整列
//如果超时,那么结束
if((QTime::currentTime().msecsSinceStartOfDay() - time) > 1000)
{
qDebug() << "parameter item time out ";
step = 2;
timeout_count = 0;
qDebug() << "parameter read fail";
//做一个列表,记录谁丢了,后面单独请求
//qmap list
qDebug() << "parameter item time out ";
timeout_count = 0;
if(status.recieve.type == _readtype::All)//如果是ALL的情况下,那么再用单独一个一个去请求一次
{
qDebug() << "try One mode";
status.recieve.type =_readtype::One;
status.recieve.isWaitingforValue = true;
time = QTime::currentTime().msecsSinceStartOfDay();
request_read("xxx",0);//读取0
}
else
{
step = 2;
qDebug() << "parameter read fail";
}
}
else//如果没有超时
{
if(status.recieve.isWaitingforValue == false)//收到item
{
qDebug() << "parameter item reccieved";
//qDebug() << "parameter item reccieved";
timeout_count = 0;
time = QTime::currentTime().msecsSinceStartOfDay();