if (decodeState == 1){之后是放在mavlink消息解析后面。
//请求返回参数配置列表
void MavDebug::on_pushButton_3_clicked()
{
mavlink_message_t msg;
mavlink_msg_param_request_list_pack_chan(mysysid,
mycompid,
0,
&msg,
mysysid,
mycompid);
//注意,此处有可能发送失败,所以请多次尝试
uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
int len = mavlink_msg_to_send_buffer(buffer, &msg);//打包为Buff
//发送
QByteArray SenTemp;
SenTemp.resize(len);
for(int i=0;i<len;i++) {
SenTemp[i]=buffer[i];
}
QByteArrayList SenTemplist;
SenTemplist.append(SenTemp);
DataOut(0,1,1,SenTemplist);
}
//接收参数配置列表
if (decodeState == 1){
if(message.msgid == MAVLINK_MSG_ID_PARAM_VALUE){
const mavlink_message_info_t* msgInfo = mavlink_get_message_info(&message);//得到消息的信息
if (!msgInfo) {//如果沒有消息则提示错误
qDebug()<<"未知消息";
continue;
}
QStringList PageInfo;
uint8_t* m = (uint8_t*)&message.payload64[0];
uint8_t u;uint16_t n;
for (i = 0; i < msgInfo->num_fields; ++i)//遍历消息的所有段
{
//获取字段类型和数据
switch (msgInfo->fields[i].type)
{
case MAVLINK_TYPE_CHAR:
if (msgInfo->fields[i].array_length > 0)//字符串
{
char* str = (char*)(m+msgInfo->fields[i].wire_offset);
// Enforce null termination
str[msgInfo->fields[i].array_length-1] = '\0';
QString string(str);
if(i<msgInfo->num_fields-2)PageInfo.append(str);
}
break;
case MAVLINK_TYPE_UINT8_T:
// Single value
u = *(m+msgInfo->fields[i].wire_offset);
if(i<msgInfo->num_fields-2)PageInfo.append(QString::number(u));
break;
case MAVLINK_TYPE_UINT16_T:
// Single value
n = *((uint16_t*)(m+msgInfo->fields[i].wire_offset));
if(i<msgInfo->num_fields-2)PageInfo.append(QString::number(n));
if(i==3)PageCount=n;
if(i==4){
GetPageIndex=n;
PageTemp[GetPageIndex]=PageInfo;
}
break;
case MAVLINK_TYPE_FLOAT:
// Single value
float f = *((float*)(m+msgInfo->fields[i].wire_offset));
if(i<msgInfo->num_fields-2)PageInfo.append(QString::number(f));
break;
}
}
PageChange=1;//刷新列表显示
}
}