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;//刷新列表顯示
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章