MAVLINK 请求参数和接收参数

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;inum_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(inum_fields-2)PageInfo.append(str);
				}
				break;
			case MAVLINK_TYPE_UINT8_T:
				// Single value
				u = *(m+msgInfo->fields[i].wire_offset);
				if(inum_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(inum_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(inum_fields-2)PageInfo.append(QString::number(f));
				break;
			}
		}
		PageChange=1;//刷新列表显示
	}
}

你可能感兴趣的:(地面站)