static void print_field(mavlink_message_t *msg, const mavlink_field_info_t *f) { printf("%s: ", f->name); if (f->array_length == 0) { print_one_field(msg, f, 0); printf(" "); } else { unsigned i; /* print an array */ if (f->type == MAVLINK_TYPE_CHAR) { printf("'%.*s'", f->array_length, f->wire_offset+(const char *)_MAV_PAYLOAD(msg)); } else { printf("[ "); for (i=0; i<f->array_length; i++) { print_one_field(msg, f, i); if (i < f->array_length) { printf(", "); } } printf("]"); } } printf(" "); }
/** * @brief Decode a mission_request message into a struct * * @param msg The message to decode * @param mission_request C-struct to decode the message contents into */ void mavlink_msg_mission_request_decode(const mavlink_message_t* msg, mavlink_mission_request_t* mission_request) { #if MAVLINK_NEED_BYTE_SWAP mission_request->seq = mavlink_msg_mission_request_get_seq(msg); mission_request->target_system = mavlink_msg_mission_request_get_target_system(msg); mission_request->target_component = mavlink_msg_mission_request_get_target_component(msg); #else memcpy(mission_request, _MAV_PAYLOAD(msg), MAVLINK_MSG_ID_MISSION_REQUEST_LEN); #endif }
/** * @brief Decode a vfr_hud message into a struct * * @param msg The message to decode * @param vfr_hud C-struct to decode the message contents into */ void _decode(const mavlink_message_t* msg, mavlink_vfr_hud_t* vfr_hud) { #if MAVLINK_NEED_BYTE_SWAP vfr_hud->airspeed = _get_airspeed(msg); vfr_hud->groundspeed = _get_groundspeed(msg); vfr_hud->alt = _get_alt(msg); vfr_hud->climb = _get_climb(msg); vfr_hud->heading = _get_heading(msg); vfr_hud->throttle = _get_throttle(msg); #else memcpy(vfr_hud, _MAV_PAYLOAD(msg), MAVLINK_MSG_ID_VFR_HUD_LEN); #endif }
/** * @brief Decode a sys_status message into a struct * * @param msg The message to decode * @param sys_status C-struct to decode the message contents into */ void mavlink_msg_sys_status_decode(const mavlink_message_t* msg, mavlink_sys_status_t* sys_status) { #if MAVLINK_NEED_BYTE_SWAP sys_status->onboard_control_sensors_present = mavlink_msg_sys_status_get_onboard_control_sensors_present(msg); sys_status->onboard_control_sensors_enabled = mavlink_msg_sys_status_get_onboard_control_sensors_enabled(msg); sys_status->onboard_control_sensors_health = mavlink_msg_sys_status_get_onboard_control_sensors_health(msg); sys_status->load = mavlink_msg_sys_status_get_load(msg); sys_status->voltage_battery = mavlink_msg_sys_status_get_voltage_battery(msg); sys_status->current_battery = mavlink_msg_sys_status_get_current_battery(msg); sys_status->drop_rate_comm = mavlink_msg_sys_status_get_drop_rate_comm(msg); sys_status->errors_comm = mavlink_msg_sys_status_get_errors_comm(msg); sys_status->errors_count1 = mavlink_msg_sys_status_get_errors_count1(msg); sys_status->errors_count2 = mavlink_msg_sys_status_get_errors_count2(msg); sys_status->errors_count3 = mavlink_msg_sys_status_get_errors_count3(msg); sys_status->errors_count4 = mavlink_msg_sys_status_get_errors_count4(msg); sys_status->battery_remaining = mavlink_msg_sys_status_get_battery_remaining(msg); #else memcpy(sys_status, _MAV_PAYLOAD(msg), MAVLINK_MSG_ID_SYS_STATUS_LEN); #endif }
bool decodeMavlink() { bool isOutputUpdated = false; mavlink_message_t msg; mavlink_status_t status; //receive data over serial1 while(Serial1.available() > 0) { uint8_t c = Serial1.read(); //try to get a new message if(mavlink_parse_char(MAVLINK_COMM_0, c, &msg, &status)) { // Handle message switch(msg.msgid) { case (MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE): { mavlink_rc_channels_override_t *rc_channels_override = (mavlink_rc_channels_override_t *)_MAV_PAYLOAD(&msg); mavlinkValue[0] = rc_channels_override->chan1_raw; mavlinkValue[1] = rc_channels_override->chan2_raw; mavlinkValue[2] = rc_channels_override->chan3_raw; mavlinkValue[3] = rc_channels_override->chan4_raw; mavlinkValue[4] = rc_channels_override->chan5_raw; mavlinkValue[5] = rc_channels_override->chan6_raw; mavlinkValue[6] = rc_channels_override->chan7_raw; mavlinkValue[7] = rc_channels_override->chan8_raw; lastMavlinkTime = millis(); isOutputUpdated = true; break; } default: { Serial.println(msg.msgid); break; } } } // And get the next one } return isOutputUpdated; }