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;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;//刷新列表显示
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值