Browse Source

项目初始化

Liu Yang 1 year ago
commit
a4bccb2054
100 changed files with 45813 additions and 0 deletions
  1. 440 0
      msg_definitions/VKFly.xml
  2. 7693 0
      msg_definitions/common.xml
  3. 728 0
      msg_definitions/minimal.xml
  4. 10 0
      msg_definitions/standard.xml
  5. 25 0
      v2.0/VKFly/VKFly.h
  6. 34 0
      v2.0/VKFly/mavlink.h
  7. 313 0
      v2.0/VKFly/mavlink_msg_vkfmu_status.h
  8. 648 0
      v2.0/VKFly/mavlink_msg_vkins_status.h
  9. 176 0
      v2.0/VKFly/testsuite.h
  10. 14 0
      v2.0/VKFly/version.h
  11. 95 0
      v2.0/checksum.h
  12. 25 0
      v2.0/common/common.h
  13. 34 0
      v2.0/common/mavlink.h
  14. 255 0
      v2.0/common/mavlink_msg_actuator_control_target.h
  15. 255 0
      v2.0/common/mavlink_msg_actuator_output_status.h
  16. 505 0
      v2.0/common/mavlink_msg_adsb_vehicle.h
  17. 606 0
      v2.0/common/mavlink_msg_ais_vessel.h
  18. 363 0
      v2.0/common/mavlink_msg_altitude.h
  19. 331 0
      v2.0/common/mavlink_msg_att_pos_mocap.h
  20. 363 0
      v2.0/common/mavlink_msg_attitude.h
  21. 405 0
      v2.0/common/mavlink_msg_attitude_quaternion.h
  22. 331 0
      v2.0/common/mavlink_msg_attitude_quaternion_cov.h
  23. 355 0
      v2.0/common/mavlink_msg_attitude_target.h
  24. 213 0
      v2.0/common/mavlink_msg_auth_key.h
  25. 505 0
      v2.0/common/mavlink_msg_autopilot_state_for_gimbal_device.h
  26. 483 0
      v2.0/common/mavlink_msg_autopilot_version.h
  27. 682 0
      v2.0/common/mavlink_msg_battery_info.h
  28. 531 0
      v2.0/common/mavlink_msg_battery_status.h
  29. 263 0
      v2.0/common/mavlink_msg_button_change.h
  30. 363 0
      v2.0/common/mavlink_msg_camera_capture_status.h
  31. 430 0
      v2.0/common/mavlink_msg_camera_fov_status.h
  32. 456 0
      v2.0/common/mavlink_msg_camera_image_captured.h
  33. 532 0
      v2.0/common/mavlink_msg_camera_information.h
  34. 288 0
      v2.0/common/mavlink_msg_camera_settings.h
  35. 513 0
      v2.0/common/mavlink_msg_camera_tracking_geo_status.h
  36. 438 0
      v2.0/common/mavlink_msg_camera_tracking_image_status.h
  37. 238 0
      v2.0/common/mavlink_msg_camera_trigger.h
  38. 330 0
      v2.0/common/mavlink_msg_can_filter_modify.h
  39. 330 0
      v2.0/common/mavlink_msg_can_frame.h
  40. 330 0
      v2.0/common/mavlink_msg_canfd_frame.h
  41. 383 0
      v2.0/common/mavlink_msg_cellular_config.h
  42. 363 0
      v2.0/common/mavlink_msg_cellular_status.h
  43. 280 0
      v2.0/common/mavlink_msg_change_operator_control.h
  44. 263 0
      v2.0/common/mavlink_msg_change_operator_control_ack.h
  45. 363 0
      v2.0/common/mavlink_msg_collision.h
  46. 338 0
      v2.0/common/mavlink_msg_command_ack.h
  47. 263 0
      v2.0/common/mavlink_msg_command_cancel.h
  48. 513 0
      v2.0/common/mavlink_msg_command_int.h
  49. 463 0
      v2.0/common/mavlink_msg_command_long.h
  50. 306 0
      v2.0/common/mavlink_msg_component_information.h
  51. 255 0
      v2.0/common/mavlink_msg_component_metadata.h
  52. 607 0
      v2.0/common/mavlink_msg_control_system_state.h
  53. 238 0
      v2.0/common/mavlink_msg_current_event_sequence.h
  54. 263 0
      v2.0/common/mavlink_msg_data_stream.h
  55. 363 0
      v2.0/common/mavlink_msg_data_transmission_handshake.h
  56. 263 0
      v2.0/common/mavlink_msg_debug.h
  57. 281 0
      v2.0/common/mavlink_msg_debug_float_array.h
  58. 305 0
      v2.0/common/mavlink_msg_debug_vect.h
  59. 480 0
      v2.0/common/mavlink_msg_distance_sensor.h
  60. 663 0
      v2.0/common/mavlink_msg_efi_status.h
  61. 230 0
      v2.0/common/mavlink_msg_encapsulated_data.h
  62. 407 0
      v2.0/common/mavlink_msg_esc_info.h
  63. 307 0
      v2.0/common/mavlink_msg_esc_status.h
  64. 438 0
      v2.0/common/mavlink_msg_estimator_status.h
  65. 355 0
      v2.0/common/mavlink_msg_event.h
  66. 238 0
      v2.0/common/mavlink_msg_extended_sys_state.h
  67. 313 0
      v2.0/common/mavlink_msg_fence_status.h
  68. 280 0
      v2.0/common/mavlink_msg_file_transfer_protocol.h
  69. 313 0
      v2.0/common/mavlink_msg_flight_information.h
  70. 459 0
      v2.0/common/mavlink_msg_follow_target.h
  71. 463 0
      v2.0/common/mavlink_msg_generator_status.h
  72. 480 0
      v2.0/common/mavlink_msg_gimbal_device_attitude_status.h
  73. 582 0
      v2.0/common/mavlink_msg_gimbal_device_information.h
  74. 355 0
      v2.0/common/mavlink_msg_gimbal_device_set_attitude.h
  75. 413 0
      v2.0/common/mavlink_msg_gimbal_manager_information.h
  76. 380 0
      v2.0/common/mavlink_msg_gimbal_manager_set_attitude.h
  77. 388 0
      v2.0/common/mavlink_msg_gimbal_manager_set_manual_control.h
  78. 388 0
      v2.0/common/mavlink_msg_gimbal_manager_set_pitchyaw.h
  79. 363 0
      v2.0/common/mavlink_msg_gimbal_manager_status.h
  80. 413 0
      v2.0/common/mavlink_msg_global_position_int.h
  81. 430 0
      v2.0/common/mavlink_msg_global_position_int_cov.h
  82. 405 0
      v2.0/common/mavlink_msg_global_vision_position_estimate.h
  83. 638 0
      v2.0/common/mavlink_msg_gps2_raw.h
  84. 513 0
      v2.0/common/mavlink_msg_gps2_rtk.h
  85. 288 0
      v2.0/common/mavlink_msg_gps_global_origin.h
  86. 280 0
      v2.0/common/mavlink_msg_gps_inject_data.h
  87. 663 0
      v2.0/common/mavlink_msg_gps_input.h
  88. 588 0
      v2.0/common/mavlink_msg_gps_raw_int.h
  89. 255 0
      v2.0/common/mavlink_msg_gps_rtcm_data.h
  90. 513 0
      v2.0/common/mavlink_msg_gps_rtk.h
  91. 334 0
      v2.0/common/mavlink_msg_gps_status.h
  92. 788 0
      v2.0/common/mavlink_msg_high_latency.h
  93. 863 0
      v2.0/common/mavlink_msg_high_latency2.h
  94. 588 0
      v2.0/common/mavlink_msg_highres_imu.h
  95. 280 0
      v2.0/common/mavlink_msg_hil_actuator_controls.h
  96. 463 0
      v2.0/common/mavlink_msg_hil_controls.h
  97. 563 0
      v2.0/common/mavlink_msg_hil_gps.h
  98. 488 0
      v2.0/common/mavlink_msg_hil_optical_flow.h
  99. 538 0
      v2.0/common/mavlink_msg_hil_rc_inputs_raw.h
  100. 588 0
      v2.0/common/mavlink_msg_hil_sensor.h

+ 440 - 0
msg_definitions/VKFly.xml

@@ -0,0 +1,440 @@
+<?xml version="1.0"?>
+<mavlink>
+  <!-- VK-fly contact info:                                              -->
+  <!-- company URL: http://101.42.9.203/#/home                           -->
+  <!-- email contact: liuyangzys@outlook.com                             -->
+  <!-- mavlink ID range: 53000 - 54000                                   -->
+  <!-- command ID range: 44000 - 44999                                   -->
+  <include>common.xml</include>
+  <dialect>0</dialect>
+  <enums>
+    <enum name="VKFLY_AP_TYPE">
+      <description>Drone airframe</description>
+      <entry value="41" name="VKFLY_AP_TYPE_I4">
+        <description>Quadrotor I4</description>
+      </entry>
+      <entry value="42" name="VKFLY_AP_TYPE_X4">
+        <description>Quadrotor X4</description>
+      </entry>
+      <entry value="61" name="VKFLY_AP_TYPE_I6">
+        <description>Hexarotor I6</description>
+      </entry>
+      <entry value="62" name="VKFLY_AP_TYPE_X6">
+        <description>Hexarotor X6</description>
+      </entry>
+      <entry value="63" name="VKFLY_AP_TYPE_YI6D">
+        <description>Three axis hexarotor YI6D</description>
+      </entry>
+      <entry value="64" name="VKFLY_AP_TYPE_Y6D">
+        <description>Three axis hexarotor Y6D</description>
+      </entry>
+      <entry value="65" name="VKFLY_AP_TYPE_H6">
+        <description>Hexarotor H6</description>
+      </entry>
+      <entry value="81" name="VKFLY_AP_TYPE_I8">
+        <description>Octorotor I8</description>
+      </entry>
+      <entry value="82" name="VKFLY_AP_TYPE_X8">
+        <description>Octorotor X8</description>
+      </entry>
+      <entry value="83" name="VKFLY_AP_TYPE_4X8M">
+        <description>Four axis octorotor, upper level X4, lower level reversed X4.</description>
+      </entry>
+      <entry value="84" name="VKFLY_AP_TYPE_4X8D">
+        <description>Four axis octorotor, upper level clockwise, lower level anticlockwise</description>
+      </entry>
+      <entry value="85" name="VKFLY_AP_TYPE_4X8MR">
+        <description>Four axis octorotor, all rotors are opposite of 4X8M.</description>
+      </entry>
+      <entry value="86" name="VKFLY_AP_TYPE_4X8DR">
+        <description>Four axis octorotor, all rotors are opposite of 4X8M.</description>
+      </entry>
+      <entry value="121" name="VKFLY_AP_TYPE_6I12">
+        <description>Six axis twelve rotor, upper level I6, lower lever opposite with I6.</description>
+      </entry>
+      <entry value="122" name="VKFLY_AP_TYPE_6X12">
+        <description>Six axis twelve rotor, upper level X6, lower lever opposite with X6.</description>
+      </entry>
+      <entry value="161" name="VKFLY_AP_TYPE_8I16">
+        <description>16 axis 8 rotor, upper level I8, lower lever opposite with I8</description>
+      </entry>
+      <entry value="162" name="VKFLY_AP_TYPE_8X16">
+        <description>16 axis 8 rotor, upper level X8, lower lever opposite with X8</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_FS_ACTION">
+      <description>Failsafe action</description>
+      <entry value="0" name="FAIL_SAFE_ACT_NONE">
+        <description>Do nothing</description>
+      </entry>
+      <entry value="1" name="FAIL_SAFE_ACT_LOITER">
+        <description>Hold position for rotor wing. Loiter for fixedwing.</description>
+      </entry>
+      <entry value="2" name="FAIL_SAFE_ACT_RTL">
+        <description>Return to lauch.</description>
+      </entry>
+      <entry value="3" name="FAIL_SAFE_ACT_RTR">
+        <description>Go to the nearest rally point.</description>
+      </entry>
+      <entry value="4" name="FAIL_SAFE_ACT_LAND">
+        <description>Landing in place.</description>
+      </entry>
+      <entry value="5" name="FAIL_SAFE_ACT_LOCK">
+        <description>Terminate servo output and disarm the drone.</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_MAGCALIB_STAGE">
+      <description>VKins magcalib stage</description>
+      <entry value="0" name="VK_MAGCALIB_NONE">
+        <description>Not in calibration.</description>
+      </entry>
+      <entry value="1" name="VK_MAGCALIB_XY">
+        <description>Calibrating X-Y level.</description>
+      </entry>
+      <entry value="2" name="VK_MAGCALIB_XZ">
+        <description>Calibrating X-Z level.</description>
+      </entry>
+      <entry value="3" name="VK_MAGCALIB_DONE">
+        <description>Calibrating successfully done.</description>
+      </entry>
+      <entry value="4" name="VK_MAGCALIB_FAIL">
+        <description>Calibrating failed.</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_SYS_STATUS_SENSOR_EXTEND">
+      <description>For SYS_STATUS sensor extend flag use.</description>
+      <entry value="4" name="VKFLY_SYS_STATUS_SENSOR_GPS2">
+        <description>GPS2</description>
+      </entry>
+      <entry value="8" name="VKFLY_SYS_STATUS_SENSOR_RTK_GPS">
+        <description>RTK GPS</description>
+      </entry>
+      <entry value="16" name="VKFLY_SYS_STATUS_SDCARD">
+        <description>Onboard SD card</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_SYS_ERROR1">
+      <description>bitmap for SYS_STATUS error1 </description>
+      <entry value="1" name="VKFLY_SYS_ERROR1_GCS_LINK_LOST">
+        <description>Gcs link lost.</description>
+      </entry>
+      <entry value="2" name="VKFLY_SYS_ERROR1_VOLTAGE_LOW">
+        <description>Battery voltage low.</description>
+      </entry>
+      <entry value="4" name="VKFLY_SYS_ERROR1_MOTOR_BALANCE">
+        <description>Servo output balance bad.</description>
+      </entry>
+      <entry value="8" name="VKFLY_SYS_ERROR1_MOTOR_FAIL">
+        <description>Servo ouput fault.</description>
+      </entry>
+      <entry value="16" name="VKFLY_SYS_ERROR1_OVERHEAT">
+        <description>Autopilot system temperature too high.</description>
+      </entry>
+      <entry value="32" name="VKFLY_SYS_ERROR1_INS_INVALID">
+        <description>Autopilot system solved positioning not ready.</description>
+      </entry>
+      <entry value="64" name="VKFLY_SYS_ERROR1_OUT_FENCE">
+        <description>Position out of fence range.</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_SYS_ERROR2">
+      <description>bitmap for SYS_STATUS error1 </description>
+      <entry value="1" name="VKFLY_SYS_ERROR2_PREARM_CHECK_IMU">
+        <description></description>
+      </entry>
+      <entry value="2" name="VKFLY_SYS_ERROR2_PREARM_CHECK_TILT">
+        <description></description>
+      </entry>
+      <entry value="4" name="VKFLY_SYS_ERROR2_PREARM_CHECK_VELOCITY">
+        <description></description>
+      </entry>
+      <entry value="8" name="VKFLY_SYS_ERROR2_PREARM_RC_BAD">
+        <description></description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_CUSTOM_MODE">
+      <description>custom mode in HEARTBEAT</description>
+      <entry value="3" name="VKFLY_CUSTOM_MODE_ATTITUDE">
+        <description>Attitude mode</description>
+      </entry>
+      <entry value="4" name="VKFLY_CUSTOM_MODE_POSHOLD">
+        <description>Poshold mode</description>
+      </entry>
+      <entry value="10" name="VKFLY_CUSTOM_MODE_TAKEOFF">
+        <description>Auto takeoff.</description>
+      </entry>
+      <entry value="11" name="VKFLY_CUSTOM_MODE_LOITER">
+        <description>Auto loiter.</description>
+      </entry>
+      <entry value="12" name="VKFLY_CUSTOM_MODE_RTL">
+        <description>Auto return.</description>
+      </entry>
+      <entry value="15" name="VKFLY_CUSTOM_MODE_CRUISE">
+        <description>Auto cruise.</description>
+      </entry>
+      <entry value="18" name="VKFLY_CUSTOM_MODE_GUIDE">
+        <description>Guide to point.</description>
+      </entry>
+      <entry value="19" name="VKFLY_CUSTOM_MODE_LAND">
+        <description>Land.</description>
+      </entry>
+      <entry value="20" name="VKFLY_CUSTOM_MODE_FSLAND">
+        <description>Force land.</description>
+      </entry>
+      <entry value="21" name="VKFLY_CUSTOM_MODE_FOLLOW">
+        <description>Follow.</description>
+      </entry>
+      <entry value="23" name="VKFLY_CUSTOM_MODE_WP_ORBIT">
+        <description>WP_Orbit</description>
+      </entry>
+      <entry value="24" name="VKFLY_CUSTOM_MODE_DYN_TAKEOFF">
+        <description>Dyn_Takeoff </description>
+      </entry>
+      <entry value="25" name="VKFLY_CUSTOM_MODE_DYN_LAND">
+        <description>Dyn_Land</description>
+      </entry>
+      <entry value="26" name="VKFLY_CUSTOM_MODE_OBAVOID">
+        <description>Obavoid </description>
+      </entry>
+      <entry value="27" name="VKFLY_CUSTOM_MODE_OFFBOARD">
+        <description>Offboard command control.</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_VKINS_NAV_STATUS">
+      <description>bitmap for VKins navigtion status </description>
+      <entry value="0x01" name="VKFLY_VKINS_NAV_INSGPS">
+        <description>INS status. 0 means no INS. 1 means INS ok.</description>
+      </entry>
+      <entry value="0x02" name="VKFLY_VKINS_NAV_ALT_GPS">
+        <description>GPS altitude in data fusion. 0 gps altitude not used. 1 gps altitude used.</description>
+      </entry>
+      <entry value="0x10" name="VKFLY_VKINS_NAV_RTK">
+        <description>RTK pos data. 0 no RTK, 1 RTK. </description>
+      </entry>
+    </enum>
+    <enum name="VKFLY_YAW_CTRL_MODE">
+      <description>Yaw control mode</description>
+      <entry value="0" name="VKFLY_YAW_KEEP_CURRENT">
+        <description>Yaw do not change. Keep current yaw.</description>
+      </entry>
+      <entry value="1" name="VKFLY_YAW_TO_NEXT_WP">
+        <description>Yaw towards next waypoint or circle center.</description>
+      </entry>
+      <entry value="2" name="VKFLY_YAW_TO_TRACE_COURSE">
+        <description>Yaw towards moving course heading.</description>
+      </entry>
+      <entry value="3" name="VKFLY_YAW_TO_SET_VALUE">
+        <description>Yaw towards spacific value.</description>
+      </entry>
+      <entry value="4" name="VKFLY_YAW_TO_HOME">
+        <description>Yaw towards home point.</description>
+      </entry>
+      <entry value="5" name="VKFLY_YAW_TO_INTEREST">
+        <description>Yaw towards interest point.</description>
+      </entry>
+      <entry value="6" name="VKFLY_YAW_TO_OTHER_MAV_SYS">
+        <description>Yaw towards interest point.</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_PHOTO_CTRL_MODE">
+      <description>Digicam auto take photo mode.</description>
+      <entry value="0" name="VKFLY_AUTO_PHO_KEEP_CURRENT">
+        <description>Do not take photo automatically.</description>
+      </entry>
+      <entry value="1" name="VKFLY_AUTO_PHO_STOP">
+        <description>Do not take photo automatically.</description>
+      </entry>
+      <entry value="2" name="VKFLY_AUTO_PHO_AUTO_BY_TIME">
+        <description>Automatically take photo by tiem.</description>
+      </entry>
+      <entry value="3" name="VKFLY_AUTO_PHO_BY_DIST_XY">
+        <description>Automatically take photo by distance.</description>
+      </entry>
+      <entry value="4" name="VKFLY_AUTO_PHO_BY_DIST_Z">
+        <description>Automatically take photo by input trigger signal or command.</description>
+      </entry>
+      <entry value="5" name="VKFLY_AUTO_PHO_BY_DIST_XYZ">
+        <description>Automatically take photo by input trigger signal or command.</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_DIGICAM_WP_ACT">
+      <description>Digicam action trigger on waypoint arrive.</description>
+      <entry value="0" name="VKFLY_DIGICAM_WP_ACT_NONE">
+        <description>Do nothing.</description>
+      </entry>
+      <entry value="1" name="VKFLY_DIGICAM_WP_ACT_PHO">
+        <description>Do take photo.</description>
+      </entry>
+      <entry value="2" name="VKFLY_DIGICAM_WP_ACT_VEDIO_ON">
+        <description>Do vedio recording on.</description>
+      </entry>
+      <entry value="3" name="VKFLY_DIGICAM_WP_ACT_VEDIO_OFF">
+        <description>Do vedio recording off.</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_GIMBAL_WP_ACT">
+      <description>Gimbal action trigger on waypoint arrive.</description>
+      <entry value="0" name="VKFLY_GIMBAL_WP_ACT_NONE">
+        <description>Do nothing.</description>
+      </entry>
+      <entry value="1" name="VKFLY_GIMBAL_WP_ACT_SET_ANG">
+        <description>Do set gimbal pitch and yaw angle value.</description>
+      </entry>
+      <entry value="2" name="VKFLY_GIMBAL_WP_ACT_SET_PITCH_YAW_FOLLOW">
+        <description>Do set gimbla pitch value, yaw follow drone head.</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_THROW_CHAN_TYPE">
+      <description>bitmap of throwing channel</description>
+      <entry value="1" name="VKFLY_THROW_CHAN_1">
+        <description>throwing channel1</description>
+      </entry>
+      <entry value="2" name="VKFLY_THROW_CHAN_2">
+        <description>throwing channel2</description>
+      </entry>
+      <entry value="4" name="VKFLY_THROW_CHAN_3">
+        <description>throwing channel3</description>
+      </entry>
+      <entry value="8" name="VKFLY_THROW_CHAN_4">
+        <description>throwing channel4</description>
+      </entry>
+      <entry value="16" name="VKFLY_THROW_CHAN_5">
+        <description>throwing channel5</description>
+      </entry>
+      <entry value="32" name="VKFLY_THROW_CHAN_6">
+        <description>throwing channel6</description>
+      </entry>
+      <entry value="64" name="VKFLY_THROW_CHAN_7">
+        <description>throwing channel7</description>
+      </entry>
+      <entry value="128" name="VKFLY_THROW_CHAN_8">
+        <description>throwing channel8</description>
+      </entry>
+      <entry value="256" name="VKFLY_THROW_CHAN_9">
+        <description>throwing channel9</description>
+      </entry>
+      <entry value="512" name="VKFLY_THROW_CHAN_10">
+        <description>throwing channel10</description>
+      </entry>
+      <entry value="1024" name="VKFLY_THROW_CHAN_11">
+        <description>throwing channel11</description>
+      </entry>
+      <entry value="2048" name="VKFLY_THROW_CHAN_12">
+        <description>throwing channel12</description>
+      </entry>
+      <entry value="4096" name="VKFLY_THROW_CHAN_13">
+        <description>throwing channel12</description>
+      </entry>
+      <entry value="8192" name="VKFLY_THROW_CHAN_14">
+        <description>throwing channel12</description>
+      </entry>
+      <entry value="16384" name="VKFLY_THROW_CHAN_15">
+        <description>throwing channel12</description>
+      </entry>
+      <entry value="32768" name="VKFLY_THROW_CHAN_16">
+        <description>throwing channel12</description>
+      </entry>
+      <entry value="65535" name="VKFLY_THROW_CHAN_ALL">
+        <description>throwing channel12</description>
+      </entry>
+    </enum>
+
+    <enum name="VKFLY_CMD">
+      <description> VKFLY custom CMD </description>
+      <entry value="44010" name="VKFLY_CMD_NAV_WP" hasLocation="true" isDestination="true">
+        <description>VKFLY custom takephoto waypoint commond.</description>
+        <param index="1" label="Hold Time And Speed"> </param>
+        <param index="2" label="Photo Ctl"> </param>
+        <param index="3" label="Gimbal Ctl"> </param>
+        <param index="4" label="Yaw Mode">Yaw control mode</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+
+      <entry value="44011" name="VKFLY_CMD_NAV_WP_THROW" hasLocation="true" isDestination="true">
+        <description>VKFLY custom throwing waypoint command. </description>
+        <param index="1" label="Hold Time And Speed"> </param>
+        <param index="2" label="Throw ParamA"></param>
+        <param index="3" label="Throw ParamB">Reserved.</param>
+        <param index="4" label="Yaw Mode">Yaw control mode.</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+
+      <entry value="44012" name="VKFLY_CMD_NAV_WP_ORBIT_DO_PHOTO" hasLocation="true"
+        isDestination="true">
+        <description>VLFLY Custom orbit waypoint </description>
+        <param index="1" label="Radius And Speed"> </param>
+        <param index="2" label="Photo Ctl"> </param>
+        <param index="3" label="Times And Orbit Speed"> </param>
+        <param index="4" label="Yaw Mode"> </param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+
+      <entry value="44030" name="VKFLY_CMD_MOUNT_CTRL" hasLocation="true"
+        isDestination="true">
+        <description>VLFLY Custom orbit waypoint </description>
+        <param index="1" label=""> </param>
+        <param index="2" label="CTRL "> </param>
+        <param index="3" label="Times And Orbit Speed"> </param>
+        <param index="4" label="Yaw Mode"> </param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+
+    </enum>
+  </enums>
+
+  <messages>
+    <message id="53000" name="VKINS_STATUS">
+      <description> </description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp in ms from system boot.</field>
+      <field type="uint8_t" name="nav_status" enum="VKFLY_VKINS_NAV_STATUS" display="bitmask"
+        print_format="0x%02x">VKINS
+        navigation status flag.</field>
+      <field type="uint8_t" name="s_flag1">vinks flag1</field>
+      <field type="uint8_t" name="s_flag2">vinks flag2.</field>
+      <field type="uint8_t" name="s_flag3">vinks flag3.</field>
+      <field type="uint8_t" name="s_flag4">vinks flag4.</field>
+      <field type="uint8_t" name="s_flag5">vinks flag5.</field>
+      <field type="uint8_t" name="s_flag6">vinks flag6.</field>
+      <field type="uint8_t" name="mag_calib_stage" enum="VKFLY_MAGCALIB_STAGE">vkins mag calib
+        stage.</field>
+      <field type="float" name="g0" units="m/s/s">vkins initial calibrated gravitation acceleration.</field>
+      <field type="int32_t" name="raw_latitude" units="degE7">raw longitude for data fusion</field>
+      <field type="int32_t" name="raw_longitude" units="degE7">raw latitidue for data fusion</field>
+      <field type="float" name="baro_alt" units="m">raw baromoter altitude for data fusion</field>
+      <field type="float" name="raw_gps_alt" units="m">gps amsl altitude for data fusion</field>
+      <field type="uint8_t" name="solv_psat_num">satelites number for position</field>
+      <field type="uint8_t" name="solv_hsat_num">satelites number for heading</field>
+      <field type="int16_t" name="temperature" units="cdegC">temperature</field>
+      <field type="uint8_t" name="vibe_coe"></field>
+    </message>
+
+    <message id="53001" name="VKFMU_STATUS">
+      <description> </description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp in ms from system boot.</field>
+      <field type="uint8_t" name="s_flag1">fmu sflag1</field>
+      <field type="uint8_t" name="s_flag2">fmu sflag2</field>
+      <field type="uint8_t" name="s_flag3">fmu sflag3</field>
+      <field type="uint8_t" name="s_flag4">fmu sflag4</field>
+    </message>
+  </messages>
+
+</mavlink>

+ 7693 - 0
msg_definitions/common.xml

@@ -0,0 +1,7693 @@
+<?xml version="1.0"?>
+<mavlink>
+  <include>standard.xml</include>
+  <version>3</version>
+  <dialect>0</dialect>
+  <enums>
+    <enum name="FIRMWARE_VERSION_TYPE">
+      <description>These values define the type of firmware release.  These values indicate the first version or release of this type.  For example the first alpha release would be 64, the second would be 65.</description>
+      <entry value="0" name="FIRMWARE_VERSION_TYPE_DEV">
+        <description>development release</description>
+      </entry>
+      <entry value="64" name="FIRMWARE_VERSION_TYPE_ALPHA">
+        <description>alpha release</description>
+      </entry>
+      <entry value="128" name="FIRMWARE_VERSION_TYPE_BETA">
+        <description>beta release</description>
+      </entry>
+      <entry value="192" name="FIRMWARE_VERSION_TYPE_RC">
+        <description>release candidate</description>
+      </entry>
+      <entry value="255" name="FIRMWARE_VERSION_TYPE_OFFICIAL">
+        <description>official stable release</description>
+      </entry>
+    </enum>
+    <enum name="HL_FAILURE_FLAG" bitmask="true">
+      <description>Flags to report failure cases over the high latency telemetry.</description>
+      <entry value="1" name="HL_FAILURE_FLAG_GPS">
+        <description>GPS failure.</description>
+      </entry>
+      <entry value="2" name="HL_FAILURE_FLAG_DIFFERENTIAL_PRESSURE">
+        <description>Differential pressure sensor failure.</description>
+      </entry>
+      <entry value="4" name="HL_FAILURE_FLAG_ABSOLUTE_PRESSURE">
+        <description>Absolute pressure sensor failure.</description>
+      </entry>
+      <entry value="8" name="HL_FAILURE_FLAG_3D_ACCEL">
+        <description>Accelerometer sensor failure.</description>
+      </entry>
+      <entry value="16" name="HL_FAILURE_FLAG_3D_GYRO">
+        <description>Gyroscope sensor failure.</description>
+      </entry>
+      <entry value="32" name="HL_FAILURE_FLAG_3D_MAG">
+        <description>Magnetometer sensor failure.</description>
+      </entry>
+      <entry value="64" name="HL_FAILURE_FLAG_TERRAIN">
+        <description>Terrain subsystem failure.</description>
+      </entry>
+      <entry value="128" name="HL_FAILURE_FLAG_BATTERY">
+        <description>Battery failure/critical low battery.</description>
+      </entry>
+      <entry value="256" name="HL_FAILURE_FLAG_RC_RECEIVER">
+        <description>RC receiver failure/no RC connection.</description>
+      </entry>
+      <entry value="512" name="HL_FAILURE_FLAG_OFFBOARD_LINK">
+        <description>Offboard link failure.</description>
+      </entry>
+      <entry value="1024" name="HL_FAILURE_FLAG_ENGINE">
+        <description>Engine failure.</description>
+      </entry>
+      <entry value="2048" name="HL_FAILURE_FLAG_GEOFENCE">
+        <description>Geofence violation.</description>
+      </entry>
+      <entry value="4096" name="HL_FAILURE_FLAG_ESTIMATOR">
+        <description>Estimator failure, for example measurement rejection or large variances.</description>
+      </entry>
+      <entry value="8192" name="HL_FAILURE_FLAG_MISSION">
+        <description>Mission failure.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_GOTO">
+      <description>Actions that may be specified in MAV_CMD_OVERRIDE_GOTO to override mission execution.</description>
+      <entry value="0" name="MAV_GOTO_DO_HOLD">
+        <description>Hold at the current position.</description>
+      </entry>
+      <entry value="1" name="MAV_GOTO_DO_CONTINUE">
+        <description>Continue with the next item in mission execution.</description>
+      </entry>
+      <entry value="2" name="MAV_GOTO_HOLD_AT_CURRENT_POSITION">
+        <description>Hold at the current position of the system</description>
+      </entry>
+      <entry value="3" name="MAV_GOTO_HOLD_AT_SPECIFIED_POSITION">
+        <description>Hold at the position specified in the parameters of the DO_HOLD action</description>
+      </entry>
+    </enum>
+    <enum name="MAV_MODE">
+      <description>These defines are predefined OR-combined mode flags. There is no need to use values from this enum, but it
+               simplifies the use of the mode flags. Note that manual input is enabled in all modes as a safety override.</description>
+      <entry value="0" name="MAV_MODE_PREFLIGHT">
+        <description>System is not ready to fly, booting, calibrating, etc. No flag is set.</description>
+      </entry>
+      <entry value="80" name="MAV_MODE_STABILIZE_DISARMED">
+        <description>System is allowed to be active, under assisted RC control.</description>
+      </entry>
+      <entry value="208" name="MAV_MODE_STABILIZE_ARMED">
+        <description>System is allowed to be active, under assisted RC control.</description>
+      </entry>
+      <entry value="64" name="MAV_MODE_MANUAL_DISARMED">
+        <description>System is allowed to be active, under manual (RC) control, no stabilization</description>
+      </entry>
+      <entry value="192" name="MAV_MODE_MANUAL_ARMED">
+        <description>System is allowed to be active, under manual (RC) control, no stabilization</description>
+      </entry>
+      <entry value="88" name="MAV_MODE_GUIDED_DISARMED">
+        <description>System is allowed to be active, under autonomous control, manual setpoint</description>
+      </entry>
+      <entry value="216" name="MAV_MODE_GUIDED_ARMED">
+        <description>System is allowed to be active, under autonomous control, manual setpoint</description>
+      </entry>
+      <entry value="92" name="MAV_MODE_AUTO_DISARMED">
+        <description>System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by waypoints)</description>
+      </entry>
+      <entry value="220" name="MAV_MODE_AUTO_ARMED">
+        <description>System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by waypoints)</description>
+      </entry>
+      <entry value="66" name="MAV_MODE_TEST_DISARMED">
+        <description>UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.</description>
+      </entry>
+      <entry value="194" name="MAV_MODE_TEST_ARMED">
+        <description>UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_SYS_STATUS_SENSOR" bitmask="true">
+      <description>These encode the sensors whose status is sent as part of the SYS_STATUS message.</description>
+      <entry value="1" name="MAV_SYS_STATUS_SENSOR_3D_GYRO">
+        <description>0x01 3D gyro</description>
+      </entry>
+      <entry value="2" name="MAV_SYS_STATUS_SENSOR_3D_ACCEL">
+        <description>0x02 3D accelerometer</description>
+      </entry>
+      <entry value="4" name="MAV_SYS_STATUS_SENSOR_3D_MAG">
+        <description>0x04 3D magnetometer</description>
+      </entry>
+      <entry value="8" name="MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE">
+        <description>0x08 absolute pressure</description>
+      </entry>
+      <entry value="16" name="MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE">
+        <description>0x10 differential pressure</description>
+      </entry>
+      <entry value="32" name="MAV_SYS_STATUS_SENSOR_GPS">
+        <description>0x20 GPS</description>
+      </entry>
+      <entry value="64" name="MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW">
+        <description>0x40 optical flow</description>
+      </entry>
+      <entry value="128" name="MAV_SYS_STATUS_SENSOR_VISION_POSITION">
+        <description>0x80 computer vision position</description>
+      </entry>
+      <entry value="256" name="MAV_SYS_STATUS_SENSOR_LASER_POSITION">
+        <description>0x100 laser based position</description>
+      </entry>
+      <entry value="512" name="MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH">
+        <description>0x200 external ground truth (Vicon or Leica)</description>
+      </entry>
+      <entry value="1024" name="MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL">
+        <description>0x400 3D angular rate control</description>
+      </entry>
+      <entry value="2048" name="MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION">
+        <description>0x800 attitude stabilization</description>
+      </entry>
+      <entry value="4096" name="MAV_SYS_STATUS_SENSOR_YAW_POSITION">
+        <description>0x1000 yaw position</description>
+      </entry>
+      <entry value="8192" name="MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL">
+        <description>0x2000 z/altitude control</description>
+      </entry>
+      <entry value="16384" name="MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL">
+        <description>0x4000 x/y position control</description>
+      </entry>
+      <entry value="32768" name="MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS">
+        <description>0x8000 motor outputs / control</description>
+      </entry>
+      <entry value="65536" name="MAV_SYS_STATUS_SENSOR_RC_RECEIVER">
+        <description>0x10000 RC receiver</description>
+      </entry>
+      <entry value="131072" name="MAV_SYS_STATUS_SENSOR_3D_GYRO2">
+        <description>0x20000 2nd 3D gyro</description>
+      </entry>
+      <entry value="262144" name="MAV_SYS_STATUS_SENSOR_3D_ACCEL2">
+        <description>0x40000 2nd 3D accelerometer</description>
+      </entry>
+      <entry value="524288" name="MAV_SYS_STATUS_SENSOR_3D_MAG2">
+        <description>0x80000 2nd 3D magnetometer</description>
+      </entry>
+      <entry value="1048576" name="MAV_SYS_STATUS_GEOFENCE">
+        <description>0x100000 geofence</description>
+      </entry>
+      <entry value="2097152" name="MAV_SYS_STATUS_AHRS">
+        <description>0x200000 AHRS subsystem health</description>
+      </entry>
+      <entry value="4194304" name="MAV_SYS_STATUS_TERRAIN">
+        <description>0x400000 Terrain subsystem health</description>
+      </entry>
+      <entry value="8388608" name="MAV_SYS_STATUS_REVERSE_MOTOR">
+        <description>0x800000 Motors are reversed</description>
+      </entry>
+      <entry value="16777216" name="MAV_SYS_STATUS_LOGGING">
+        <description>0x1000000 Logging</description>
+      </entry>
+      <entry value="33554432" name="MAV_SYS_STATUS_SENSOR_BATTERY">
+        <description>0x2000000 Battery</description>
+      </entry>
+      <entry value="67108864" name="MAV_SYS_STATUS_SENSOR_PROXIMITY">
+        <description>0x4000000 Proximity</description>
+      </entry>
+      <entry value="134217728" name="MAV_SYS_STATUS_SENSOR_SATCOM">
+        <description>0x8000000 Satellite Communication </description>
+      </entry>
+      <entry value="268435456" name="MAV_SYS_STATUS_PREARM_CHECK">
+        <description>0x10000000 pre-arm check status. Always healthy when armed</description>
+      </entry>
+      <entry value="536870912" name="MAV_SYS_STATUS_OBSTACLE_AVOIDANCE">
+        <description>0x20000000 Avoidance/collision prevention</description>
+      </entry>
+      <entry value="1073741824" name="MAV_SYS_STATUS_SENSOR_PROPULSION">
+        <description>0x40000000 propulsion (actuator, esc, motor or propellor)</description>
+      </entry>
+      <entry value="2147483648" name="MAV_SYS_STATUS_EXTENSION_USED">
+        <description>0x80000000 Extended bit-field are used for further sensor status bits (needs to be set in onboard_control_sensors_present only)</description>
+      </entry>
+    </enum>
+    <enum name="MAV_SYS_STATUS_SENSOR_EXTENDED" bitmask="true">
+      <description>These encode the sensors whose status is sent as part of the SYS_STATUS message in the extended fields.</description>
+      <entry value="1" name="MAV_SYS_STATUS_RECOVERY_SYSTEM">
+        <description>0x01 Recovery system (parachute, balloon, retracts etc)</description>
+      </entry>
+    </enum>
+    <enum name="MAV_FRAME">
+      <description>Coordinate frames used by MAVLink. Not all frames are supported by all commands, messages, or vehicles.
+
+      Global frames use the following naming conventions:
+      - "GLOBAL": Global coordinate frame with WGS84 latitude/longitude and altitude positive over mean sea level (MSL) by default.
+        The following modifiers may be used with "GLOBAL":
+        - "RELATIVE_ALT": Altitude is relative to the vehicle home position rather than MSL.
+        - "TERRAIN_ALT": Altitude is relative to ground level rather than MSL.
+        - "INT": Latitude/longitude (in degrees) are scaled by multiplying by 1E7.
+
+      Local frames use the following naming conventions:
+      - "LOCAL": Origin of local frame is fixed relative to earth. Unless otherwise specified this origin is the origin of the vehicle position-estimator ("EKF").
+      - "BODY": Origin of local frame travels with the vehicle. NOTE, "BODY" does NOT indicate alignment of frame axis with vehicle attitude.
+      - "OFFSET": Deprecated synonym for "BODY" (origin travels with the vehicle). Not to be used for new frames.
+
+      Some deprecated frames do not follow these conventions (e.g. MAV_FRAME_BODY_NED and MAV_FRAME_BODY_OFFSET_NED).
+ </description>
+      <entry value="0" name="MAV_FRAME_GLOBAL">
+        <description>Global (WGS84) coordinate frame + MSL altitude. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL).</description>
+      </entry>
+      <entry value="1" name="MAV_FRAME_LOCAL_NED">
+        <description>NED local tangent frame (x: North, y: East, z: Down) with origin fixed relative to earth.</description>
+      </entry>
+      <entry value="2" name="MAV_FRAME_MISSION">
+        <description>NOT a coordinate frame, indicates a mission command.</description>
+      </entry>
+      <entry value="3" name="MAV_FRAME_GLOBAL_RELATIVE_ALT">
+        <description>
+          Global (WGS84) coordinate frame + altitude relative to the home position.
+          First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home position.
+        </description>
+      </entry>
+      <entry value="4" name="MAV_FRAME_LOCAL_ENU">
+        <description>ENU local tangent frame (x: East, y: North, z: Up) with origin fixed relative to earth.</description>
+      </entry>
+      <entry value="5" name="MAV_FRAME_GLOBAL_INT">
+        <description>Global (WGS84) coordinate frame (scaled) + MSL altitude. First value / x: latitude in degrees*1E7, second value / y: longitude in degrees*1E7, third value / z: positive altitude over mean sea level (MSL).</description>
+      </entry>
+      <entry value="6" name="MAV_FRAME_GLOBAL_RELATIVE_ALT_INT">
+        <description>
+          Global (WGS84) coordinate frame (scaled) + altitude relative to the home position.
+          First value / x: latitude in degrees*1E7, second value / y: longitude in degrees*1E7, third value / z: positive altitude with 0 being at the altitude of the home position.
+        </description>
+      </entry>
+      <entry value="7" name="MAV_FRAME_LOCAL_OFFSET_NED">
+        <description>NED local tangent frame (x: North, y: East, z: Down) with origin that travels with the vehicle.</description>
+      </entry>
+      <entry value="8" name="MAV_FRAME_BODY_NED">
+        <deprecated since="2019-08" replaced_by="MAV_FRAME_BODY_FRD"/>
+        <description>Same as MAV_FRAME_LOCAL_NED when used to represent position values. Same as MAV_FRAME_BODY_FRD when used with velocity/acceleration values.</description>
+      </entry>
+      <entry value="9" name="MAV_FRAME_BODY_OFFSET_NED">
+        <deprecated since="2019-08" replaced_by="MAV_FRAME_BODY_FRD"/>
+        <description>This is the same as MAV_FRAME_BODY_FRD.</description>
+      </entry>
+      <entry value="10" name="MAV_FRAME_GLOBAL_TERRAIN_ALT">
+        <description>Global (WGS84) coordinate frame with AGL altitude (at the waypoint coordinate). First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.</description>
+      </entry>
+      <entry value="11" name="MAV_FRAME_GLOBAL_TERRAIN_ALT_INT">
+        <description>Global (WGS84) coordinate frame (scaled) with AGL altitude (at the waypoint coordinate). First value / x: latitude in degrees*1E7, second value / y: longitude in degrees*1E7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.</description>
+      </entry>
+      <entry value="12" name="MAV_FRAME_BODY_FRD">
+        <description>FRD local frame aligned to the vehicle's attitude (x: Forward, y: Right, z: Down) with an origin that travels with vehicle.</description>
+      </entry>
+      <entry value="13" name="MAV_FRAME_RESERVED_13">
+        <deprecated since="2019-04" replaced_by=""/>
+        <description>MAV_FRAME_BODY_FLU - Body fixed frame of reference, Z-up (x: Forward, y: Left, z: Up).</description>
+      </entry>
+      <entry value="14" name="MAV_FRAME_RESERVED_14">
+        <deprecated since="2019-04" replaced_by="MAV_FRAME_LOCAL_FRD"/>
+        <description>MAV_FRAME_MOCAP_NED - Odometry local coordinate frame of data given by a motion capture system, Z-down (x: North, y: East, z: Down).</description>
+      </entry>
+      <entry value="15" name="MAV_FRAME_RESERVED_15">
+        <deprecated since="2019-04" replaced_by="MAV_FRAME_LOCAL_FLU"/>
+        <description>MAV_FRAME_MOCAP_ENU - Odometry local coordinate frame of data given by a motion capture system, Z-up (x: East, y: North, z: Up).</description>
+      </entry>
+      <entry value="16" name="MAV_FRAME_RESERVED_16">
+        <deprecated since="2019-04" replaced_by="MAV_FRAME_LOCAL_FRD"/>
+        <description>MAV_FRAME_VISION_NED - Odometry local coordinate frame of data given by a vision estimation system, Z-down (x: North, y: East, z: Down).</description>
+      </entry>
+      <entry value="17" name="MAV_FRAME_RESERVED_17">
+        <deprecated since="2019-04" replaced_by="MAV_FRAME_LOCAL_FLU"/>
+        <description>MAV_FRAME_VISION_ENU - Odometry local coordinate frame of data given by a vision estimation system, Z-up (x: East, y: North, z: Up).</description>
+      </entry>
+      <entry value="18" name="MAV_FRAME_RESERVED_18">
+        <deprecated since="2019-04" replaced_by="MAV_FRAME_LOCAL_FRD"/>
+        <description>MAV_FRAME_ESTIM_NED - Odometry local coordinate frame of data given by an estimator running onboard the vehicle, Z-down (x: North, y: East, z: Down).</description>
+      </entry>
+      <entry value="19" name="MAV_FRAME_RESERVED_19">
+        <deprecated since="2019-04" replaced_by="MAV_FRAME_LOCAL_FLU"/>
+        <description>MAV_FRAME_ESTIM_ENU - Odometry local coordinate frame of data given by an estimator running onboard the vehicle, Z-up (x: East, y: North, z: Up).</description>
+      </entry>
+      <entry value="20" name="MAV_FRAME_LOCAL_FRD">
+        <description>FRD local tangent frame (x: Forward, y: Right, z: Down) with origin fixed relative to earth. The forward axis is aligned to the front of the vehicle in the horizontal plane.</description>
+      </entry>
+      <entry value="21" name="MAV_FRAME_LOCAL_FLU">
+        <description>FLU local tangent frame (x: Forward, y: Left, z: Up) with origin fixed relative to earth. The forward axis is aligned to the front of the vehicle in the horizontal plane.</description>
+      </entry>
+    </enum>
+    <enum name="MAVLINK_DATA_STREAM_TYPE">
+      <entry value="0" name="MAVLINK_DATA_STREAM_IMG_JPEG">
+        <description/>
+      </entry>
+      <entry value="1" name="MAVLINK_DATA_STREAM_IMG_BMP">
+        <description/>
+      </entry>
+      <entry value="2" name="MAVLINK_DATA_STREAM_IMG_RAW8U">
+        <description/>
+      </entry>
+      <entry value="3" name="MAVLINK_DATA_STREAM_IMG_RAW32U">
+        <description/>
+      </entry>
+      <entry value="4" name="MAVLINK_DATA_STREAM_IMG_PGM">
+        <description/>
+      </entry>
+      <entry value="5" name="MAVLINK_DATA_STREAM_IMG_PNG">
+        <description/>
+      </entry>
+    </enum>
+    <!-- fenced mode enums -->
+    <enum name="FENCE_ACTION">
+      <description>Actions following geofence breach.</description>
+      <entry value="0" name="FENCE_ACTION_NONE">
+        <description>Disable fenced mode. If used in a plan this would mean the next fence is disabled.</description>
+      </entry>
+      <entry value="1" name="FENCE_ACTION_GUIDED">
+        <description>Fly to geofence MAV_CMD_NAV_FENCE_RETURN_POINT in GUIDED mode. Note: This action is only supported by ArduPlane, and may not be supported in all versions.</description>
+      </entry>
+      <entry value="2" name="FENCE_ACTION_REPORT">
+        <description>Report fence breach, but don't take action</description>
+      </entry>
+      <entry value="3" name="FENCE_ACTION_GUIDED_THR_PASS">
+        <description>Fly to geofence MAV_CMD_NAV_FENCE_RETURN_POINT with manual throttle control in GUIDED mode. Note: This action is only supported by ArduPlane, and may not be supported in all versions.</description>
+      </entry>
+      <entry value="4" name="FENCE_ACTION_RTL">
+        <description>Return/RTL mode.</description>
+      </entry>
+      <entry value="5" name="FENCE_ACTION_HOLD">
+        <description>Hold at current location.</description>
+      </entry>
+      <entry value="6" name="FENCE_ACTION_TERMINATE">
+        <description>Termination failsafe. Motors are shut down (some flight stacks may trigger other failsafe actions).</description>
+      </entry>
+      <entry value="7" name="FENCE_ACTION_LAND">
+        <description>Land at current location.</description>
+      </entry>
+    </enum>
+    <enum name="FENCE_BREACH">
+      <entry value="0" name="FENCE_BREACH_NONE">
+        <description>No last fence breach</description>
+      </entry>
+      <entry value="1" name="FENCE_BREACH_MINALT">
+        <description>Breached minimum altitude</description>
+      </entry>
+      <entry value="2" name="FENCE_BREACH_MAXALT">
+        <description>Breached maximum altitude</description>
+      </entry>
+      <entry value="3" name="FENCE_BREACH_BOUNDARY">
+        <description>Breached fence boundary</description>
+      </entry>
+    </enum>
+    <enum name="FENCE_MITIGATE">
+      <!-- This enum is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Actions being taken to mitigate/prevent fence breach</description>
+      <entry value="0" name="FENCE_MITIGATE_UNKNOWN">
+        <description>Unknown</description>
+      </entry>
+      <entry value="1" name="FENCE_MITIGATE_NONE">
+        <description>No actions being taken</description>
+      </entry>
+      <entry value="2" name="FENCE_MITIGATE_VEL_LIMIT">
+        <description>Velocity limiting active to prevent breach</description>
+      </entry>
+    </enum>
+    <!-- Camera Mount mode Enumeration -->
+    <enum name="MAV_MOUNT_MODE">
+      <deprecated since="2020-01" replaced_by="GIMBAL_MANAGER_FLAGS"/>
+      <description>Enumeration of possible mount operation modes. This message is used by obsolete/deprecated gimbal messages.</description>
+      <entry value="0" name="MAV_MOUNT_MODE_RETRACT">
+        <description>Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization</description>
+      </entry>
+      <entry value="1" name="MAV_MOUNT_MODE_NEUTRAL">
+        <description>Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.</description>
+      </entry>
+      <entry value="2" name="MAV_MOUNT_MODE_MAVLINK_TARGETING">
+        <description>Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization</description>
+      </entry>
+      <entry value="3" name="MAV_MOUNT_MODE_RC_TARGETING">
+        <description>Load neutral position and start RC Roll,Pitch,Yaw control with stabilization</description>
+      </entry>
+      <entry value="4" name="MAV_MOUNT_MODE_GPS_POINT">
+        <description>Load neutral position and start to point to Lat,Lon,Alt</description>
+      </entry>
+      <entry value="5" name="MAV_MOUNT_MODE_SYSID_TARGET">
+        <description>Gimbal tracks system with specified system ID</description>
+      </entry>
+      <entry value="6" name="MAV_MOUNT_MODE_HOME_LOCATION">
+        <description>Gimbal tracks home position</description>
+      </entry>
+    </enum>
+    <enum name="GIMBAL_DEVICE_CAP_FLAGS" bitmask="true">
+      <description>Gimbal device (low level) capability flags (bitmap).</description>
+      <entry value="1" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT">
+        <description>Gimbal device supports a retracted position.</description>
+      </entry>
+      <entry value="2" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL">
+        <description>Gimbal device supports a horizontal, forward looking position, stabilized.</description>
+      </entry>
+      <entry value="4" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS">
+        <description>Gimbal device supports rotating around roll axis.</description>
+      </entry>
+      <entry value="8" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW">
+        <description>Gimbal device supports to follow a roll angle relative to the vehicle.</description>
+      </entry>
+      <entry value="16" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK">
+        <description>Gimbal device supports locking to a roll angle (generally that's the default with roll stabilized).</description>
+      </entry>
+      <entry value="32" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS">
+        <description>Gimbal device supports rotating around pitch axis.</description>
+      </entry>
+      <entry value="64" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW">
+        <description>Gimbal device supports to follow a pitch angle relative to the vehicle.</description>
+      </entry>
+      <entry value="128" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK">
+        <description>Gimbal device supports locking to a pitch angle (generally that's the default with pitch stabilized).</description>
+      </entry>
+      <entry value="256" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS">
+        <description>Gimbal device supports rotating around yaw axis.</description>
+      </entry>
+      <entry value="512" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW">
+        <description>Gimbal device supports to follow a yaw angle relative to the vehicle (generally that's the default).</description>
+      </entry>
+      <entry value="1024" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK">
+        <description>Gimbal device supports locking to an absolute heading, i.e., yaw angle relative to North (earth frame, often this is an option available).</description>
+      </entry>
+      <entry value="2048" name="GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW">
+        <description>Gimbal device supports yawing/panning infinitely (e.g. using slip disk).</description>
+      </entry>
+      <entry value="4096" name="GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME">
+        <description>Gimbal device supports yaw angles and angular velocities relative to North (earth frame). This usually requires support by an autopilot via AUTOPILOT_STATE_FOR_GIMBAL_DEVICE. Support can go on and off during runtime, which is reported by the flag GIMBAL_DEVICE_FLAGS_CAN_ACCEPT_YAW_IN_EARTH_FRAME.</description>
+      </entry>
+      <entry value="8192" name="GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS">
+        <description>Gimbal device supports radio control inputs as an alternative input for controlling the gimbal orientation.</description>
+      </entry>
+    </enum>
+    <enum name="GIMBAL_MANAGER_CAP_FLAGS" bitmask="true">
+      <description>Gimbal manager high level capability flags (bitmap). The first 16 bits are identical to the GIMBAL_DEVICE_CAP_FLAGS. However, the gimbal manager does not need to copy the flags from the gimbal but can also enhance the capabilities and thus add flags.</description>
+      <entry value="1" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT.</description>
+      </entry>
+      <entry value="2" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL.</description>
+      </entry>
+      <entry value="4" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS.</description>
+      </entry>
+      <entry value="8" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW.</description>
+      </entry>
+      <entry value="16" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK.</description>
+      </entry>
+      <entry value="32" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS.</description>
+      </entry>
+      <entry value="64" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW.</description>
+      </entry>
+      <entry value="128" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK.</description>
+      </entry>
+      <entry value="256" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS.</description>
+      </entry>
+      <entry value="512" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW.</description>
+      </entry>
+      <entry value="1024" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK.</description>
+      </entry>
+      <entry value="2048" name="GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW.</description>
+      </entry>
+      <entry value="4096" name="GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME.</description>
+      </entry>
+      <entry value="8192" name="GIMBAL_MANAGER_CAP_FLAGS_HAS_RC_INPUTS">
+        <description>Based on GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS.</description>
+      </entry>
+      <entry value="65536" name="GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL">
+        <description>Gimbal manager supports to point to a local position.</description>
+      </entry>
+      <entry value="131072" name="GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL">
+        <description>Gimbal manager supports to point to a global latitude, longitude, altitude position.</description>
+      </entry>
+    </enum>
+    <enum name="GIMBAL_DEVICE_FLAGS" bitmask="true">
+      <description>Flags for gimbal device (lower level) operation.</description>
+      <entry value="1" name="GIMBAL_DEVICE_FLAGS_RETRACT">
+        <description>Set to retracted safe position (no stabilization), takes precedence over all other flags.</description>
+      </entry>
+      <entry value="2" name="GIMBAL_DEVICE_FLAGS_NEUTRAL">
+        <description>Set to neutral/default position, taking precedence over all other flags except RETRACT. Neutral is commonly forward-facing and horizontal (roll=pitch=yaw=0) but may be any orientation.</description>
+      </entry>
+      <entry value="4" name="GIMBAL_DEVICE_FLAGS_ROLL_LOCK">
+        <description>Lock roll angle to absolute angle relative to horizon (not relative to vehicle). This is generally the default with a stabilizing gimbal.</description>
+      </entry>
+      <entry value="8" name="GIMBAL_DEVICE_FLAGS_PITCH_LOCK">
+        <description>Lock pitch angle to absolute angle relative to horizon (not relative to vehicle). This is generally the default with a stabilizing gimbal.</description>
+      </entry>
+      <entry value="16" name="GIMBAL_DEVICE_FLAGS_YAW_LOCK">
+        <description>Lock yaw angle to absolute angle relative to North (not relative to vehicle). If this flag is set, the yaw angle and z component of angular velocity are relative to North (earth frame, x-axis pointing North), else they are relative to the vehicle heading (vehicle frame, earth frame rotated so that the x-axis is pointing forward).</description>
+      </entry>
+      <entry value="32" name="GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME">
+        <description>Yaw angle and z component of angular velocity are relative to the vehicle heading (vehicle frame, earth frame rotated such that the x-axis is pointing forward).</description>
+      </entry>
+      <entry value="64" name="GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME">
+        <description>Yaw angle and z component of angular velocity are relative to North (earth frame, x-axis is pointing North).</description>
+      </entry>
+      <entry value="128" name="GIMBAL_DEVICE_FLAGS_ACCEPTS_YAW_IN_EARTH_FRAME">
+        <description>Gimbal device can accept yaw angle inputs relative to North (earth frame). This flag is only for reporting (attempts to set this flag are ignored).</description>
+      </entry>
+      <entry value="256" name="GIMBAL_DEVICE_FLAGS_RC_EXCLUSIVE">
+        <description>The gimbal orientation is set exclusively by the RC signals feed to the gimbal's radio control inputs. MAVLink messages for setting the gimbal orientation (GIMBAL_DEVICE_SET_ATTITUDE) are ignored.</description>
+      </entry>
+      <entry value="512" name="GIMBAL_DEVICE_FLAGS_RC_MIXED">
+        <description>The gimbal orientation is determined by combining/mixing the RC signals feed to the gimbal's radio control inputs and the MAVLink messages for setting the gimbal orientation (GIMBAL_DEVICE_SET_ATTITUDE). How these two controls are combined or mixed is not defined by the protocol but is up to the implementation.</description>
+      </entry>
+    </enum>
+    <enum name="GIMBAL_MANAGER_FLAGS" bitmask="true">
+      <description>Flags for high level gimbal manager operation The first 16 bits are identical to the GIMBAL_DEVICE_FLAGS.</description>
+      <entry value="1" name="GIMBAL_MANAGER_FLAGS_RETRACT">
+        <description>Based on GIMBAL_DEVICE_FLAGS_RETRACT.</description>
+      </entry>
+      <entry value="2" name="GIMBAL_MANAGER_FLAGS_NEUTRAL">
+        <description>Based on GIMBAL_DEVICE_FLAGS_NEUTRAL.</description>
+      </entry>
+      <entry value="4" name="GIMBAL_MANAGER_FLAGS_ROLL_LOCK">
+        <description>Based on GIMBAL_DEVICE_FLAGS_ROLL_LOCK.</description>
+      </entry>
+      <entry value="8" name="GIMBAL_MANAGER_FLAGS_PITCH_LOCK">
+        <description>Based on GIMBAL_DEVICE_FLAGS_PITCH_LOCK.</description>
+      </entry>
+      <entry value="16" name="GIMBAL_MANAGER_FLAGS_YAW_LOCK">
+        <description>Based on GIMBAL_DEVICE_FLAGS_YAW_LOCK.</description>
+      </entry>
+      <entry value="32" name="GIMBAL_MANAGER_FLAGS_YAW_IN_VEHICLE_FRAME">
+        <description>Based on GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME.</description>
+      </entry>
+      <entry value="64" name="GIMBAL_MANAGER_FLAGS_YAW_IN_EARTH_FRAME">
+        <description>Based on GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME.</description>
+      </entry>
+      <entry value="128" name="GIMBAL_MANAGER_FLAGS_ACCEPTS_YAW_IN_EARTH_FRAME">
+        <description>Based on GIMBAL_DEVICE_FLAGS_ACCEPTS_YAW_IN_EARTH_FRAME.</description>
+      </entry>
+      <entry value="256" name="GIMBAL_MANAGER_FLAGS_RC_EXCLUSIVE">
+        <description>Based on GIMBAL_DEVICE_FLAGS_RC_EXCLUSIVE.</description>
+      </entry>
+      <entry value="512" name="GIMBAL_MANAGER_FLAGS_RC_MIXED">
+        <description>Based on GIMBAL_DEVICE_FLAGS_RC_MIXED.</description>
+      </entry>
+    </enum>
+    <enum name="GIMBAL_DEVICE_ERROR_FLAGS" bitmask="true">
+      <description>Gimbal device (low level) error flags (bitmap, 0 means no error)</description>
+      <entry value="1" name="GIMBAL_DEVICE_ERROR_FLAGS_AT_ROLL_LIMIT">
+        <description>Gimbal device is limited by hardware roll limit.</description>
+      </entry>
+      <entry value="2" name="GIMBAL_DEVICE_ERROR_FLAGS_AT_PITCH_LIMIT">
+        <description>Gimbal device is limited by hardware pitch limit.</description>
+      </entry>
+      <entry value="4" name="GIMBAL_DEVICE_ERROR_FLAGS_AT_YAW_LIMIT">
+        <description>Gimbal device is limited by hardware yaw limit.</description>
+      </entry>
+      <entry value="8" name="GIMBAL_DEVICE_ERROR_FLAGS_ENCODER_ERROR">
+        <description>There is an error with the gimbal encoders.</description>
+      </entry>
+      <entry value="16" name="GIMBAL_DEVICE_ERROR_FLAGS_POWER_ERROR">
+        <description>There is an error with the gimbal power source.</description>
+      </entry>
+      <entry value="32" name="GIMBAL_DEVICE_ERROR_FLAGS_MOTOR_ERROR">
+        <description>There is an error with the gimbal motors.</description>
+      </entry>
+      <entry value="64" name="GIMBAL_DEVICE_ERROR_FLAGS_SOFTWARE_ERROR">
+        <description>There is an error with the gimbal's software.</description>
+      </entry>
+      <entry value="128" name="GIMBAL_DEVICE_ERROR_FLAGS_COMMS_ERROR">
+        <description>There is an error with the gimbal's communication.</description>
+      </entry>
+      <entry value="256" name="GIMBAL_DEVICE_ERROR_FLAGS_CALIBRATION_RUNNING">
+        <description>Gimbal device is currently calibrating.</description>
+      </entry>
+      <entry value="512" name="GIMBAL_DEVICE_ERROR_FLAGS_NO_MANAGER">
+        <description>Gimbal device is not assigned to a gimbal manager.</description>
+      </entry>
+    </enum>
+    <!-- gripper action enum -->
+    <enum name="GRIPPER_ACTIONS">
+      <description>Gripper actions.</description>
+      <entry value="0" name="GRIPPER_ACTION_RELEASE">
+        <description>Gripper release cargo.</description>
+      </entry>
+      <entry value="1" name="GRIPPER_ACTION_GRAB">
+        <description>Gripper grab onto cargo.</description>
+      </entry>
+    </enum>
+    <!-- winch action enum -->
+    <enum name="WINCH_ACTIONS">
+      <description>Winch actions.</description>
+      <entry value="0" name="WINCH_RELAXED">
+        <description>Allow motor to freewheel.</description>
+      </entry>
+      <entry value="1" name="WINCH_RELATIVE_LENGTH_CONTROL">
+        <description>Wind or unwind specified length of line, optionally using specified rate.</description>
+      </entry>
+      <entry value="2" name="WINCH_RATE_CONTROL">
+        <description>Wind or unwind line at specified rate.</description>
+      </entry>
+      <entry value="3" name="WINCH_LOCK">
+        <description>Perform the locking sequence to relieve motor while in the fully retracted position. Only action and instance command parameters are used, others are ignored.</description>
+      </entry>
+      <entry value="4" name="WINCH_DELIVER">
+        <description>Sequence of drop, slow down, touch down, reel up, lock. Only action and instance command parameters are used, others are ignored.</description>
+      </entry>
+      <entry value="5" name="WINCH_HOLD">
+        <description>Engage motor and hold current position. Only action and instance command parameters are used, others are ignored.</description>
+      </entry>
+      <entry value="6" name="WINCH_RETRACT">
+        <description>Return the reel to the fully retracted position. Only action and instance command parameters are used, others are ignored.</description>
+      </entry>
+      <entry value="7" name="WINCH_LOAD_LINE">
+        <description>Load the reel with line. The winch will calculate the total loaded length and stop when the tension exceeds a threshold. Only action and instance command parameters are used, others are ignored.</description>
+      </entry>
+      <entry value="8" name="WINCH_ABANDON_LINE">
+        <description>Spool out the entire length of the line. Only action and instance command parameters are used, others are ignored.</description>
+      </entry>
+      <entry value="9" name="WINCH_LOAD_PAYLOAD">
+        <description>Spools out just enough to present the hook to the user to load the payload. Only action and instance command parameters are used, others are ignored</description>
+      </entry>
+    </enum>
+    <!-- UAVCAN node health enumeration -->
+    <enum name="UAVCAN_NODE_HEALTH">
+      <description>Generalized UAVCAN node health</description>
+      <entry value="0" name="UAVCAN_NODE_HEALTH_OK">
+        <description>The node is functioning properly.</description>
+      </entry>
+      <entry value="1" name="UAVCAN_NODE_HEALTH_WARNING">
+        <description>A critical parameter went out of range or the node has encountered a minor failure.</description>
+      </entry>
+      <entry value="2" name="UAVCAN_NODE_HEALTH_ERROR">
+        <description>The node has encountered a major failure.</description>
+      </entry>
+      <entry value="3" name="UAVCAN_NODE_HEALTH_CRITICAL">
+        <description>The node has suffered a fatal malfunction.</description>
+      </entry>
+    </enum>
+    <!-- UAVCAN node mode enumeration -->
+    <enum name="UAVCAN_NODE_MODE">
+      <description>Generalized UAVCAN node mode</description>
+      <entry value="0" name="UAVCAN_NODE_MODE_OPERATIONAL">
+        <description>The node is performing its primary functions.</description>
+      </entry>
+      <entry value="1" name="UAVCAN_NODE_MODE_INITIALIZATION">
+        <description>The node is initializing; this mode is entered immediately after startup.</description>
+      </entry>
+      <entry value="2" name="UAVCAN_NODE_MODE_MAINTENANCE">
+        <description>The node is under maintenance.</description>
+      </entry>
+      <entry value="3" name="UAVCAN_NODE_MODE_SOFTWARE_UPDATE">
+        <description>The node is in the process of updating its software.</description>
+      </entry>
+      <entry value="7" name="UAVCAN_NODE_MODE_OFFLINE">
+        <description>The node is no longer available online.</description>
+      </entry>
+    </enum>
+    <enum name="ESC_CONNECTION_TYPE">
+      <!-- This enum is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Indicates the ESC connection type.</description>
+      <entry value="0" name="ESC_CONNECTION_TYPE_PPM">
+        <description>Traditional PPM ESC.</description>
+      </entry>
+      <entry value="1" name="ESC_CONNECTION_TYPE_SERIAL">
+        <description>Serial Bus connected ESC.</description>
+      </entry>
+      <entry value="2" name="ESC_CONNECTION_TYPE_ONESHOT">
+        <description>One Shot PPM ESC.</description>
+      </entry>
+      <entry value="3" name="ESC_CONNECTION_TYPE_I2C">
+        <description>I2C ESC.</description>
+      </entry>
+      <entry value="4" name="ESC_CONNECTION_TYPE_CAN">
+        <description>CAN-Bus ESC.</description>
+      </entry>
+      <entry value="5" name="ESC_CONNECTION_TYPE_DSHOT">
+        <description>DShot ESC.</description>
+      </entry>
+    </enum>
+    <enum name="ESC_FAILURE_FLAGS" bitmask="true">
+      <!-- This enum is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Flags to report ESC failures.</description>
+      <entry value="0" name="ESC_FAILURE_NONE">
+        <description>No ESC failure.</description>
+      </entry>
+      <entry value="1" name="ESC_FAILURE_OVER_CURRENT">
+        <description>Over current failure.</description>
+      </entry>
+      <entry value="2" name="ESC_FAILURE_OVER_VOLTAGE">
+        <description>Over voltage failure.</description>
+      </entry>
+      <entry value="4" name="ESC_FAILURE_OVER_TEMPERATURE">
+        <description>Over temperature failure.</description>
+      </entry>
+      <entry value="8" name="ESC_FAILURE_OVER_RPM">
+        <description>Over RPM failure.</description>
+      </entry>
+      <entry value="16" name="ESC_FAILURE_INCONSISTENT_CMD">
+        <description>Inconsistent command failure i.e. out of bounds.</description>
+      </entry>
+      <entry value="32" name="ESC_FAILURE_MOTOR_STUCK">
+        <description>Motor stuck failure.</description>
+      </entry>
+      <entry value="64" name="ESC_FAILURE_GENERIC">
+        <description>Generic ESC failure.</description>
+      </entry>
+    </enum>
+    <enum name="STORAGE_STATUS">
+      <description>Flags to indicate the status of camera storage.</description>
+      <entry value="0" name="STORAGE_STATUS_EMPTY">
+        <description>Storage is missing (no microSD card loaded for example.)</description>
+      </entry>
+      <entry value="1" name="STORAGE_STATUS_UNFORMATTED">
+        <description>Storage present but unformatted.</description>
+      </entry>
+      <entry value="2" name="STORAGE_STATUS_READY">
+        <description>Storage present and ready.</description>
+      </entry>
+      <entry value="3" name="STORAGE_STATUS_NOT_SUPPORTED">
+        <description>Camera does not supply storage status information. Capacity information in STORAGE_INFORMATION fields will be ignored.</description>
+      </entry>
+    </enum>
+    <enum name="STORAGE_TYPE">
+      <description>Flags to indicate the type of storage.</description>
+      <entry value="0" name="STORAGE_TYPE_UNKNOWN">
+        <description>Storage type is not known.</description>
+      </entry>
+      <entry value="1" name="STORAGE_TYPE_USB_STICK">
+        <description>Storage type is USB device.</description>
+      </entry>
+      <entry value="2" name="STORAGE_TYPE_SD">
+        <description>Storage type is SD card.</description>
+      </entry>
+      <entry value="3" name="STORAGE_TYPE_MICROSD">
+        <description>Storage type is microSD card.</description>
+      </entry>
+      <entry value="4" name="STORAGE_TYPE_CF">
+        <description>Storage type is CFast.</description>
+      </entry>
+      <entry value="5" name="STORAGE_TYPE_CFE">
+        <description>Storage type is CFexpress.</description>
+      </entry>
+      <entry value="6" name="STORAGE_TYPE_XQD">
+        <description>Storage type is XQD.</description>
+      </entry>
+      <entry value="7" name="STORAGE_TYPE_HD">
+        <description>Storage type is HD mass storage type.</description>
+      </entry>
+      <entry value="254" name="STORAGE_TYPE_OTHER">
+        <description>Storage type is other, not listed type.</description>
+      </entry>
+    </enum>
+    <enum name="STORAGE_USAGE_FLAG">
+      <description>Flags to indicate usage for a particular storage (see STORAGE_INFORMATION.storage_usage and MAV_CMD_SET_STORAGE_USAGE).</description>
+      <entry value="1" name="STORAGE_USAGE_FLAG_SET">
+        <description>Always set to 1 (indicates STORAGE_INFORMATION.storage_usage is supported).</description>
+      </entry>
+      <entry value="2" name="STORAGE_USAGE_FLAG_PHOTO">
+        <description>Storage for saving photos.</description>
+      </entry>
+      <entry value="4" name="STORAGE_USAGE_FLAG_VIDEO">
+        <description>Storage for saving videos.</description>
+      </entry>
+      <entry value="8" name="STORAGE_USAGE_FLAG_LOGS">
+        <description>Storage for saving logs.</description>
+      </entry>
+    </enum>
+    <enum name="ORBIT_YAW_BEHAVIOUR">
+      <description>Yaw behaviour during orbit flight.</description>
+      <entry value="0" name="ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER">
+        <description>Vehicle front points to the center (default).</description>
+      </entry>
+      <entry value="1" name="ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING">
+        <description>Vehicle front holds heading when message received.</description>
+      </entry>
+      <entry value="2" name="ORBIT_YAW_BEHAVIOUR_UNCONTROLLED">
+        <description>Yaw uncontrolled.</description>
+      </entry>
+      <entry value="3" name="ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE">
+        <description>Vehicle front follows flight path (tangential to circle).</description>
+      </entry>
+      <entry value="4" name="ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED">
+        <description>Yaw controlled by RC input.</description>
+      </entry>
+    </enum>
+    <enum name="WIFI_CONFIG_AP_RESPONSE">
+      <description>Possible responses from a WIFI_CONFIG_AP message.</description>
+      <entry value="0" name="WIFI_CONFIG_AP_RESPONSE_UNDEFINED">
+        <description>Undefined response. Likely an indicative of a system that doesn't support this request.</description>
+      </entry>
+      <entry value="1" name="WIFI_CONFIG_AP_RESPONSE_ACCEPTED">
+        <description>Changes accepted.</description>
+      </entry>
+      <entry value="2" name="WIFI_CONFIG_AP_RESPONSE_REJECTED">
+        <description>Changes rejected.</description>
+      </entry>
+      <entry value="3" name="WIFI_CONFIG_AP_RESPONSE_MODE_ERROR">
+        <description>Invalid Mode.</description>
+      </entry>
+      <entry value="4" name="WIFI_CONFIG_AP_RESPONSE_SSID_ERROR">
+        <description>Invalid SSID.</description>
+      </entry>
+      <entry value="5" name="WIFI_CONFIG_AP_RESPONSE_PASSWORD_ERROR">
+        <description>Invalid Password.</description>
+      </entry>
+    </enum>
+    <enum name="CELLULAR_CONFIG_RESPONSE">
+      <description>Possible responses from a CELLULAR_CONFIG message.</description>
+      <entry value="0" name="CELLULAR_CONFIG_RESPONSE_ACCEPTED">
+        <description>Changes accepted.</description>
+      </entry>
+      <entry value="1" name="CELLULAR_CONFIG_RESPONSE_APN_ERROR">
+        <description>Invalid APN.</description>
+      </entry>
+      <entry value="2" name="CELLULAR_CONFIG_RESPONSE_PIN_ERROR">
+        <description>Invalid PIN.</description>
+      </entry>
+      <entry value="3" name="CELLULAR_CONFIG_RESPONSE_REJECTED">
+        <description>Changes rejected.</description>
+      </entry>
+      <entry value="4" name="CELLULAR_CONFIG_BLOCKED_PUK_REQUIRED">
+        <description>PUK is required to unblock SIM card.</description>
+      </entry>
+    </enum>
+    <enum name="WIFI_CONFIG_AP_MODE">
+      <description>WiFi Mode.</description>
+      <entry value="0" name="WIFI_CONFIG_AP_MODE_UNDEFINED">
+        <description>WiFi mode is undefined.</description>
+      </entry>
+      <entry value="1" name="WIFI_CONFIG_AP_MODE_AP">
+        <description>WiFi configured as an access point.</description>
+      </entry>
+      <entry value="2" name="WIFI_CONFIG_AP_MODE_STATION">
+        <description>WiFi configured as a station connected to an existing local WiFi network.</description>
+      </entry>
+      <entry value="3" name="WIFI_CONFIG_AP_MODE_DISABLED">
+        <description>WiFi disabled.</description>
+      </entry>
+    </enum>
+    <enum name="COMP_METADATA_TYPE">
+      <description>Supported component metadata types. These are used in the "general" metadata file returned by COMPONENT_METADATA to provide information about supported metadata types. The types are not used directly in MAVLink messages.</description>
+      <entry value="0" name="COMP_METADATA_TYPE_GENERAL">
+        <description>General information about the component. General metadata includes information about other metadata types supported by the component. Files of this type must be supported, and must be downloadable from vehicle using a MAVLink FTP URI.</description>
+      </entry>
+      <entry value="1" name="COMP_METADATA_TYPE_PARAMETER">
+        <description>Parameter meta data.</description>
+      </entry>
+      <entry value="2" name="COMP_METADATA_TYPE_COMMANDS">
+        <description>Meta data that specifies which commands and command parameters the vehicle supports. (WIP)</description>
+      </entry>
+      <entry value="3" name="COMP_METADATA_TYPE_PERIPHERALS">
+        <description>Meta data that specifies external non-MAVLink peripherals.</description>
+      </entry>
+      <entry value="4" name="COMP_METADATA_TYPE_EVENTS">
+        <description>Meta data for the events interface.</description>
+      </entry>
+      <entry value="5" name="COMP_METADATA_TYPE_ACTUATORS">
+        <description>Meta data for actuator configuration (motors, servos and vehicle geometry) and testing.</description>
+      </entry>
+    </enum>
+    <enum name="ACTUATOR_CONFIGURATION">
+      <description>Actuator configuration, used to change a setting on an actuator. Component information metadata can be used to know which outputs support which commands.</description>
+      <entry value="0" name="ACTUATOR_CONFIGURATION_NONE">
+        <description>Do nothing.</description>
+      </entry>
+      <entry value="1" name="ACTUATOR_CONFIGURATION_BEEP">
+        <description>Command the actuator to beep now.</description>
+      </entry>
+      <entry value="2" name="ACTUATOR_CONFIGURATION_3D_MODE_ON">
+        <description>Permanently set the actuator (ESC) to 3D mode (reversible thrust).</description>
+      </entry>
+      <entry value="3" name="ACTUATOR_CONFIGURATION_3D_MODE_OFF">
+        <description>Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust).</description>
+      </entry>
+      <entry value="4" name="ACTUATOR_CONFIGURATION_SPIN_DIRECTION1">
+        <description>Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise).</description>
+      </entry>
+      <entry value="5" name="ACTUATOR_CONFIGURATION_SPIN_DIRECTION2">
+        <description>Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1).</description>
+      </entry>
+    </enum>
+    <enum name="ACTUATOR_OUTPUT_FUNCTION">
+      <description>Actuator output function. Values greater or equal to 1000 are autopilot-specific.</description>
+      <entry value="0" name="ACTUATOR_OUTPUT_FUNCTION_NONE">
+        <description>No function (disabled).</description>
+      </entry>
+      <entry value="1" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR1">
+        <description>Motor 1</description>
+      </entry>
+      <entry value="2" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR2">
+        <description>Motor 2</description>
+      </entry>
+      <entry value="3" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR3">
+        <description>Motor 3</description>
+      </entry>
+      <entry value="4" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR4">
+        <description>Motor 4</description>
+      </entry>
+      <entry value="5" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR5">
+        <description>Motor 5</description>
+      </entry>
+      <entry value="6" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR6">
+        <description>Motor 6</description>
+      </entry>
+      <entry value="7" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR7">
+        <description>Motor 7</description>
+      </entry>
+      <entry value="8" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR8">
+        <description>Motor 8</description>
+      </entry>
+      <entry value="9" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR9">
+        <description>Motor 9</description>
+      </entry>
+      <entry value="10" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR10">
+        <description>Motor 10</description>
+      </entry>
+      <entry value="11" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR11">
+        <description>Motor 11</description>
+      </entry>
+      <entry value="12" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR12">
+        <description>Motor 12</description>
+      </entry>
+      <entry value="13" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR13">
+        <description>Motor 13</description>
+      </entry>
+      <entry value="14" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR14">
+        <description>Motor 14</description>
+      </entry>
+      <entry value="15" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR15">
+        <description>Motor 15</description>
+      </entry>
+      <entry value="16" name="ACTUATOR_OUTPUT_FUNCTION_MOTOR16">
+        <description>Motor 16</description>
+      </entry>
+      <entry value="33" name="ACTUATOR_OUTPUT_FUNCTION_SERVO1">
+        <description>Servo 1</description>
+      </entry>
+      <entry value="34" name="ACTUATOR_OUTPUT_FUNCTION_SERVO2">
+        <description>Servo 2</description>
+      </entry>
+      <entry value="35" name="ACTUATOR_OUTPUT_FUNCTION_SERVO3">
+        <description>Servo 3</description>
+      </entry>
+      <entry value="36" name="ACTUATOR_OUTPUT_FUNCTION_SERVO4">
+        <description>Servo 4</description>
+      </entry>
+      <entry value="37" name="ACTUATOR_OUTPUT_FUNCTION_SERVO5">
+        <description>Servo 5</description>
+      </entry>
+      <entry value="38" name="ACTUATOR_OUTPUT_FUNCTION_SERVO6">
+        <description>Servo 6</description>
+      </entry>
+      <entry value="39" name="ACTUATOR_OUTPUT_FUNCTION_SERVO7">
+        <description>Servo 7</description>
+      </entry>
+      <entry value="40" name="ACTUATOR_OUTPUT_FUNCTION_SERVO8">
+        <description>Servo 8</description>
+      </entry>
+      <entry value="41" name="ACTUATOR_OUTPUT_FUNCTION_SERVO9">
+        <description>Servo 9</description>
+      </entry>
+      <entry value="42" name="ACTUATOR_OUTPUT_FUNCTION_SERVO10">
+        <description>Servo 10</description>
+      </entry>
+      <entry value="43" name="ACTUATOR_OUTPUT_FUNCTION_SERVO11">
+        <description>Servo 11</description>
+      </entry>
+      <entry value="44" name="ACTUATOR_OUTPUT_FUNCTION_SERVO12">
+        <description>Servo 12</description>
+      </entry>
+      <entry value="45" name="ACTUATOR_OUTPUT_FUNCTION_SERVO13">
+        <description>Servo 13</description>
+      </entry>
+      <entry value="46" name="ACTUATOR_OUTPUT_FUNCTION_SERVO14">
+        <description>Servo 14</description>
+      </entry>
+      <entry value="47" name="ACTUATOR_OUTPUT_FUNCTION_SERVO15">
+        <description>Servo 15</description>
+      </entry>
+      <entry value="48" name="ACTUATOR_OUTPUT_FUNCTION_SERVO16">
+        <description>Servo 16</description>
+      </entry>
+    </enum>
+    <enum name="AUTOTUNE_AXIS" bitmask="true">
+      <description>Enable axes that will be tuned via autotuning. Used in MAV_CMD_DO_AUTOTUNE_ENABLE.</description>
+      <entry value="0" name="AUTOTUNE_AXIS_DEFAULT">
+        <description>Flight stack tunes axis according to its default settings.</description>
+      </entry>
+      <entry value="1" name="AUTOTUNE_AXIS_ROLL">
+        <description>Autotune roll axis.</description>
+      </entry>
+      <entry value="2" name="AUTOTUNE_AXIS_PITCH">
+        <description>Autotune pitch axis.</description>
+      </entry>
+      <entry value="4" name="AUTOTUNE_AXIS_YAW">
+        <description>Autotune yaw axis.</description>
+      </entry>
+    </enum>
+    <enum name="PREFLIGHT_STORAGE_PARAMETER_ACTION">
+      <description>
+        Actions for reading/writing parameters between persistent and volatile storage when using MAV_CMD_PREFLIGHT_STORAGE.
+        (Commonly parameters are loaded from persistent storage (flash/EEPROM) into volatile storage (RAM) on startup and written back when they are changed.)
+      </description>
+      <entry value="0" name="PARAM_READ_PERSISTENT">
+        <description>Read all parameters from persistent storage. Replaces values in volatile storage.</description>
+      </entry>
+      <entry value="1" name="PARAM_WRITE_PERSISTENT">
+        <description>Write all parameter values to persistent storage (flash/EEPROM)</description>
+      </entry>
+      <entry value="2" name="PARAM_RESET_CONFIG_DEFAULT">
+        <description>Reset all user configurable parameters to their default value (including airframe selection, sensor calibration data, safety settings, and so on). Does not reset values that contain operation counters and vehicle computed statistics.</description>
+      </entry>
+      <entry value="3" name="PARAM_RESET_SENSOR_DEFAULT">
+        <description>Reset only sensor calibration parameters to factory defaults (or firmware default if not available)</description>
+      </entry>
+      <entry value="4" name="PARAM_RESET_ALL_DEFAULT">
+        <description>Reset all parameters, including operation counters, to default values</description>
+      </entry>
+    </enum>
+    <enum name="PREFLIGHT_STORAGE_MISSION_ACTION">
+      <description>
+        Actions for reading and writing plan information (mission, rally points, geofence) between persistent and volatile storage when using MAV_CMD_PREFLIGHT_STORAGE.
+        (Commonly missions are loaded from persistent storage (flash/EEPROM) into volatile storage (RAM) on startup and written back when they are changed.)
+      </description>
+      <entry value="0" name="MISSION_READ_PERSISTENT">
+        <description>Read current mission data from persistent storage</description>
+      </entry>
+      <entry value="1" name="MISSION_WRITE_PERSISTENT">
+        <description>Write current mission data to persistent storage</description>
+      </entry>
+      <entry value="2" name="MISSION_RESET_DEFAULT">
+        <description>Erase all mission data stored on the vehicle (both persistent and volatile storage)</description>
+      </entry>
+    </enum>
+    <!-- The MAV_CMD enum entries describe either: -->
+    <!--  * the data payload of mission items (as used in the MISSION_ITEM_INT message) -->
+    <!--  * the data payload of mavlink commands (as used in the COMMAND_INT and COMMAND_LONG messages) -->
+    <!-- ALL the entries in the MAV_CMD enum have a maximum of 7 parameters -->
+    <enum name="MAV_CMD">
+      <description>Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. NaN and INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current yaw or latitude rather than a specific value). See https://mavlink.io/en/guide/xml_schema.html#MAV_CMD for information about the structure of the MAV_CMD entries</description>
+      <entry value="16" name="MAV_CMD_NAV_WAYPOINT" hasLocation="true" isDestination="true">
+        <description>Navigate to waypoint. This is intended for use in missions (for guided commands outside of missions use MAV_CMD_DO_REPOSITION).</description>
+        <param index="1" label="Hold" units="s" minValue="0">Hold time. (ignored by fixed wing, time to stay at waypoint for rotary wing)</param>
+        <param index="2" label="Accept Radius" units="m" minValue="0">Acceptance radius (if the sphere with this radius is hit, the waypoint counts as reached)</param>
+        <param index="3" label="Pass Radius" units="m">0 to pass through the WP, if &gt; 0 radius to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.</param>
+        <param index="4" label="Yaw" units="deg">Desired yaw angle at waypoint (rotary wing). NaN to use the current system yaw heading mode (e.g. yaw towards next waypoint, yaw to home, etc.).</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="17" name="MAV_CMD_NAV_LOITER_UNLIM" hasLocation="true" isDestination="true">
+        <description>Loiter around this waypoint an unlimited amount of time</description>
+        <param index="1">Empty</param>
+        <param index="2">Empty</param>
+        <param index="3" label="Radius" units="m">Loiter radius around waypoint for forward-only moving vehicles (not multicopters). If positive loiter clockwise, else counter-clockwise</param>
+        <param index="4" label="Yaw" units="deg">Desired yaw angle. NaN to use the current system yaw heading mode (e.g. yaw towards next waypoint, yaw to home, etc.).</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="18" name="MAV_CMD_NAV_LOITER_TURNS" hasLocation="true" isDestination="true">
+        <description>Loiter around this waypoint for X turns</description>
+        <param index="1" label="Turns" minValue="0">Number of turns.</param>
+        <param index="2" label="Heading Required" minValue="0" maxValue="1" increment="1">Leave loiter circle only once heading towards the next waypoint (0 = False)</param>
+        <param index="3" label="Radius" units="m">Loiter radius around waypoint for forward-only moving vehicles (not multicopters). If positive loiter clockwise, else counter-clockwise</param>
+        <param index="4" label="Xtrack Location">Loiter circle exit location and/or path to next waypoint ("xtrack") for forward-only moving vehicles (not multicopters). 0 for the vehicle to converge towards the center xtrack when it leaves the loiter (the line between the centers of the current and next waypoint), 1 to converge to the direct line between the location that the vehicle exits the loiter radius and the next waypoint. Otherwise the angle (in degrees) between the tangent of the loiter circle and the center xtrack at which the vehicle must leave the loiter (and converge to the center xtrack). NaN to use the current system default xtrack behaviour.</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="19" name="MAV_CMD_NAV_LOITER_TIME" hasLocation="true" isDestination="true">
+        <description>Loiter at the specified latitude, longitude and altitude for a certain amount of time. Multicopter vehicles stop at the point (within a vehicle-specific acceptance radius). Forward-only moving vehicles (e.g. fixed-wing) circle the point with the specified radius/direction. If the Heading Required parameter (2) is non-zero forward moving aircraft will only leave the loiter circle once heading towards the next waypoint.</description>
+        <param index="1" label="Time" units="s" minValue="0">Loiter time (only starts once Lat, Lon and Alt is reached).</param>
+        <param index="2" label="Heading Required" minValue="0" maxValue="1" increment="1">Leave loiter circle only once heading towards the next waypoint (0 = False)</param>
+        <param index="3" label="Radius" units="m">Loiter radius around waypoint for forward-only moving vehicles (not multicopters). If positive loiter clockwise, else counter-clockwise.</param>
+        <param index="4" label="Xtrack Location">Loiter circle exit location and/or path to next waypoint ("xtrack") for forward-only moving vehicles (not multicopters). 0 for the vehicle to converge towards the center xtrack when it leaves the loiter (the line between the centers of the current and next waypoint), 1 to converge to the direct line between the location that the vehicle exits the loiter radius and the next waypoint. Otherwise the angle (in degrees) between the tangent of the loiter circle and the center xtrack at which the vehicle must leave the loiter (and converge to the center xtrack). NaN to use the current system default xtrack behaviour.</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="20" name="MAV_CMD_NAV_RETURN_TO_LAUNCH" hasLocation="false" isDestination="false">
+        <description>Return to launch location</description>
+        <param index="1">Empty</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="21" name="MAV_CMD_NAV_LAND" hasLocation="true" isDestination="true">
+        <description>Land at location.</description>
+        <param index="1" label="Abort Alt" units="m">Minimum target altitude if landing is aborted (0 = undefined/use system default).</param>
+        <param index="2" label="Land Mode" enum="PRECISION_LAND_MODE">Precision land mode.</param>
+        <param index="3">Empty.</param>
+        <param index="4" label="Yaw Angle" units="deg">Desired yaw angle. NaN to use the current system yaw heading mode (e.g. yaw towards next waypoint, yaw to home, etc.).</param>
+        <param index="5" label="Latitude">Latitude.</param>
+        <param index="6" label="Longitude">Longitude.</param>
+        <param index="7" label="Altitude" units="m">Landing altitude (ground level in current frame).</param>
+      </entry>
+      <entry value="22" name="MAV_CMD_NAV_TAKEOFF" hasLocation="true" isDestination="true">
+        <description>Takeoff from ground / hand. Vehicles that support multiple takeoff modes (e.g. VTOL quadplane) should take off using the currently configured mode.</description>
+        <param index="1" label="Pitch" units="deg">Minimum pitch (if airspeed sensor present), desired pitch without sensor</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4" label="Yaw" units="deg">Yaw angle (if magnetometer present), ignored without magnetometer. NaN to use the current system yaw heading mode (e.g. yaw towards next waypoint, yaw to home, etc.).</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="23" name="MAV_CMD_NAV_LAND_LOCAL" hasLocation="true" isDestination="true">
+        <description>Land at local position (local frame only)</description>
+        <param index="1" label="Target" minValue="0" increment="1">Landing target number (if available)</param>
+        <param index="2" label="Offset" units="m" minValue="0">Maximum accepted offset from desired landing position - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land</param>
+        <param index="3" label="Descend Rate" units="m/s">Landing descend rate</param>
+        <param index="4" label="Yaw" units="rad">Desired yaw angle</param>
+        <param index="5" label="Y Position" units="m">Y-axis position</param>
+        <param index="6" label="X Position" units="m">X-axis position</param>
+        <param index="7" label="Z Position" units="m">Z-axis / ground level position</param>
+      </entry>
+      <entry value="24" name="MAV_CMD_NAV_TAKEOFF_LOCAL" hasLocation="true" isDestination="true">
+        <description>Takeoff from local position (local frame only)</description>
+        <param index="1" label="Pitch" units="rad">Minimum pitch (if airspeed sensor present), desired pitch without sensor</param>
+        <param index="2">Empty</param>
+        <param index="3" label="Ascend Rate" units="m/s">Takeoff ascend rate</param>
+        <param index="4" label="Yaw" units="rad">Yaw angle (if magnetometer or another yaw estimation source present), ignored without one of these</param>
+        <param index="5" label="Y Position" units="m">Y-axis position</param>
+        <param index="6" label="X Position" units="m">X-axis position</param>
+        <param index="7" label="Z Position" units="m">Z-axis position</param>
+      </entry>
+      <entry value="25" name="MAV_CMD_NAV_FOLLOW" hasLocation="true" isDestination="false">
+        <description>Vehicle following, i.e. this waypoint represents the position of a moving vehicle</description>
+        <param index="1" label="Following" increment="1">Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation</param>
+        <param index="2" label="Ground Speed" units="m/s">Ground speed of vehicle to be followed</param>
+        <param index="3" label="Radius" units="m">Radius around waypoint. If positive loiter clockwise, else counter-clockwise</param>
+        <param index="4" label="Yaw" units="deg">Desired yaw angle.</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="30" name="MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT" hasLocation="false" isDestination="true">
+        <description>Continue on the current course and climb/descend to specified altitude.  When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.</description>
+        <param index="1" label="Action" minValue="0" maxValue="2" increment="1">Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude.</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7" label="Altitude" units="m">Desired altitude</param>
+      </entry>
+      <entry value="31" name="MAV_CMD_NAV_LOITER_TO_ALT" hasLocation="true" isDestination="true">
+        <description>Begin loiter at the specified Latitude and Longitude.  If Lat=Lon=0, then loiter at the current position.  Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint.</description>
+        <param index="1" label="Heading Required" minValue="0" maxValue="1" increment="1">Leave loiter circle only once heading towards the next waypoint (0 = False)</param>
+        <param index="2" label="Radius" units="m">Loiter radius around waypoint for forward-only moving vehicles (not multicopters). If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.</param>
+        <param index="3">Empty</param>
+        <param index="4" label="Xtrack Location" minValue="0" maxValue="1" increment="1">Loiter circle exit location and/or path to next waypoint ("xtrack") for forward-only moving vehicles (not multicopters). 0 for the vehicle to converge towards the center xtrack when it leaves the loiter (the line between the centers of the current and next waypoint), 1 to converge to the direct line between the location that the vehicle exits the loiter radius and the next waypoint. Otherwise the angle (in degrees) between the tangent of the loiter circle and the center xtrack at which the vehicle must leave the loiter (and converge to the center xtrack). NaN to use the current system default xtrack behaviour.</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="32" name="MAV_CMD_DO_FOLLOW" hasLocation="false" isDestination="false">
+        <description>Begin following a target</description>
+        <param index="1" label="System ID" minValue="0" maxValue="255" increment="1">System ID (of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode.</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4" label="Altitude Mode" minValue="0" maxValue="2" increment="1">Altitude mode: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home.</param>
+        <param index="5" label="Altitude" units="m">Altitude above home. (used if mode=2)</param>
+        <param index="6">Reserved</param>
+        <param index="7" label="Time to Land" units="s" minValue="0">Time to land in which the MAV should go to the default position hold mode after a message RX timeout.</param>
+      </entry>
+      <entry value="33" name="MAV_CMD_DO_FOLLOW_REPOSITION" hasLocation="false" isDestination="false">
+        <description>Reposition the MAV after a follow target command has been sent</description>
+        <param index="1" label="Camera Q1">Camera q1 (where 0 is on the ray from the camera to the tracking device)</param>
+        <param index="2" label="Camera Q2">Camera q2</param>
+        <param index="3" label="Camera Q3">Camera q3</param>
+        <param index="4" label="Camera Q4">Camera q4</param>
+        <param index="5" label="Altitude Offset" units="m">altitude offset from target</param>
+        <param index="6" label="X Offset" units="m">X offset from target</param>
+        <param index="7" label="Y Offset" units="m">Y offset from target</param>
+      </entry>
+      <entry value="34" name="MAV_CMD_DO_ORBIT" hasLocation="true" isDestination="true">
+        <wip/>
+        <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+        <description>Start orbiting on the circumference of a circle defined by the parameters. Setting values to NaN/INT32_MAX (as appropriate) results in using defaults.</description>
+        <param index="1" label="Radius" units="m">Radius of the circle. Positive: orbit clockwise. Negative: orbit counter-clockwise. NaN: Use vehicle default radius, or current radius if already orbiting.</param>
+        <param index="2" label="Velocity" units="m/s">Tangential Velocity. NaN: Use vehicle default velocity, or current velocity if already orbiting.</param>
+        <param index="3" label="Yaw Behavior" enum="ORBIT_YAW_BEHAVIOUR">Yaw behavior of the vehicle.</param>
+        <param index="4" label="Orbits" units="rad" minValue="0" default="0">Orbit around the centre point for this many radians (i.e. for a three-quarter orbit set 270*Pi/180). 0: Orbit forever. NaN: Use vehicle default, or current value if already orbiting.</param>
+        <param index="5" label="Latitude/X">Center point latitude (if no MAV_FRAME specified) / X coordinate according to MAV_FRAME. INT32_MAX (or NaN if sent in COMMAND_LONG): Use current vehicle position, or current center if already orbiting.</param>
+        <param index="6" label="Longitude/Y">Center point longitude (if no MAV_FRAME specified) / Y coordinate according to MAV_FRAME. INT32_MAX (or NaN if sent in COMMAND_LONG): Use current vehicle position, or current center if already orbiting.</param>
+        <param index="7" label="Altitude/Z">Center point altitude (MSL) (if no MAV_FRAME specified) / Z coordinate according to MAV_FRAME. NaN: Use current vehicle altitude.</param>
+      </entry>
+      <entry value="80" name="MAV_CMD_NAV_ROI" hasLocation="true" isDestination="false">
+        <deprecated since="2018-01" replaced_by="MAV_CMD_DO_SET_ROI_*"/>
+        <description>Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras.</description>
+        <param index="1" label="ROI Mode" enum="MAV_ROI">Region of interest mode.</param>
+        <param index="2" label="WP Index" minValue="0" increment="1">Waypoint index/ target ID. (see MAV_ROI enum)</param>
+        <param index="3" label="ROI Index" minValue="0" increment="1">ROI index (allows a vehicle to manage multiple ROI's)</param>
+        <param index="4">Empty</param>
+        <param index="5" label="X">x the location of the fixed ROI (see MAV_FRAME)</param>
+        <param index="6" label="Y">y</param>
+        <param index="7" label="Z">z</param>
+      </entry>
+      <entry value="81" name="MAV_CMD_NAV_PATHPLANNING" hasLocation="true" isDestination="true">
+        <description>Control autonomous path planning on the MAV.</description>
+        <param index="1" label="Local Ctrl" minValue="0" maxValue="2" increment="1">0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning</param>
+        <param index="2" label="Global Ctrl" minValue="0" maxValue="3" increment="1">0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid</param>
+        <param index="3">Empty</param>
+        <param index="4" label="Yaw" units="deg">Yaw angle at goal</param>
+        <param index="5" label="Latitude/X">Latitude/X of goal</param>
+        <param index="6" label="Longitude/Y">Longitude/Y of goal</param>
+        <param index="7" label="Altitude/Z">Altitude/Z of goal</param>
+      </entry>
+      <entry value="82" name="MAV_CMD_NAV_SPLINE_WAYPOINT" hasLocation="true" isDestination="true">
+        <description>Navigate to waypoint using a spline path.</description>
+        <param index="1" label="Hold" units="s" minValue="0">Hold time. (ignored by fixed wing, time to stay at waypoint for rotary wing)</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5" label="Latitude/X">Latitude/X of goal</param>
+        <param index="6" label="Longitude/Y">Longitude/Y of goal</param>
+        <param index="7" label="Altitude/Z">Altitude/Z of goal</param>
+      </entry>
+      <entry value="84" name="MAV_CMD_NAV_VTOL_TAKEOFF" hasLocation="true" isDestination="true">
+        <description>Takeoff from ground using VTOL mode, and transition to forward flight with specified heading. The command should be ignored by vehicles that dont support both VTOL and fixed-wing flight (multicopters, boats,etc.).</description>
+        <param index="1">Empty</param>
+        <param index="2" label="Transition Heading" enum="VTOL_TRANSITION_HEADING">Front transition heading.</param>
+        <param index="3">Empty</param>
+        <param index="4" label="Yaw Angle" units="deg">Yaw angle. NaN to use the current system yaw heading mode (e.g. yaw towards next waypoint, yaw to home, etc.).</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="85" name="MAV_CMD_NAV_VTOL_LAND" hasLocation="true" isDestination="true">
+        <description>Land using VTOL mode</description>
+        <param index="1" label="Land Options" enum="NAV_VTOL_LAND_OPTIONS">Landing behaviour.</param>
+        <param index="2">Empty</param>
+        <param index="3" label="Approach Altitude" units="m">Approach altitude (with the same reference as the Altitude field). NaN if unspecified.</param>
+        <param index="4" label="Yaw" units="deg">Yaw angle. NaN to use the current system yaw heading mode (e.g. yaw towards next waypoint, yaw to home, etc.).</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Ground Altitude" units="m">Altitude (ground level) relative to the current coordinate frame. NaN to use system default landing altitude (ignore value).</param>
+      </entry>
+      <!-- IDs 90 and 91 are reserved until the end of 2014,
+                    as they were used in some conflicting proposals
+                    between PX4 and ArduPilot and need to be kept
+                    unused to prevent errors -->
+      <entry value="92" name="MAV_CMD_NAV_GUIDED_ENABLE" hasLocation="false" isDestination="false">
+        <description>hand control over to an external controller</description>
+        <param index="1" label="Enable" minValue="0" maxValue="1" increment="1">On / Off (&gt; 0.5f on)</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="93" name="MAV_CMD_NAV_DELAY" hasLocation="false" isDestination="false">
+        <description>Delay the next navigation command a number of seconds or until a specified time</description>
+        <param index="1" label="Delay" units="s" minValue="-1" increment="1">Delay (-1 to enable time-of-day fields)</param>
+        <param index="2" label="Hour" minValue="-1" maxValue="23" increment="1">hour (24h format, UTC, -1 to ignore)</param>
+        <param index="3" label="Minute" minValue="-1" maxValue="59" increment="1">minute (24h format, UTC, -1 to ignore)</param>
+        <param index="4" label="Second" minValue="-1" maxValue="59" increment="1">second (24h format, UTC, -1 to ignore)</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="94" name="MAV_CMD_NAV_PAYLOAD_PLACE" hasLocation="true" isDestination="true">
+        <description>Descend and place payload. Vehicle moves to specified location, descends until it detects a hanging payload has reached the ground, and then releases the payload. If ground is not detected before the reaching the maximum descent value (param1), the command will complete without releasing the payload.</description>
+        <param index="1" label="Max Descent" units="m" minValue="0">Maximum distance to descend.</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="95" name="MAV_CMD_NAV_LAST" hasLocation="false" isDestination="false">
+        <description>NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration</description>
+        <param index="1">Empty</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="112" name="MAV_CMD_CONDITION_DELAY" hasLocation="false" isDestination="false">
+        <description>Delay mission state machine.</description>
+        <param index="1" label="Delay" units="s" minValue="0">Delay</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="113" name="MAV_CMD_CONDITION_CHANGE_ALT" hasLocation="false" isDestination="true">
+        <description>Ascend/descend to target altitude at specified rate. Delay mission state machine until desired altitude reached.</description>
+        <param index="1" label="Rate" units="m/s">Descent / Ascend rate.</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7" label="Altitude" units="m">Target Altitude</param>
+      </entry>
+      <entry value="114" name="MAV_CMD_CONDITION_DISTANCE" hasLocation="false" isDestination="false">
+        <description>Delay mission state machine until within desired distance of next NAV point.</description>
+        <param index="1" label="Distance" units="m" minValue="0">Distance.</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="115" name="MAV_CMD_CONDITION_YAW" hasLocation="false" isDestination="false">
+        <description>Reach a certain target angle.</description>
+        <param index="1" label="Angle" units="deg" minValue="0" maxValue="360">target angle [0-360]. Absolute angles: 0 is north. Relative angle: 0 is initial yaw. Direction set by param3.</param>
+        <param index="2" label="Angular Speed" units="deg/s" minValue="0">angular speed</param>
+        <param index="3" label="Direction" minValue="-1" maxValue="1" increment="1">direction: -1: counter clockwise, 0: shortest direction, 1: clockwise</param>
+        <param index="4" label="Relative" minValue="0" maxValue="1" increment="1">0: absolute angle, 1: relative offset</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="159" name="MAV_CMD_CONDITION_LAST" hasLocation="false" isDestination="false">
+        <description>NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration</description>
+        <param index="1">Empty</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="176" name="MAV_CMD_DO_SET_MODE" hasLocation="false" isDestination="false">
+        <description>Set system mode.</description>
+        <param index="1" label="Mode" enum="MAV_MODE">Mode</param>
+        <param index="2" label="Custom Mode">Custom mode - this is system specific, please refer to the individual autopilot specifications for details.</param>
+        <param index="3" label="Custom Submode">Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="177" name="MAV_CMD_DO_JUMP" hasLocation="false" isDestination="false">
+        <description>Jump to the desired command in the mission list.  Repeat this action only the specified number of times</description>
+        <param index="1" label="Number" minValue="0" increment="1">Sequence number</param>
+        <param index="2" label="Repeat" minValue="0" increment="1">Repeat count</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="178" name="MAV_CMD_DO_CHANGE_SPEED" hasLocation="false" isDestination="false">
+        <description>Change speed and/or throttle set points. The value persists until it is overridden or there is a mode change</description>
+        <param index="1" label="Speed Type" enum="SPEED_TYPE">Speed type of value set in param2 (such as airspeed, ground speed, and so on)</param>
+        <param index="2" label="Speed" units="m/s" minValue="-2">Speed (-1 indicates no change, -2 indicates return to default vehicle speed)</param>
+        <param index="3" label="Throttle" units="%" minValue="-2">Throttle (-1 indicates no change, -2 indicates return to default vehicle throttle value)</param>
+        <param index="4" reserved="true" default="0"/>
+        <param index="5" reserved="true" default="0"/>
+        <param index="6" reserved="true" default="0"/>
+        <param index="7" reserved="true" default="0"/>
+      </entry>
+      <entry value="179" name="MAV_CMD_DO_SET_HOME" hasLocation="true" isDestination="false">
+        <description>
+          Sets the home position to either to the current position or a specified position.
+          The home position is the default position that the system will return to and land on.
+          The position is set automatically by the system during the takeoff (and may also be set using this command).
+          Note: the current home position may be emitted in a HOME_POSITION message on request (using MAV_CMD_REQUEST_MESSAGE with param1=242).
+        </description>
+        <param index="1" label="Use Current" minValue="0" maxValue="1" increment="1">Use current (1=use current location, 0=use specified location)</param>
+        <param index="2" label="Roll" units="deg" minValue="-180" maxValue="180">Roll angle (of surface). Range: -180..180 degrees. NAN or 0 means value not set. 0.01 indicates zero roll.</param>
+        <param index="3" label="Pitch" units="deg" minValue="-90" maxValue="90">Pitch angle (of surface). Range: -90..90 degrees. NAN or 0 means value not set. 0.01 means zero pitch.</param>
+        <param index="4" label="Yaw" units="deg" minValue="-180" maxValue="180">Yaw angle. NaN to use default heading. Range: -180..180 degrees.</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="180" name="MAV_CMD_DO_SET_PARAMETER" hasLocation="false" isDestination="false">
+        <description>Set a system parameter.  Caution!  Use of this command requires knowledge of the numeric enumeration value of the parameter.</description>
+        <param index="1" label="Number" minValue="0" increment="1">Parameter number</param>
+        <param index="2" label="Value">Parameter value</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="181" name="MAV_CMD_DO_SET_RELAY" hasLocation="false" isDestination="false">
+        <description>Set a relay to a condition.</description>
+        <param index="1" label="Instance" minValue="0" increment="1">Relay instance number.</param>
+        <param index="2" label="Setting" minValue="0" increment="1">Setting. (1=on, 0=off, others possible depending on system hardware)</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="182" name="MAV_CMD_DO_REPEAT_RELAY" hasLocation="false" isDestination="false">
+        <description>Cycle a relay on and off for a desired number of cycles with a desired period.</description>
+        <param index="1" label="Instance" minValue="0" increment="1">Relay instance number.</param>
+        <param index="2" label="Count" minValue="1" increment="1">Cycle count.</param>
+        <param index="3" label="Time" units="s" minValue="0">Cycle time.</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="183" name="MAV_CMD_DO_SET_SERVO" hasLocation="false" isDestination="false">
+        <description>Set a servo to a desired PWM value.</description>
+        <param index="1" label="Instance" minValue="0" increment="1">Servo instance number.</param>
+        <param index="2" label="PWM" units="us" minValue="0" increment="1">Pulse Width Modulation.</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="184" name="MAV_CMD_DO_REPEAT_SERVO" hasLocation="false" isDestination="false">
+        <description>Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.</description>
+        <param index="1" label="Instance" minValue="0" increment="1">Servo instance number.</param>
+        <param index="2" label="PWM" units="us" minValue="0" increment="1">Pulse Width Modulation.</param>
+        <param index="3" label="Count" minValue="1" increment="1">Cycle count.</param>
+        <param index="4" label="Time" units="s" minValue="0">Cycle time.</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="185" name="MAV_CMD_DO_FLIGHTTERMINATION" hasLocation="false" isDestination="false">
+        <description>Terminate flight immediately.
+          Flight termination immediately and irreversibly terminates the current flight, returning the vehicle to ground.
+          The vehicle will ignore RC or other input until it has been power-cycled.
+          Termination may trigger safety measures, including: disabling motors and deployment of parachute on multicopters, and setting flight surfaces to initiate a landing pattern on fixed-wing).
+          On multicopters without a parachute it may trigger a crash landing.
+          Support for this command can be tested using the protocol bit: MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION.
+          Support for this command can also be tested by sending the command with param1=0 (&lt; 0.5); the ACK should be either MAV_RESULT_FAILED or MAV_RESULT_UNSUPPORTED.
+        </description>
+        <param index="1" label="Terminate" minValue="0" maxValue="1" increment="1">Flight termination activated if &gt; 0.5. Otherwise not activated and ACK with MAV_RESULT_FAILED.</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="186" name="MAV_CMD_DO_CHANGE_ALTITUDE" hasLocation="false" isDestination="false">
+        <description>Change altitude set point.</description>
+        <param index="1" label="Altitude" units="m">Altitude.</param>
+        <param index="2" label="Frame" enum="MAV_FRAME">Frame of new altitude.</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="187" name="MAV_CMD_DO_SET_ACTUATOR" hasLocation="false" isDestination="false">
+        <description>Sets actuators (e.g. servos) to a desired value. The actuator numbers are mapped to specific outputs (e.g. on any MAIN or AUX PWM or UAVCAN) using a flight-stack specific mechanism (i.e. a parameter).</description>
+        <param index="1" label="Actuator 1" minValue="-1" maxValue="1">Actuator 1 value, scaled from [-1 to 1]. NaN to ignore.</param>
+        <param index="2" label="Actuator 2" minValue="-1" maxValue="1">Actuator 2 value, scaled from [-1 to 1]. NaN to ignore.</param>
+        <param index="3" label="Actuator 3" minValue="-1" maxValue="1">Actuator 3 value, scaled from [-1 to 1]. NaN to ignore.</param>
+        <param index="4" label="Actuator 4" minValue="-1" maxValue="1">Actuator 4 value, scaled from [-1 to 1]. NaN to ignore.</param>
+        <param index="5" label="Actuator 5" minValue="-1" maxValue="1">Actuator 5 value, scaled from [-1 to 1]. NaN to ignore.</param>
+        <param index="6" label="Actuator 6" minValue="-1" maxValue="1">Actuator 6 value, scaled from [-1 to 1]. NaN to ignore.</param>
+        <param index="7" label="Index" minValue="0" increment="1">Index of actuator set (i.e if set to 1, Actuator 1 becomes Actuator 7)</param>
+      </entry>
+      <entry value="189" name="MAV_CMD_DO_LAND_START" hasLocation="true" isDestination="false">
+        <description>Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts.
+	  It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used.
+	  The Latitude/Longitude/Altitude is optional, and may be set to 0 if not needed. If specified then it will be used to help find the closest landing sequence.
+	</description>
+        <param index="1">Empty</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="190" name="MAV_CMD_DO_RALLY_LAND" hasLocation="false" isDestination="false">
+        <description>Mission command to perform a landing from a rally point.</description>
+        <param index="1" label="Altitude" units="m">Break altitude</param>
+        <param index="2" label="Speed" units="m/s">Landing speed</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="191" name="MAV_CMD_DO_GO_AROUND" hasLocation="false" isDestination="false">
+        <description>Mission command to safely abort an autonomous landing.</description>
+        <param index="1" label="Altitude" units="m">Altitude</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="192" name="MAV_CMD_DO_REPOSITION" hasLocation="true" isDestination="true">
+        <description>Reposition the vehicle to a specific WGS84 global position. This command is intended for guided commands (for missions use MAV_CMD_NAV_WAYPOINT instead).</description>
+        <param index="1" label="Speed" units="m/s" minValue="-1">Ground speed, less than 0 (-1) for default</param>
+        <param index="2" label="Bitmask" enum="MAV_DO_REPOSITION_FLAGS">Bitmask of option flags.</param>
+        <param index="3" label="Radius" units="m">Loiter radius for planes. Positive values only, direction is controlled by Yaw value. A value of zero or NaN is ignored. </param>
+        <param index="4" label="Yaw" units="deg">Yaw heading. NaN to use the current system yaw heading mode (e.g. yaw towards next waypoint, yaw to home, etc.). For planes indicates loiter direction (0: clockwise, 1: counter clockwise)</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="193" name="MAV_CMD_DO_PAUSE_CONTINUE" hasLocation="false" isDestination="false">
+        <description>If in a GPS controlled position mode, hold the current position or continue.</description>
+        <param index="1" label="Continue" minValue="0" maxValue="1" increment="1">0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5">Reserved</param>
+        <param index="6">Reserved</param>
+        <param index="7">Reserved</param>
+      </entry>
+      <entry value="194" name="MAV_CMD_DO_SET_REVERSE" hasLocation="false" isDestination="false">
+        <description>Set moving direction to forward or reverse.</description>
+        <param index="1" label="Reverse" minValue="0" maxValue="1" increment="1">Direction (0=Forward, 1=Reverse)</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="195" name="MAV_CMD_DO_SET_ROI_LOCATION" hasLocation="true" isDestination="false">
+        <description>Sets the region of interest (ROI) to a location. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras. This command can be sent to a gimbal manager but not to a gimbal device. A gimbal is not to react to this message.</description>
+        <param index="1" label="Gimbal device ID">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5" label="Latitude" units="degE7">Latitude of ROI location</param>
+        <param index="6" label="Longitude" units="degE7">Longitude of ROI location</param>
+        <param index="7" label="Altitude" units="m">Altitude of ROI location</param>
+      </entry>
+      <entry value="196" name="MAV_CMD_DO_SET_ROI_WPNEXT_OFFSET" hasLocation="false" isDestination="false">
+        <description>Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras. This command can be sent to a gimbal manager but not to a gimbal device. A gimbal device is not to react to this message.</description>
+        <param index="1" label="Gimbal device ID">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5" label="Pitch Offset" units="deg">Pitch offset from next waypoint, positive pitching up</param>
+        <param index="6" label="Roll Offset" units="deg">Roll offset from next waypoint, positive rolling to the right</param>
+        <param index="7" label="Yaw Offset" units="deg">Yaw offset from next waypoint, positive yawing to the right</param>
+      </entry>
+      <entry value="197" name="MAV_CMD_DO_SET_ROI_NONE" hasLocation="false" isDestination="false">
+        <description>Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras. This command can be sent to a gimbal manager but not to a gimbal device. A gimbal device is not to react to this message. After this command the gimbal manager should go back to manual input if available, and otherwise assume a neutral position.</description>
+        <param index="1" label="Gimbal device ID">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="198" name="MAV_CMD_DO_SET_ROI_SYSID">
+        <description>Mount tracks system with specified system ID. Determination of target vehicle position may be done with GLOBAL_POSITION_INT or any other means. This command can be sent to a gimbal manager but not to a gimbal device. A gimbal device is not to react to this message.</description>
+        <param index="1" label="System ID" minValue="1" maxValue="255" increment="1">System ID</param>
+        <param index="2" label="Gimbal device ID">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</param>
+      </entry>
+      <entry value="200" name="MAV_CMD_DO_CONTROL_VIDEO" hasLocation="false" isDestination="false">
+        <description>Control onboard camera system.</description>
+        <param index="1" label="ID" minValue="-1" increment="1">Camera ID (-1 for all)</param>
+        <param index="2" label="Transmission" minValue="0" maxValue="2" increment="1">Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw</param>
+        <param index="3" label="Interval" units="s" minValue="0">Transmission mode: 0: video stream, &gt;0: single images every n seconds</param>
+        <param index="4" label="Recording" minValue="0" maxValue="2" increment="1">Recording: 0: disabled, 1: enabled compressed, 2: enabled raw</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="201" name="MAV_CMD_DO_SET_ROI" hasLocation="true" isDestination="false">
+        <deprecated since="2018-01" replaced_by="MAV_CMD_DO_SET_ROI_*"/>
+        <description>Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicle's control system to control the vehicle attitude and the attitude of various sensors such as cameras.</description>
+        <param index="1" label="ROI Mode" enum="MAV_ROI">Region of interest mode.</param>
+        <param index="2" label="WP Index" minValue="0" increment="1">Waypoint index/ target ID (depends on param 1).</param>
+        <param index="3" label="ROI Index" minValue="0" increment="1">Region of interest index. (allows a vehicle to manage multiple ROI's)</param>
+        <param index="4">Empty</param>
+        <param index="5">MAV_ROI_WPNEXT: pitch offset from next waypoint, MAV_ROI_LOCATION: latitude</param>
+        <param index="6">MAV_ROI_WPNEXT: roll offset from next waypoint, MAV_ROI_LOCATION: longitude</param>
+        <param index="7">MAV_ROI_WPNEXT: yaw offset from next waypoint, MAV_ROI_LOCATION: altitude</param>
+      </entry>
+      <!-- Camera Controller Mission Commands Enumeration -->
+      <entry value="202" name="MAV_CMD_DO_DIGICAM_CONFIGURE" hasLocation="false" isDestination="false">
+        <description>Configure digital camera. This is a fallback message for systems that have not yet implemented PARAM_EXT_XXX messages and camera definition files (see https://mavlink.io/en/services/camera_def.html ).</description>
+        <param index="1" label="Mode" minValue="0" increment="1">Modes: P, TV, AV, M, Etc.</param>
+        <param index="2" label="Shutter Speed" minValue="0" increment="1">Shutter speed: Divisor number for one second.</param>
+        <param index="3" label="Aperture" minValue="0">Aperture: F stop number.</param>
+        <param index="4" label="ISO" minValue="0" increment="1">ISO number e.g. 80, 100, 200, Etc.</param>
+        <param index="5" label="Exposure">Exposure type enumerator.</param>
+        <param index="6" label="Command Identity">Command Identity.</param>
+        <param index="7" label="Engine Cut-off" units="ds" minValue="0" increment="1">Main engine cut-off time before camera trigger. (0 means no cut-off)</param>
+      </entry>
+      <entry value="203" name="MAV_CMD_DO_DIGICAM_CONTROL" hasLocation="false" isDestination="false">
+        <description>Control digital camera. This is a fallback message for systems that have not yet implemented PARAM_EXT_XXX messages and camera definition files (see https://mavlink.io/en/services/camera_def.html ).</description>
+        <param index="1" label="Session Control">Session control e.g. show/hide lens</param>
+        <param index="2" label="Zoom Absolute">Zoom's absolute position</param>
+        <param index="3" label="Zoom Relative">Zooming step value to offset zoom from the current position</param>
+        <param index="4" label="Focus">Focus Locking, Unlocking or Re-locking</param>
+        <param index="5" label="Shoot Command">Shooting Command</param>
+        <param index="6" label="Command Identity">Command Identity</param>
+        <param index="7" label="Shot ID">Test shot identifier. If set to 1, image will only be captured, but not counted towards internal frame count.</param>
+      </entry>
+      <!-- Camera Mount Mission Commands Enumeration -->
+      <entry value="204" name="MAV_CMD_DO_MOUNT_CONFIGURE" hasLocation="false" isDestination="false">
+        <deprecated since="2020-01" replaced_by="MAV_CMD_DO_GIMBAL_MANAGER_CONFIGURE">This message has been superseded by MAV_CMD_DO_GIMBAL_MANAGER_CONFIGURE. The message can still be used to communicate with legacy gimbals implementing it.</deprecated>
+        <description>Mission command to configure a camera or antenna mount</description>
+        <param index="1" label="Mode" enum="MAV_MOUNT_MODE">Mount operation mode</param>
+        <param index="2" label="Stabilize Roll" minValue="0" maxValue="1" increment="1">stabilize roll? (1 = yes, 0 = no)</param>
+        <param index="3" label="Stabilize Pitch" minValue="0" maxValue="1" increment="1">stabilize pitch? (1 = yes, 0 = no)</param>
+        <param index="4" label="Stabilize Yaw" minValue="0" maxValue="1" increment="1">stabilize yaw? (1 = yes, 0 = no)</param>
+        <param index="5" label="Roll Input Mode">roll input (0 = angle body frame, 1 = angular rate, 2 = angle absolute frame)</param>
+        <param index="6" label="Pitch Input Mode">pitch input (0 = angle body frame, 1 = angular rate, 2 = angle absolute frame)</param>
+        <param index="7" label="Yaw Input Mode">yaw input (0 = angle body frame, 1 = angular rate, 2 = angle absolute frame)</param>
+      </entry>
+      <!-- this one is messed up! altitude should be param 7, not param4 -->
+      <entry value="205" name="MAV_CMD_DO_MOUNT_CONTROL" hasLocation="false" isDestination="false">
+        <deprecated since="2020-01" replaced_by="MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW">This message is ambiguous and inconsistent. It has been superseded by MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW and MAV_CMD_DO_SET_ROI_*. The message can still be used to communicate with legacy gimbals implementing it.</deprecated>
+        <description>Mission command to control a camera or antenna mount</description>
+        <param index="1" label="Pitch">pitch depending on mount mode (degrees or degrees/second depending on pitch input).</param>
+        <param index="2" label="Roll">roll depending on mount mode (degrees or degrees/second depending on roll input).</param>
+        <param index="3" label="Yaw">yaw depending on mount mode (degrees or degrees/second depending on yaw input).</param>
+        <param index="4" label="Altitude" units="m">altitude depending on mount mode.</param>
+        <param index="5" label="Latitude">latitude, set if appropriate mount mode.</param>
+        <param index="6" label="Longitude">longitude, set if appropriate mount mode.</param>
+        <param index="7" label="Mode" enum="MAV_MOUNT_MODE">Mount mode.</param>
+      </entry>
+      <entry value="206" name="MAV_CMD_DO_SET_CAM_TRIGG_DIST" hasLocation="false" isDestination="false">
+        <description>Mission command to set camera trigger distance for this flight. The camera is triggered each time this distance is exceeded. This command can also be used to set the shutter integration time for the camera.</description>
+        <param index="1" label="Distance" units="m" minValue="0">Camera trigger distance. 0 to stop triggering.</param>
+        <param index="2" label="Shutter" units="ms" minValue="-1" increment="1">Camera shutter integration time. -1 or 0 to ignore</param>
+        <param index="3" label="Trigger" minValue="0" maxValue="1" increment="1">Trigger camera once immediately. (0 = no trigger, 1 = trigger)</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="207" name="MAV_CMD_DO_FENCE_ENABLE" hasLocation="false" isDestination="false">
+        <description>Mission command to enable the geofence</description>
+        <param index="1" label="Enable" minValue="0" maxValue="2" increment="1">enable? (0=disable, 1=enable, 2=disable_floor_only)</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="208" name="MAV_CMD_DO_PARACHUTE" hasLocation="false" isDestination="false">
+        <description>Mission item/command to release a parachute or enable/disable auto release.</description>
+        <param index="1" label="Action" enum="PARACHUTE_ACTION">Action</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="209" name="MAV_CMD_DO_MOTOR_TEST" hasLocation="false" isDestination="false">
+        <description>Command to perform motor test.</description>
+        <param index="1" label="Instance" minValue="1" increment="1">Motor instance number (from 1 to max number of motors on the vehicle).</param>
+        <param index="2" label="Throttle Type" enum="MOTOR_TEST_THROTTLE_TYPE">Throttle type (whether the Throttle Value in param3 is a percentage, PWM value, etc.)</param>
+        <param index="3" label="Throttle">Throttle value.</param>
+        <param index="4" label="Timeout" units="s" minValue="0">Timeout between tests that are run in sequence.</param>
+        <param index="5" label="Motor Count" minValue="0" increment="1">Motor count. Number of motors to test in sequence: 0/1=one motor, 2= two motors, etc. The Timeout (param4) is used between tests.</param>
+        <param index="6" label="Test Order" enum="MOTOR_TEST_ORDER">Motor test order.</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="210" name="MAV_CMD_DO_INVERTED_FLIGHT" hasLocation="false" isDestination="false">
+        <description>Change to/from inverted flight.</description>
+        <param index="1" label="Inverted" minValue="0" maxValue="1" increment="1">Inverted flight. (0=normal, 1=inverted)</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="211" name="MAV_CMD_DO_GRIPPER" hasLocation="false" isDestination="false">
+        <description>Mission command to operate a gripper.</description>
+        <param index="1" label="Instance" minValue="1" increment="1">Gripper instance number.</param>
+        <param index="2" label="Action" enum="GRIPPER_ACTIONS">Gripper action to perform.</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="212" name="MAV_CMD_DO_AUTOTUNE_ENABLE" hasLocation="false" isDestination="false">
+        <description>Enable/disable autotune.</description>
+        <param index="1" label="Enable" minValue="0" maxValue="1" increment="1">Enable (1: enable, 0:disable).</param>
+        <param index="2" label="Axis" enum="AUTOTUNE_AXIS">Specify which axis are autotuned. 0 indicates autopilot default settings.</param>
+        <param index="3">Empty.</param>
+        <param index="4">Empty.</param>
+        <param index="5">Empty.</param>
+        <param index="6">Empty.</param>
+        <param index="7">Empty.</param>
+      </entry>
+      <entry value="213" name="MAV_CMD_NAV_SET_YAW_SPEED" hasLocation="false" isDestination="false">
+        <description>Sets a desired vehicle turn angle and speed change.</description>
+        <param index="1" label="Yaw" units="deg">Yaw angle to adjust steering by.</param>
+        <param index="2" label="Speed" units="m/s">Speed.</param>
+        <param index="3" label="Angle" minValue="0" maxValue="1" increment="1">Final angle. (0=absolute, 1=relative)</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="214" name="MAV_CMD_DO_SET_CAM_TRIGG_INTERVAL" hasLocation="false" isDestination="false">
+        <description>Mission command to set camera trigger interval for this flight. If triggering is enabled, the camera is triggered each time this interval expires. This command can also be used to set the shutter integration time for the camera.</description>
+        <param index="1" label="Trigger Cycle" units="ms" minValue="-1" increment="1">Camera trigger cycle time. -1 or 0 to ignore.</param>
+        <param index="2" label="Shutter Integration" units="ms" minValue="-1" increment="1">Camera shutter integration time. Should be less than trigger cycle time. -1 or 0 to ignore.</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="220" name="MAV_CMD_DO_MOUNT_CONTROL_QUAT" hasLocation="false" isDestination="false">
+        <deprecated since="2020-01" replaced_by="MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW"/>
+        <description>Mission command to control a camera or antenna mount, using a quaternion as reference.</description>
+        <param index="1" label="Q1">quaternion param q1, w (1 in null-rotation)</param>
+        <param index="2" label="Q2">quaternion param q2, x (0 in null-rotation)</param>
+        <param index="3" label="Q3">quaternion param q3, y (0 in null-rotation)</param>
+        <param index="4" label="Q4">quaternion param q4, z (0 in null-rotation)</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="221" name="MAV_CMD_DO_GUIDED_MASTER" hasLocation="false" isDestination="false">
+        <description>set id of master controller</description>
+        <param index="1" label="System ID" minValue="0" maxValue="255" increment="1">System ID</param>
+        <param index="2" label="Component ID" minValue="0" maxValue="255" increment="1">Component ID</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="222" name="MAV_CMD_DO_GUIDED_LIMITS" hasLocation="false" isDestination="false">
+        <description>Set limits for external control</description>
+        <param index="1" label="Timeout" units="s" minValue="0">Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout.</param>
+        <param index="2" label="Min Altitude" units="m">Altitude (MSL) min - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit.</param>
+        <param index="3" label="Max Altitude" units="m">Altitude (MSL) max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit.</param>
+        <param index="4" label="Horiz. Move Limit" units="m" minValue="0">Horizontal move limit - if vehicle moves more than this distance from its location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal move limit.</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="223" name="MAV_CMD_DO_ENGINE_CONTROL" hasLocation="false" isDestination="false">
+        <description>Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines</description>
+        <param index="1" label="Start Engine" minValue="0" maxValue="1" increment="1">0: Stop engine, 1:Start Engine</param>
+        <param index="2" label="Cold Start" minValue="0" maxValue="1" increment="1">0: Warm start, 1:Cold start. Controls use of choke where applicable</param>
+        <param index="3" label="Height Delay" units="m" minValue="0">Height delay. This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="224" name="MAV_CMD_DO_SET_MISSION_CURRENT" hasLocation="false" isDestination="false">
+        <description>
+          Set the mission item with sequence number seq as the current item and emit MISSION_CURRENT (whether or not the mission number changed).
+          If a mission is currently being executed, the system will continue to this new mission item on the shortest path, skipping any intermediate mission items.
+	  Note that mission jump repeat counters are not reset unless param2 is set (see MAV_CMD_DO_JUMP param2).
+
+          This command may trigger a mission state-machine change on some systems: for example from MISSION_STATE_NOT_STARTED or MISSION_STATE_PAUSED to MISSION_STATE_ACTIVE.
+          If the system is in mission mode, on those systems this command might therefore start, restart or resume the mission.
+          If the system is not in mission mode this command must not trigger a switch to mission mode.
+
+          The mission may be "reset" using param2.
+          Resetting sets jump counters to initial values (to reset counters without changing the current mission item set the param1 to `-1`).
+          Resetting also explicitly changes a mission state of MISSION_STATE_COMPLETE to MISSION_STATE_PAUSED or MISSION_STATE_ACTIVE, potentially allowing it to resume when it is (next) in a mission mode.
+
+	  The command will ACK with MAV_RESULT_FAILED if the sequence number is out of range (including if there is no mission item).
+        </description>
+        <param index="1" label="Number" minValue="-1" increment="1">Mission sequence value to set. -1 for the current mission item (use to reset mission without changing current mission item).</param>
+        <param index="2" label="Reset Mission" minValue="0" maxValue="1" increment="1">Resets mission. 1: true, 0: false. Resets jump counters to initial values and changes mission state "completed" to be "active" or "paused".</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="240" name="MAV_CMD_DO_LAST" hasLocation="false" isDestination="false">
+        <description>NOP - This command is only used to mark the upper limit of the DO commands in the enumeration</description>
+        <param index="1">Empty</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="241" name="MAV_CMD_PREFLIGHT_CALIBRATION" hasLocation="false" isDestination="false">
+        <description>Trigger calibration. This command will be only accepted if in pre-flight mode. Except for Temperature Calibration, only one sensor should be set in a single message and all others should be zero.</description>
+        <param index="1" label="Gyro Temperature" minValue="0" maxValue="3" increment="1">1: gyro calibration, 3: gyro temperature calibration</param>
+        <param index="2" label="Magnetometer" minValue="0" maxValue="1" increment="1">1: magnetometer calibration</param>
+        <param index="3" label="Ground Pressure" minValue="0" maxValue="1" increment="1">1: ground pressure calibration</param>
+        <param index="4" label="Remote Control" minValue="0" maxValue="1" increment="1">1: radio RC calibration, 2: RC trim calibration</param>
+        <param index="5" label="Accelerometer" minValue="0" maxValue="4" increment="1">1: accelerometer calibration, 2: board level calibration, 3: accelerometer temperature calibration, 4: simple accelerometer calibration</param>
+        <param index="6" label="Compmot or Airspeed" minValue="0" maxValue="2" increment="1">1: APM: compass/motor interference calibration (PX4: airspeed calibration, deprecated), 2: airspeed calibration</param>
+        <param index="7" label="ESC or Baro" minValue="0" maxValue="3" increment="1">1: ESC calibration, 3: barometer temperature calibration</param>
+      </entry>
+      <entry value="242" name="MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS" hasLocation="false" isDestination="false">
+        <description>Set sensor offsets. This command will be only accepted if in pre-flight mode.</description>
+        <param index="1" label="Sensor Type" minValue="0" maxValue="6" increment="1">Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer</param>
+        <param index="2" label="X Offset">X axis offset (or generic dimension 1), in the sensor's raw units</param>
+        <param index="3" label="Y Offset">Y axis offset (or generic dimension 2), in the sensor's raw units</param>
+        <param index="4" label="Z Offset">Z axis offset (or generic dimension 3), in the sensor's raw units</param>
+        <param index="5" label="4th Dimension">Generic dimension 4, in the sensor's raw units</param>
+        <param index="6" label="5th Dimension">Generic dimension 5, in the sensor's raw units</param>
+        <param index="7" label="6th Dimension">Generic dimension 6, in the sensor's raw units</param>
+      </entry>
+      <entry value="243" name="MAV_CMD_PREFLIGHT_UAVCAN" hasLocation="false" isDestination="false">
+        <description>Trigger UAVCAN configuration (actuator ID assignment and direction mapping). Note that this maps to the legacy UAVCAN v0 function UAVCAN_ENUMERATE, which is intended to be executed just once during initial vehicle configuration (it is not a normal pre-flight command and has been poorly named).</description>
+        <param index="1" label="Actuator ID">1: Trigger actuator ID assignment and direction mapping. 0: Cancel command.</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5">Reserved</param>
+        <param index="6">Reserved</param>
+        <param index="7">Reserved</param>
+      </entry>
+      <entry value="245" name="MAV_CMD_PREFLIGHT_STORAGE" hasLocation="false" isDestination="false">
+        <description>Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.</description>
+        <param index="1" label="Parameter Storage" enum="PREFLIGHT_STORAGE_PARAMETER_ACTION">Action to perform on the persistent parameter storage</param>
+        <param index="2" label="Mission Storage" enum="PREFLIGHT_STORAGE_MISSION_ACTION">Action to perform on the persistent mission storage</param>
+        <param index="3" label="Logging Rate" units="Hz" minValue="-1" increment="1">Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, &gt; 1: logging rate (e.g. set to 1000 for 1000 Hz logging)</param>
+        <param index="4">Reserved</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="246" name="MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN" hasLocation="false" isDestination="false">
+        <description>Request the reboot or shutdown of system components.</description>
+        <param index="1" label="Autopilot" minValue="0" maxValue="3" increment="1">0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.</param>
+        <param index="2" label="Companion" minValue="0" maxValue="3" increment="1">0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.</param>
+        <param index="3" label="Component action" minValue="0" maxValue="3" increment="1">0: Do nothing for component, 1: Reboot component, 2: Shutdown component, 3: Reboot component and keep it in the bootloader until upgraded</param>
+        <param index="4" label="Component ID" minValue="0" maxValue="255" increment="1">MAVLink Component ID targeted in param3 (0 for all components).</param>
+        <param index="5">Reserved (set to 0)</param>
+        <param index="6">Reserved (set to 0)</param>
+        <param index="7">WIP: ID (e.g. camera ID -1 for all IDs)</param>
+      </entry>
+      <!-- id "247" reserved for MAV_CMD_DO_UPGRADE in development.xml -->
+      <entry value="252" name="MAV_CMD_OVERRIDE_GOTO" hasLocation="true" isDestination="true">
+        <description>Override current mission with command to pause mission, pause mission and move to position, continue/resume mission. When param 1 indicates that the mission is paused (MAV_GOTO_DO_HOLD), param 2 defines whether it holds in place or moves to another position.</description>
+        <param index="1" label="Continue" enum="MAV_GOTO">MAV_GOTO_DO_HOLD: pause mission and either hold or move to specified position (depending on param2), MAV_GOTO_DO_CONTINUE: resume mission.</param>
+        <param index="2" label="Position" enum="MAV_GOTO">MAV_GOTO_HOLD_AT_CURRENT_POSITION: hold at current position, MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position.</param>
+        <param index="3" label="Frame" enum="MAV_FRAME">Coordinate frame of hold point.</param>
+        <param index="4" label="Yaw" units="deg">Desired yaw angle.</param>
+        <param index="5" label="Latitude/X">Latitude/X position.</param>
+        <param index="6" label="Longitude/Y">Longitude/Y position.</param>
+        <param index="7" label="Altitude/Z">Altitude/Z position.</param>
+      </entry>
+      <entry value="260" name="MAV_CMD_OBLIQUE_SURVEY" hasLocation="false" isDestination="false">
+        <description>Mission command to set a Camera Auto Mount Pivoting Oblique Survey (Replaces CAM_TRIGG_DIST for this purpose). The camera is triggered each time this distance is exceeded, then the mount moves to the next position. Params 4~6 set-up the angle limits and number of positions for oblique survey, where mount-enabled vehicles automatically roll the camera between shots to emulate an oblique camera setup (providing an increased HFOV). This command can also be used to set the shutter integration time for the camera.</description>
+        <param index="1" label="Distance" units="m" minValue="0">Camera trigger distance. 0 to stop triggering.</param>
+        <param index="2" label="Shutter" units="ms" minValue="0" increment="1" default="0">Camera shutter integration time. 0 to ignore</param>
+        <param index="3" label="Min Interval" units="ms" minValue="0" maxValue="10000" increment="1" default="0">The minimum interval in which the camera is capable of taking subsequent pictures repeatedly. 0 to ignore.</param>
+        <param index="4" label="Positions" minValue="2" increment="1">Total number of roll positions at which the camera will capture photos (images captures spread evenly across the limits defined by param5).</param>
+        <param index="5" label="Roll Angle" units="deg" minValue="0" default="0">Angle limits that the camera can be rolled to left and right of center.</param>
+        <param index="6" label="Pitch Angle" units="deg" minValue="-180" maxValue="180" default="0">Fixed pitch angle that the camera will hold in oblique mode if the mount is actuated in the pitch axis.</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="300" name="MAV_CMD_MISSION_START" hasLocation="false" isDestination="false">
+        <description>start running a mission</description>
+        <param index="1" label="First Item" minValue="0" increment="1">first_item: the first mission item to run</param>
+        <param index="2" label="Last Item" minValue="0" increment="1">last_item:  the last mission item to run (after this item is run, the mission ends)</param>
+      </entry>
+      <entry value="310" name="MAV_CMD_ACTUATOR_TEST" hasLocation="false" isDestination="false">
+        <description>Actuator testing command. This is similar to MAV_CMD_DO_MOTOR_TEST but operates on the level of output functions, i.e. it is possible to test Motor1 independent from which output it is configured on. Autopilots typically refuse this command while armed.</description>
+        <param index="1" label="Value" minValue="-1" maxValue="1">Output value: 1 means maximum positive output, 0 to center servos or minimum motor thrust (expected to spin), -1 for maximum negative (if not supported by the motors, i.e. motor is not reversible, smaller than 0 maps to NaN). And NaN maps to disarmed (stop the motors).</param>
+        <param index="2" label="Timeout" units="s" minValue="0" maxValue="3">Timeout after which the test command expires and the output is restored to the previous value. A timeout has to be set for safety reasons. A timeout of 0 means to restore the previous value immediately.</param>
+        <param index="3" reserved="true" default="0"/>
+        <param index="4" reserved="true" default="0"/>
+        <param index="5" label="Output Function" enum="ACTUATOR_OUTPUT_FUNCTION">Actuator Output function</param>
+        <param index="6" reserved="true" default="0"/>
+        <param index="7" reserved="true" default="0"/>
+      </entry>
+      <entry value="311" name="MAV_CMD_CONFIGURE_ACTUATOR" hasLocation="false" isDestination="false">
+        <description>Actuator configuration command.</description>
+        <param index="1" label="Configuration" enum="ACTUATOR_CONFIGURATION">Actuator configuration action</param>
+        <param index="2" reserved="true" default="0"/>
+        <param index="3" reserved="true" default="0"/>
+        <param index="4" reserved="true" default="0"/>
+        <param index="5" label="Output Function" enum="ACTUATOR_OUTPUT_FUNCTION">Actuator Output function</param>
+        <param index="6" reserved="true" default="0"/>
+        <param index="7" reserved="true" default="0"/>
+      </entry>
+      <entry value="400" name="MAV_CMD_COMPONENT_ARM_DISARM" hasLocation="false" isDestination="false">
+        <description>Arms / Disarms a component</description>
+        <param index="1" label="Arm" minValue="0" maxValue="1" increment="1">0: disarm, 1: arm</param>
+        <param index="2" label="Force" minValue="0" maxValue="21196" increment="21196">0: arm-disarm unless prevented by safety checks (i.e. when landed), 21196: force arming/disarming (e.g. allow arming to override preflight checks and disarming in flight)</param>
+      </entry>
+      <entry value="401" name="MAV_CMD_RUN_PREARM_CHECKS" hasLocation="false" isDestination="false">
+        <description>Instructs a target system to run pre-arm checks.
+          This allows preflight checks to be run on demand, which may be useful on systems that normally run them at low rate, or which do not trigger checks when the armable state might have changed.
+          This command should return MAV_RESULT_ACCEPTED if it will run the checks.
+          The results of the checks are usually then reported in SYS_STATUS messages (this is system-specific).
+          The command should return MAV_RESULT_TEMPORARILY_REJECTED if the system is already armed.
+        </description>
+      </entry>
+      <entry value="405" name="MAV_CMD_ILLUMINATOR_ON_OFF" hasLocation="false" isDestination="false">
+        <wip/>
+        <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+        <description>Turns illuminators ON/OFF. An illuminator is a light source that is used for lighting up dark areas external to the system: e.g. a torch or searchlight (as opposed to a light source for illuminating the system itself, e.g. an indicator light).</description>
+        <param index="1" label="Enable" minValue="0" maxValue="1" increment="1">0: Illuminators OFF, 1: Illuminators ON</param>
+      </entry>
+      <entry value="410" name="MAV_CMD_GET_HOME_POSITION" hasLocation="false" isDestination="false">
+        <deprecated since="2022-04" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request the home position from the vehicle.
+	  The vehicle will ACK the command and then emit the HOME_POSITION message.</description>
+        <param index="1">Reserved</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5">Reserved</param>
+        <param index="6">Reserved</param>
+        <param index="7">Reserved</param>
+      </entry>
+      <entry value="420" name="MAV_CMD_INJECT_FAILURE">
+        <description>Inject artificial failure for testing purposes. Note that autopilots should implement an additional protection before accepting this command such as a specific param setting.</description>
+        <param index="1" label="Failure unit" enum="FAILURE_UNIT">The unit which is affected by the failure.</param>
+        <param index="2" label="Failure type" enum="FAILURE_TYPE">The type how the failure manifests itself.</param>
+        <param index="3" label="Instance">Instance affected by failure (0 to signal all).</param>
+      </entry>
+      <entry value="500" name="MAV_CMD_START_RX_PAIR" hasLocation="false" isDestination="false">
+        <description>Starts receiver pairing.</description>
+        <param index="1" label="Spektrum">0:Spektrum.</param>
+        <param index="2" label="RC Type" enum="RC_TYPE">RC type.</param>
+      </entry>
+      <entry value="510" name="MAV_CMD_GET_MESSAGE_INTERVAL" hasLocation="false" isDestination="false">
+        <deprecated since="2022-04" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>
+          Request the interval between messages for a particular MAVLink message ID.
+          The receiver should ACK the command and then emit its response in a MESSAGE_INTERVAL message.
+        </description>
+        <param index="1" label="Message ID" minValue="0" maxValue="16777215" increment="1">The MAVLink message ID</param>
+      </entry>
+      <entry value="511" name="MAV_CMD_SET_MESSAGE_INTERVAL" hasLocation="false" isDestination="false">
+        <description>Set the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM.</description>
+        <param index="1" label="Message ID" minValue="0" maxValue="16777215" increment="1">The MAVLink message ID</param>
+        <param index="2" label="Interval" units="us" minValue="-1" increment="1">The interval between two messages. -1: disable. 0: request default rate (which may be zero).</param>
+        <param index="7" label="Response Target" minValue="0" maxValue="2" increment="1">Target address of message stream (if message has target address fields). 0: Flight-stack default (recommended), 1: address of requestor, 2: broadcast.</param>
+      </entry>
+      <entry value="512" name="MAV_CMD_REQUEST_MESSAGE" hasLocation="false" isDestination="false">
+        <description>Request the target system(s) emit a single instance of a specified message (i.e. a "one-shot" version of MAV_CMD_SET_MESSAGE_INTERVAL).</description>
+        <param index="1" label="Message ID" minValue="0" maxValue="16777215" increment="1">The MAVLink message ID of the requested message.</param>
+        <param index="2" label="Req Param 1">Use for index ID, if required. Otherwise, the use of this parameter (if any) must be defined in the requested message. By default assumed not used (0).</param>
+        <param index="3" label="Req Param 2">The use of this parameter (if any), must be defined in the requested message. By default assumed not used (0).</param>
+        <param index="4" label="Req Param 3">The use of this parameter (if any), must be defined in the requested message. By default assumed not used (0).</param>
+        <param index="5" label="Req Param 4">The use of this parameter (if any), must be defined in the requested message. By default assumed not used (0).</param>
+        <param index="6" label="Req Param 5">The use of this parameter (if any), must be defined in the requested message. By default assumed not used (0).</param>
+        <param index="7" label="Response Target" minValue="0" maxValue="2" increment="1">Target address for requested message (if message has target address fields). 0: Flight-stack default, 1: address of requestor, 2: broadcast.</param>
+      </entry>
+      <entry value="519" name="MAV_CMD_REQUEST_PROTOCOL_VERSION" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request MAVLink protocol version compatibility. All receivers should ACK the command and then emit their capabilities in an PROTOCOL_VERSION message</description>
+        <param index="1" label="Protocol" minValue="0" maxValue="1" increment="1">1: Request supported protocol versions by all nodes on the network</param>
+        <param index="2">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="520" name="MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request autopilot capabilities. The receiver should ACK the command and then emit its capabilities in an AUTOPILOT_VERSION message</description>
+        <param index="1" label="Version" minValue="0" maxValue="1" increment="1">1: Request autopilot version</param>
+        <param index="2">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="521" name="MAV_CMD_REQUEST_CAMERA_INFORMATION" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request camera information (CAMERA_INFORMATION).</description>
+        <param index="1" label="Capabilities" minValue="0" maxValue="1" increment="1">0: No action 1: Request camera capabilities</param>
+        <param index="2">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="522" name="MAV_CMD_REQUEST_CAMERA_SETTINGS" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request camera settings (CAMERA_SETTINGS).</description>
+        <param index="1" label="Settings" minValue="0" maxValue="1" increment="1">0: No Action 1: Request camera settings</param>
+        <param index="2">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="525" name="MAV_CMD_REQUEST_STORAGE_INFORMATION" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request storage information (STORAGE_INFORMATION). Use the command's target_component to target a specific component's storage.</description>
+        <param index="1" label="Storage ID" minValue="0" increment="1">Storage ID (0 for all, 1 for first, 2 for second, etc.)</param>
+        <param index="2" label="Information" minValue="0" maxValue="1" increment="1">0: No Action 1: Request storage information</param>
+        <param index="3">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="526" name="MAV_CMD_STORAGE_FORMAT" hasLocation="false" isDestination="false">
+        <description>Format a storage medium. Once format is complete, a STORAGE_INFORMATION message is sent. Use the command's target_component to target a specific component's storage.</description>
+        <param index="1" label="Storage ID" minValue="0" increment="1">Storage ID (1 for first, 2 for second, etc.)</param>
+        <param index="2" label="Format" minValue="0" maxValue="1" increment="1">Format storage (and reset image log). 0: No action 1: Format storage</param>
+        <param index="3" label="Reset Image Log" minValue="0" maxValue="1" increment="1">Reset Image Log (without formatting storage medium). This will reset CAMERA_CAPTURE_STATUS.image_count and CAMERA_IMAGE_CAPTURED.image_index. 0: No action 1: Reset Image Log</param>
+        <param index="4">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="527" name="MAV_CMD_REQUEST_CAMERA_CAPTURE_STATUS" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request camera capture status (CAMERA_CAPTURE_STATUS)</description>
+        <param index="1" label="Capture Status" minValue="0" maxValue="1" increment="1">0: No Action 1: Request camera capture status</param>
+        <param index="2">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="528" name="MAV_CMD_REQUEST_FLIGHT_INFORMATION" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request flight information (FLIGHT_INFORMATION)</description>
+        <param index="1" label="Flight Information" minValue="0" maxValue="1" increment="1">1: Request flight information</param>
+        <param index="2">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="529" name="MAV_CMD_RESET_CAMERA_SETTINGS" hasLocation="false" isDestination="false">
+        <description>Reset all camera settings to Factory Default</description>
+        <param index="1" label="Reset" minValue="0" maxValue="1" increment="1">0: No Action 1: Reset all settings</param>
+        <param index="2">Reserved (all remaining params)</param>
+      </entry>
+      <entry value="530" name="MAV_CMD_SET_CAMERA_MODE" hasLocation="false" isDestination="false">
+        <description>Set camera running mode. Use NaN for reserved values. GCS will send a MAV_CMD_REQUEST_VIDEO_STREAM_STATUS command after a mode change if the camera supports video streaming.</description>
+        <param index="1">Reserved (Set to 0)</param>
+        <param index="2" label="Camera Mode" enum="CAMERA_MODE">Camera mode</param>
+        <param index="3" reserved="true" default="NaN"/>
+        <param index="4" reserved="true" default="NaN"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="531" name="MAV_CMD_SET_CAMERA_ZOOM" hasLocation="false" isDestination="false">
+        <description>Set camera zoom. Camera must respond with a CAMERA_SETTINGS message (on success).</description>
+        <param index="1" label="Zoom Type" enum="CAMERA_ZOOM_TYPE">Zoom type</param>
+        <param index="2" label="Zoom Value">Zoom value. The range of valid values depend on the zoom type.</param>
+        <param index="3" reserved="true" default="NaN"/>
+        <param index="4" reserved="true" default="NaN"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="532" name="MAV_CMD_SET_CAMERA_FOCUS" hasLocation="false" isDestination="false">
+        <description>Set camera focus. Camera must respond with a CAMERA_SETTINGS message (on success).</description>
+        <param index="1" label="Focus Type" enum="SET_FOCUS_TYPE">Focus type</param>
+        <param index="2" label="Focus Value">Focus value</param>
+        <param index="3" reserved="true" default="NaN"/>
+        <param index="4" reserved="true" default="NaN"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="533" name="MAV_CMD_SET_STORAGE_USAGE" hasLocation="false" isDestination="false">
+        <description>Set that a particular storage is the preferred location for saving photos, videos, and/or other media (e.g. to set that an SD card is used for storing videos).
+          There can only be one preferred save location for each particular media type: setting a media usage flag will clear/reset that same flag if set on any other storage.
+          If no flag is set the system should use its default storage.
+          A target system can choose to always use default storage, in which case it should ACK the command with MAV_RESULT_UNSUPPORTED.
+          A target system can choose to not allow a particular storage to be set as preferred storage, in which case it should ACK the command with MAV_RESULT_DENIED.</description>
+        <param index="1" label="Storage ID" minValue="0" increment="1">Storage ID (1 for first, 2 for second, etc.)</param>
+        <param index="2" label="Usage" enum="STORAGE_USAGE_FLAG">Usage flags</param>
+      </entry>
+      <entry value="600" name="MAV_CMD_JUMP_TAG" hasLocation="false" isDestination="false">
+        <description>Tagged jump target. Can be jumped to with MAV_CMD_DO_JUMP_TAG.</description>
+        <param index="1" label="Tag" minValue="0" increment="1">Tag.</param>
+      </entry>
+      <entry value="601" name="MAV_CMD_DO_JUMP_TAG" hasLocation="false" isDestination="false">
+        <description>Jump to the matching tag in the mission list. Repeat this action for the specified number of times. A mission should contain a single matching tag for each jump. If this is not the case then a jump to a missing tag should complete the mission, and a jump where there are multiple matching tags should always select the one with the lowest mission sequence number.</description>
+        <param index="1" label="Tag" minValue="0" increment="1">Target tag to jump to.</param>
+        <param index="2" label="Repeat" minValue="0" increment="1">Repeat count.</param>
+      </entry>
+      <!-- entry value 900 reserved for MAV_CMD_PARAM_TRANSACTION (development.xml) -->
+      <entry value="1000" name="MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW" hasLocation="false" isDestination="false">
+        <description>Set gimbal manager pitch/yaw setpoints (low rate command). It is possible to set combinations of the values below. E.g. an angle as well as a desired angular rate can be used to get to this angle at a certain angular rate, or an angular rate only will result in continuous turning. NaN is to be used to signal unset. Note: only the gimbal manager will react to this command - it will be ignored by a gimbal device. Use GIMBAL_MANAGER_SET_PITCHYAW if you need to stream pitch/yaw setpoints at higher rate. </description>
+        <param index="1" label="Pitch angle" units="deg" minValue="-180" maxValue="180">Pitch angle (positive to pitch up, relative to vehicle for FOLLOW mode, relative to world horizon for LOCK mode).</param>
+        <param index="2" label="Yaw angle" units="deg" minValue="-180" maxValue="180">Yaw angle (positive to yaw to the right, relative to vehicle for FOLLOW mode, absolute to North for LOCK mode).</param>
+        <param index="3" label="Pitch rate" units="deg/s">Pitch rate (positive to pitch up).</param>
+        <param index="4" label="Yaw rate" units="deg/s">Yaw rate (positive to yaw to the right).</param>
+        <param index="5" label="Gimbal manager flags" enum="GIMBAL_MANAGER_FLAGS">Gimbal manager flags to use.</param>
+        <param index="7" label="Gimbal device ID">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</param>
+      </entry>
+      <entry value="1001" name="MAV_CMD_DO_GIMBAL_MANAGER_CONFIGURE" hasLocation="false" isDestination="false">
+        <description>Gimbal configuration to set which sysid/compid is in primary and secondary control.</description>
+        <param index="1" label="sysid primary control">Sysid for primary control (0: no one in control, -1: leave unchanged, -2: set itself in control (for missions where the own sysid is still unknown), -3: remove control if currently in control).</param>
+        <param index="2" label="compid primary control">Compid for primary control (0: no one in control, -1: leave unchanged, -2: set itself in control (for missions where the own sysid is still unknown), -3: remove control if currently in control).</param>
+        <param index="3" label="sysid secondary control">Sysid for secondary control (0: no one in control, -1: leave unchanged, -2: set itself in control (for missions where the own sysid is still unknown), -3: remove control if currently in control).</param>
+        <param index="4" label="compid secondary control">Compid for secondary control (0: no one in control, -1: leave unchanged, -2: set itself in control (for missions where the own sysid is still unknown), -3: remove control if currently in control).</param>
+        <param index="7" label="Gimbal device ID">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</param>
+      </entry>
+      <entry value="2000" name="MAV_CMD_IMAGE_START_CAPTURE" hasLocation="false" isDestination="false">
+        <description>Start image capture sequence. CAMERA_IMAGE_CAPTURED must be emitted after each capture.
+
+          Param1 (id) may be used to specify the target camera: 0: all cameras, 1 to 6: autopilot-connected cameras, 7-255: MAVLink camera component ID.
+          It is needed in order to target specific cameras connected to the autopilot, or specific sensors in a multi-sensor camera (neither of which have a distinct MAVLink component ID).
+          It is also needed to specify the target camera in missions.
+
+          When used in a mission, an autopilot should execute the MAV_CMD for a specified local camera (param1 = 1-6), or resend it as a command if it is intended for a MAVLink camera (param1 = 7 - 255), setting the command's target_component as the param1 value (and setting param1 in the command to zero).
+          If the param1 is 0 the autopilot should do both.
+          
+          When sent in a command the target MAVLink address is set using target_component.
+          If addressed specifically to an autopilot: param1 should be used in the same way as it is for missions (though command should NACK with MAV_RESULT_DENIED if a specified local camera does not exist).
+          If addressed to a MAVLink camera, param 1 can be used to address all cameras (0), or to separately address 1 to 7 individual sensors. Other values should be NACKed with MAV_RESULT_DENIED.
+          If the command is broadcast (target_component is 0) then param 1 should be set to 0 (any other value should be NACKED with MAV_RESULT_DENIED). An autopilot would trigger any local cameras and forward the command to all channels.
+        </description>
+        <param index="1" label="id" minValue="0" maxValue="255" increment="1">Target camera ID. 7 to 255: MAVLink camera component id. 1 to 6 for cameras that don't have a distinct component id (such as autopilot-attached cameras). 0: all cameras. This is used to specifically target autopilot-connected cameras or individual sensors in a multi-sensor MAVLink camera. It is also used to target specific cameras when the MAV_CMD is used in a mission</param>
+        <param index="2" label="Interval" units="s" minValue="0">Desired elapsed time between two consecutive pictures (in seconds). Minimum values depend on hardware (typically greater than 2 seconds).</param>
+        <param index="3" label="Total Images" minValue="0" increment="1">Total number of images to capture. 0 to capture forever/until MAV_CMD_IMAGE_STOP_CAPTURE.</param>
+        <param index="4" label="Sequence Number" minValue="1" increment="1">Capture sequence number starting from 1. This is only valid for single-capture (param3 == 1), otherwise set to 0. Increment the capture ID for each capture command to prevent double captures when a command is re-transmitted.</param>
+        <param index="5" reserved="true"/>
+        <param index="6" reserved="true"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="2001" name="MAV_CMD_IMAGE_STOP_CAPTURE" hasLocation="false" isDestination="false">
+        <description>Stop image capture sequence.
+        
+          Param1 (id) may be used to specify the target camera: 0: all cameras, 1 to 6: autopilot-connected cameras, 7-255: MAVLink camera component ID.
+          It is needed in order to target specific cameras connected to the autopilot, or specific sensors in a multi-sensor camera (neither of which have a distinct MAVLink component ID).
+          It is also needed to specify the target camera in missions.
+
+          When used in a mission, an autopilot should execute the MAV_CMD for a specified local camera (param1 = 1-6), or resend it as a command if it is intended for a MAVLink camera (param1 = 7 - 255), setting the command's target_component as the param1 value (and setting param1 in the command to zero).
+          If the param1 is 0 the autopilot should do both.
+
+          When sent in a command the target MAVLink address is set using target_component.
+          If addressed specifically to an autopilot: param1 should be used in the same way as it is for missions (though command should NACK with MAV_RESULT_DENIED if a specified local camera does not exist).
+          If addressed to a MAVLink camera, param1 can be used to address all cameras (0), or to separately address 1 to 7 individual sensors. Other values should be NACKed with MAV_RESULT_DENIED.
+          If the command is broadcast (target_component is 0) then param 1 should be set to 0 (any other value should be NACKED with MAV_RESULT_DENIED). An autopilot would trigger any local cameras and forward the command to all channels.
+        </description>
+        <param index="1" label="id" minValue="0" maxValue="255" increment="1">Target camera ID. 7 to 255: MAVLink camera component id. 1 to 6 for cameras that don't have a distinct component id (such as autopilot-attached cameras). 0: all cameras. This is used to specifically target autopilot-connected cameras or individual sensors in a multi-sensor MAVLink camera. It is also used to target specific cameras when the MAV_CMD is used in a mission</param>
+        <param index="2" reserved="true" default="NaN"/>
+        <param index="3" reserved="true" default="NaN"/>
+        <param index="4" reserved="true" default="NaN"/>
+        <param index="5" reserved="true"/>
+        <param index="6" reserved="true"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="2002" name="MAV_CMD_REQUEST_CAMERA_IMAGE_CAPTURE" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Re-request a CAMERA_IMAGE_CAPTURED message.</description>
+        <param index="1" label="Number" minValue="0" increment="1">Sequence number for missing CAMERA_IMAGE_CAPTURED message</param>
+        <param index="2" reserved="true" default="NaN"/>
+        <param index="3" reserved="true" default="NaN"/>
+        <param index="4" reserved="true" default="NaN"/>
+        <param index="5" reserved="true"/>
+        <param index="6" reserved="true"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="2003" name="MAV_CMD_DO_TRIGGER_CONTROL" hasLocation="false" isDestination="false">
+        <description>Enable or disable on-board camera triggering system.</description>
+        <param index="1" label="Enable" minValue="-1" maxValue="1" increment="1">Trigger enable/disable (0 for disable, 1 for start), -1 to ignore</param>
+        <param index="2" label="Reset" minValue="-1" maxValue="1" increment="1">1 to reset the trigger sequence, -1 or 0 to ignore</param>
+        <param index="3" label="Pause" minValue="-1" maxValue="1" increment="2">1 to pause triggering, but without switching the camera off or retracting it. -1 to ignore</param>
+      </entry>
+      <entry value="2004" name="MAV_CMD_CAMERA_TRACK_POINT" hasLocation="false" isDestination="false">
+        <description>If the camera supports point visual tracking (CAMERA_CAP_FLAGS_HAS_TRACKING_POINT is set), this command allows to initiate the tracking.</description>
+        <param index="1" label="Point x" minValue="0" maxValue="1">Point to track x value (normalized 0..1, 0 is left, 1 is right).</param>
+        <param index="2" label="Point y" minValue="0" maxValue="1">Point to track y value (normalized 0..1, 0 is top, 1 is bottom).</param>
+        <param index="3" label="Radius" minValue="0" maxValue="1">Point radius (normalized 0..1, 0 is image left, 1 is image right).</param>
+      </entry>
+      <entry value="2005" name="MAV_CMD_CAMERA_TRACK_RECTANGLE" hasLocation="false" isDestination="false">
+        <description>If the camera supports rectangle visual tracking (CAMERA_CAP_FLAGS_HAS_TRACKING_RECTANGLE is set), this command allows to initiate the tracking.</description>
+        <param index="1" label="Top left corner x" minValue="0" maxValue="1">Top left corner of rectangle x value (normalized 0..1, 0 is left, 1 is right).</param>
+        <param index="2" label="Top left corner y" minValue="0" maxValue="1">Top left corner of rectangle y value (normalized 0..1, 0 is top, 1 is bottom).</param>
+        <param index="3" label="Bottom right corner x" minValue="0" maxValue="1">Bottom right corner of rectangle x value (normalized 0..1, 0 is left, 1 is right).</param>
+        <param index="4" label="Bottom right corner y" minValue="0" maxValue="1">Bottom right corner of rectangle y value (normalized 0..1, 0 is top, 1 is bottom).</param>
+      </entry>
+      <entry value="2010" name="MAV_CMD_CAMERA_STOP_TRACKING" hasLocation="false" isDestination="false">
+        <description>Stops ongoing tracking.</description>
+      </entry>
+      <entry value="2500" name="MAV_CMD_VIDEO_START_CAPTURE" hasLocation="false" isDestination="false">
+        <description>Starts video capture (recording).</description>
+        <param index="1" label="Stream ID" minValue="0" increment="1">Video Stream ID (0 for all streams)</param>
+        <param index="2" label="Status Frequency" minValue="0" units="Hz">Frequency CAMERA_CAPTURE_STATUS messages should be sent while recording (0 for no messages, otherwise frequency)</param>
+        <param index="3" reserved="true" default="NaN"/>
+        <param index="4" reserved="true" default="NaN"/>
+        <param index="5" reserved="true"/>
+        <param index="6" reserved="true"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="2501" name="MAV_CMD_VIDEO_STOP_CAPTURE" hasLocation="false" isDestination="false">
+        <description>Stop the current video capture (recording).</description>
+        <param index="1" label="Stream ID" minValue="0" increment="1">Video Stream ID (0 for all streams)</param>
+        <param index="2" reserved="true" default="NaN"/>
+        <param index="3" reserved="true" default="NaN"/>
+        <param index="4" reserved="true" default="NaN"/>
+        <param index="5" reserved="true"/>
+        <param index="6" reserved="true"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="2502" name="MAV_CMD_VIDEO_START_STREAMING" hasLocation="false" isDestination="false">
+        <description>Start video streaming</description>
+        <param index="1" label="Stream ID" minValue="0" increment="1">Video Stream ID (0 for all streams, 1 for first, 2 for second, etc.)</param>
+      </entry>
+      <entry value="2503" name="MAV_CMD_VIDEO_STOP_STREAMING" hasLocation="false" isDestination="false">
+        <description>Stop the given video stream</description>
+        <param index="1" label="Stream ID" minValue="0" increment="1">Video Stream ID (0 for all streams, 1 for first, 2 for second, etc.)</param>
+      </entry>
+      <entry value="2504" name="MAV_CMD_REQUEST_VIDEO_STREAM_INFORMATION" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request video stream information (VIDEO_STREAM_INFORMATION)</description>
+        <param index="1" label="Stream ID" minValue="0" increment="1">Video Stream ID (0 for all streams, 1 for first, 2 for second, etc.)</param>
+      </entry>
+      <entry value="2505" name="MAV_CMD_REQUEST_VIDEO_STREAM_STATUS" hasLocation="false" isDestination="false">
+        <deprecated since="2019-08" replaced_by="MAV_CMD_REQUEST_MESSAGE"/>
+        <description>Request video stream status (VIDEO_STREAM_STATUS)</description>
+        <param index="1" label="Stream ID" minValue="0" increment="1">Video Stream ID (0 for all streams, 1 for first, 2 for second, etc.)</param>
+      </entry>
+      <entry value="2510" name="MAV_CMD_LOGGING_START" hasLocation="false" isDestination="false">
+        <description>Request to start streaming logging data over MAVLink (see also LOGGING_DATA message)</description>
+        <param index="1" label="Format" minValue="0" increment="1">Format: 0: ULog</param>
+        <param index="2">Reserved (set to 0)</param>
+        <param index="3">Reserved (set to 0)</param>
+        <param index="4">Reserved (set to 0)</param>
+        <param index="5">Reserved (set to 0)</param>
+        <param index="6">Reserved (set to 0)</param>
+        <param index="7">Reserved (set to 0)</param>
+      </entry>
+      <entry value="2511" name="MAV_CMD_LOGGING_STOP" hasLocation="false" isDestination="false">
+        <description>Request to stop streaming log data over MAVLink</description>
+        <param index="1">Reserved (set to 0)</param>
+        <param index="2">Reserved (set to 0)</param>
+        <param index="3">Reserved (set to 0)</param>
+        <param index="4">Reserved (set to 0)</param>
+        <param index="5">Reserved (set to 0)</param>
+        <param index="6">Reserved (set to 0)</param>
+        <param index="7">Reserved (set to 0)</param>
+      </entry>
+      <entry value="2520" name="MAV_CMD_AIRFRAME_CONFIGURATION" hasLocation="false" isDestination="false">
+        <description/>
+        <param index="1" label="Landing Gear ID" minValue="-1" increment="1">Landing gear ID (default: 0, -1 for all)</param>
+        <param index="2" label="Landing Gear Position">Landing gear position (Down: 0, Up: 1, NaN for no change)</param>
+        <param index="3" reserved="true" default="NaN"/>
+        <param index="4" reserved="true" default="NaN"/>
+        <param index="5" reserved="true"/>
+        <param index="6" reserved="true"/>
+        <param index="7" reserved="true" default="NaN"/>
+      </entry>
+      <entry value="2600" name="MAV_CMD_CONTROL_HIGH_LATENCY" hasLocation="false" isDestination="false">
+        <description>Request to start/stop transmitting over the high latency telemetry</description>
+        <param index="1" label="Enable" minValue="0" maxValue="1" increment="1">Control transmission over high latency telemetry (0: stop, 1: start)</param>
+        <param index="2">Empty</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5">Empty</param>
+        <param index="6">Empty</param>
+        <param index="7">Empty</param>
+      </entry>
+      <entry value="2800" name="MAV_CMD_PANORAMA_CREATE" hasLocation="false" isDestination="false">
+        <description>Create a panorama at the current position</description>
+        <param index="1" label="Horizontal Angle" units="deg">Viewing angle horizontal of the panorama (+- 0.5 the total angle)</param>
+        <param index="2" label="Vertical Angle" units="deg">Viewing angle vertical of panorama.</param>
+        <param index="3" label="Horizontal Speed" units="deg/s">Speed of the horizontal rotation.</param>
+        <param index="4" label="Vertical Speed" units="deg/s">Speed of the vertical rotation.</param>
+      </entry>
+      <entry value="3000" name="MAV_CMD_DO_VTOL_TRANSITION" hasLocation="false" isDestination="false">
+        <description>Request VTOL transition</description>
+        <param index="1" label="State" enum="MAV_VTOL_STATE">The target VTOL state. For normal transitions, only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.</param>
+        <param index="2" label="Immediate">Force immediate transition to the specified MAV_VTOL_STATE. 1: Force immediate, 0: normal transition. Can be used, for example, to trigger an emergency "Quadchute". Caution: Can be dangerous/damage vehicle, depending on autopilot implementation of this command.</param>
+      </entry>
+      <entry value="3001" name="MAV_CMD_ARM_AUTHORIZATION_REQUEST" hasLocation="false" isDestination="false">
+        <description>Request authorization to arm the vehicle to a external entity, the arm authorizer is responsible to request all data that is needs from the vehicle before authorize or deny the request.
+		If approved the COMMAND_ACK message progress field should be set with period of time that this authorization is valid in seconds.
+		If the authorization is denied COMMAND_ACK.result_param2 should be set with one of the reasons in ARM_AUTH_DENIED_REASON.
+        </description>
+        <param index="1" label="System ID" minValue="0" maxValue="255" increment="1">Vehicle system id, this way ground station can request arm authorization on behalf of any vehicle</param>
+      </entry>
+      <entry value="4000" name="MAV_CMD_SET_GUIDED_SUBMODE_STANDARD" hasLocation="false" isDestination="false">
+        <description>This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocities along all three axes.
+                  </description>
+      </entry>
+      <entry value="4001" name="MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE" hasLocation="true" isDestination="false">
+        <description>This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position.
+                  </description>
+        <param index="1" label="Radius" units="m">Radius of desired circle in CIRCLE_MODE</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude" units="degE7">Target latitude of center of circle in CIRCLE_MODE</param>
+        <param index="6" label="Longitude" units="degE7">Target longitude of center of circle in CIRCLE_MODE</param>
+      </entry>
+      <entry value="4501" name="MAV_CMD_CONDITION_GATE" hasLocation="true" isDestination="true">
+        <wip/>
+        <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+        <description>Delay mission state machine until gate has been reached.</description>
+        <param index="1" label="Geometry" minValue="0" increment="1">Geometry: 0: orthogonal to path between previous and next waypoint.</param>
+        <param index="2" label="UseAltitude" minValue="0" maxValue="1" increment="1">Altitude: 0: ignore altitude</param>
+        <param index="3">Empty</param>
+        <param index="4">Empty</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="5000" name="MAV_CMD_NAV_FENCE_RETURN_POINT" hasLocation="true" isDestination="true">
+        <description>Fence return point (there can only be one such point in a geofence definition). If rally points are supported they should be used instead.</description>
+        <param index="1">Reserved</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <entry value="5001" name="MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION" hasLocation="true" isDestination="false">
+        <description>Fence vertex for an inclusion polygon (the polygon must not be self-intersecting). The vehicle must stay within this area. Minimum of 3 vertices required.
+        </description>
+        <param index="1" label="Vertex Count" minValue="3" increment="1">Polygon vertex count</param>
+        <param index="2" label="Inclusion Group" minValue="0" increment="1">Vehicle must be inside ALL inclusion zones in a single group, vehicle must be inside at least one group, must be the same for all points in each polygon</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7">Reserved</param>
+      </entry>
+      <entry value="5002" name="MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION" hasLocation="true" isDestination="false">
+        <description>Fence vertex for an exclusion polygon (the polygon must not be self-intersecting). The vehicle must stay outside this area. Minimum of 3 vertices required.
+        </description>
+        <param index="1" label="Vertex Count" minValue="3" increment="1">Polygon vertex count</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7">Reserved</param>
+      </entry>
+      <entry value="5003" name="MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION" hasLocation="true" isDestination="false">
+        <description>Circular fence area. The vehicle must stay inside this area.
+        </description>
+        <param index="1" label="Radius" units="m">Radius.</param>
+        <param index="2" label="Inclusion Group" minValue="0" increment="1">Vehicle must be inside ALL inclusion zones in a single group, vehicle must be inside at least one group</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7">Reserved</param>
+      </entry>
+      <entry value="5004" name="MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION" hasLocation="true" isDestination="false">
+        <description>Circular fence area. The vehicle must stay outside this area.
+        </description>
+        <param index="1" label="Radius" units="m">Radius.</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7">Reserved</param>
+      </entry>
+      <!-- value 5010 reserved for MAV_CMD_SET_FENCE_BREACH_ACTION (see development.xml). -->
+      <entry value="5100" name="MAV_CMD_NAV_RALLY_POINT" hasLocation="true" isDestination="false">
+        <description>Rally point. You can have multiple rally points defined.
+        </description>
+        <param index="1">Reserved</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude</param>
+      </entry>
+      <!-- Values in the range [5200, 5210) should be reserved for UAVCAN.  -->
+      <!-- BEGIN UAVCAN range -->
+      <entry value="5200" name="MAV_CMD_UAVCAN_GET_NODE_INFO" hasLocation="false" isDestination="false">
+        <description>Commands the vehicle to respond with a sequence of messages UAVCAN_NODE_INFO, one message per every UAVCAN node that is online. Note that some of the response messages can be lost, which the receiver can detect easily by checking whether every received UAVCAN_NODE_STATUS has a matching message UAVCAN_NODE_INFO received earlier; if not, this command should be sent again in order to request re-transmission of the node information messages.</description>
+        <param index="1">Reserved (set to 0)</param>
+        <param index="2">Reserved (set to 0)</param>
+        <param index="3">Reserved (set to 0)</param>
+        <param index="4">Reserved (set to 0)</param>
+        <param index="5">Reserved (set to 0)</param>
+        <param index="6">Reserved (set to 0)</param>
+        <param index="7">Reserved (set to 0)</param>
+      </entry>
+      <!-- END of UAVCAN range -->
+      <entry value="10001" name="MAV_CMD_DO_ADSB_OUT_IDENT" hasLocation="false" isDestination="false">
+        <description>Trigger the start of an ADSB-out IDENT. This should only be used when requested to do so by an Air Traffic Controller in controlled airspace. This starts the IDENT which is then typically held for 18 seconds by the hardware per the Mode A, C, and S transponder spec.</description>
+        <param index="1">Reserved (set to 0)</param>
+        <param index="2">Reserved (set to 0)</param>
+        <param index="3">Reserved (set to 0)</param>
+        <param index="4">Reserved (set to 0)</param>
+        <param index="5">Reserved (set to 0)</param>
+        <param index="6">Reserved (set to 0)</param>
+        <param index="7">Reserved (set to 0)</param>
+      </entry>
+      <!-- VALUES FROM 0-40000 are reserved for the common message set. Values from 40000 to UINT16_MAX are available for dialects -->
+      <!-- BEGIN of payload range (30000 to 30999) -->
+      <entry value="30001" name="MAV_CMD_PAYLOAD_PREPARE_DEPLOY" hasLocation="true" isDestination="true">
+        <deprecated since="2021-06" replaced_by=""/>
+        <description>Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.</description>
+        <param index="1" label="Operation Mode" minValue="0" maxValue="2" increment="1">Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.</param>
+        <param index="2" label="Approach Vector" units="deg" minValue="-1" maxValue="360">Desired approach vector in compass heading. A negative value indicates the system can define the approach vector at will.</param>
+        <param index="3" label="Ground Speed" minValue="-1">Desired ground speed at release time. This can be overridden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.</param>
+        <param index="4" label="Altitude Clearance" units="m" minValue="-1">Minimum altitude clearance to the release position. A negative value indicates the system can define the clearance at will.</param>
+        <param index="5" label="Latitude" units="degE7">Latitude.</param>
+        <param index="6" label="Longitude" units="degE7">Longitude.</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="30002" name="MAV_CMD_PAYLOAD_CONTROL_DEPLOY" hasLocation="false" isDestination="false">
+        <deprecated since="2021-06" replaced_by=""/>
+        <description>Control the payload deployment.</description>
+        <param index="1" label="Operation Mode" minValue="0" maxValue="101" increment="1">Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deployment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.</param>
+        <param index="2">Reserved</param>
+        <param index="3">Reserved</param>
+        <param index="4">Reserved</param>
+        <param index="5">Reserved</param>
+        <param index="6">Reserved</param>
+        <param index="7">Reserved</param>
+      </entry>
+      <!-- from ardupilotmega.xml (hence ID is in that range) -->
+      <entry value="42006" name="MAV_CMD_FIXED_MAG_CAL_YAW">
+        <description>Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location.</description>
+        <param index="1" label="Yaw" units="deg">Yaw of vehicle in earth frame.</param>
+        <param index="2" label="CompassMask">CompassMask, 0 for all.</param>
+        <param index="3" label="Latitude" units="deg">Latitude.</param>
+        <param index="4" label="Longitude" units="deg">Longitude.</param>
+        <param index="5">Empty.</param>
+        <param index="6">Empty.</param>
+        <param index="7">Empty.</param>
+      </entry>
+      <entry value="42600" name="MAV_CMD_DO_WINCH" hasLocation="false" isDestination="false">
+        <description>Command to operate winch.</description>
+        <param index="1" label="Instance" minValue="1" increment="1">Winch instance number.</param>
+        <param index="2" label="Action" enum="WINCH_ACTIONS">Action to perform.</param>
+        <param index="3" label="Length" units="m">Length of line to release (negative to wind).</param>
+        <param index="4" label="Rate" units="m/s">Release rate (negative to wind).</param>
+        <param index="5">Empty.</param>
+        <param index="6">Empty.</param>
+        <param index="7">Empty.</param>
+      </entry>
+      <!-- from ardupilotmega.xml (hence ID is in that range) -->
+      <entry value="43003" name="MAV_CMD_EXTERNAL_POSITION_ESTIMATE" hasLocation="true" isDestination="false">
+        <description>Provide an external position estimate for use when dead-reckoning. This is meant to be used for occasional position resets that may be provided by a external system such as a remote pilot using landmarks over a video link.</description>
+        <param index="1" label="transmission_time" units="s">Timestamp that this message was sent as a time in the transmitters time domain. The sender should wrap this time back to zero based on required timing accuracy for the application and the limitations of a 32 bit float. For example, wrapping at 10 hours would give approximately 1ms accuracy. Recipient must handle time wrap in any timing jitter correction applied to this field. Wrap rollover time should not be at not more than 250 seconds, which would give approximately 10 microsecond accuracy.</param>
+        <param index="2" label="processing_time" units="s">The time spent in processing the sensor data that is the basis for this position. The recipient can use this to improve time alignment of the data. Set to zero if not known.</param>
+        <param index="3" label="accuracy">estimated one standard deviation accuracy of the measurement. Set to NaN if not known.</param>
+        <param index="4">Empty</param>
+        <param index="5" label="Latitude">Latitude</param>
+        <param index="6" label="Longitude">Longitude</param>
+        <param index="7" label="Altitude" units="m">Altitude, not used. Should be sent as NaN. May be supported in a future version of this message.</param>
+      </entry>
+      <!-- END of payload range (30000 to 30999) -->
+      <!-- BEGIN user defined range (31000 to 31999) -->
+      <entry value="31000" name="MAV_CMD_WAYPOINT_USER_1" hasLocation="true" isDestination="true">
+        <description>User defined waypoint item. Ground Station will show the Vehicle as flying through this item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31001" name="MAV_CMD_WAYPOINT_USER_2" hasLocation="true" isDestination="true">
+        <description>User defined waypoint item. Ground Station will show the Vehicle as flying through this item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31002" name="MAV_CMD_WAYPOINT_USER_3" hasLocation="true" isDestination="true">
+        <description>User defined waypoint item. Ground Station will show the Vehicle as flying through this item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31003" name="MAV_CMD_WAYPOINT_USER_4" hasLocation="true" isDestination="true">
+        <description>User defined waypoint item. Ground Station will show the Vehicle as flying through this item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31004" name="MAV_CMD_WAYPOINT_USER_5" hasLocation="true" isDestination="true">
+        <description>User defined waypoint item. Ground Station will show the Vehicle as flying through this item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31005" name="MAV_CMD_SPATIAL_USER_1" hasLocation="true" isDestination="false">
+        <description>User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31006" name="MAV_CMD_SPATIAL_USER_2" hasLocation="true" isDestination="false">
+        <description>User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31007" name="MAV_CMD_SPATIAL_USER_3" hasLocation="true" isDestination="false">
+        <description>User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31008" name="MAV_CMD_SPATIAL_USER_4" hasLocation="true" isDestination="false">
+        <description>User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31009" name="MAV_CMD_SPATIAL_USER_5" hasLocation="true" isDestination="false">
+        <description>User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5" label="Latitude">Latitude unscaled</param>
+        <param index="6" label="Longitude">Longitude unscaled</param>
+        <param index="7" label="Altitude" units="m">Altitude (MSL)</param>
+      </entry>
+      <entry value="31010" name="MAV_CMD_USER_1" hasLocation="false" isDestination="false">
+        <description>User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5">User defined</param>
+        <param index="6">User defined</param>
+        <param index="7">User defined</param>
+      </entry>
+      <entry value="31011" name="MAV_CMD_USER_2" hasLocation="false" isDestination="false">
+        <description>User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5">User defined</param>
+        <param index="6">User defined</param>
+        <param index="7">User defined</param>
+      </entry>
+      <entry value="31012" name="MAV_CMD_USER_3" hasLocation="false" isDestination="false">
+        <description>User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5">User defined</param>
+        <param index="6">User defined</param>
+        <param index="7">User defined</param>
+      </entry>
+      <entry value="31013" name="MAV_CMD_USER_4" hasLocation="false" isDestination="false">
+        <description>User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5">User defined</param>
+        <param index="6">User defined</param>
+        <param index="7">User defined</param>
+      </entry>
+      <entry value="31014" name="MAV_CMD_USER_5" hasLocation="false" isDestination="false">
+        <description>User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.</description>
+        <param index="1">User defined</param>
+        <param index="2">User defined</param>
+        <param index="3">User defined</param>
+        <param index="4">User defined</param>
+        <param index="5">User defined</param>
+        <param index="6">User defined</param>
+        <param index="7">User defined</param>
+      </entry>
+      <!-- END of user range (31000 to 31999) -->
+      <entry value="32000" name="MAV_CMD_CAN_FORWARD" hasLocation="false" isDestination="false">
+        <description>Request forwarding of CAN packets from the given CAN bus to this component. CAN Frames are sent using CAN_FRAME and CANFD_FRAME messages</description>
+        <param index="1" label="bus">Bus number (0 to disable forwarding, 1 for first bus, 2 for 2nd bus, 3 for 3rd bus).</param>
+        <param index="2">Empty.</param>
+        <param index="3">Empty.</param>
+        <param index="4">Empty.</param>
+        <param index="5">Empty.</param>
+        <param index="6">Empty.</param>
+        <param index="7">Empty.</param>
+      </entry>
+    </enum>
+    <enum name="MAV_DATA_STREAM">
+      <deprecated since="2015-06" replaced_by="MESSAGE_INTERVAL"/>
+      <description>A data stream is not a fixed set of messages, but rather a
+     recommendation to the autopilot software. Individual autopilots may or may not obey
+     the recommended messages.</description>
+      <entry value="0" name="MAV_DATA_STREAM_ALL">
+        <description>Enable all data streams</description>
+      </entry>
+      <entry value="1" name="MAV_DATA_STREAM_RAW_SENSORS">
+        <description>Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.</description>
+      </entry>
+      <entry value="2" name="MAV_DATA_STREAM_EXTENDED_STATUS">
+        <description>Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS</description>
+      </entry>
+      <entry value="3" name="MAV_DATA_STREAM_RC_CHANNELS">
+        <description>Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW</description>
+      </entry>
+      <entry value="4" name="MAV_DATA_STREAM_RAW_CONTROLLER">
+        <description>Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.</description>
+      </entry>
+      <entry value="6" name="MAV_DATA_STREAM_POSITION">
+        <description>Enable LOCAL_POSITION, GLOBAL_POSITION_INT messages.</description>
+      </entry>
+      <entry value="10" name="MAV_DATA_STREAM_EXTRA1">
+        <description>Dependent on the autopilot</description>
+      </entry>
+      <entry value="11" name="MAV_DATA_STREAM_EXTRA2">
+        <description>Dependent on the autopilot</description>
+      </entry>
+      <entry value="12" name="MAV_DATA_STREAM_EXTRA3">
+        <description>Dependent on the autopilot</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ROI">
+      <deprecated since="2018-01" replaced_by="MAV_CMD_DO_SET_ROI_*"/>
+      <description>The ROI (region of interest) for the vehicle. This can be
+                be used by the vehicle for camera/vehicle attitude alignment (see
+                MAV_CMD_NAV_ROI).</description>
+      <entry value="0" name="MAV_ROI_NONE">
+        <description>No region of interest.</description>
+      </entry>
+      <entry value="1" name="MAV_ROI_WPNEXT">
+        <description>Point toward next waypoint, with optional pitch/roll/yaw offset.</description>
+      </entry>
+      <entry value="2" name="MAV_ROI_WPINDEX">
+        <description>Point toward given waypoint.</description>
+      </entry>
+      <entry value="3" name="MAV_ROI_LOCATION">
+        <description>Point toward fixed location.</description>
+      </entry>
+      <entry value="4" name="MAV_ROI_TARGET">
+        <description>Point toward of given id.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_PARAM_TYPE">
+      <description>Specifies the datatype of a MAVLink parameter.</description>
+      <entry value="1" name="MAV_PARAM_TYPE_UINT8">
+        <description>8-bit unsigned integer</description>
+      </entry>
+      <entry value="2" name="MAV_PARAM_TYPE_INT8">
+        <description>8-bit signed integer</description>
+      </entry>
+      <entry value="3" name="MAV_PARAM_TYPE_UINT16">
+        <description>16-bit unsigned integer</description>
+      </entry>
+      <entry value="4" name="MAV_PARAM_TYPE_INT16">
+        <description>16-bit signed integer</description>
+      </entry>
+      <entry value="5" name="MAV_PARAM_TYPE_UINT32">
+        <description>32-bit unsigned integer</description>
+      </entry>
+      <entry value="6" name="MAV_PARAM_TYPE_INT32">
+        <description>32-bit signed integer</description>
+      </entry>
+      <entry value="7" name="MAV_PARAM_TYPE_UINT64">
+        <description>64-bit unsigned integer</description>
+      </entry>
+      <entry value="8" name="MAV_PARAM_TYPE_INT64">
+        <description>64-bit signed integer</description>
+      </entry>
+      <entry value="9" name="MAV_PARAM_TYPE_REAL32">
+        <description>32-bit floating-point</description>
+      </entry>
+      <entry value="10" name="MAV_PARAM_TYPE_REAL64">
+        <description>64-bit floating-point</description>
+      </entry>
+    </enum>
+    <enum name="MAV_PARAM_EXT_TYPE">
+      <description>Specifies the datatype of a MAVLink extended parameter.</description>
+      <entry value="1" name="MAV_PARAM_EXT_TYPE_UINT8">
+        <description>8-bit unsigned integer</description>
+      </entry>
+      <entry value="2" name="MAV_PARAM_EXT_TYPE_INT8">
+        <description>8-bit signed integer</description>
+      </entry>
+      <entry value="3" name="MAV_PARAM_EXT_TYPE_UINT16">
+        <description>16-bit unsigned integer</description>
+      </entry>
+      <entry value="4" name="MAV_PARAM_EXT_TYPE_INT16">
+        <description>16-bit signed integer</description>
+      </entry>
+      <entry value="5" name="MAV_PARAM_EXT_TYPE_UINT32">
+        <description>32-bit unsigned integer</description>
+      </entry>
+      <entry value="6" name="MAV_PARAM_EXT_TYPE_INT32">
+        <description>32-bit signed integer</description>
+      </entry>
+      <entry value="7" name="MAV_PARAM_EXT_TYPE_UINT64">
+        <description>64-bit unsigned integer</description>
+      </entry>
+      <entry value="8" name="MAV_PARAM_EXT_TYPE_INT64">
+        <description>64-bit signed integer</description>
+      </entry>
+      <entry value="9" name="MAV_PARAM_EXT_TYPE_REAL32">
+        <description>32-bit floating-point</description>
+      </entry>
+      <entry value="10" name="MAV_PARAM_EXT_TYPE_REAL64">
+        <description>64-bit floating-point</description>
+      </entry>
+      <entry value="11" name="MAV_PARAM_EXT_TYPE_CUSTOM">
+        <description>Custom Type</description>
+      </entry>
+    </enum>
+    <enum name="MAV_RESULT">
+      <description>Result from a MAVLink command (MAV_CMD)</description>
+      <entry value="0" name="MAV_RESULT_ACCEPTED">
+        <description>Command is valid (is supported and has valid parameters), and was executed.</description>
+      </entry>
+      <entry value="1" name="MAV_RESULT_TEMPORARILY_REJECTED">
+        <description>Command is valid, but cannot be executed at this time. This is used to indicate a problem that should be fixed just by waiting (e.g. a state machine is busy, can't arm because have not got GPS lock, etc.). Retrying later should work.</description>
+      </entry>
+      <entry value="2" name="MAV_RESULT_DENIED">
+        <description>Command is invalid (is supported but has invalid parameters). Retrying same command and parameters will not work.</description>
+      </entry>
+      <entry value="3" name="MAV_RESULT_UNSUPPORTED">
+        <description>Command is not supported (unknown).</description>
+      </entry>
+      <entry value="4" name="MAV_RESULT_FAILED">
+        <description>Command is valid, but execution has failed. This is used to indicate any non-temporary or unexpected problem, i.e. any problem that must be fixed before the command can succeed/be retried. For example, attempting to write a file when out of memory, attempting to arm when sensors are not calibrated, etc.</description>
+      </entry>
+      <entry value="5" name="MAV_RESULT_IN_PROGRESS">
+        <description>Command is valid and is being executed. This will be followed by further progress updates, i.e. the component may send further COMMAND_ACK messages with result MAV_RESULT_IN_PROGRESS (at a rate decided by the implementation), and must terminate by sending a COMMAND_ACK message with final result of the operation. The COMMAND_ACK.progress field can be used to indicate the progress of the operation.</description>
+      </entry>
+      <entry value="6" name="MAV_RESULT_CANCELLED">
+        <description>Command has been cancelled (as a result of receiving a COMMAND_CANCEL message).</description>
+      </entry>
+      <entry value="7" name="MAV_RESULT_COMMAND_LONG_ONLY">
+        <description>Command is only accepted when sent as a COMMAND_LONG.</description>
+      </entry>
+      <entry value="8" name="MAV_RESULT_COMMAND_INT_ONLY">
+        <description>Command is only accepted when sent as a COMMAND_INT.</description>
+      </entry>
+      <entry value="9" name="MAV_RESULT_COMMAND_UNSUPPORTED_MAV_FRAME">
+        <description>Command is invalid because a frame is required and the specified frame is not supported.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_MISSION_RESULT">
+      <description>Result of mission operation (in a MISSION_ACK message).</description>
+      <entry value="0" name="MAV_MISSION_ACCEPTED">
+        <description>mission accepted OK</description>
+      </entry>
+      <entry value="1" name="MAV_MISSION_ERROR">
+        <description>Generic error / not accepting mission commands at all right now.</description>
+      </entry>
+      <entry value="2" name="MAV_MISSION_UNSUPPORTED_FRAME">
+        <description>Coordinate frame is not supported.</description>
+      </entry>
+      <entry value="3" name="MAV_MISSION_UNSUPPORTED">
+        <description>Command is not supported.</description>
+      </entry>
+      <entry value="4" name="MAV_MISSION_NO_SPACE">
+        <description>Mission items exceed storage space.</description>
+      </entry>
+      <entry value="5" name="MAV_MISSION_INVALID">
+        <description>One of the parameters has an invalid value.</description>
+      </entry>
+      <entry value="6" name="MAV_MISSION_INVALID_PARAM1">
+        <description>param1 has an invalid value.</description>
+      </entry>
+      <entry value="7" name="MAV_MISSION_INVALID_PARAM2">
+        <description>param2 has an invalid value.</description>
+      </entry>
+      <entry value="8" name="MAV_MISSION_INVALID_PARAM3">
+        <description>param3 has an invalid value.</description>
+      </entry>
+      <entry value="9" name="MAV_MISSION_INVALID_PARAM4">
+        <description>param4 has an invalid value.</description>
+      </entry>
+      <entry value="10" name="MAV_MISSION_INVALID_PARAM5_X">
+        <description>x / param5 has an invalid value.</description>
+      </entry>
+      <entry value="11" name="MAV_MISSION_INVALID_PARAM6_Y">
+        <description>y / param6 has an invalid value.</description>
+      </entry>
+      <entry value="12" name="MAV_MISSION_INVALID_PARAM7">
+        <description>z / param7 has an invalid value.</description>
+      </entry>
+      <entry value="13" name="MAV_MISSION_INVALID_SEQUENCE">
+        <description>Mission item received out of sequence</description>
+      </entry>
+      <entry value="14" name="MAV_MISSION_DENIED">
+        <description>Not accepting any mission commands from this communication partner.</description>
+      </entry>
+      <entry value="15" name="MAV_MISSION_OPERATION_CANCELLED">
+        <description>Current mission operation cancelled (e.g. mission upload, mission download).</description>
+      </entry>
+    </enum>
+    <enum name="MAV_SEVERITY">
+      <description>Indicates the severity level, generally used for status messages to indicate their relative urgency. Based on RFC-5424 using expanded definitions at: http://www.kiwisyslog.com/kb/info:-syslog-message-levels/.</description>
+      <entry value="0" name="MAV_SEVERITY_EMERGENCY">
+        <description>System is unusable. This is a "panic" condition.</description>
+      </entry>
+      <entry value="1" name="MAV_SEVERITY_ALERT">
+        <description>Action should be taken immediately. Indicates error in non-critical systems.</description>
+      </entry>
+      <entry value="2" name="MAV_SEVERITY_CRITICAL">
+        <description>Action must be taken immediately. Indicates failure in a primary system.</description>
+      </entry>
+      <entry value="3" name="MAV_SEVERITY_ERROR">
+        <description>Indicates an error in secondary/redundant systems.</description>
+      </entry>
+      <entry value="4" name="MAV_SEVERITY_WARNING">
+        <description>Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.</description>
+      </entry>
+      <entry value="5" name="MAV_SEVERITY_NOTICE">
+        <description>An unusual event has occurred, though not an error condition. This should be investigated for the root cause.</description>
+      </entry>
+      <entry value="6" name="MAV_SEVERITY_INFO">
+        <description>Normal operational messages. Useful for logging. No action is required for these messages.</description>
+      </entry>
+      <entry value="7" name="MAV_SEVERITY_DEBUG">
+        <description>Useful non-operational messages that can assist in debugging. These should not occur during normal operation.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_POWER_STATUS" bitmask="true">
+      <description>Power supply status flags (bitmask)</description>
+      <entry value="1" name="MAV_POWER_STATUS_BRICK_VALID">
+        <description>main brick power supply valid</description>
+      </entry>
+      <entry value="2" name="MAV_POWER_STATUS_SERVO_VALID">
+        <description>main servo power supply valid for FMU</description>
+      </entry>
+      <entry value="4" name="MAV_POWER_STATUS_USB_CONNECTED">
+        <description>USB power is connected</description>
+      </entry>
+      <entry value="8" name="MAV_POWER_STATUS_PERIPH_OVERCURRENT">
+        <description>peripheral supply is in over-current state</description>
+      </entry>
+      <entry value="16" name="MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT">
+        <description>hi-power peripheral supply is in over-current state</description>
+      </entry>
+      <entry value="32" name="MAV_POWER_STATUS_CHANGED">
+        <description>Power status has changed since boot</description>
+      </entry>
+    </enum>
+    <enum name="SERIAL_CONTROL_DEV">
+      <description>SERIAL_CONTROL device types</description>
+      <entry value="0" name="SERIAL_CONTROL_DEV_TELEM1">
+        <description>First telemetry port</description>
+      </entry>
+      <entry value="1" name="SERIAL_CONTROL_DEV_TELEM2">
+        <description>Second telemetry port</description>
+      </entry>
+      <entry value="2" name="SERIAL_CONTROL_DEV_GPS1">
+        <description>First GPS port</description>
+      </entry>
+      <entry value="3" name="SERIAL_CONTROL_DEV_GPS2">
+        <description>Second GPS port</description>
+      </entry>
+      <entry value="10" name="SERIAL_CONTROL_DEV_SHELL">
+        <description>system shell</description>
+      </entry>
+      <entry value="100" name="SERIAL_CONTROL_SERIAL0">
+        <description>SERIAL0</description>
+      </entry>
+      <entry value="101" name="SERIAL_CONTROL_SERIAL1">
+        <description>SERIAL1</description>
+      </entry>
+      <entry value="102" name="SERIAL_CONTROL_SERIAL2">
+        <description>SERIAL2</description>
+      </entry>
+      <entry value="103" name="SERIAL_CONTROL_SERIAL3">
+        <description>SERIAL3</description>
+      </entry>
+      <entry value="104" name="SERIAL_CONTROL_SERIAL4">
+        <description>SERIAL4</description>
+      </entry>
+      <entry value="105" name="SERIAL_CONTROL_SERIAL5">
+        <description>SERIAL5</description>
+      </entry>
+      <entry value="106" name="SERIAL_CONTROL_SERIAL6">
+        <description>SERIAL6</description>
+      </entry>
+      <entry value="107" name="SERIAL_CONTROL_SERIAL7">
+        <description>SERIAL7</description>
+      </entry>
+      <entry value="108" name="SERIAL_CONTROL_SERIAL8">
+        <description>SERIAL8</description>
+      </entry>
+      <entry value="109" name="SERIAL_CONTROL_SERIAL9">
+        <description>SERIAL9</description>
+      </entry>
+    </enum>
+    <enum name="SERIAL_CONTROL_FLAG" bitmask="true">
+      <description>SERIAL_CONTROL flags (bitmask)</description>
+      <entry value="1" name="SERIAL_CONTROL_FLAG_REPLY">
+        <description>Set if this is a reply</description>
+      </entry>
+      <entry value="2" name="SERIAL_CONTROL_FLAG_RESPOND">
+        <description>Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message</description>
+      </entry>
+      <entry value="4" name="SERIAL_CONTROL_FLAG_EXCLUSIVE">
+        <description>Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set</description>
+      </entry>
+      <entry value="8" name="SERIAL_CONTROL_FLAG_BLOCKING">
+        <description>Block on writes to the serial port</description>
+      </entry>
+      <entry value="16" name="SERIAL_CONTROL_FLAG_MULTI">
+        <description>Send multiple replies until port is drained</description>
+      </entry>
+    </enum>
+    <enum name="MAV_DISTANCE_SENSOR">
+      <description>Enumeration of distance sensor types</description>
+      <entry value="0" name="MAV_DISTANCE_SENSOR_LASER">
+        <description>Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units</description>
+      </entry>
+      <entry value="1" name="MAV_DISTANCE_SENSOR_ULTRASOUND">
+        <description>Ultrasound rangefinder, e.g. MaxBotix units</description>
+      </entry>
+      <entry value="2" name="MAV_DISTANCE_SENSOR_INFRARED">
+        <description>Infrared rangefinder, e.g. Sharp units</description>
+      </entry>
+      <entry value="3" name="MAV_DISTANCE_SENSOR_RADAR">
+        <description>Radar type, e.g. uLanding units</description>
+      </entry>
+      <entry value="4" name="MAV_DISTANCE_SENSOR_UNKNOWN">
+        <description>Broken or unknown type, e.g. analog units</description>
+      </entry>
+    </enum>
+    <enum name="MAV_SENSOR_ORIENTATION">
+      <description>Enumeration of sensor orientation, according to its rotations</description>
+      <entry value="0" name="MAV_SENSOR_ROTATION_NONE">
+        <description>Roll: 0, Pitch: 0, Yaw: 0</description>
+      </entry>
+      <entry value="1" name="MAV_SENSOR_ROTATION_YAW_45">
+        <description>Roll: 0, Pitch: 0, Yaw: 45</description>
+      </entry>
+      <entry value="2" name="MAV_SENSOR_ROTATION_YAW_90">
+        <description>Roll: 0, Pitch: 0, Yaw: 90</description>
+      </entry>
+      <entry value="3" name="MAV_SENSOR_ROTATION_YAW_135">
+        <description>Roll: 0, Pitch: 0, Yaw: 135</description>
+      </entry>
+      <entry value="4" name="MAV_SENSOR_ROTATION_YAW_180">
+        <description>Roll: 0, Pitch: 0, Yaw: 180</description>
+      </entry>
+      <entry value="5" name="MAV_SENSOR_ROTATION_YAW_225">
+        <description>Roll: 0, Pitch: 0, Yaw: 225</description>
+      </entry>
+      <entry value="6" name="MAV_SENSOR_ROTATION_YAW_270">
+        <description>Roll: 0, Pitch: 0, Yaw: 270</description>
+      </entry>
+      <entry value="7" name="MAV_SENSOR_ROTATION_YAW_315">
+        <description>Roll: 0, Pitch: 0, Yaw: 315</description>
+      </entry>
+      <entry value="8" name="MAV_SENSOR_ROTATION_ROLL_180">
+        <description>Roll: 180, Pitch: 0, Yaw: 0</description>
+      </entry>
+      <entry value="9" name="MAV_SENSOR_ROTATION_ROLL_180_YAW_45">
+        <description>Roll: 180, Pitch: 0, Yaw: 45</description>
+      </entry>
+      <entry value="10" name="MAV_SENSOR_ROTATION_ROLL_180_YAW_90">
+        <description>Roll: 180, Pitch: 0, Yaw: 90</description>
+      </entry>
+      <entry value="11" name="MAV_SENSOR_ROTATION_ROLL_180_YAW_135">
+        <description>Roll: 180, Pitch: 0, Yaw: 135</description>
+      </entry>
+      <entry value="12" name="MAV_SENSOR_ROTATION_PITCH_180">
+        <description>Roll: 0, Pitch: 180, Yaw: 0</description>
+      </entry>
+      <entry value="13" name="MAV_SENSOR_ROTATION_ROLL_180_YAW_225">
+        <description>Roll: 180, Pitch: 0, Yaw: 225</description>
+      </entry>
+      <entry value="14" name="MAV_SENSOR_ROTATION_ROLL_180_YAW_270">
+        <description>Roll: 180, Pitch: 0, Yaw: 270</description>
+      </entry>
+      <entry value="15" name="MAV_SENSOR_ROTATION_ROLL_180_YAW_315">
+        <description>Roll: 180, Pitch: 0, Yaw: 315</description>
+      </entry>
+      <entry value="16" name="MAV_SENSOR_ROTATION_ROLL_90">
+        <description>Roll: 90, Pitch: 0, Yaw: 0</description>
+      </entry>
+      <entry value="17" name="MAV_SENSOR_ROTATION_ROLL_90_YAW_45">
+        <description>Roll: 90, Pitch: 0, Yaw: 45</description>
+      </entry>
+      <entry value="18" name="MAV_SENSOR_ROTATION_ROLL_90_YAW_90">
+        <description>Roll: 90, Pitch: 0, Yaw: 90</description>
+      </entry>
+      <entry value="19" name="MAV_SENSOR_ROTATION_ROLL_90_YAW_135">
+        <description>Roll: 90, Pitch: 0, Yaw: 135</description>
+      </entry>
+      <entry value="20" name="MAV_SENSOR_ROTATION_ROLL_270">
+        <description>Roll: 270, Pitch: 0, Yaw: 0</description>
+      </entry>
+      <entry value="21" name="MAV_SENSOR_ROTATION_ROLL_270_YAW_45">
+        <description>Roll: 270, Pitch: 0, Yaw: 45</description>
+      </entry>
+      <entry value="22" name="MAV_SENSOR_ROTATION_ROLL_270_YAW_90">
+        <description>Roll: 270, Pitch: 0, Yaw: 90</description>
+      </entry>
+      <entry value="23" name="MAV_SENSOR_ROTATION_ROLL_270_YAW_135">
+        <description>Roll: 270, Pitch: 0, Yaw: 135</description>
+      </entry>
+      <entry value="24" name="MAV_SENSOR_ROTATION_PITCH_90">
+        <description>Roll: 0, Pitch: 90, Yaw: 0</description>
+      </entry>
+      <entry value="25" name="MAV_SENSOR_ROTATION_PITCH_270">
+        <description>Roll: 0, Pitch: 270, Yaw: 0</description>
+      </entry>
+      <entry value="26" name="MAV_SENSOR_ROTATION_PITCH_180_YAW_90">
+        <description>Roll: 0, Pitch: 180, Yaw: 90</description>
+      </entry>
+      <entry value="27" name="MAV_SENSOR_ROTATION_PITCH_180_YAW_270">
+        <description>Roll: 0, Pitch: 180, Yaw: 270</description>
+      </entry>
+      <entry value="28" name="MAV_SENSOR_ROTATION_ROLL_90_PITCH_90">
+        <description>Roll: 90, Pitch: 90, Yaw: 0</description>
+      </entry>
+      <entry value="29" name="MAV_SENSOR_ROTATION_ROLL_180_PITCH_90">
+        <description>Roll: 180, Pitch: 90, Yaw: 0</description>
+      </entry>
+      <entry value="30" name="MAV_SENSOR_ROTATION_ROLL_270_PITCH_90">
+        <description>Roll: 270, Pitch: 90, Yaw: 0</description>
+      </entry>
+      <entry value="31" name="MAV_SENSOR_ROTATION_ROLL_90_PITCH_180">
+        <description>Roll: 90, Pitch: 180, Yaw: 0</description>
+      </entry>
+      <entry value="32" name="MAV_SENSOR_ROTATION_ROLL_270_PITCH_180">
+        <description>Roll: 270, Pitch: 180, Yaw: 0</description>
+      </entry>
+      <entry value="33" name="MAV_SENSOR_ROTATION_ROLL_90_PITCH_270">
+        <description>Roll: 90, Pitch: 270, Yaw: 0</description>
+      </entry>
+      <entry value="34" name="MAV_SENSOR_ROTATION_ROLL_180_PITCH_270">
+        <description>Roll: 180, Pitch: 270, Yaw: 0</description>
+      </entry>
+      <entry value="35" name="MAV_SENSOR_ROTATION_ROLL_270_PITCH_270">
+        <description>Roll: 270, Pitch: 270, Yaw: 0</description>
+      </entry>
+      <entry value="36" name="MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90">
+        <description>Roll: 90, Pitch: 180, Yaw: 90</description>
+      </entry>
+      <entry value="37" name="MAV_SENSOR_ROTATION_ROLL_90_YAW_270">
+        <description>Roll: 90, Pitch: 0, Yaw: 270</description>
+      </entry>
+      <entry value="38" name="MAV_SENSOR_ROTATION_ROLL_90_PITCH_68_YAW_293">
+        <description>Roll: 90, Pitch: 68, Yaw: 293</description>
+      </entry>
+      <entry value="39" name="MAV_SENSOR_ROTATION_PITCH_315">
+        <description>Pitch: 315</description>
+      </entry>
+      <entry value="40" name="MAV_SENSOR_ROTATION_ROLL_90_PITCH_315">
+        <description>Roll: 90, Pitch: 315</description>
+      </entry>
+      <entry value="100" name="MAV_SENSOR_ROTATION_CUSTOM">
+        <description>Custom orientation</description>
+      </entry>
+    </enum>
+    <enum name="MAV_PROTOCOL_CAPABILITY" bitmask="true">
+      <description>Bitmask of (optional) autopilot capabilities (64 bit). If a bit is set, the autopilot supports this capability.</description>
+      <entry value="1" name="MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT">
+        <description>Autopilot supports the MISSION_ITEM float message type.
+          Note that MISSION_ITEM is deprecated, and autopilots should use MISSION_INT instead.
+        </description>
+      </entry>
+      <entry value="2" name="MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT">
+        <deprecated since="2022-03" replaced_by="MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_C_CAST"/>
+        <description>Autopilot supports the new param float message type.</description>
+      </entry>
+      <entry value="4" name="MAV_PROTOCOL_CAPABILITY_MISSION_INT">
+        <description>Autopilot supports MISSION_ITEM_INT scaled integer message type.
+          Note that this flag must always be set if missions are supported, because missions must always use MISSION_ITEM_INT (rather than MISSION_ITEM, which is deprecated).
+        </description>
+      </entry>
+      <entry value="8" name="MAV_PROTOCOL_CAPABILITY_COMMAND_INT">
+        <description>Autopilot supports COMMAND_INT scaled integer message type.</description>
+      </entry>
+      <entry value="16" name="MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_BYTEWISE">
+        <description>Parameter protocol uses byte-wise encoding of parameter values into param_value (float) fields: https://mavlink.io/en/services/parameter.html#parameter-encoding.
+          Note that either this flag or MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_C_CAST should be set if the parameter protocol is supported.
+        </description>
+      </entry>
+      <entry value="32" name="MAV_PROTOCOL_CAPABILITY_FTP">
+        <description>Autopilot supports the File Transfer Protocol v1: https://mavlink.io/en/services/ftp.html.</description>
+      </entry>
+      <entry value="64" name="MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET">
+        <description>Autopilot supports commanding attitude offboard.</description>
+      </entry>
+      <entry value="128" name="MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED">
+        <description>Autopilot supports commanding position and velocity targets in local NED frame.</description>
+      </entry>
+      <entry value="256" name="MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT">
+        <description>Autopilot supports commanding position and velocity targets in global scaled integers.</description>
+      </entry>
+      <entry value="512" name="MAV_PROTOCOL_CAPABILITY_TERRAIN">
+        <description>Autopilot supports terrain protocol / data handling.</description>
+      </entry>
+      <entry value="1024" name="MAV_PROTOCOL_CAPABILITY_RESERVED3">
+        <description>Reserved for future use.</description>
+      </entry>
+      <entry value="2048" name="MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION">
+        <description>Autopilot supports the MAV_CMD_DO_FLIGHTTERMINATION command (flight termination).</description>
+      </entry>
+      <entry value="4096" name="MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION">
+        <description>Autopilot supports onboard compass calibration.</description>
+      </entry>
+      <entry value="8192" name="MAV_PROTOCOL_CAPABILITY_MAVLINK2">
+        <description>Autopilot supports MAVLink version 2.</description>
+      </entry>
+      <entry value="16384" name="MAV_PROTOCOL_CAPABILITY_MISSION_FENCE">
+        <description>Autopilot supports mission fence protocol.</description>
+      </entry>
+      <entry value="32768" name="MAV_PROTOCOL_CAPABILITY_MISSION_RALLY">
+        <description>Autopilot supports mission rally point protocol.</description>
+      </entry>
+      <entry value="65536" name="MAV_PROTOCOL_CAPABILITY_RESERVED2">
+        <description>Reserved for future use.</description>
+      </entry>
+      <entry value="131072" name="MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_C_CAST">
+        <description>Parameter protocol uses C-cast of parameter values to set the param_value (float) fields: https://mavlink.io/en/services/parameter.html#parameter-encoding.
+          Note that either this flag or MAV_PROTOCOL_CAPABILITY_PARAM_ENCODE_BYTEWISE should be set if the parameter protocol is supported.
+        </description>
+      </entry>
+    </enum>
+    <enum name="MAV_MISSION_TYPE">
+      <description>Type of mission items being requested/sent in mission protocol.</description>
+      <entry value="0" name="MAV_MISSION_TYPE_MISSION">
+        <description>Items are mission commands for main mission.</description>
+      </entry>
+      <entry value="1" name="MAV_MISSION_TYPE_FENCE">
+        <description>Specifies GeoFence area(s). Items are MAV_CMD_NAV_FENCE_ GeoFence items.</description>
+      </entry>
+      <entry value="2" name="MAV_MISSION_TYPE_RALLY">
+        <description>Specifies the rally points for the vehicle. Rally points are alternative RTL points. Items are MAV_CMD_NAV_RALLY_POINT rally point items.</description>
+      </entry>
+      <entry value="255" name="MAV_MISSION_TYPE_ALL">
+        <description>Only used in MISSION_CLEAR_ALL to clear all mission types.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ESTIMATOR_TYPE">
+      <description>Enumeration of estimator types</description>
+      <entry value="0" name="MAV_ESTIMATOR_TYPE_UNKNOWN">
+        <description>Unknown type of the estimator.</description>
+      </entry>
+      <entry value="1" name="MAV_ESTIMATOR_TYPE_NAIVE">
+        <description>This is a naive estimator without any real covariance feedback.</description>
+      </entry>
+      <entry value="2" name="MAV_ESTIMATOR_TYPE_VISION">
+        <description>Computer vision based estimate. Might be up to scale.</description>
+      </entry>
+      <entry value="3" name="MAV_ESTIMATOR_TYPE_VIO">
+        <description>Visual-inertial estimate.</description>
+      </entry>
+      <entry value="4" name="MAV_ESTIMATOR_TYPE_GPS">
+        <description>Plain GPS estimate.</description>
+      </entry>
+      <entry value="5" name="MAV_ESTIMATOR_TYPE_GPS_INS">
+        <description>Estimator integrating GPS and inertial sensing.</description>
+      </entry>
+      <entry value="6" name="MAV_ESTIMATOR_TYPE_MOCAP">
+        <description>Estimate from external motion capturing system.</description>
+      </entry>
+      <entry value="7" name="MAV_ESTIMATOR_TYPE_LIDAR">
+        <description>Estimator based on lidar sensor input.</description>
+      </entry>
+      <entry value="8" name="MAV_ESTIMATOR_TYPE_AUTOPILOT">
+        <description>Estimator on autopilot.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_BATTERY_TYPE">
+      <description>Enumeration of battery types</description>
+      <entry value="0" name="MAV_BATTERY_TYPE_UNKNOWN">
+        <description>Not specified.</description>
+      </entry>
+      <entry value="1" name="MAV_BATTERY_TYPE_LIPO">
+        <description>Lithium polymer battery</description>
+      </entry>
+      <entry value="2" name="MAV_BATTERY_TYPE_LIFE">
+        <description>Lithium-iron-phosphate battery</description>
+      </entry>
+      <entry value="3" name="MAV_BATTERY_TYPE_LION">
+        <description>Lithium-ION battery</description>
+      </entry>
+      <entry value="4" name="MAV_BATTERY_TYPE_NIMH">
+        <description>Nickel metal hydride battery</description>
+      </entry>
+    </enum>
+    <enum name="MAV_BATTERY_FUNCTION">
+      <description>Enumeration of battery functions</description>
+      <entry value="0" name="MAV_BATTERY_FUNCTION_UNKNOWN">
+        <description>Battery function is unknown</description>
+      </entry>
+      <entry value="1" name="MAV_BATTERY_FUNCTION_ALL">
+        <description>Battery supports all flight systems</description>
+      </entry>
+      <entry value="2" name="MAV_BATTERY_FUNCTION_PROPULSION">
+        <description>Battery for the propulsion system</description>
+      </entry>
+      <entry value="3" name="MAV_BATTERY_FUNCTION_AVIONICS">
+        <description>Avionics battery</description>
+      </entry>
+      <entry value="4" name="MAV_BATTERY_FUNCTION_PAYLOAD">
+        <description>Payload battery</description>
+      </entry>
+    </enum>
+    <enum name="MAV_BATTERY_CHARGE_STATE">
+      <description>Enumeration for battery charge states.</description>
+      <entry value="0" name="MAV_BATTERY_CHARGE_STATE_UNDEFINED">
+        <description>Low battery state is not provided</description>
+      </entry>
+      <entry value="1" name="MAV_BATTERY_CHARGE_STATE_OK">
+        <description>Battery is not in low state. Normal operation.</description>
+      </entry>
+      <entry value="2" name="MAV_BATTERY_CHARGE_STATE_LOW">
+        <description>Battery state is low, warn and monitor close.</description>
+      </entry>
+      <entry value="3" name="MAV_BATTERY_CHARGE_STATE_CRITICAL">
+        <description>Battery state is critical, return or abort immediately.</description>
+      </entry>
+      <entry value="4" name="MAV_BATTERY_CHARGE_STATE_EMERGENCY">
+        <description>Battery state is too low for ordinary abort sequence. Perform fastest possible emergency stop to prevent damage.</description>
+      </entry>
+      <entry value="5" name="MAV_BATTERY_CHARGE_STATE_FAILED">
+        <description>Battery failed, damage unavoidable. Possible causes (faults) are listed in MAV_BATTERY_FAULT.</description>
+      </entry>
+      <entry value="6" name="MAV_BATTERY_CHARGE_STATE_UNHEALTHY">
+        <description>Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in MAV_BATTERY_FAULT.</description>
+      </entry>
+      <entry value="7" name="MAV_BATTERY_CHARGE_STATE_CHARGING">
+        <description>Battery is charging.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_BATTERY_MODE">
+      <description>Battery mode. Note, the normal operation mode (i.e. when flying) should be reported as MAV_BATTERY_MODE_UNKNOWN to allow message trimming in normal flight.</description>
+      <entry value="0" name="MAV_BATTERY_MODE_UNKNOWN">
+        <description>Battery mode not supported/unknown battery mode/normal operation.</description>
+      </entry>
+      <entry value="1" name="MAV_BATTERY_MODE_AUTO_DISCHARGING">
+        <description>Battery is auto discharging (towards storage level).</description>
+      </entry>
+      <entry value="2" name="MAV_BATTERY_MODE_HOT_SWAP">
+        <description>Battery in hot-swap mode (current limited to prevent spikes that might damage sensitive electrical circuits).</description>
+      </entry>
+    </enum>
+    <enum name="MAV_BATTERY_FAULT" bitmask="true">
+      <description>Smart battery supply status/fault flags (bitmask) for health indication. The battery must also report either MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY if any of these are set.</description>
+      <entry value="1" name="MAV_BATTERY_FAULT_DEEP_DISCHARGE">
+        <description>Battery has deep discharged.</description>
+      </entry>
+      <entry value="2" name="MAV_BATTERY_FAULT_SPIKES">
+        <description>Voltage spikes.</description>
+      </entry>
+      <entry value="4" name="MAV_BATTERY_FAULT_CELL_FAIL">
+        <description>One or more cells have failed. Battery should also report MAV_BATTERY_CHARGE_STATE_FAILE (and should not be used).</description>
+      </entry>
+      <entry value="8" name="MAV_BATTERY_FAULT_OVER_CURRENT">
+        <description>Over-current fault.</description>
+      </entry>
+      <entry value="16" name="MAV_BATTERY_FAULT_OVER_TEMPERATURE">
+        <description>Over-temperature fault.</description>
+      </entry>
+      <entry value="32" name="MAV_BATTERY_FAULT_UNDER_TEMPERATURE">
+        <description>Under-temperature fault.</description>
+      </entry>
+      <entry value="64" name="MAV_BATTERY_FAULT_INCOMPATIBLE_VOLTAGE">
+        <description>Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage).</description>
+      </entry>
+      <entry value="128" name="MAV_BATTERY_FAULT_INCOMPATIBLE_FIRMWARE">
+        <description>Battery firmware is not compatible with current autopilot firmware.</description>
+      </entry>
+      <entry value="256" name="BATTERY_FAULT_INCOMPATIBLE_CELLS_CONFIGURATION">
+        <description>Battery is not compatible due to cell configuration (e.g. 5s1p when vehicle requires 6s).</description>
+      </entry>
+    </enum>
+    <enum name="MAV_GENERATOR_STATUS_FLAG" bitmask="true">
+      <description>Flags to report status/failure cases for a power generator (used in GENERATOR_STATUS). Note that FAULTS are conditions that cause the generator to fail. Warnings are conditions that require attention before the next use (they indicate the system is not operating properly).</description>
+      <entry value="1" name="MAV_GENERATOR_STATUS_FLAG_OFF">
+        <description>Generator is off.</description>
+      </entry>
+      <entry value="2" name="MAV_GENERATOR_STATUS_FLAG_READY">
+        <description>Generator is ready to start generating power.</description>
+      </entry>
+      <entry value="4" name="MAV_GENERATOR_STATUS_FLAG_GENERATING">
+        <description>Generator is generating power.</description>
+      </entry>
+      <entry value="8" name="MAV_GENERATOR_STATUS_FLAG_CHARGING">
+        <description>Generator is charging the batteries (generating enough power to charge and provide the load).</description>
+      </entry>
+      <entry value="16" name="MAV_GENERATOR_STATUS_FLAG_REDUCED_POWER">
+        <description>Generator is operating at a reduced maximum power.</description>
+      </entry>
+      <entry value="32" name="MAV_GENERATOR_STATUS_FLAG_MAXPOWER">
+        <description>Generator is providing the maximum output.</description>
+      </entry>
+      <entry value="64" name="MAV_GENERATOR_STATUS_FLAG_OVERTEMP_WARNING">
+        <description>Generator is near the maximum operating temperature, cooling is insufficient.</description>
+      </entry>
+      <entry value="128" name="MAV_GENERATOR_STATUS_FLAG_OVERTEMP_FAULT">
+        <description>Generator hit the maximum operating temperature and shutdown.</description>
+      </entry>
+      <entry value="256" name="MAV_GENERATOR_STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING">
+        <description>Power electronics are near the maximum operating temperature, cooling is insufficient.</description>
+      </entry>
+      <entry value="512" name="MAV_GENERATOR_STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT">
+        <description>Power electronics hit the maximum operating temperature and shutdown.</description>
+      </entry>
+      <entry value="1024" name="MAV_GENERATOR_STATUS_FLAG_ELECTRONICS_FAULT">
+        <description>Power electronics experienced a fault and shutdown.</description>
+      </entry>
+      <entry value="2048" name="MAV_GENERATOR_STATUS_FLAG_POWERSOURCE_FAULT">
+        <description>The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening.</description>
+      </entry>
+      <entry value="4096" name="MAV_GENERATOR_STATUS_FLAG_COMMUNICATION_WARNING">
+        <description>Generator controller having communication problems.</description>
+      </entry>
+      <entry value="8192" name="MAV_GENERATOR_STATUS_FLAG_COOLING_WARNING">
+        <description>Power electronic or generator cooling system error.</description>
+      </entry>
+      <entry value="16384" name="MAV_GENERATOR_STATUS_FLAG_POWER_RAIL_FAULT">
+        <description>Generator controller power rail experienced a fault.</description>
+      </entry>
+      <entry value="32768" name="MAV_GENERATOR_STATUS_FLAG_OVERCURRENT_FAULT">
+        <description>Generator controller exceeded the overcurrent threshold and shutdown to prevent damage.</description>
+      </entry>
+      <entry value="65536" name="MAV_GENERATOR_STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT">
+        <description>Generator controller detected a high current going into the batteries and shutdown to prevent battery damage.</description>
+      </entry>
+      <entry value="131072" name="MAV_GENERATOR_STATUS_FLAG_OVERVOLTAGE_FAULT">
+        <description>Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating.</description>
+      </entry>
+      <entry value="262144" name="MAV_GENERATOR_STATUS_FLAG_BATTERY_UNDERVOLT_FAULT">
+        <description>Batteries are under voltage (generator will not start).</description>
+      </entry>
+      <entry value="524288" name="MAV_GENERATOR_STATUS_FLAG_START_INHIBITED">
+        <description>Generator start is inhibited by e.g. a safety switch.</description>
+      </entry>
+      <entry value="1048576" name="MAV_GENERATOR_STATUS_FLAG_MAINTENANCE_REQUIRED">
+        <description>Generator requires maintenance.</description>
+      </entry>
+      <entry value="2097152" name="MAV_GENERATOR_STATUS_FLAG_WARMING_UP">
+        <description>Generator is not ready to generate yet.</description>
+      </entry>
+      <entry value="4194304" name="MAV_GENERATOR_STATUS_FLAG_IDLE">
+        <description>Generator is idle.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_VTOL_STATE">
+      <description>Enumeration of VTOL states</description>
+      <entry value="0" name="MAV_VTOL_STATE_UNDEFINED">
+        <description>MAV is not configured as VTOL</description>
+      </entry>
+      <entry value="1" name="MAV_VTOL_STATE_TRANSITION_TO_FW">
+        <description>VTOL is in transition from multicopter to fixed-wing</description>
+      </entry>
+      <entry value="2" name="MAV_VTOL_STATE_TRANSITION_TO_MC">
+        <description>VTOL is in transition from fixed-wing to multicopter</description>
+      </entry>
+      <entry value="3" name="MAV_VTOL_STATE_MC">
+        <description>VTOL is in multicopter state</description>
+      </entry>
+      <entry value="4" name="MAV_VTOL_STATE_FW">
+        <description>VTOL is in fixed-wing state</description>
+      </entry>
+    </enum>
+    <enum name="MAV_LANDED_STATE">
+      <description>Enumeration of landed detector states</description>
+      <entry value="0" name="MAV_LANDED_STATE_UNDEFINED">
+        <description>MAV landed state is unknown</description>
+      </entry>
+      <entry value="1" name="MAV_LANDED_STATE_ON_GROUND">
+        <description>MAV is landed (on ground)</description>
+      </entry>
+      <entry value="2" name="MAV_LANDED_STATE_IN_AIR">
+        <description>MAV is in air</description>
+      </entry>
+      <entry value="3" name="MAV_LANDED_STATE_TAKEOFF">
+        <description>MAV currently taking off</description>
+      </entry>
+      <entry value="4" name="MAV_LANDED_STATE_LANDING">
+        <description>MAV currently landing</description>
+      </entry>
+    </enum>
+    <enum name="ADSB_ALTITUDE_TYPE">
+      <description>Enumeration of the ADSB altimeter types</description>
+      <entry value="0" name="ADSB_ALTITUDE_TYPE_PRESSURE_QNH">
+        <description>Altitude reported from a Baro source using QNH reference</description>
+      </entry>
+      <entry value="1" name="ADSB_ALTITUDE_TYPE_GEOMETRIC">
+        <description>Altitude reported from a GNSS source</description>
+      </entry>
+    </enum>
+    <enum name="ADSB_EMITTER_TYPE">
+      <description>ADSB classification for the type of vehicle emitting the transponder signal</description>
+      <entry value="0" name="ADSB_EMITTER_TYPE_NO_INFO"/>
+      <entry value="1" name="ADSB_EMITTER_TYPE_LIGHT"/>
+      <entry value="2" name="ADSB_EMITTER_TYPE_SMALL"/>
+      <entry value="3" name="ADSB_EMITTER_TYPE_LARGE"/>
+      <entry value="4" name="ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE"/>
+      <entry value="5" name="ADSB_EMITTER_TYPE_HEAVY"/>
+      <entry value="6" name="ADSB_EMITTER_TYPE_HIGHLY_MANUV"/>
+      <entry value="7" name="ADSB_EMITTER_TYPE_ROTOCRAFT"/>
+      <entry value="8" name="ADSB_EMITTER_TYPE_UNASSIGNED"/>
+      <entry value="9" name="ADSB_EMITTER_TYPE_GLIDER"/>
+      <entry value="10" name="ADSB_EMITTER_TYPE_LIGHTER_AIR"/>
+      <entry value="11" name="ADSB_EMITTER_TYPE_PARACHUTE"/>
+      <entry value="12" name="ADSB_EMITTER_TYPE_ULTRA_LIGHT"/>
+      <entry value="13" name="ADSB_EMITTER_TYPE_UNASSIGNED2"/>
+      <entry value="14" name="ADSB_EMITTER_TYPE_UAV"/>
+      <entry value="15" name="ADSB_EMITTER_TYPE_SPACE"/>
+      <entry value="16" name="ADSB_EMITTER_TYPE_UNASSGINED3"/>
+      <entry value="17" name="ADSB_EMITTER_TYPE_EMERGENCY_SURFACE"/>
+      <entry value="18" name="ADSB_EMITTER_TYPE_SERVICE_SURFACE"/>
+      <entry value="19" name="ADSB_EMITTER_TYPE_POINT_OBSTACLE"/>
+    </enum>
+    <enum name="ADSB_FLAGS" bitmask="true">
+      <description>These flags indicate status such as data validity of each data source. Set = data valid</description>
+      <entry value="1" name="ADSB_FLAGS_VALID_COORDS"/>
+      <entry value="2" name="ADSB_FLAGS_VALID_ALTITUDE"/>
+      <entry value="4" name="ADSB_FLAGS_VALID_HEADING"/>
+      <entry value="8" name="ADSB_FLAGS_VALID_VELOCITY"/>
+      <entry value="16" name="ADSB_FLAGS_VALID_CALLSIGN"/>
+      <entry value="32" name="ADSB_FLAGS_VALID_SQUAWK"/>
+      <entry value="64" name="ADSB_FLAGS_SIMULATED"/>
+      <entry value="128" name="ADSB_FLAGS_VERTICAL_VELOCITY_VALID"/>
+      <entry value="256" name="ADSB_FLAGS_BARO_VALID"/>
+      <entry value="32768" name="ADSB_FLAGS_SOURCE_UAT"/>
+    </enum>
+    <enum name="MAV_DO_REPOSITION_FLAGS" bitmask="true">
+      <description>Bitmap of options for the MAV_CMD_DO_REPOSITION</description>
+      <entry value="1" name="MAV_DO_REPOSITION_FLAGS_CHANGE_MODE">
+        <description>The aircraft should immediately transition into guided. This should not be set for follow me applications</description>
+      </entry>
+    </enum>
+    <enum name="SPEED_TYPE">
+      <description>Speed setpoint types used in MAV_CMD_DO_CHANGE_SPEED</description>
+      <entry value="0" name="SPEED_TYPE_AIRSPEED">
+        <description>Airspeed</description>
+      </entry>
+      <entry value="1" name="SPEED_TYPE_GROUNDSPEED">
+        <description>Groundspeed</description>
+      </entry>
+      <entry value="2" name="SPEED_TYPE_CLIMB_SPEED">
+        <description>Climb speed</description>
+      </entry>
+      <entry value="3" name="SPEED_TYPE_DESCENT_SPEED">
+        <description>Descent speed</description>
+      </entry>
+    </enum>
+    <!-- ESTIMATOR_STATUS_FLAGS - these values should be bit-and with the messages flags field to know if flag has been set -->
+    <enum name="ESTIMATOR_STATUS_FLAGS" bitmask="true">
+      <description>Flags in ESTIMATOR_STATUS message</description>
+      <entry value="1" name="ESTIMATOR_ATTITUDE">
+        <description>True if the attitude estimate is good</description>
+      </entry>
+      <entry value="2" name="ESTIMATOR_VELOCITY_HORIZ">
+        <description>True if the horizontal velocity estimate is good</description>
+      </entry>
+      <entry value="4" name="ESTIMATOR_VELOCITY_VERT">
+        <description>True if the  vertical velocity estimate is good</description>
+      </entry>
+      <entry value="8" name="ESTIMATOR_POS_HORIZ_REL">
+        <description>True if the horizontal position (relative) estimate is good</description>
+      </entry>
+      <entry value="16" name="ESTIMATOR_POS_HORIZ_ABS">
+        <description>True if the horizontal position (absolute) estimate is good</description>
+      </entry>
+      <entry value="32" name="ESTIMATOR_POS_VERT_ABS">
+        <description>True if the vertical position (absolute) estimate is good</description>
+      </entry>
+      <entry value="64" name="ESTIMATOR_POS_VERT_AGL">
+        <description>True if the vertical position (above ground) estimate is good</description>
+      </entry>
+      <entry value="128" name="ESTIMATOR_CONST_POS_MODE">
+        <description>True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)</description>
+      </entry>
+      <entry value="256" name="ESTIMATOR_PRED_POS_HORIZ_REL">
+        <description>True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate</description>
+      </entry>
+      <entry value="512" name="ESTIMATOR_PRED_POS_HORIZ_ABS">
+        <description>True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate</description>
+      </entry>
+      <entry value="1024" name="ESTIMATOR_GPS_GLITCH">
+        <description>True if the EKF has detected a GPS glitch</description>
+      </entry>
+      <entry value="2048" name="ESTIMATOR_ACCEL_ERROR">
+        <description>True if the EKF has detected bad accelerometer data</description>
+      </entry>
+    </enum>
+    <!-- motor test type enum -->
+    <enum name="MOTOR_TEST_ORDER">
+      <description>Sequence that motors are tested when using MAV_CMD_DO_MOTOR_TEST.</description>
+      <entry name="MOTOR_TEST_ORDER_DEFAULT" value="0">
+        <description>Default autopilot motor test method.</description>
+      </entry>
+      <entry name="MOTOR_TEST_ORDER_SEQUENCE" value="1">
+        <description>Motor numbers are specified as their index in a predefined vehicle-specific sequence.</description>
+      </entry>
+      <entry name="MOTOR_TEST_ORDER_BOARD" value="2">
+        <description>Motor numbers are specified as the output as labeled on the board.</description>
+      </entry>
+    </enum>
+    <!-- motor test throttle type enum -->
+    <enum name="MOTOR_TEST_THROTTLE_TYPE">
+      <description>Defines how throttle value is represented in MAV_CMD_DO_MOTOR_TEST.</description>
+      <entry value="0" name="MOTOR_TEST_THROTTLE_PERCENT">
+        <description>Throttle as a percentage (0 ~ 100)</description>
+      </entry>
+      <entry value="1" name="MOTOR_TEST_THROTTLE_PWM">
+        <description>Throttle as an absolute PWM value (normally in range of 1000~2000).</description>
+      </entry>
+      <entry value="2" name="MOTOR_TEST_THROTTLE_PILOT">
+        <description>Throttle pass-through from pilot's transmitter.</description>
+      </entry>
+      <entry value="3" name="MOTOR_TEST_COMPASS_CAL">
+        <description>Per-motor compass calibration test.</description>
+      </entry>
+    </enum>
+    <!-- GPS_INPUT ignore flags enum -->
+    <enum name="GPS_INPUT_IGNORE_FLAGS" bitmask="true">
+      <entry value="1" name="GPS_INPUT_IGNORE_FLAG_ALT">
+        <description>ignore altitude field</description>
+      </entry>
+      <entry value="2" name="GPS_INPUT_IGNORE_FLAG_HDOP">
+        <description>ignore hdop field</description>
+      </entry>
+      <entry value="4" name="GPS_INPUT_IGNORE_FLAG_VDOP">
+        <description>ignore vdop field</description>
+      </entry>
+      <entry value="8" name="GPS_INPUT_IGNORE_FLAG_VEL_HORIZ">
+        <description>ignore horizontal velocity field (vn and ve)</description>
+      </entry>
+      <entry value="16" name="GPS_INPUT_IGNORE_FLAG_VEL_VERT">
+        <description>ignore vertical velocity field (vd)</description>
+      </entry>
+      <entry value="32" name="GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY">
+        <description>ignore speed accuracy field</description>
+      </entry>
+      <entry value="64" name="GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY">
+        <description>ignore horizontal accuracy field</description>
+      </entry>
+      <entry value="128" name="GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY">
+        <description>ignore vertical accuracy field</description>
+      </entry>
+    </enum>
+    <enum name="MAV_COLLISION_ACTION">
+      <description>Possible actions an aircraft can take to avoid a collision.</description>
+      <entry value="0" name="MAV_COLLISION_ACTION_NONE">
+        <description>Ignore any potential collisions</description>
+      </entry>
+      <entry value="1" name="MAV_COLLISION_ACTION_REPORT">
+        <description>Report potential collision</description>
+      </entry>
+      <entry value="2" name="MAV_COLLISION_ACTION_ASCEND_OR_DESCEND">
+        <description>Ascend or Descend to avoid threat</description>
+      </entry>
+      <entry value="3" name="MAV_COLLISION_ACTION_MOVE_HORIZONTALLY">
+        <description>Move horizontally to avoid threat</description>
+      </entry>
+      <entry value="4" name="MAV_COLLISION_ACTION_MOVE_PERPENDICULAR">
+        <description>Aircraft to move perpendicular to the collision's velocity vector</description>
+      </entry>
+      <entry value="5" name="MAV_COLLISION_ACTION_RTL">
+        <description>Aircraft to fly directly back to its launch point</description>
+      </entry>
+      <entry value="6" name="MAV_COLLISION_ACTION_HOVER">
+        <description>Aircraft to stop in place</description>
+      </entry>
+    </enum>
+    <enum name="MAV_COLLISION_THREAT_LEVEL">
+      <description>Aircraft-rated danger from this threat.</description>
+      <entry value="0" name="MAV_COLLISION_THREAT_LEVEL_NONE">
+        <description>Not a threat</description>
+      </entry>
+      <entry value="1" name="MAV_COLLISION_THREAT_LEVEL_LOW">
+        <description>Craft is mildly concerned about this threat</description>
+      </entry>
+      <entry value="2" name="MAV_COLLISION_THREAT_LEVEL_HIGH">
+        <description>Craft is panicking, and may take actions to avoid threat</description>
+      </entry>
+    </enum>
+    <enum name="MAV_COLLISION_SRC">
+      <description>Source of information about this collision.</description>
+      <entry value="0" name="MAV_COLLISION_SRC_ADSB">
+        <description>ID field references ADSB_VEHICLE packets</description>
+      </entry>
+      <entry value="1" name="MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT">
+        <description>ID field references MAVLink SRC ID</description>
+      </entry>
+    </enum>
+    <enum name="GPS_FIX_TYPE">
+      <description>Type of GPS fix</description>
+      <entry value="0" name="GPS_FIX_TYPE_NO_GPS">
+        <description>No GPS connected</description>
+      </entry>
+      <entry value="1" name="GPS_FIX_TYPE_NO_FIX">
+        <description>No position information, GPS is connected</description>
+      </entry>
+      <entry value="2" name="GPS_FIX_TYPE_2D_FIX">
+        <description>2D position</description>
+      </entry>
+      <entry value="3" name="GPS_FIX_TYPE_3D_FIX">
+        <description>3D position</description>
+      </entry>
+      <entry value="4" name="GPS_FIX_TYPE_DGPS">
+        <description>DGPS/SBAS aided 3D position</description>
+      </entry>
+      <entry value="5" name="GPS_FIX_TYPE_RTK_FLOAT">
+        <description>RTK float, 3D position</description>
+      </entry>
+      <entry value="6" name="GPS_FIX_TYPE_RTK_FIXED">
+        <description>RTK Fixed, 3D position</description>
+      </entry>
+      <entry value="7" name="GPS_FIX_TYPE_STATIC">
+        <description>Static fixed, typically used for base stations</description>
+      </entry>
+      <entry value="8" name="GPS_FIX_TYPE_PPP">
+        <description>PPP, 3D position.</description>
+      </entry>
+    </enum>
+    <enum name="RTK_BASELINE_COORDINATE_SYSTEM">
+      <description>RTK GPS baseline coordinate system, used for RTK corrections</description>
+      <entry value="0" name="RTK_BASELINE_COORDINATE_SYSTEM_ECEF">
+        <description>Earth-centered, Earth-fixed</description>
+      </entry>
+      <entry value="1" name="RTK_BASELINE_COORDINATE_SYSTEM_NED">
+        <description>RTK basestation centered, north, east, down</description>
+      </entry>
+    </enum>
+    <enum name="LANDING_TARGET_TYPE">
+      <description>Type of landing target</description>
+      <entry value="0" name="LANDING_TARGET_TYPE_LIGHT_BEACON">
+        <description>Landing target signaled by light beacon (ex: IR-LOCK)</description>
+      </entry>
+      <entry value="1" name="LANDING_TARGET_TYPE_RADIO_BEACON">
+        <description>Landing target signaled by radio beacon (ex: ILS, NDB)</description>
+      </entry>
+      <entry value="2" name="LANDING_TARGET_TYPE_VISION_FIDUCIAL">
+        <description>Landing target represented by a fiducial marker (ex: ARTag)</description>
+      </entry>
+      <entry value="3" name="LANDING_TARGET_TYPE_VISION_OTHER">
+        <description>Landing target represented by a pre-defined visual shape/feature (ex: X-marker, H-marker, square)</description>
+      </entry>
+    </enum>
+    <enum name="VTOL_TRANSITION_HEADING">
+      <description>Direction of VTOL transition</description>
+      <entry value="0" name="VTOL_TRANSITION_HEADING_VEHICLE_DEFAULT">
+        <description>Respect the heading configuration of the vehicle.</description>
+      </entry>
+      <entry value="1" name="VTOL_TRANSITION_HEADING_NEXT_WAYPOINT">
+        <description>Use the heading pointing towards the next waypoint.</description>
+      </entry>
+      <entry value="2" name="VTOL_TRANSITION_HEADING_TAKEOFF">
+        <description>Use the heading on takeoff (while sitting on the ground).</description>
+      </entry>
+      <entry value="3" name="VTOL_TRANSITION_HEADING_SPECIFIED">
+        <description>Use the specified heading in parameter 4.</description>
+      </entry>
+      <entry value="4" name="VTOL_TRANSITION_HEADING_ANY">
+        <description>Use the current heading when reaching takeoff altitude (potentially facing the wind when weather-vaning is active).</description>
+      </entry>
+    </enum>
+    <enum name="CAMERA_CAP_FLAGS" bitmask="true">
+      <description>Camera capability flags (Bitmap)</description>
+      <entry value="1" name="CAMERA_CAP_FLAGS_CAPTURE_VIDEO">
+        <description>Camera is able to record video</description>
+      </entry>
+      <entry value="2" name="CAMERA_CAP_FLAGS_CAPTURE_IMAGE">
+        <description>Camera is able to capture images</description>
+      </entry>
+      <entry value="4" name="CAMERA_CAP_FLAGS_HAS_MODES">
+        <description>Camera has separate Video and Image/Photo modes (MAV_CMD_SET_CAMERA_MODE)</description>
+      </entry>
+      <entry value="8" name="CAMERA_CAP_FLAGS_CAN_CAPTURE_IMAGE_IN_VIDEO_MODE">
+        <description>Camera can capture images while in video mode</description>
+      </entry>
+      <entry value="16" name="CAMERA_CAP_FLAGS_CAN_CAPTURE_VIDEO_IN_IMAGE_MODE">
+        <description>Camera can capture videos while in Photo/Image mode</description>
+      </entry>
+      <entry value="32" name="CAMERA_CAP_FLAGS_HAS_IMAGE_SURVEY_MODE">
+        <description>Camera has image survey mode (MAV_CMD_SET_CAMERA_MODE)</description>
+      </entry>
+      <entry value="64" name="CAMERA_CAP_FLAGS_HAS_BASIC_ZOOM">
+        <description>Camera has basic zoom control (MAV_CMD_SET_CAMERA_ZOOM)</description>
+      </entry>
+      <entry value="128" name="CAMERA_CAP_FLAGS_HAS_BASIC_FOCUS">
+        <description>Camera has basic focus control (MAV_CMD_SET_CAMERA_FOCUS)</description>
+      </entry>
+      <entry value="256" name="CAMERA_CAP_FLAGS_HAS_VIDEO_STREAM">
+        <description>Camera has video streaming capabilities (request VIDEO_STREAM_INFORMATION with MAV_CMD_REQUEST_MESSAGE for video streaming info)</description>
+      </entry>
+      <entry value="512" name="CAMERA_CAP_FLAGS_HAS_TRACKING_POINT">
+        <description>Camera supports tracking of a point on the camera view.</description>
+      </entry>
+      <entry value="1024" name="CAMERA_CAP_FLAGS_HAS_TRACKING_RECTANGLE">
+        <description>Camera supports tracking of a selection rectangle on the camera view.</description>
+      </entry>
+      <entry value="2048" name="CAMERA_CAP_FLAGS_HAS_TRACKING_GEO_STATUS">
+        <description>Camera supports tracking geo status (CAMERA_TRACKING_GEO_STATUS).</description>
+      </entry>
+    </enum>
+    <enum name="VIDEO_STREAM_STATUS_FLAGS" bitmask="true">
+      <description>Stream status flags (Bitmap)</description>
+      <entry value="1" name="VIDEO_STREAM_STATUS_FLAGS_RUNNING">
+        <description>Stream is active (running)</description>
+      </entry>
+      <entry value="2" name="VIDEO_STREAM_STATUS_FLAGS_THERMAL">
+        <description>Stream is thermal imaging</description>
+      </entry>
+    </enum>
+    <enum name="VIDEO_STREAM_TYPE">
+      <description>Video stream types</description>
+      <entry value="0" name="VIDEO_STREAM_TYPE_RTSP">
+        <description>Stream is RTSP</description>
+      </entry>
+      <entry value="1" name="VIDEO_STREAM_TYPE_RTPUDP">
+        <description>Stream is RTP UDP (URI gives the port number)</description>
+      </entry>
+      <entry value="2" name="VIDEO_STREAM_TYPE_TCP_MPEG">
+        <description>Stream is MPEG on TCP</description>
+      </entry>
+      <entry value="3" name="VIDEO_STREAM_TYPE_MPEG_TS_H264">
+        <description>Stream is h.264 on MPEG TS (URI gives the port number)</description>
+      </entry>
+    </enum>
+    <enum name="CAMERA_TRACKING_STATUS_FLAGS">
+      <description>Camera tracking status flags</description>
+      <entry value="0" name="CAMERA_TRACKING_STATUS_FLAGS_IDLE">
+        <description>Camera is not tracking</description>
+      </entry>
+      <entry value="1" name="CAMERA_TRACKING_STATUS_FLAGS_ACTIVE">
+        <description>Camera is tracking</description>
+      </entry>
+      <entry value="2" name="CAMERA_TRACKING_STATUS_FLAGS_ERROR">
+        <description>Camera tracking in error state</description>
+      </entry>
+    </enum>
+    <enum name="CAMERA_TRACKING_MODE">
+      <description>Camera tracking modes</description>
+      <entry value="0" name="CAMERA_TRACKING_MODE_NONE">
+        <description>Not tracking</description>
+      </entry>
+      <entry value="1" name="CAMERA_TRACKING_MODE_POINT">
+        <description>Target is a point</description>
+      </entry>
+      <entry value="2" name="CAMERA_TRACKING_MODE_RECTANGLE">
+        <description>Target is a rectangle</description>
+      </entry>
+    </enum>
+    <enum name="CAMERA_TRACKING_TARGET_DATA" bitmask="true">
+      <description>Camera tracking target data (shows where tracked target is within image)</description>
+      <entry value="0" name="CAMERA_TRACKING_TARGET_DATA_NONE">
+        <description>No target data</description>
+      </entry>
+      <entry value="1" name="CAMERA_TRACKING_TARGET_DATA_EMBEDDED">
+        <description>Target data embedded in image data (proprietary)</description>
+      </entry>
+      <entry value="2" name="CAMERA_TRACKING_TARGET_DATA_RENDERED">
+        <description>Target data rendered in image</description>
+      </entry>
+      <entry value="4" name="CAMERA_TRACKING_TARGET_DATA_IN_STATUS">
+        <description>Target data within status message (Point or Rectangle)</description>
+      </entry>
+    </enum>
+    <enum name="CAMERA_ZOOM_TYPE">
+      <description>Zoom types for MAV_CMD_SET_CAMERA_ZOOM</description>
+      <entry value="0" name="ZOOM_TYPE_STEP">
+        <description>Zoom one step increment (-1 for wide, 1 for tele)</description>
+      </entry>
+      <entry value="1" name="ZOOM_TYPE_CONTINUOUS">
+        <description>Continuous zoom up/down until stopped (-1 for wide, 1 for tele, 0 to stop zooming)</description>
+      </entry>
+      <entry value="2" name="ZOOM_TYPE_RANGE">
+        <description>Zoom value as proportion of full camera range (a percentage value between 0.0 and 100.0)</description>
+      </entry>
+      <entry value="3" name="ZOOM_TYPE_FOCAL_LENGTH">
+        <description>Zoom value/variable focal length in millimetres. Note that there is no message to get the valid zoom range of the camera, so this can type can only be used for cameras where the zoom range is known (implying that this cannot reliably be used in a GCS for an arbitrary camera)</description>
+      </entry>
+      <entry value="4" name="ZOOM_TYPE_HORIZONTAL_FOV">
+        <description>Zoom value as horizontal field of view in degrees.</description>
+      </entry>
+    </enum>
+    <enum name="SET_FOCUS_TYPE">
+      <description>Focus types for MAV_CMD_SET_CAMERA_FOCUS</description>
+      <entry value="0" name="FOCUS_TYPE_STEP">
+        <description>Focus one step increment (-1 for focusing in, 1 for focusing out towards infinity).</description>
+      </entry>
+      <entry value="1" name="FOCUS_TYPE_CONTINUOUS">
+        <description>Continuous focus up/down until stopped (-1 for focusing in, 1 for focusing out towards infinity, 0 to stop focusing)</description>
+      </entry>
+      <entry value="2" name="FOCUS_TYPE_RANGE">
+        <description>Focus value as proportion of full camera focus range (a value between 0.0 and 100.0)</description>
+      </entry>
+      <entry value="3" name="FOCUS_TYPE_METERS">
+        <description>Focus value in metres. Note that there is no message to get the valid focus range of the camera, so this can type can only be used for cameras where the range is known (implying that this cannot reliably be used in a GCS for an arbitrary camera).</description>
+      </entry>
+      <entry value="4" name="FOCUS_TYPE_AUTO">
+        <description>Focus automatically.</description>
+      </entry>
+      <entry value="5" name="FOCUS_TYPE_AUTO_SINGLE">
+        <description>Single auto focus. Mainly used for still pictures. Usually abbreviated as AF-S.</description>
+      </entry>
+      <entry value="6" name="FOCUS_TYPE_AUTO_CONTINUOUS">
+        <description>Continuous auto focus. Mainly used for dynamic scenes. Abbreviated as AF-C.</description>
+      </entry>
+    </enum>
+    <enum name="PARAM_ACK">
+      <description>Result from PARAM_EXT_SET message (or a PARAM_SET within a transaction).</description>
+      <entry value="0" name="PARAM_ACK_ACCEPTED">
+        <description>Parameter value ACCEPTED and SET</description>
+      </entry>
+      <entry value="1" name="PARAM_ACK_VALUE_UNSUPPORTED">
+        <description>Parameter value UNKNOWN/UNSUPPORTED</description>
+      </entry>
+      <entry value="2" name="PARAM_ACK_FAILED">
+        <description>Parameter failed to set</description>
+      </entry>
+      <entry value="3" name="PARAM_ACK_IN_PROGRESS">
+        <description>Parameter value received but not yet set/accepted. A subsequent PARAM_ACK_TRANSACTION or PARAM_EXT_ACK with the final result will follow once operation is completed. This is returned immediately for parameters that take longer to set, indicating that the the parameter was received and does not need to be resent.</description>
+      </entry>
+    </enum>
+    <enum name="CAMERA_MODE">
+      <description>Camera Modes.</description>
+      <entry value="0" name="CAMERA_MODE_IMAGE">
+        <description>Camera is in image/photo capture mode.</description>
+      </entry>
+      <entry value="1" name="CAMERA_MODE_VIDEO">
+        <description>Camera is in video capture mode.</description>
+      </entry>
+      <entry value="2" name="CAMERA_MODE_IMAGE_SURVEY">
+        <description>Camera is in image survey capture mode. It allows for camera controller to do specific settings for surveys.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ARM_AUTH_DENIED_REASON">
+      <entry value="0" name="MAV_ARM_AUTH_DENIED_REASON_GENERIC">
+        <description>Not a specific reason</description>
+      </entry>
+      <entry value="1" name="MAV_ARM_AUTH_DENIED_REASON_NONE">
+        <description>Authorizer will send the error as string to GCS</description>
+      </entry>
+      <entry value="2" name="MAV_ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT">
+        <description>At least one waypoint have a invalid value</description>
+      </entry>
+      <entry value="3" name="MAV_ARM_AUTH_DENIED_REASON_TIMEOUT">
+        <description>Timeout in the authorizer process(in case it depends on network)</description>
+      </entry>
+      <entry value="4" name="MAV_ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE">
+        <description>Airspace of the mission in use by another vehicle, second result parameter can have the waypoint id that caused it to be denied.</description>
+      </entry>
+      <entry value="5" name="MAV_ARM_AUTH_DENIED_REASON_BAD_WEATHER">
+        <description>Weather is not good to fly</description>
+      </entry>
+    </enum>
+    <enum name="RC_TYPE">
+      <description>RC type</description>
+      <entry value="0" name="RC_TYPE_SPEKTRUM_DSM2">
+        <description>Spektrum DSM2</description>
+      </entry>
+      <entry value="1" name="RC_TYPE_SPEKTRUM_DSMX">
+        <description>Spektrum DSMX</description>
+      </entry>
+    </enum>
+    <enum name="POSITION_TARGET_TYPEMASK" bitmask="true">
+      <description>Bitmap to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 9 is set the floats afx afy afz should be interpreted as force instead of acceleration.</description>
+      <entry value="1" name="POSITION_TARGET_TYPEMASK_X_IGNORE">
+        <description>Ignore position x</description>
+      </entry>
+      <entry value="2" name="POSITION_TARGET_TYPEMASK_Y_IGNORE">
+        <description>Ignore position y</description>
+      </entry>
+      <entry value="4" name="POSITION_TARGET_TYPEMASK_Z_IGNORE">
+        <description>Ignore position z</description>
+      </entry>
+      <entry value="8" name="POSITION_TARGET_TYPEMASK_VX_IGNORE">
+        <description>Ignore velocity x</description>
+      </entry>
+      <entry value="16" name="POSITION_TARGET_TYPEMASK_VY_IGNORE">
+        <description>Ignore velocity y</description>
+      </entry>
+      <entry value="32" name="POSITION_TARGET_TYPEMASK_VZ_IGNORE">
+        <description>Ignore velocity z</description>
+      </entry>
+      <entry value="64" name="POSITION_TARGET_TYPEMASK_AX_IGNORE">
+        <description>Ignore acceleration x</description>
+      </entry>
+      <entry value="128" name="POSITION_TARGET_TYPEMASK_AY_IGNORE">
+        <description>Ignore acceleration y</description>
+      </entry>
+      <entry value="256" name="POSITION_TARGET_TYPEMASK_AZ_IGNORE">
+        <description>Ignore acceleration z</description>
+      </entry>
+      <entry value="512" name="POSITION_TARGET_TYPEMASK_FORCE_SET">
+        <description>Use force instead of acceleration</description>
+      </entry>
+      <entry value="1024" name="POSITION_TARGET_TYPEMASK_YAW_IGNORE">
+        <description>Ignore yaw</description>
+      </entry>
+      <entry value="2048" name="POSITION_TARGET_TYPEMASK_YAW_RATE_IGNORE">
+        <description>Ignore yaw rate</description>
+      </entry>
+    </enum>
+    <enum name="ATTITUDE_TARGET_TYPEMASK" bitmask="true">
+      <description>Bitmap to indicate which dimensions should be ignored by the vehicle: a value of 0b00000000 indicates that none of the setpoint dimensions should be ignored.</description>
+      <entry value="1" name="ATTITUDE_TARGET_TYPEMASK_BODY_ROLL_RATE_IGNORE">
+        <description>Ignore body roll rate</description>
+      </entry>
+      <entry value="2" name="ATTITUDE_TARGET_TYPEMASK_BODY_PITCH_RATE_IGNORE">
+        <description>Ignore body pitch rate</description>
+      </entry>
+      <entry value="4" name="ATTITUDE_TARGET_TYPEMASK_BODY_YAW_RATE_IGNORE">
+        <description>Ignore body yaw rate</description>
+      </entry>
+      <entry value="32" name="ATTITUDE_TARGET_TYPEMASK_THRUST_BODY_SET">
+        <description>Use 3D body thrust setpoint instead of throttle</description>
+      </entry>
+      <entry value="64" name="ATTITUDE_TARGET_TYPEMASK_THROTTLE_IGNORE">
+        <description>Ignore throttle</description>
+      </entry>
+      <entry value="128" name="ATTITUDE_TARGET_TYPEMASK_ATTITUDE_IGNORE">
+        <description>Ignore attitude</description>
+      </entry>
+    </enum>
+    <enum name="UTM_FLIGHT_STATE">
+      <description>Airborne status of UAS.</description>
+      <entry value="1" name="UTM_FLIGHT_STATE_UNKNOWN">
+        <description>The flight state can't be determined.</description>
+      </entry>
+      <entry value="2" name="UTM_FLIGHT_STATE_GROUND">
+        <description>UAS on ground.</description>
+      </entry>
+      <entry value="3" name="UTM_FLIGHT_STATE_AIRBORNE">
+        <description>UAS airborne.</description>
+      </entry>
+      <entry value="16" name="UTM_FLIGHT_STATE_EMERGENCY">
+        <description>UAS is in an emergency flight state.</description>
+      </entry>
+      <entry value="32" name="UTM_FLIGHT_STATE_NOCTRL">
+        <description>UAS has no active controls.</description>
+      </entry>
+    </enum>
+    <enum name="UTM_DATA_AVAIL_FLAGS" bitmask="true">
+      <description>Flags for the global position report.</description>
+      <entry value="1" name="UTM_DATA_AVAIL_FLAGS_TIME_VALID">
+        <description>The field time contains valid data.</description>
+      </entry>
+      <entry value="2" name="UTM_DATA_AVAIL_FLAGS_UAS_ID_AVAILABLE">
+        <description>The field uas_id contains valid data.</description>
+      </entry>
+      <entry value="4" name="UTM_DATA_AVAIL_FLAGS_POSITION_AVAILABLE">
+        <description>The fields lat, lon and h_acc contain valid data.</description>
+      </entry>
+      <entry value="8" name="UTM_DATA_AVAIL_FLAGS_ALTITUDE_AVAILABLE">
+        <description>The fields alt and v_acc contain valid data.</description>
+      </entry>
+      <entry value="16" name="UTM_DATA_AVAIL_FLAGS_RELATIVE_ALTITUDE_AVAILABLE">
+        <description>The field relative_alt contains valid data.</description>
+      </entry>
+      <entry value="32" name="UTM_DATA_AVAIL_FLAGS_HORIZONTAL_VELO_AVAILABLE">
+        <description>The fields vx and vy contain valid data.</description>
+      </entry>
+      <entry value="64" name="UTM_DATA_AVAIL_FLAGS_VERTICAL_VELO_AVAILABLE">
+        <description>The field vz contains valid data.</description>
+      </entry>
+      <entry value="128" name="UTM_DATA_AVAIL_FLAGS_NEXT_WAYPOINT_AVAILABLE">
+        <description>The fields next_lat, next_lon and next_alt contain valid data.</description>
+      </entry>
+    </enum>
+    <!-- cellular status information -->
+    <enum name="CELLULAR_STATUS_FLAG">
+      <description>These flags encode the cellular network status</description>
+      <entry value="0" name="CELLULAR_STATUS_FLAG_UNKNOWN">
+        <description>State unknown or not reportable.</description>
+      </entry>
+      <entry value="1" name="CELLULAR_STATUS_FLAG_FAILED">
+        <description>Modem is unusable</description>
+      </entry>
+      <entry value="2" name="CELLULAR_STATUS_FLAG_INITIALIZING">
+        <description>Modem is being initialized</description>
+      </entry>
+      <entry value="3" name="CELLULAR_STATUS_FLAG_LOCKED">
+        <description>Modem is locked</description>
+      </entry>
+      <entry value="4" name="CELLULAR_STATUS_FLAG_DISABLED">
+        <description>Modem is not enabled and is powered down</description>
+      </entry>
+      <entry value="5" name="CELLULAR_STATUS_FLAG_DISABLING">
+        <description>Modem is currently transitioning to the CELLULAR_STATUS_FLAG_DISABLED state</description>
+      </entry>
+      <entry value="6" name="CELLULAR_STATUS_FLAG_ENABLING">
+        <description>Modem is currently transitioning to the CELLULAR_STATUS_FLAG_ENABLED state</description>
+      </entry>
+      <entry value="7" name="CELLULAR_STATUS_FLAG_ENABLED">
+        <description>Modem is enabled and powered on but not registered with a network provider and not available for data connections</description>
+      </entry>
+      <entry value="8" name="CELLULAR_STATUS_FLAG_SEARCHING">
+        <description>Modem is searching for a network provider to register</description>
+      </entry>
+      <entry value="9" name="CELLULAR_STATUS_FLAG_REGISTERED">
+        <description>Modem is registered with a network provider, and data connections and messaging may be available for use</description>
+      </entry>
+      <entry value="10" name="CELLULAR_STATUS_FLAG_DISCONNECTING">
+        <description>Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated</description>
+      </entry>
+      <entry value="11" name="CELLULAR_STATUS_FLAG_CONNECTING">
+        <description>Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered</description>
+      </entry>
+      <entry value="12" name="CELLULAR_STATUS_FLAG_CONNECTED">
+        <description>One or more packet data bearers is active and connected</description>
+      </entry>
+    </enum>
+    <enum name="CELLULAR_NETWORK_FAILED_REASON">
+      <description>These flags are used to diagnose the failure state of CELLULAR_STATUS</description>
+      <entry value="0" name="CELLULAR_NETWORK_FAILED_REASON_NONE">
+        <description>No error</description>
+      </entry>
+      <entry value="1" name="CELLULAR_NETWORK_FAILED_REASON_UNKNOWN">
+        <description>Error state is unknown</description>
+      </entry>
+      <entry value="2" name="CELLULAR_NETWORK_FAILED_REASON_SIM_MISSING">
+        <description>SIM is required for the modem but missing</description>
+      </entry>
+      <entry value="3" name="CELLULAR_NETWORK_FAILED_REASON_SIM_ERROR">
+        <description>SIM is available, but not usable for connection</description>
+      </entry>
+    </enum>
+    <enum name="CELLULAR_NETWORK_RADIO_TYPE">
+      <description>Cellular network radio type</description>
+      <entry value="0" name="CELLULAR_NETWORK_RADIO_TYPE_NONE"/>
+      <entry value="1" name="CELLULAR_NETWORK_RADIO_TYPE_GSM"/>
+      <entry value="2" name="CELLULAR_NETWORK_RADIO_TYPE_CDMA"/>
+      <entry value="3" name="CELLULAR_NETWORK_RADIO_TYPE_WCDMA"/>
+      <entry value="4" name="CELLULAR_NETWORK_RADIO_TYPE_LTE"/>
+    </enum>
+    <enum name="PRECISION_LAND_MODE">
+      <description>Precision land modes (used in MAV_CMD_NAV_LAND).</description>
+      <entry value="0" name="PRECISION_LAND_MODE_DISABLED">
+        <description>Normal (non-precision) landing.</description>
+      </entry>
+      <entry value="1" name="PRECISION_LAND_MODE_OPPORTUNISTIC">
+        <description>Use precision landing if beacon detected when land command accepted, otherwise land normally.</description>
+      </entry>
+      <entry value="2" name="PRECISION_LAND_MODE_REQUIRED">
+        <description>Use precision landing, searching for beacon if not found when land command accepted (land normally if beacon cannot be found).</description>
+      </entry>
+    </enum>
+    <!-- parachute action enum -->
+    <enum name="PARACHUTE_ACTION">
+      <description>Parachute actions. Trigger release and enable/disable auto-release.</description>
+      <entry value="0" name="PARACHUTE_DISABLE">
+        <description>Disable auto-release of parachute (i.e. release triggered by crash detectors).</description>
+      </entry>
+      <entry value="1" name="PARACHUTE_ENABLE">
+        <description>Enable auto-release of parachute.</description>
+      </entry>
+      <entry value="2" name="PARACHUTE_RELEASE">
+        <description>Release parachute and kill motors.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_TUNNEL_PAYLOAD_TYPE">
+      <entry value="0" name="MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN">
+        <description>Encoding of payload unknown.</description>
+      </entry>
+      <entry value="200" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="201" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="202" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="203" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="204" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="205" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="206" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="207" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="208" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+      <entry value="209" name="MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9">
+        <description>Registered for STorM32 gimbal controller.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_ID_TYPE">
+      <entry value="0" name="MAV_ODID_ID_TYPE_NONE">
+        <description>No type defined.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_ID_TYPE_SERIAL_NUMBER">
+        <description>Manufacturer Serial Number (ANSI/CTA-2063 format).</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_ID_TYPE_CAA_REGISTRATION_ID">
+        <description>CAA (Civil Aviation Authority) registered ID. Format: [ICAO Country Code].[CAA Assigned ID].</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_ID_TYPE_UTM_ASSIGNED_UUID">
+        <description>UTM (Unmanned Traffic Management) assigned UUID (RFC4122).</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_ID_TYPE_SPECIFIC_SESSION_ID">
+        <description>A 20 byte ID for a specific flight/session. The exact ID type is indicated by the first byte of uas_id and these type values are managed by ICAO.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_UA_TYPE">
+      <entry value="0" name="MAV_ODID_UA_TYPE_NONE">
+        <description>No UA (Unmanned Aircraft) type defined.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_UA_TYPE_AEROPLANE">
+        <description>Aeroplane/Airplane. Fixed wing.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_UA_TYPE_HELICOPTER_OR_MULTIROTOR">
+        <description>Helicopter or multirotor.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_UA_TYPE_GYROPLANE">
+        <description>Gyroplane.</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_UA_TYPE_HYBRID_LIFT">
+        <description>VTOL (Vertical Take-Off and Landing). Fixed wing aircraft that can take off vertically.</description>
+      </entry>
+      <entry value="5" name="MAV_ODID_UA_TYPE_ORNITHOPTER">
+        <description>Ornithopter.</description>
+      </entry>
+      <entry value="6" name="MAV_ODID_UA_TYPE_GLIDER">
+        <description>Glider.</description>
+      </entry>
+      <entry value="7" name="MAV_ODID_UA_TYPE_KITE">
+        <description>Kite.</description>
+      </entry>
+      <entry value="8" name="MAV_ODID_UA_TYPE_FREE_BALLOON">
+        <description>Free Balloon.</description>
+      </entry>
+      <entry value="9" name="MAV_ODID_UA_TYPE_CAPTIVE_BALLOON">
+        <description>Captive Balloon.</description>
+      </entry>
+      <entry value="10" name="MAV_ODID_UA_TYPE_AIRSHIP">
+        <description>Airship. E.g. a blimp.</description>
+      </entry>
+      <entry value="11" name="MAV_ODID_UA_TYPE_FREE_FALL_PARACHUTE">
+        <description>Free Fall/Parachute (unpowered).</description>
+      </entry>
+      <entry value="12" name="MAV_ODID_UA_TYPE_ROCKET">
+        <description>Rocket.</description>
+      </entry>
+      <entry value="13" name="MAV_ODID_UA_TYPE_TETHERED_POWERED_AIRCRAFT">
+        <description>Tethered powered aircraft.</description>
+      </entry>
+      <entry value="14" name="MAV_ODID_UA_TYPE_GROUND_OBSTACLE">
+        <description>Ground Obstacle.</description>
+      </entry>
+      <entry value="15" name="MAV_ODID_UA_TYPE_OTHER">
+        <description>Other type of aircraft not listed earlier.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_STATUS">
+      <entry value="0" name="MAV_ODID_STATUS_UNDECLARED">
+        <description>The status of the (UA) Unmanned Aircraft is undefined.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_STATUS_GROUND">
+        <description>The UA is on the ground.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_STATUS_AIRBORNE">
+        <description>The UA is in the air.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_STATUS_EMERGENCY">
+        <description>The UA is having an emergency.</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_STATUS_REMOTE_ID_SYSTEM_FAILURE">
+        <description>The remote ID system is failing or unreliable in some way.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_HEIGHT_REF">
+      <entry value="0" name="MAV_ODID_HEIGHT_REF_OVER_TAKEOFF">
+        <description>The height field is relative to the take-off location.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_HEIGHT_REF_OVER_GROUND">
+        <description>The height field is relative to ground.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_HOR_ACC">
+      <entry value="0" name="MAV_ODID_HOR_ACC_UNKNOWN">
+        <description>The horizontal accuracy is unknown.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_HOR_ACC_10NM">
+        <description>The horizontal accuracy is smaller than 10 Nautical Miles. 18.52 km.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_HOR_ACC_4NM">
+        <description>The horizontal accuracy is smaller than 4 Nautical Miles. 7.408 km.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_HOR_ACC_2NM">
+        <description>The horizontal accuracy is smaller than 2 Nautical Miles. 3.704 km.</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_HOR_ACC_1NM">
+        <description>The horizontal accuracy is smaller than 1 Nautical Miles. 1.852 km.</description>
+      </entry>
+      <entry value="5" name="MAV_ODID_HOR_ACC_0_5NM">
+        <description>The horizontal accuracy is smaller than 0.5 Nautical Miles. 926 m.</description>
+      </entry>
+      <entry value="6" name="MAV_ODID_HOR_ACC_0_3NM">
+        <description>The horizontal accuracy is smaller than 0.3 Nautical Miles. 555.6 m.</description>
+      </entry>
+      <entry value="7" name="MAV_ODID_HOR_ACC_0_1NM">
+        <description>The horizontal accuracy is smaller than 0.1 Nautical Miles. 185.2 m.</description>
+      </entry>
+      <entry value="8" name="MAV_ODID_HOR_ACC_0_05NM">
+        <description>The horizontal accuracy is smaller than 0.05 Nautical Miles. 92.6 m.</description>
+      </entry>
+      <entry value="9" name="MAV_ODID_HOR_ACC_30_METER">
+        <description>The horizontal accuracy is smaller than 30 meter.</description>
+      </entry>
+      <entry value="10" name="MAV_ODID_HOR_ACC_10_METER">
+        <description>The horizontal accuracy is smaller than 10 meter.</description>
+      </entry>
+      <entry value="11" name="MAV_ODID_HOR_ACC_3_METER">
+        <description>The horizontal accuracy is smaller than 3 meter.</description>
+      </entry>
+      <entry value="12" name="MAV_ODID_HOR_ACC_1_METER">
+        <description>The horizontal accuracy is smaller than 1 meter.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_VER_ACC">
+      <entry value="0" name="MAV_ODID_VER_ACC_UNKNOWN">
+        <description>The vertical accuracy is unknown.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_VER_ACC_150_METER">
+        <description>The vertical accuracy is smaller than 150 meter.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_VER_ACC_45_METER">
+        <description>The vertical accuracy is smaller than 45 meter.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_VER_ACC_25_METER">
+        <description>The vertical accuracy is smaller than 25 meter.</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_VER_ACC_10_METER">
+        <description>The vertical accuracy is smaller than 10 meter.</description>
+      </entry>
+      <entry value="5" name="MAV_ODID_VER_ACC_3_METER">
+        <description>The vertical accuracy is smaller than 3 meter.</description>
+      </entry>
+      <entry value="6" name="MAV_ODID_VER_ACC_1_METER">
+        <description>The vertical accuracy is smaller than 1 meter.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_SPEED_ACC">
+      <entry value="0" name="MAV_ODID_SPEED_ACC_UNKNOWN">
+        <description>The speed accuracy is unknown.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_SPEED_ACC_10_METERS_PER_SECOND">
+        <description>The speed accuracy is smaller than 10 meters per second.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_SPEED_ACC_3_METERS_PER_SECOND">
+        <description>The speed accuracy is smaller than 3 meters per second.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_SPEED_ACC_1_METERS_PER_SECOND">
+        <description>The speed accuracy is smaller than 1 meters per second.</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_SPEED_ACC_0_3_METERS_PER_SECOND">
+        <description>The speed accuracy is smaller than 0.3 meters per second.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_TIME_ACC">
+      <entry value="0" name="MAV_ODID_TIME_ACC_UNKNOWN">
+        <description>The timestamp accuracy is unknown.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_TIME_ACC_0_1_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.1 second.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_TIME_ACC_0_2_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.2 second.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_TIME_ACC_0_3_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.3 second.</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_TIME_ACC_0_4_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.4 second.</description>
+      </entry>
+      <entry value="5" name="MAV_ODID_TIME_ACC_0_5_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.5 second.</description>
+      </entry>
+      <entry value="6" name="MAV_ODID_TIME_ACC_0_6_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.6 second.</description>
+      </entry>
+      <entry value="7" name="MAV_ODID_TIME_ACC_0_7_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.7 second.</description>
+      </entry>
+      <entry value="8" name="MAV_ODID_TIME_ACC_0_8_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.8 second.</description>
+      </entry>
+      <entry value="9" name="MAV_ODID_TIME_ACC_0_9_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 0.9 second.</description>
+      </entry>
+      <entry value="10" name="MAV_ODID_TIME_ACC_1_0_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 1.0 second.</description>
+      </entry>
+      <entry value="11" name="MAV_ODID_TIME_ACC_1_1_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 1.1 second.</description>
+      </entry>
+      <entry value="12" name="MAV_ODID_TIME_ACC_1_2_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 1.2 second.</description>
+      </entry>
+      <entry value="13" name="MAV_ODID_TIME_ACC_1_3_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 1.3 second.</description>
+      </entry>
+      <entry value="14" name="MAV_ODID_TIME_ACC_1_4_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 1.4 second.</description>
+      </entry>
+      <entry value="15" name="MAV_ODID_TIME_ACC_1_5_SECOND">
+        <description>The timestamp accuracy is smaller than or equal to 1.5 second.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_AUTH_TYPE">
+      <entry value="0" name="MAV_ODID_AUTH_TYPE_NONE">
+        <description>No authentication type is specified.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_AUTH_TYPE_UAS_ID_SIGNATURE">
+        <description>Signature for the UAS (Unmanned Aircraft System) ID.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_AUTH_TYPE_OPERATOR_ID_SIGNATURE">
+        <description>Signature for the Operator ID.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_AUTH_TYPE_MESSAGE_SET_SIGNATURE">
+        <description>Signature for the entire message set.</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_AUTH_TYPE_NETWORK_REMOTE_ID">
+        <description>Authentication is provided by Network Remote ID.</description>
+      </entry>
+      <entry value="5" name="MAV_ODID_AUTH_TYPE_SPECIFIC_AUTHENTICATION">
+        <description>The exact authentication type is indicated by the first byte of authentication_data and these type values are managed by ICAO.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_DESC_TYPE">
+      <entry value="0" name="MAV_ODID_DESC_TYPE_TEXT">
+        <description>Optional free-form text description of the purpose of the flight.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_DESC_TYPE_EMERGENCY">
+        <description>Optional additional clarification when status == MAV_ODID_STATUS_EMERGENCY.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_DESC_TYPE_EXTENDED_STATUS">
+        <description>Optional additional clarification when status != MAV_ODID_STATUS_EMERGENCY.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_OPERATOR_LOCATION_TYPE">
+      <entry value="0" name="MAV_ODID_OPERATOR_LOCATION_TYPE_TAKEOFF">
+        <description>The location/altitude of the operator is the same as the take-off location.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_OPERATOR_LOCATION_TYPE_LIVE_GNSS">
+        <description>The location/altitude of the operator is dynamic. E.g. based on live GNSS data.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_OPERATOR_LOCATION_TYPE_FIXED">
+        <description>The location/altitude of the operator are fixed values.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_CLASSIFICATION_TYPE">
+      <entry value="0" name="MAV_ODID_CLASSIFICATION_TYPE_UNDECLARED">
+        <description>The classification type for the UA is undeclared.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_CLASSIFICATION_TYPE_EU">
+        <description>The classification type for the UA follows EU (European Union) specifications.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_CATEGORY_EU">
+      <entry value="0" name="MAV_ODID_CATEGORY_EU_UNDECLARED">
+        <description>The category for the UA, according to the EU specification, is undeclared.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_CATEGORY_EU_OPEN">
+        <description>The category for the UA, according to the EU specification, is the Open category.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_CATEGORY_EU_SPECIFIC">
+        <description>The category for the UA, according to the EU specification, is the Specific category.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_CATEGORY_EU_CERTIFIED">
+        <description>The category for the UA, according to the EU specification, is the Certified category.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_CLASS_EU">
+      <entry value="0" name="MAV_ODID_CLASS_EU_UNDECLARED">
+        <description>The class for the UA, according to the EU specification, is undeclared.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_CLASS_EU_CLASS_0">
+        <description>The class for the UA, according to the EU specification, is Class 0.</description>
+      </entry>
+      <entry value="2" name="MAV_ODID_CLASS_EU_CLASS_1">
+        <description>The class for the UA, according to the EU specification, is Class 1.</description>
+      </entry>
+      <entry value="3" name="MAV_ODID_CLASS_EU_CLASS_2">
+        <description>The class for the UA, according to the EU specification, is Class 2.</description>
+      </entry>
+      <entry value="4" name="MAV_ODID_CLASS_EU_CLASS_3">
+        <description>The class for the UA, according to the EU specification, is Class 3.</description>
+      </entry>
+      <entry value="5" name="MAV_ODID_CLASS_EU_CLASS_4">
+        <description>The class for the UA, according to the EU specification, is Class 4.</description>
+      </entry>
+      <entry value="6" name="MAV_ODID_CLASS_EU_CLASS_5">
+        <description>The class for the UA, according to the EU specification, is Class 5.</description>
+      </entry>
+      <entry value="7" name="MAV_ODID_CLASS_EU_CLASS_6">
+        <description>The class for the UA, according to the EU specification, is Class 6.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_OPERATOR_ID_TYPE">
+      <entry value="0" name="MAV_ODID_OPERATOR_ID_TYPE_CAA">
+        <description>CAA (Civil Aviation Authority) registered operator ID.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_ODID_ARM_STATUS">
+      <entry value="0" name="MAV_ODID_ARM_STATUS_GOOD_TO_ARM">
+        <description>Passing arming checks.</description>
+      </entry>
+      <entry value="1" name="MAV_ODID_ARM_STATUS_PRE_ARM_FAIL_GENERIC">
+        <description>Generic arming failure, see error string for details.</description>
+      </entry>
+    </enum>
+    <enum name="TUNE_FORMAT">
+      <description>Tune formats (used for vehicle buzzer/tone generation).</description>
+      <entry value="1" name="TUNE_FORMAT_QBASIC1_1">
+        <description>Format is QBasic 1.1 Play: https://www.qbasic.net/en/reference/qb11/Statement/PLAY-006.htm.</description>
+      </entry>
+      <entry value="2" name="TUNE_FORMAT_MML_MODERN">
+        <description>Format is Modern Music Markup Language (MML): https://en.wikipedia.org/wiki/Music_Macro_Language#Modern_MML.</description>
+      </entry>
+    </enum>
+    <!-- AIS related enums-->
+    <enum name="AIS_TYPE">
+      <description>Type of AIS vessel, enum duplicated from AIS standard, https://gpsd.gitlab.io/gpsd/AIVDM.html</description>
+      <entry value="0" name="AIS_TYPE_UNKNOWN">
+        <description>Not available (default).</description>
+      </entry>
+      <entry value="1" name="AIS_TYPE_RESERVED_1"/>
+      <entry value="2" name="AIS_TYPE_RESERVED_2"/>
+      <entry value="3" name="AIS_TYPE_RESERVED_3"/>
+      <entry value="4" name="AIS_TYPE_RESERVED_4"/>
+      <entry value="5" name="AIS_TYPE_RESERVED_5"/>
+      <entry value="6" name="AIS_TYPE_RESERVED_6"/>
+      <entry value="7" name="AIS_TYPE_RESERVED_7"/>
+      <entry value="8" name="AIS_TYPE_RESERVED_8"/>
+      <entry value="9" name="AIS_TYPE_RESERVED_9"/>
+      <entry value="10" name="AIS_TYPE_RESERVED_10"/>
+      <entry value="11" name="AIS_TYPE_RESERVED_11"/>
+      <entry value="12" name="AIS_TYPE_RESERVED_12"/>
+      <entry value="13" name="AIS_TYPE_RESERVED_13"/>
+      <entry value="14" name="AIS_TYPE_RESERVED_14"/>
+      <entry value="15" name="AIS_TYPE_RESERVED_15"/>
+      <entry value="16" name="AIS_TYPE_RESERVED_16"/>
+      <entry value="17" name="AIS_TYPE_RESERVED_17"/>
+      <entry value="18" name="AIS_TYPE_RESERVED_18"/>
+      <entry value="19" name="AIS_TYPE_RESERVED_19"/>
+      <entry value="20" name="AIS_TYPE_WIG">
+        <description>Wing In Ground effect.</description>
+      </entry>
+      <entry value="21" name="AIS_TYPE_WIG_HAZARDOUS_A"/>
+      <entry value="22" name="AIS_TYPE_WIG_HAZARDOUS_B"/>
+      <entry value="23" name="AIS_TYPE_WIG_HAZARDOUS_C"/>
+      <entry value="24" name="AIS_TYPE_WIG_HAZARDOUS_D"/>
+      <entry value="25" name="AIS_TYPE_WIG_RESERVED_1"/>
+      <entry value="26" name="AIS_TYPE_WIG_RESERVED_2"/>
+      <entry value="27" name="AIS_TYPE_WIG_RESERVED_3"/>
+      <entry value="28" name="AIS_TYPE_WIG_RESERVED_4"/>
+      <entry value="29" name="AIS_TYPE_WIG_RESERVED_5"/>
+      <entry value="30" name="AIS_TYPE_FISHING"/>
+      <entry value="31" name="AIS_TYPE_TOWING"/>
+      <entry value="32" name="AIS_TYPE_TOWING_LARGE">
+        <description>Towing: length exceeds 200m or breadth exceeds 25m.</description>
+      </entry>
+      <entry value="33" name="AIS_TYPE_DREDGING">
+        <description>Dredging or other underwater ops.</description>
+      </entry>
+      <entry value="34" name="AIS_TYPE_DIVING"/>
+      <entry value="35" name="AIS_TYPE_MILITARY"/>
+      <entry value="36" name="AIS_TYPE_SAILING"/>
+      <entry value="37" name="AIS_TYPE_PLEASURE"/>
+      <entry value="38" name="AIS_TYPE_RESERVED_20"/>
+      <entry value="39" name="AIS_TYPE_RESERVED_21"/>
+      <entry value="40" name="AIS_TYPE_HSC">
+        <description>High Speed Craft.</description>
+      </entry>
+      <entry value="41" name="AIS_TYPE_HSC_HAZARDOUS_A"/>
+      <entry value="42" name="AIS_TYPE_HSC_HAZARDOUS_B"/>
+      <entry value="43" name="AIS_TYPE_HSC_HAZARDOUS_C"/>
+      <entry value="44" name="AIS_TYPE_HSC_HAZARDOUS_D"/>
+      <entry value="45" name="AIS_TYPE_HSC_RESERVED_1"/>
+      <entry value="46" name="AIS_TYPE_HSC_RESERVED_2"/>
+      <entry value="47" name="AIS_TYPE_HSC_RESERVED_3"/>
+      <entry value="48" name="AIS_TYPE_HSC_RESERVED_4"/>
+      <entry value="49" name="AIS_TYPE_HSC_UNKNOWN"/>
+      <entry value="50" name="AIS_TYPE_PILOT"/>
+      <entry value="51" name="AIS_TYPE_SAR">
+        <description>Search And Rescue vessel.</description>
+      </entry>
+      <entry value="52" name="AIS_TYPE_TUG"/>
+      <entry value="53" name="AIS_TYPE_PORT_TENDER"/>
+      <entry value="54" name="AIS_TYPE_ANTI_POLLUTION">
+        <description>Anti-pollution equipment.</description>
+      </entry>
+      <entry value="55" name="AIS_TYPE_LAW_ENFORCEMENT"/>
+      <entry value="56" name="AIS_TYPE_SPARE_LOCAL_1"/>
+      <entry value="57" name="AIS_TYPE_SPARE_LOCAL_2"/>
+      <entry value="58" name="AIS_TYPE_MEDICAL_TRANSPORT"/>
+      <entry value="59" name="AIS_TYPE_NONECOMBATANT">
+        <description>Noncombatant ship according to RR Resolution No. 18.</description>
+      </entry>
+      <entry value="60" name="AIS_TYPE_PASSENGER"/>
+      <entry value="61" name="AIS_TYPE_PASSENGER_HAZARDOUS_A"/>
+      <entry value="62" name="AIS_TYPE_PASSENGER_HAZARDOUS_B"/>
+      <entry value="63" name="AIS_TYPE_PASSENGER_HAZARDOUS_C"/>
+      <entry value="64" name="AIS_TYPE_PASSENGER_HAZARDOUS_D"/>
+      <entry value="65" name="AIS_TYPE_PASSENGER_RESERVED_1"/>
+      <entry value="66" name="AIS_TYPE_PASSENGER_RESERVED_2"/>
+      <entry value="67" name="AIS_TYPE_PASSENGER_RESERVED_3"/>
+      <entry value="68" name="AIS_TYPE_PASSENGER_RESERVED_4"/>
+      <entry value="69" name="AIS_TYPE_PASSENGER_UNKNOWN"/>
+      <entry value="70" name="AIS_TYPE_CARGO"/>
+      <entry value="71" name="AIS_TYPE_CARGO_HAZARDOUS_A"/>
+      <entry value="72" name="AIS_TYPE_CARGO_HAZARDOUS_B"/>
+      <entry value="73" name="AIS_TYPE_CARGO_HAZARDOUS_C"/>
+      <entry value="74" name="AIS_TYPE_CARGO_HAZARDOUS_D"/>
+      <entry value="75" name="AIS_TYPE_CARGO_RESERVED_1"/>
+      <entry value="76" name="AIS_TYPE_CARGO_RESERVED_2"/>
+      <entry value="77" name="AIS_TYPE_CARGO_RESERVED_3"/>
+      <entry value="78" name="AIS_TYPE_CARGO_RESERVED_4"/>
+      <entry value="79" name="AIS_TYPE_CARGO_UNKNOWN"/>
+      <entry value="80" name="AIS_TYPE_TANKER"/>
+      <entry value="81" name="AIS_TYPE_TANKER_HAZARDOUS_A"/>
+      <entry value="82" name="AIS_TYPE_TANKER_HAZARDOUS_B"/>
+      <entry value="83" name="AIS_TYPE_TANKER_HAZARDOUS_C"/>
+      <entry value="84" name="AIS_TYPE_TANKER_HAZARDOUS_D"/>
+      <entry value="85" name="AIS_TYPE_TANKER_RESERVED_1"/>
+      <entry value="86" name="AIS_TYPE_TANKER_RESERVED_2"/>
+      <entry value="87" name="AIS_TYPE_TANKER_RESERVED_3"/>
+      <entry value="88" name="AIS_TYPE_TANKER_RESERVED_4"/>
+      <entry value="89" name="AIS_TYPE_TANKER_UNKNOWN"/>
+      <entry value="90" name="AIS_TYPE_OTHER"/>
+      <entry value="91" name="AIS_TYPE_OTHER_HAZARDOUS_A"/>
+      <entry value="92" name="AIS_TYPE_OTHER_HAZARDOUS_B"/>
+      <entry value="93" name="AIS_TYPE_OTHER_HAZARDOUS_C"/>
+      <entry value="94" name="AIS_TYPE_OTHER_HAZARDOUS_D"/>
+      <entry value="95" name="AIS_TYPE_OTHER_RESERVED_1"/>
+      <entry value="96" name="AIS_TYPE_OTHER_RESERVED_2"/>
+      <entry value="97" name="AIS_TYPE_OTHER_RESERVED_3"/>
+      <entry value="98" name="AIS_TYPE_OTHER_RESERVED_4"/>
+      <entry value="99" name="AIS_TYPE_OTHER_UNKNOWN"/>
+    </enum>
+    <enum name="AIS_NAV_STATUS">
+      <description>Navigational status of AIS vessel, enum duplicated from AIS standard, https://gpsd.gitlab.io/gpsd/AIVDM.html</description>
+      <entry value="0" name="UNDER_WAY">
+        <description>Under way using engine.</description>
+      </entry>
+      <entry value="1" name="AIS_NAV_ANCHORED"/>
+      <entry value="2" name="AIS_NAV_UN_COMMANDED"/>
+      <entry value="3" name="AIS_NAV_RESTRICTED_MANOEUVERABILITY"/>
+      <entry value="4" name="AIS_NAV_DRAUGHT_CONSTRAINED"/>
+      <entry value="5" name="AIS_NAV_MOORED"/>
+      <entry value="6" name="AIS_NAV_AGROUND"/>
+      <entry value="7" name="AIS_NAV_FISHING"/>
+      <entry value="8" name="AIS_NAV_SAILING"/>
+      <entry value="9" name="AIS_NAV_RESERVED_HSC"/>
+      <entry value="10" name="AIS_NAV_RESERVED_WIG"/>
+      <entry value="11" name="AIS_NAV_RESERVED_1"/>
+      <entry value="12" name="AIS_NAV_RESERVED_2"/>
+      <entry value="13" name="AIS_NAV_RESERVED_3"/>
+      <entry value="14" name="AIS_NAV_AIS_SART">
+        <description>Search And Rescue Transponder.</description>
+      </entry>
+      <entry value="15" name="AIS_NAV_UNKNOWN">
+        <description>Not available (default).</description>
+      </entry>
+    </enum>
+    <enum name="AIS_FLAGS" bitmask="true">
+      <description>These flags are used in the AIS_VESSEL.fields bitmask to indicate validity of data in the other message fields. When set, the data is valid.</description>
+      <entry value="1" name="AIS_FLAGS_POSITION_ACCURACY">
+        <description>1 = Position accuracy less than 10m, 0 = position accuracy greater than 10m.</description>
+      </entry>
+      <entry value="2" name="AIS_FLAGS_VALID_COG"/>
+      <entry value="4" name="AIS_FLAGS_VALID_VELOCITY"/>
+      <entry value="8" name="AIS_FLAGS_HIGH_VELOCITY">
+        <description>1 = Velocity over 52.5765m/s (102.2 knots)</description>
+      </entry>
+      <entry value="16" name="AIS_FLAGS_VALID_TURN_RATE"/>
+      <entry value="32" name="AIS_FLAGS_TURN_RATE_SIGN_ONLY">
+        <description>Only the sign of the returned turn rate value is valid, either greater than 5deg/30s or less than -5deg/30s</description>
+      </entry>
+      <entry value="64" name="AIS_FLAGS_VALID_DIMENSIONS"/>
+      <entry value="128" name="AIS_FLAGS_LARGE_BOW_DIMENSION">
+        <description>Distance to bow is larger than 511m</description>
+      </entry>
+      <entry value="256" name="AIS_FLAGS_LARGE_STERN_DIMENSION">
+        <description>Distance to stern is larger than 511m</description>
+      </entry>
+      <entry value="512" name="AIS_FLAGS_LARGE_PORT_DIMENSION">
+        <description>Distance to port side is larger than 63m</description>
+      </entry>
+      <entry value="1024" name="AIS_FLAGS_LARGE_STARBOARD_DIMENSION">
+        <description>Distance to starboard side is larger than 63m</description>
+      </entry>
+      <entry value="2048" name="AIS_FLAGS_VALID_CALLSIGN"/>
+      <entry value="4096" name="AIS_FLAGS_VALID_NAME"/>
+    </enum>
+    <enum name="FAILURE_UNIT">
+      <!-- This enum is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>List of possible units where failures can be injected.</description>
+      <entry value="0" name="FAILURE_UNIT_SENSOR_GYRO"/>
+      <entry value="1" name="FAILURE_UNIT_SENSOR_ACCEL"/>
+      <entry value="2" name="FAILURE_UNIT_SENSOR_MAG"/>
+      <entry value="3" name="FAILURE_UNIT_SENSOR_BARO"/>
+      <entry value="4" name="FAILURE_UNIT_SENSOR_GPS"/>
+      <entry value="5" name="FAILURE_UNIT_SENSOR_OPTICAL_FLOW"/>
+      <entry value="6" name="FAILURE_UNIT_SENSOR_VIO"/>
+      <entry value="7" name="FAILURE_UNIT_SENSOR_DISTANCE_SENSOR"/>
+      <entry value="8" name="FAILURE_UNIT_SENSOR_AIRSPEED"/>
+      <entry value="100" name="FAILURE_UNIT_SYSTEM_BATTERY"/>
+      <entry value="101" name="FAILURE_UNIT_SYSTEM_MOTOR"/>
+      <entry value="102" name="FAILURE_UNIT_SYSTEM_SERVO"/>
+      <entry value="103" name="FAILURE_UNIT_SYSTEM_AVOIDANCE"/>
+      <entry value="104" name="FAILURE_UNIT_SYSTEM_RC_SIGNAL"/>
+      <entry value="105" name="FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL"/>
+    </enum>
+    <enum name="FAILURE_TYPE">
+      <!-- This enum is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>List of possible failure type to inject.</description>
+      <entry value="0" name="FAILURE_TYPE_OK">
+        <description>No failure injected, used to reset a previous failure.</description>
+      </entry>
+      <entry value="1" name="FAILURE_TYPE_OFF">
+        <description>Sets unit off, so completely non-responsive.</description>
+      </entry>
+      <entry value="2" name="FAILURE_TYPE_STUCK">
+        <description>Unit is stuck e.g. keeps reporting the same value.</description>
+      </entry>
+      <entry value="3" name="FAILURE_TYPE_GARBAGE">
+        <description>Unit is reporting complete garbage.</description>
+      </entry>
+      <entry value="4" name="FAILURE_TYPE_WRONG">
+        <description>Unit is consistently wrong.</description>
+      </entry>
+      <entry value="5" name="FAILURE_TYPE_SLOW">
+        <description>Unit is slow, so e.g. reporting at slower than expected rate.</description>
+      </entry>
+      <entry value="6" name="FAILURE_TYPE_DELAYED">
+        <description>Data of unit is delayed in time.</description>
+      </entry>
+      <entry value="7" name="FAILURE_TYPE_INTERMITTENT">
+        <description>Unit is sometimes working, sometimes not.</description>
+      </entry>
+    </enum>
+    <enum name="NAV_VTOL_LAND_OPTIONS">
+      <entry value="0" name="NAV_VTOL_LAND_OPTIONS_DEFAULT">
+        <description>Default autopilot landing behaviour.</description>
+      </entry>
+      <entry value="1" name="NAV_VTOL_LAND_OPTIONS_FW_DESCENT">
+        <description>Descend in fixed wing mode, transitioning to multicopter mode for vertical landing when close to the ground.
+          The fixed wing descent pattern is at the discretion of the vehicle (e.g. transition altitude, loiter direction, radius, and speed, etc.).
+        </description>
+      </entry>
+      <entry value="2" name="NAV_VTOL_LAND_OPTIONS_HOVER_DESCENT">
+        <description>Land in multicopter mode on reaching the landing coordinates (the whole landing is by "hover descent").</description>
+      </entry>
+    </enum>
+    <enum name="MAV_WINCH_STATUS_FLAG" bitmask="true">
+      <description>Winch status flags used in WINCH_STATUS</description>
+      <entry value="1" name="MAV_WINCH_STATUS_HEALTHY">
+        <description>Winch is healthy</description>
+      </entry>
+      <entry value="2" name="MAV_WINCH_STATUS_FULLY_RETRACTED">
+        <description>Winch line is fully retracted</description>
+      </entry>
+      <entry value="4" name="MAV_WINCH_STATUS_MOVING">
+        <description>Winch motor is moving</description>
+      </entry>
+      <entry value="8" name="MAV_WINCH_STATUS_CLUTCH_ENGAGED">
+        <description>Winch clutch is engaged allowing motor to move freely.</description>
+      </entry>
+      <entry value="16" name="MAV_WINCH_STATUS_LOCKED">
+        <description>Winch is locked by locking mechanism.</description>
+      </entry>
+      <entry value="32" name="MAV_WINCH_STATUS_DROPPING">
+        <description>Winch is gravity dropping payload.</description>
+      </entry>
+      <entry value="64" name="MAV_WINCH_STATUS_ARRESTING">
+        <description>Winch is arresting payload descent.</description>
+      </entry>
+      <entry value="128" name="MAV_WINCH_STATUS_GROUND_SENSE">
+        <description>Winch is using torque measurements to sense the ground.</description>
+      </entry>
+      <entry value="256" name="MAV_WINCH_STATUS_RETRACTING">
+        <description>Winch is returning to the fully retracted position.</description>
+      </entry>
+      <entry value="512" name="MAV_WINCH_STATUS_REDELIVER">
+        <description>Winch is redelivering the payload. This is a failover state if the line tension goes above a threshold during RETRACTING.</description>
+      </entry>
+      <entry value="1024" name="MAV_WINCH_STATUS_ABANDON_LINE">
+        <description>Winch is abandoning the line and possibly payload. Winch unspools the entire calculated line length. This is a failover state from REDELIVER if the number of attempts exceeds a threshold.</description>
+      </entry>
+      <entry value="2048" name="MAV_WINCH_STATUS_LOCKING">
+        <description>Winch is engaging the locking mechanism.</description>
+      </entry>
+      <entry value="4096" name="MAV_WINCH_STATUS_LOAD_LINE">
+        <description>Winch is spooling on line.</description>
+      </entry>
+      <entry value="8192" name="MAV_WINCH_STATUS_LOAD_PAYLOAD">
+        <description>Winch is loading a payload.</description>
+      </entry>
+    </enum>
+    <enum name="MAG_CAL_STATUS">
+      <entry value="0" name="MAG_CAL_NOT_STARTED"/>
+      <entry value="1" name="MAG_CAL_WAITING_TO_START"/>
+      <entry value="2" name="MAG_CAL_RUNNING_STEP_ONE"/>
+      <entry value="3" name="MAG_CAL_RUNNING_STEP_TWO"/>
+      <entry value="4" name="MAG_CAL_SUCCESS"/>
+      <entry value="5" name="MAG_CAL_FAILED"/>
+      <entry value="6" name="MAG_CAL_BAD_ORIENTATION"/>
+      <entry value="7" name="MAG_CAL_BAD_RADIUS"/>
+    </enum>
+    <enum name="MAV_EVENT_ERROR_REASON">
+      <description>Reason for an event error response.</description>
+      <entry value="0" name="MAV_EVENT_ERROR_REASON_UNAVAILABLE">
+        <description>The requested event is not available (anymore).</description>
+      </entry>
+    </enum>
+    <enum name="MAV_EVENT_CURRENT_SEQUENCE_FLAGS">
+      <description>Flags for CURRENT_EVENT_SEQUENCE.</description>
+      <entry value="1" name="MAV_EVENT_CURRENT_SEQUENCE_FLAGS_RESET">
+        <description>A sequence reset has happened (e.g. vehicle reboot).</description>
+      </entry>
+    </enum>
+    <enum name="HIL_SENSOR_UPDATED_FLAGS" bitmask="true">
+      <description>Flags in the HIL_SENSOR message indicate which fields have updated since the last message</description>
+      <entry value="0" name="HIL_SENSOR_UPDATED_NONE">
+        <description>None of the fields in HIL_SENSOR have been updated</description>
+      </entry>
+      <entry value="1" name="HIL_SENSOR_UPDATED_XACC">
+        <description>The value in the xacc field has been updated</description>
+      </entry>
+      <entry value="2" name="HIL_SENSOR_UPDATED_YACC">
+        <description>The value in the yacc field has been updated</description>
+      </entry>
+      <entry value="4" name="HIL_SENSOR_UPDATED_ZACC">
+        <description>The value in the zacc field has been updated</description>
+      </entry>
+      <entry value="8" name="HIL_SENSOR_UPDATED_XGYRO">
+        <description>The value in the xgyro field has been updated</description>
+      </entry>
+      <entry value="16" name="HIL_SENSOR_UPDATED_YGYRO">
+        <description>The value in the ygyro field has been updated</description>
+      </entry>
+      <entry value="32" name="HIL_SENSOR_UPDATED_ZGYRO">
+        <description>The value in the zgyro field has been updated</description>
+      </entry>
+      <entry value="64" name="HIL_SENSOR_UPDATED_XMAG">
+        <description>The value in the xmag field has been updated</description>
+      </entry>
+      <entry value="128" name="HIL_SENSOR_UPDATED_YMAG">
+        <description>The value in the ymag field has been updated</description>
+      </entry>
+      <entry value="256" name="HIL_SENSOR_UPDATED_ZMAG">
+        <description>The value in the zmag field has been updated</description>
+      </entry>
+      <entry value="512" name="HIL_SENSOR_UPDATED_ABS_PRESSURE">
+        <description>The value in the abs_pressure field has been updated</description>
+      </entry>
+      <entry value="1024" name="HIL_SENSOR_UPDATED_DIFF_PRESSURE">
+        <description>The value in the diff_pressure field has been updated</description>
+      </entry>
+      <entry value="2048" name="HIL_SENSOR_UPDATED_PRESSURE_ALT">
+        <description>The value in the pressure_alt field has been updated</description>
+      </entry>
+      <entry value="4096" name="HIL_SENSOR_UPDATED_TEMPERATURE">
+        <description>The value in the temperature field has been updated</description>
+      </entry>
+      <entry value="2147483648" name="HIL_SENSOR_UPDATED_RESET">
+        <description>Full reset of attitude/position/velocities/etc was performed in sim (Bit 31).</description>
+      </entry>
+    </enum>
+    <enum name="HIGHRES_IMU_UPDATED_FLAGS" bitmask="true">
+      <description>Flags in the HIGHRES_IMU message indicate which fields have updated since the last message</description>
+      <entry value="0" name="HIGHRES_IMU_UPDATED_NONE">
+        <description>None of the fields in HIGHRES_IMU have been updated</description>
+      </entry>
+      <entry value="1" name="HIGHRES_IMU_UPDATED_XACC">
+        <description>The value in the xacc field has been updated</description>
+      </entry>
+      <entry value="2" name="HIGHRES_IMU_UPDATED_YACC">
+        <description>The value in the yacc field has been updated</description>
+      </entry>
+      <entry value="4" name="HIGHRES_IMU_UPDATED_ZACC">
+        <description>The value in the zacc field has been updated since</description>
+      </entry>
+      <entry value="8" name="HIGHRES_IMU_UPDATED_XGYRO">
+        <description>The value in the xgyro field has been updated</description>
+      </entry>
+      <entry value="16" name="HIGHRES_IMU_UPDATED_YGYRO">
+        <description>The value in the ygyro field has been updated</description>
+      </entry>
+      <entry value="32" name="HIGHRES_IMU_UPDATED_ZGYRO">
+        <description>The value in the zgyro field has been updated</description>
+      </entry>
+      <entry value="64" name="HIGHRES_IMU_UPDATED_XMAG">
+        <description>The value in the xmag field has been updated</description>
+      </entry>
+      <entry value="128" name="HIGHRES_IMU_UPDATED_YMAG">
+        <description>The value in the ymag field has been updated</description>
+      </entry>
+      <entry value="256" name="HIGHRES_IMU_UPDATED_ZMAG">
+        <description>The value in the zmag field has been updated</description>
+      </entry>
+      <entry value="512" name="HIGHRES_IMU_UPDATED_ABS_PRESSURE">
+        <description>The value in the abs_pressure field has been updated</description>
+      </entry>
+      <entry value="1024" name="HIGHRES_IMU_UPDATED_DIFF_PRESSURE">
+        <description>The value in the diff_pressure field has been updated</description>
+      </entry>
+      <entry value="2048" name="HIGHRES_IMU_UPDATED_PRESSURE_ALT">
+        <description>The value in the pressure_alt field has been updated</description>
+      </entry>
+      <entry value="4096" name="HIGHRES_IMU_UPDATED_TEMPERATURE">
+        <description>The value in the temperature field has been updated</description>
+      </entry>
+      <entry value="65535" name="HIGHRES_IMU_UPDATED_ALL">
+        <description>All fields in HIGHRES_IMU have been updated.</description>
+      </entry>
+    </enum>
+    <enum name="CAN_FILTER_OP">
+      <entry value="0" name="CAN_FILTER_REPLACE"/>
+      <entry value="1" name="CAN_FILTER_ADD"/>
+      <entry value="2" name="CAN_FILTER_REMOVE"/>
+    </enum>
+    <enum name="MAV_FTP_ERR">
+      <description>MAV FTP error codes (https://mavlink.io/en/services/ftp.html)</description>
+      <entry value="0" name="MAV_FTP_ERR_NONE">
+        <description>None: No error</description>
+      </entry>
+      <entry value="1" name="MAV_FTP_ERR_FAIL">
+        <description>Fail: Unknown failure</description>
+      </entry>
+      <entry value="2" name="MAV_FTP_ERR_FAILERRNO">
+        <description>FailErrno: Command failed, Err number sent back in PayloadHeader.data[1].
+		This is a file-system error number understood by the server operating system.</description>
+      </entry>
+      <entry value="3" name="MAV_FTP_ERR_INVALIDDATASIZE">
+        <description>InvalidDataSize: Payload size is invalid</description>
+      </entry>
+      <entry value="4" name="MAV_FTP_ERR_INVALIDSESSION">
+        <description>InvalidSession: Session is not currently open</description>
+      </entry>
+      <entry value="5" name="MAV_FTP_ERR_NOSESSIONSAVAILABLE">
+        <description>NoSessionsAvailable: All available sessions are already in use</description>
+      </entry>
+      <entry value="6" name="MAV_FTP_ERR_EOF">
+        <description>EOF: Offset past end of file for ListDirectory and ReadFile commands</description>
+      </entry>
+      <entry value="7" name="MAV_FTP_ERR_UNKNOWNCOMMAND">
+        <description>UnknownCommand: Unknown command / opcode</description>
+      </entry>
+      <entry value="8" name="MAV_FTP_ERR_FILEEXISTS">
+        <description>FileExists: File/directory already exists</description>
+      </entry>
+      <entry value="9" name="MAV_FTP_ERR_FILEPROTECTED">
+        <description>FileProtected: File/directory is write protected</description>
+      </entry>
+      <entry value="10" name="MAV_FTP_ERR_FILENOTFOUND">
+        <description>FileNotFound: File/directory not found</description>
+      </entry>
+    </enum>
+    <enum name="MAV_FTP_OPCODE">
+      <description>MAV FTP opcodes: https://mavlink.io/en/services/ftp.html</description>
+      <entry value="0" name="MAV_FTP_OPCODE_NONE">
+        <description>None. Ignored, always ACKed</description>
+      </entry>
+      <entry value="1" name="MAV_FTP_OPCODE_TERMINATESESSION">
+        <description>TerminateSession: Terminates open Read session</description>
+      </entry>
+      <entry value="2" name="MAV_FTP_OPCODE_RESETSESSION">
+        <description>ResetSessions: Terminates all open read sessions</description>
+      </entry>
+      <entry value="3" name="MAV_FTP_OPCODE_LISTDIRECTORY">
+        <description>ListDirectory. List files and directories in path from offset</description>
+      </entry>
+      <entry value="4" name="MAV_FTP_OPCODE_OPENFILERO">
+        <description>OpenFileRO: Opens file at path for reading, returns session</description>
+      </entry>
+      <entry value="5" name="MAV_FTP_OPCODE_READFILE">
+        <description>ReadFile: Reads size bytes from offset in session</description>
+      </entry>
+      <entry value="6" name="MAV_FTP_OPCODE_CREATEFILE">
+        <description>CreateFile: Creates file at path for writing, returns session</description>
+      </entry>
+      <entry value="7" name="MAV_FTP_OPCODE_WRITEFILE">
+        <description>WriteFile: Writes size bytes to offset in session</description>
+      </entry>
+      <entry value="8" name="MAV_FTP_OPCODE_REMOVEFILE">
+        <description>RemoveFile: Remove file at path</description>
+      </entry>
+      <entry value="9" name="MAV_FTP_OPCODE_CREATEDIRECTORY">
+        <description>CreateDirectory: Creates directory at path</description>
+      </entry>
+      <entry value="10" name="MAV_FTP_OPCODE_REMOVEDIRECTORY">
+        <description>RemoveDirectory: Removes directory at path. The directory must be empty.</description>
+      </entry>
+      <entry value="11" name="MAV_FTP_OPCODE_OPENFILEWO">
+        <description>OpenFileWO: Opens file at path for writing, returns session</description>
+      </entry>
+      <entry value="12" name="MAV_FTP_OPCODE_TRUNCATEFILE">
+        <description>TruncateFile: Truncate file at path to offset length</description>
+      </entry>
+      <entry value="13" name="MAV_FTP_OPCODE_RENAME">
+        <description>Rename: Rename path1 to path2</description>
+      </entry>
+      <entry value="14" name="MAV_FTP_OPCODE_CALCFILECRC">
+        <description>CalcFileCRC32: Calculate CRC32 for file at path</description>
+      </entry>
+      <entry value="15" name="MAV_FTP_OPCODE_BURSTREADFILE">
+        <description>BurstReadFile: Burst download session file</description>
+      </entry>
+      <entry value="128" name="MAV_FTP_OPCODE_ACK">
+        <description>ACK: ACK response</description>
+      </entry>
+      <entry value="129" name="MAV_FTP_OPCODE_NAK">
+        <description>NAK: NAK response</description>
+      </entry>
+    </enum>
+    <enum name="MISSION_STATE">
+      <description>
+        States of the mission state machine.
+        Note that these states are independent of whether the mission is in a mode that can execute mission items or not (is suspended).
+        They may not all be relevant on all vehicles.
+      </description>
+      <entry value="0" name="MISSION_STATE_UNKNOWN">
+        <description>The mission status reporting is not supported.</description>
+      </entry>
+      <entry value="1" name="MISSION_STATE_NO_MISSION">
+        <description>No mission on the vehicle.</description>
+      </entry>
+      <entry value="2" name="MISSION_STATE_NOT_STARTED">
+        <description>Mission has not started. This is the case after a mission has uploaded but not yet started executing.</description>
+      </entry>
+      <entry value="3" name="MISSION_STATE_ACTIVE">
+        <description>Mission is active, and will execute mission items when in auto mode.</description>
+      </entry>
+      <entry value="4" name="MISSION_STATE_PAUSED">
+        <description>Mission is paused when in auto mode.</description>
+      </entry>
+      <entry value="5" name="MISSION_STATE_COMPLETE">
+        <description>Mission has executed all mission items.</description>
+      </entry>
+    </enum>
+  </enums>
+  <messages>
+    <message id="1" name="SYS_STATUS">
+      <description>The general system state. If the system is following the MAVLink standard, the system state is mainly defined by three orthogonal states/modes: The system mode, which is either LOCKED (motors shut down and locked), MANUAL (system under RC control), GUIDED (system with autonomous position control, position setpoint controlled manually) or AUTO (system guided by path/waypoint planner). The NAV_MODE defined the current flight state: LIFTOFF (often an open-loop maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal navigation state machine. The system status shows whether the system is currently active or not and if an emergency occurred. During the CRITICAL and EMERGENCY states the MAV is still considered to be active, but should start emergency procedures autonomously. After a failure occurred it should first move from active to critical to allow manual intervention and then move to emergency after a certain timeout.</description>
+      <field type="uint32_t" name="onboard_control_sensors_present" enum="MAV_SYS_STATUS_SENSOR" display="bitmask" print_format="0x%04x">Bitmap showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present.</field>
+      <field type="uint32_t" name="onboard_control_sensors_enabled" enum="MAV_SYS_STATUS_SENSOR" display="bitmask" print_format="0x%04x">Bitmap showing which onboard controllers and sensors are enabled:  Value of 0: not enabled. Value of 1: enabled.</field>
+      <field type="uint32_t" name="onboard_control_sensors_health" enum="MAV_SYS_STATUS_SENSOR" display="bitmask" print_format="0x%04x">Bitmap showing which onboard controllers and sensors have an error (or are operational). Value of 0: error. Value of 1: healthy.</field>
+      <field type="uint16_t" name="load" units="d%">Maximum usage in percent of the mainloop time. Values: [0-1000] - should always be below 1000</field>
+      <field type="uint16_t" name="voltage_battery" units="mV" invalid="UINT16_MAX">Battery voltage, UINT16_MAX: Voltage not sent by autopilot</field>
+      <field type="int16_t" name="current_battery" units="cA" invalid="-1">Battery current, -1: Current not sent by autopilot</field>
+      <field type="int8_t" name="battery_remaining" units="%" invalid="-1">Battery energy remaining, -1: Battery remaining energy not sent by autopilot</field>
+      <field type="uint16_t" name="drop_rate_comm" units="c%">Communication drop rate, (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)</field>
+      <field type="uint16_t" name="errors_comm">Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)</field>
+      <field type="uint16_t" name="errors_count1">Autopilot-specific errors</field>
+      <field type="uint16_t" name="errors_count2">Autopilot-specific errors</field>
+      <field type="uint16_t" name="errors_count3">Autopilot-specific errors</field>
+      <field type="uint16_t" name="errors_count4">Autopilot-specific errors</field>
+      <extensions/>
+      <field type="uint32_t" name="onboard_control_sensors_present_extended" enum="MAV_SYS_STATUS_SENSOR_EXTENDED" display="bitmask" print_format="0x%04x">Bitmap showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present.</field>
+      <field type="uint32_t" name="onboard_control_sensors_enabled_extended" enum="MAV_SYS_STATUS_SENSOR_EXTENDED" display="bitmask" print_format="0x%04x">Bitmap showing which onboard controllers and sensors are enabled:  Value of 0: not enabled. Value of 1: enabled.</field>
+      <field type="uint32_t" name="onboard_control_sensors_health_extended" enum="MAV_SYS_STATUS_SENSOR_EXTENDED" display="bitmask" print_format="0x%04x">Bitmap showing which onboard controllers and sensors have an error (or are operational). Value of 0: error. Value of 1: healthy.</field>
+    </message>
+    <message id="2" name="SYSTEM_TIME">
+      <description>The system time is the time of the master clock, typically the computer clock of the main onboard computer.</description>
+      <field type="uint64_t" name="time_unix_usec" units="us">Timestamp (UNIX epoch time).</field>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+    </message>
+    <message id="4" name="PING">
+      <deprecated since="2011-08" replaced_by="SYSTEM_TIME">to be removed / merged with SYSTEM_TIME</deprecated>
+      <description>A ping message either requesting or responding to a ping. This allows to measure the system latencies, including serial port, radio modem and UDP connections. The ping microservice is documented at https://mavlink.io/en/services/ping.html</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint32_t" name="seq">PING sequence</field>
+      <field type="uint8_t" name="target_system">0: request ping from all receiving systems. If greater than 0: message is a ping response and number is the system id of the requesting system</field>
+      <field type="uint8_t" name="target_component">0: request ping from all receiving components. If greater than 0: message is a ping response and number is the component id of the requesting component.</field>
+    </message>
+    <message id="5" name="CHANGE_OPERATOR_CONTROL">
+      <description>Request to control this MAV</description>
+      <field type="uint8_t" name="target_system">System the GCS requests control for</field>
+      <field type="uint8_t" name="control_request">0: request control of this MAV, 1: Release control of this MAV</field>
+      <field type="uint8_t" name="version" units="rad">0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.</field>
+      <field type="char[25]" name="passkey">Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"</field>
+    </message>
+    <message id="6" name="CHANGE_OPERATOR_CONTROL_ACK">
+      <description>Accept / deny control of this MAV</description>
+      <field type="uint8_t" name="gcs_system_id">ID of the GCS this message </field>
+      <field type="uint8_t" name="control_request">0: request control of this MAV, 1: Release control of this MAV</field>
+      <field type="uint8_t" name="ack">0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control</field>
+    </message>
+    <message id="7" name="AUTH_KEY">
+      <description>Emit an encrypted signature / key identifying this system. PLEASE NOTE: This protocol has been kept simple, so transmitting the key requires an encrypted channel for true safety.</description>
+      <field type="char[32]" name="key">key</field>
+    </message>
+    <message id="8" name="LINK_NODE_STATUS">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Status generated in each node in the communication chain and injected into MAVLink stream.</description>
+      <field type="uint64_t" name="timestamp" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="tx_buf" units="%">Remaining free transmit buffer space</field>
+      <field type="uint8_t" name="rx_buf" units="%">Remaining free receive buffer space</field>
+      <field type="uint32_t" name="tx_rate" units="bytes/s">Transmit rate</field>
+      <field type="uint32_t" name="rx_rate" units="bytes/s">Receive rate</field>
+      <field type="uint16_t" name="rx_parse_err" units="bytes">Number of bytes that could not be parsed correctly.</field>
+      <field type="uint16_t" name="tx_overflows" units="bytes">Transmit buffer overflows. This number wraps around as it reaches UINT16_MAX</field>
+      <field type="uint16_t" name="rx_overflows" units="bytes">Receive buffer overflows. This number wraps around as it reaches UINT16_MAX</field>
+      <field type="uint32_t" name="messages_sent">Messages sent</field>
+      <field type="uint32_t" name="messages_received">Messages received (estimated from counting seq)</field>
+      <field type="uint32_t" name="messages_lost">Messages lost (estimated from counting seq)</field>
+    </message>
+    <message id="11" name="SET_MODE">
+      <deprecated since="2015-12" replaced_by="MAV_CMD_DO_SET_MODE">Use COMMAND_LONG with MAV_CMD_DO_SET_MODE instead</deprecated>
+      <description>Set the system mode, as defined by enum MAV_MODE. There is no target component id as the mode is by definition for the overall aircraft, not only for one component.</description>
+      <field type="uint8_t" name="target_system">The system setting the mode</field>
+      <field type="uint8_t" name="base_mode" enum="MAV_MODE">The new base mode.</field>
+      <field type="uint32_t" name="custom_mode">The new autopilot-specific mode. This field can be ignored by an autopilot.</field>
+    </message>
+    <!-- IDs 15-17 reserved for PARAM_VALUE_UNION and other param messages -->
+    <!-- IDs 19 reserved for PARAM_ACK_TRANSACTION (development.xml) -->
+    <message id="20" name="PARAM_REQUEST_READ">
+      <description>Request to read the onboard parameter with the param_id string id. Onboard parameters are stored as key[const char*] -&gt; value[float]. This allows to send a parameter to any other component (such as the GCS) without the need of previous knowledge of possible parameter names. Thus the same GCS can store different parameters for different autopilots. See also https://mavlink.io/en/services/parameter.html for a full documentation of QGroundControl and IMU code.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="char[16]" name="param_id">Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string</field>
+      <field type="int16_t" name="param_index" invalid="-1">Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored)</field>
+    </message>
+    <message id="21" name="PARAM_REQUEST_LIST">
+      <description>Request all parameters of this component. After this request, all parameters are emitted. The parameter microservice is documented at https://mavlink.io/en/services/parameter.html</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+    </message>
+    <message id="22" name="PARAM_VALUE">
+      <description>Emit the value of a onboard parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows him to re-request missing parameters after a loss or timeout. The parameter microservice is documented at https://mavlink.io/en/services/parameter.html</description>
+      <field type="char[16]" name="param_id">Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string</field>
+      <field type="float" name="param_value">Onboard parameter value</field>
+      <field type="uint8_t" name="param_type" enum="MAV_PARAM_TYPE">Onboard parameter type.</field>
+      <field type="uint16_t" name="param_count">Total number of onboard parameters</field>
+      <field type="uint16_t" name="param_index">Index of this onboard parameter</field>
+    </message>
+    <message id="23" name="PARAM_SET">
+      <description>Set a parameter value (write new value to permanent storage).
+        The receiving component should acknowledge the new parameter value by broadcasting a PARAM_VALUE message (broadcasting ensures that multiple GCS all have an up-to-date list of all parameters). If the sending GCS did not receive a PARAM_VALUE within its timeout time, it should re-send the PARAM_SET message. The parameter microservice is documented at https://mavlink.io/en/services/parameter.html.
+        PARAM_SET may also be called within the context of a transaction (started with MAV_CMD_PARAM_TRANSACTION). Within a transaction the receiving component should respond with PARAM_ACK_TRANSACTION to the setter component (instead of broadcasting PARAM_VALUE), and PARAM_SET should be re-sent if this is ACK not received.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="char[16]" name="param_id">Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string</field>
+      <field type="float" name="param_value">Onboard parameter value</field>
+      <field type="uint8_t" name="param_type" enum="MAV_PARAM_TYPE">Onboard parameter type.</field>
+    </message>
+    <message id="24" name="GPS_RAW_INT">
+      <description>The global position, as returned by the Global Positioning System (GPS). This is
+                NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION_INT for the global position estimate.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="fix_type" enum="GPS_FIX_TYPE">GPS fix type.</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude (WGS84, EGM96 ellipsoid)</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude (WGS84, EGM96 ellipsoid)</field>
+      <field type="int32_t" name="alt" units="mm">Altitude (MSL). Positive for up. Note that virtually all GPS modules provide the MSL altitude in addition to the WGS84 altitude.</field>
+      <field type="uint16_t" name="eph" invalid="UINT16_MAX">GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX</field>
+      <field type="uint16_t" name="epv" invalid="UINT16_MAX">GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX</field>
+      <field type="uint16_t" name="vel" units="cm/s" invalid="UINT16_MAX">GPS ground speed. If unknown, set to: UINT16_MAX</field>
+      <field type="uint16_t" name="cog" units="cdeg" invalid="UINT16_MAX">Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX</field>
+      <field type="uint8_t" name="satellites_visible" invalid="UINT8_MAX">Number of satellites visible. If unknown, set to UINT8_MAX</field>
+      <extensions/>
+      <field type="int32_t" name="alt_ellipsoid" units="mm">Altitude (above WGS84, EGM96 ellipsoid). Positive for up.</field>
+      <field type="uint32_t" name="h_acc" units="mm">Position uncertainty.</field>
+      <field type="uint32_t" name="v_acc" units="mm">Altitude uncertainty.</field>
+      <field type="uint32_t" name="vel_acc" units="mm">Speed uncertainty.</field>
+      <field type="uint32_t" name="hdg_acc" units="degE5">Heading / track uncertainty</field>
+      <field type="uint16_t" name="yaw" units="cdeg" invalid="0">Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.</field>
+    </message>
+    <message id="25" name="GPS_STATUS">
+      <description>The positioning status, as reported by GPS. This message is intended to display status information about each satellite visible to the receiver. See message GLOBAL_POSITION_INT for the global position estimate. This message can contain information for up to 20 satellites.</description>
+      <field type="uint8_t" name="satellites_visible">Number of satellites visible</field>
+      <field type="uint8_t[20]" name="satellite_prn">Global satellite ID</field>
+      <field type="uint8_t[20]" name="satellite_used">0: Satellite not used, 1: used for localization</field>
+      <field type="uint8_t[20]" name="satellite_elevation" units="deg">Elevation (0: right on top of receiver, 90: on the horizon) of satellite</field>
+      <field type="uint8_t[20]" name="satellite_azimuth" units="deg">Direction of satellite, 0: 0 deg, 255: 360 deg.</field>
+      <field type="uint8_t[20]" name="satellite_snr" units="dB">Signal to noise ratio of satellite</field>
+    </message>
+    <message id="26" name="SCALED_IMU">
+      <description>The RAW IMU readings for the usual 9DOF sensor setup. This message should contain the scaled values to the described units</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="int16_t" name="xacc" units="mG">X acceleration</field>
+      <field type="int16_t" name="yacc" units="mG">Y acceleration</field>
+      <field type="int16_t" name="zacc" units="mG">Z acceleration</field>
+      <field type="int16_t" name="xgyro" units="mrad/s">Angular speed around X axis</field>
+      <field type="int16_t" name="ygyro" units="mrad/s">Angular speed around Y axis</field>
+      <field type="int16_t" name="zgyro" units="mrad/s">Angular speed around Z axis</field>
+      <field type="int16_t" name="xmag" units="mgauss">X Magnetic field</field>
+      <field type="int16_t" name="ymag" units="mgauss">Y Magnetic field</field>
+      <field type="int16_t" name="zmag" units="mgauss">Z Magnetic field</field>
+      <extensions/>
+      <field type="int16_t" name="temperature" units="cdegC">Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C).</field>
+    </message>
+    <message id="27" name="RAW_IMU">
+      <description>The RAW IMU readings for a 9DOF sensor, which is identified by the id (default IMU1). This message should always contain the true raw values without any scaling to allow data capture and system debugging.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="int16_t" name="xacc">X acceleration (raw)</field>
+      <field type="int16_t" name="yacc">Y acceleration (raw)</field>
+      <field type="int16_t" name="zacc">Z acceleration (raw)</field>
+      <field type="int16_t" name="xgyro">Angular speed around X axis (raw)</field>
+      <field type="int16_t" name="ygyro">Angular speed around Y axis (raw)</field>
+      <field type="int16_t" name="zgyro">Angular speed around Z axis (raw)</field>
+      <field type="int16_t" name="xmag">X Magnetic field (raw)</field>
+      <field type="int16_t" name="ymag">Y Magnetic field (raw)</field>
+      <field type="int16_t" name="zmag">Z Magnetic field (raw)</field>
+      <extensions/>
+      <field type="uint8_t" name="id" instance="true">Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)</field>
+      <field type="int16_t" name="temperature" units="cdegC">Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C).</field>
+    </message>
+    <message id="28" name="RAW_PRESSURE">
+      <description>The RAW pressure readings for the typical setup of one absolute pressure and one differential pressure sensor. The sensor values should be the raw, UNSCALED ADC values.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="int16_t" name="press_abs">Absolute pressure (raw)</field>
+      <field type="int16_t" name="press_diff1" invalid="0">Differential pressure 1 (raw, 0 if nonexistent)</field>
+      <field type="int16_t" name="press_diff2" invalid="0">Differential pressure 2 (raw, 0 if nonexistent)</field>
+      <field type="int16_t" name="temperature">Raw Temperature measurement (raw)</field>
+    </message>
+    <message id="29" name="SCALED_PRESSURE">
+      <description>The pressure readings for the typical setup of one absolute and differential pressure sensor. The units are as specified in each field.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="press_abs" units="hPa">Absolute pressure</field>
+      <field type="float" name="press_diff" units="hPa">Differential pressure 1</field>
+      <field type="int16_t" name="temperature" units="cdegC">Absolute pressure temperature</field>
+      <extensions/>
+      <field type="int16_t" name="temperature_press_diff" units="cdegC" invalid="0">Differential pressure temperature (0, if not available). Report values of 0 (or 1) as 1 cdegC.</field>
+    </message>
+    <message id="30" name="ATTITUDE">
+      <description>The attitude in the aeronautical frame (right-handed, Z-down, Y-right, X-front, ZYX, intrinsic).</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="roll" units="rad">Roll angle (-pi..+pi)</field>
+      <field type="float" name="pitch" units="rad">Pitch angle (-pi..+pi)</field>
+      <field type="float" name="yaw" units="rad">Yaw angle (-pi..+pi)</field>
+      <field type="float" name="rollspeed" units="rad/s">Roll angular speed</field>
+      <field type="float" name="pitchspeed" units="rad/s">Pitch angular speed</field>
+      <field type="float" name="yawspeed" units="rad/s">Yaw angular speed</field>
+    </message>
+    <message id="31" name="ATTITUDE_QUATERNION">
+      <description>The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0).</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="q1">Quaternion component 1, w (1 in null-rotation)</field>
+      <field type="float" name="q2">Quaternion component 2, x (0 in null-rotation)</field>
+      <field type="float" name="q3">Quaternion component 3, y (0 in null-rotation)</field>
+      <field type="float" name="q4">Quaternion component 4, z (0 in null-rotation)</field>
+      <field type="float" name="rollspeed" units="rad/s">Roll angular speed</field>
+      <field type="float" name="pitchspeed" units="rad/s">Pitch angular speed</field>
+      <field type="float" name="yawspeed" units="rad/s">Yaw angular speed</field>
+      <extensions/>
+      <field type="float[4]" name="repr_offset_q" invalid="[0]">Rotation offset by which the attitude quaternion and angular speed vector should be rotated for user display (quaternion with [w, x, y, z] order, zero-rotation is [1, 0, 0, 0], send [0, 0, 0, 0] if field not supported). This field is intended for systems in which the reference attitude may change during flight. For example, tailsitters VTOLs rotate their reference attitude by 90 degrees between hover mode and fixed wing mode, thus repr_offset_q is equal to [1, 0, 0, 0] in hover mode and equal to [0.7071, 0, 0.7071, 0] in fixed wing mode.</field>
+    </message>
+    <message id="32" name="LOCAL_POSITION_NED">
+      <description>The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="x" units="m">X Position</field>
+      <field type="float" name="y" units="m">Y Position</field>
+      <field type="float" name="z" units="m">Z Position</field>
+      <field type="float" name="vx" units="m/s">X Speed</field>
+      <field type="float" name="vy" units="m/s">Y Speed</field>
+      <field type="float" name="vz" units="m/s">Z Speed</field>
+    </message>
+    <message id="33" name="GLOBAL_POSITION_INT">
+      <description>The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It
+               is designed as scaled integer message since the resolution of float is not sufficient.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude, expressed</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude, expressed</field>
+      <field type="int32_t" name="alt" units="mm">Altitude (MSL). Note that virtually all GPS modules provide both WGS84 and MSL.</field>
+      <field type="int32_t" name="relative_alt" units="mm">Altitude above ground</field>
+      <field type="int16_t" name="vx" units="cm/s">Ground X Speed (Latitude, positive north)</field>
+      <field type="int16_t" name="vy" units="cm/s">Ground Y Speed (Longitude, positive east)</field>
+      <field type="int16_t" name="vz" units="cm/s">Ground Z Speed (Altitude, positive down)</field>
+      <field type="uint16_t" name="hdg" units="cdeg" invalid="UINT16_MAX">Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX</field>
+    </message>
+    <message id="34" name="RC_CHANNELS_SCALED">
+      <description>The scaled values of the RC channels received: (-100%) -10000, (0%) 0, (100%) 10000. Channels that are inactive should be set to INT16_MAX.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="port">Servo output port (set of 8 outputs = 1 port). Flight stacks running on Pixhawk should use: 0 = MAIN, 1 = AUX.</field>
+      <field type="int16_t" name="chan1_scaled" invalid="INT16_MAX">RC channel 1 value scaled.</field>
+      <field type="int16_t" name="chan2_scaled" invalid="INT16_MAX">RC channel 2 value scaled.</field>
+      <field type="int16_t" name="chan3_scaled" invalid="INT16_MAX">RC channel 3 value scaled.</field>
+      <field type="int16_t" name="chan4_scaled" invalid="INT16_MAX">RC channel 4 value scaled.</field>
+      <field type="int16_t" name="chan5_scaled" invalid="INT16_MAX">RC channel 5 value scaled.</field>
+      <field type="int16_t" name="chan6_scaled" invalid="INT16_MAX">RC channel 6 value scaled.</field>
+      <field type="int16_t" name="chan7_scaled" invalid="INT16_MAX">RC channel 7 value scaled.</field>
+      <field type="int16_t" name="chan8_scaled" invalid="INT16_MAX">RC channel 8 value scaled.</field>
+      <field type="uint8_t" name="rssi" invalid="UINT8_MAX">Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.</field>
+    </message>
+    <message id="35" name="RC_CHANNELS_RAW">
+      <description>The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. A value of UINT16_MAX implies the channel is unused. Individual receivers/transmitters might violate this specification.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="port">Servo output port (set of 8 outputs = 1 port). Flight stacks running on Pixhawk should use: 0 = MAIN, 1 = AUX.</field>
+      <field type="uint16_t" name="chan1_raw" units="us" invalid="UINT16_MAX">RC channel 1 value.</field>
+      <field type="uint16_t" name="chan2_raw" units="us" invalid="UINT16_MAX">RC channel 2 value.</field>
+      <field type="uint16_t" name="chan3_raw" units="us" invalid="UINT16_MAX">RC channel 3 value.</field>
+      <field type="uint16_t" name="chan4_raw" units="us" invalid="UINT16_MAX">RC channel 4 value.</field>
+      <field type="uint16_t" name="chan5_raw" units="us" invalid="UINT16_MAX">RC channel 5 value.</field>
+      <field type="uint16_t" name="chan6_raw" units="us" invalid="UINT16_MAX">RC channel 6 value.</field>
+      <field type="uint16_t" name="chan7_raw" units="us" invalid="UINT16_MAX">RC channel 7 value.</field>
+      <field type="uint16_t" name="chan8_raw" units="us" invalid="UINT16_MAX">RC channel 8 value.</field>
+      <field type="uint8_t" name="rssi" invalid="UINT8_MAX">Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.</field>
+    </message>
+    <message id="36" name="SERVO_OUTPUT_RAW">
+      <description>Superseded by ACTUATOR_OUTPUT_STATUS. The RAW values of the servo outputs (for RC input from the remote, use the RC_CHANNELS messages). The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%.</description>
+      <field type="uint32_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="port">Servo output port (set of 8 outputs = 1 port). Flight stacks running on Pixhawk should use: 0 = MAIN, 1 = AUX.</field>
+      <field type="uint16_t" name="servo1_raw" units="us">Servo output 1 value</field>
+      <field type="uint16_t" name="servo2_raw" units="us">Servo output 2 value</field>
+      <field type="uint16_t" name="servo3_raw" units="us">Servo output 3 value</field>
+      <field type="uint16_t" name="servo4_raw" units="us">Servo output 4 value</field>
+      <field type="uint16_t" name="servo5_raw" units="us">Servo output 5 value</field>
+      <field type="uint16_t" name="servo6_raw" units="us">Servo output 6 value</field>
+      <field type="uint16_t" name="servo7_raw" units="us">Servo output 7 value</field>
+      <field type="uint16_t" name="servo8_raw" units="us">Servo output 8 value</field>
+      <extensions/>
+      <field type="uint16_t" name="servo9_raw" units="us">Servo output 9 value</field>
+      <field type="uint16_t" name="servo10_raw" units="us">Servo output 10 value</field>
+      <field type="uint16_t" name="servo11_raw" units="us">Servo output 11 value</field>
+      <field type="uint16_t" name="servo12_raw" units="us">Servo output 12 value</field>
+      <field type="uint16_t" name="servo13_raw" units="us">Servo output 13 value</field>
+      <field type="uint16_t" name="servo14_raw" units="us">Servo output 14 value</field>
+      <field type="uint16_t" name="servo15_raw" units="us">Servo output 15 value</field>
+      <field type="uint16_t" name="servo16_raw" units="us">Servo output 16 value</field>
+    </message>
+    <message id="37" name="MISSION_REQUEST_PARTIAL_LIST">
+      <description>Request a partial list of mission items from the system/component. https://mavlink.io/en/services/mission.html. If start and end index are the same, just send one waypoint.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="int16_t" name="start_index">Start index</field>
+      <field type="int16_t" name="end_index">End index, -1 by default (-1: send list to end). Else a valid index of the list</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+    </message>
+    <message id="38" name="MISSION_WRITE_PARTIAL_LIST">
+      <description>This message is sent to the MAV to write a partial list. If start index == end index, only one item will be transmitted / updated. If the start index is NOT 0 and above the current list size, this request should be REJECTED!</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="int16_t" name="start_index">Start index. Must be smaller / equal to the largest index of the current onboard list.</field>
+      <field type="int16_t" name="end_index">End index, equal or greater than start index.</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+    </message>
+    <message id="39" name="MISSION_ITEM">
+      <deprecated since="2020-06" replaced_by="MISSION_ITEM_INT"/>
+      <description>Message encoding a mission item. This message is emitted to announce
+                the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). NaN may be used to indicate an optional/default value (e.g. to use the system's current latitude or yaw rather than a specific value). See also https://mavlink.io/en/services/mission.html.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="seq">Sequence</field>
+      <field type="uint8_t" name="frame" enum="MAV_FRAME">The coordinate system of the waypoint.</field>
+      <field type="uint16_t" name="command" enum="MAV_CMD">The scheduled action for the waypoint.</field>
+      <field type="uint8_t" name="current">false:0, true:1</field>
+      <field type="uint8_t" name="autocontinue">Autocontinue to next waypoint. 0: false, 1: true. Set false to pause mission after the item completes.</field>
+      <field type="float" name="param1">PARAM1, see MAV_CMD enum</field>
+      <field type="float" name="param2">PARAM2, see MAV_CMD enum</field>
+      <field type="float" name="param3">PARAM3, see MAV_CMD enum</field>
+      <field type="float" name="param4">PARAM4, see MAV_CMD enum</field>
+      <field type="float" name="x">PARAM5 / local: X coordinate, global: latitude</field>
+      <field type="float" name="y">PARAM6 / local: Y coordinate, global: longitude</field>
+      <field type="float" name="z">PARAM7 / local: Z coordinate, global: altitude (relative or absolute, depending on frame).</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+    </message>
+    <message id="40" name="MISSION_REQUEST">
+      <deprecated since="2020-06" replaced_by="MISSION_REQUEST_INT">A system that gets this request should respond with MISSION_ITEM_INT (as though MISSION_REQUEST_INT was received).</deprecated>
+      <description>Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM message. https://mavlink.io/en/services/mission.html</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="seq">Sequence</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+    </message>
+    <message id="41" name="MISSION_SET_CURRENT">
+      <deprecated since="2022-08" replaced_by="MAV_CMD_DO_SET_MISSION_CURRENT"/>
+      <description>
+        Set the mission item with sequence number seq as the current item and emit MISSION_CURRENT (whether or not the mission number changed).
+        If a mission is currently being executed, the system will continue to this new mission item on the shortest path, skipping any intermediate mission items.
+        Note that mission jump repeat counters are not reset (see MAV_CMD_DO_JUMP param2).
+
+        This message may trigger a mission state-machine change on some systems: for example from MISSION_STATE_NOT_STARTED or MISSION_STATE_PAUSED to MISSION_STATE_ACTIVE.
+        If the system is in mission mode, on those systems this command might therefore start, restart or resume the mission.
+        If the system is not in mission mode this message must not trigger a switch to mission mode.
+      </description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="seq">Sequence</field>
+    </message>
+    <message id="42" name="MISSION_CURRENT">
+      <description>
+        Message that announces the sequence number of the current target mission item (that the system will fly towards/execute when the mission is running).
+        This message should be streamed all the time (nominally at 1Hz).
+        This message should be emitted following a call to MAV_CMD_DO_SET_MISSION_CURRENT or SET_MISSION_CURRENT.
+      </description>
+      <field type="uint16_t" name="seq">Sequence</field>
+      <extensions/>
+      <field type="uint16_t" name="total" invalid="UINT16_MAX">Total number of mission items on vehicle (on last item, sequence == total). If the autopilot stores its home location as part of the mission this will be excluded from the total. 0: Not supported, UINT16_MAX if no mission is present on the vehicle.</field>
+      <field type="uint8_t" name="mission_state" enum="MISSION_STATE" invalid="0">Mission state machine state. MISSION_STATE_UNKNOWN if state reporting not supported.</field>
+      <field type="uint8_t" name="mission_mode" invalid="0">Vehicle is in a mode that can execute mission items or suspended. 0: Unknown, 1: In mission mode, 2: Suspended (not in mission mode).</field>
+      <field type="uint32_t" name="mission_id" invalid="0">Id of current on-vehicle mission plan, or 0 if IDs are not supported or there is no mission loaded. GCS can use this to track changes to the mission plan type. The same value is returned on mission upload (in the MISSION_ACK).</field>
+      <field type="uint32_t" name="fence_id" invalid="0">Id of current on-vehicle fence plan, or 0 if IDs are not supported or there is no fence loaded. GCS can use this to track changes to the fence plan type. The same value is returned on fence upload (in the MISSION_ACK).</field>
+      <field type="uint32_t" name="rally_points_id" invalid="0">Id of current on-vehicle rally point plan, or 0 if IDs are not supported or there are no rally points loaded. GCS can use this to track changes to the rally point plan type. The same value is returned on rally point upload (in the MISSION_ACK).</field>
+    </message>
+    <message id="43" name="MISSION_REQUEST_LIST">
+      <description>Request the overall list of mission items from the system/component.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+    </message>
+    <message id="44" name="MISSION_COUNT">
+      <description>This message is emitted as response to MISSION_REQUEST_LIST by the MAV and to initiate a write transaction. The GCS can then request the individual mission item based on the knowledge of the total number of waypoints.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="count">Number of mission items in the sequence</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+      <field type="uint32_t" name="opaque_id" invalid="0">Id of current on-vehicle mission, fence, or rally point plan (on download from vehicle).
+        This field is used when downloading a plan from a vehicle to a GCS.
+        0 on upload to the vehicle from GCS.
+        0 if plan ids are not supported.
+        The current on-vehicle plan ids are streamed in `MISSION_CURRENT`, allowing a GCS to determine if any part of the plan has changed and needs to be re-uploaded.
+        The ids are recalculated by the vehicle when any part of the on-vehicle plan changes (when a new plan is uploaded, the vehicle returns the new id to the GCS in MISSION_ACK).
+      </field>
+    </message>
+    <message id="45" name="MISSION_CLEAR_ALL">
+      <description>Delete all mission items at once.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+    </message>
+    <message id="46" name="MISSION_ITEM_REACHED">
+      <description>A certain mission item has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next waypoint.</description>
+      <field type="uint16_t" name="seq">Sequence</field>
+    </message>
+    <message id="47" name="MISSION_ACK">
+      <description>Acknowledgment message during waypoint handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero).</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint8_t" name="type" enum="MAV_MISSION_RESULT">Mission result.</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+      <field type="uint32_t" name="opaque_id" invalid="0">Id of new on-vehicle mission, fence, or rally point plan (on upload to vehicle).
+        The id is calculated and returned by a vehicle when a new plan is uploaded by a GCS.
+        The only requirement on the id is that it must change when there is any change to the on-vehicle plan type (there is no requirement that the id be globally unique).
+        0 on download from the vehicle to the GCS (on download the ID is set in MISSION_COUNT).
+        0 if plan ids are not supported.
+        The current on-vehicle plan ids are streamed in `MISSION_CURRENT`, allowing a GCS to determine if any part of the plan has changed and needs to be re-uploaded.
+      </field>
+    </message>
+    <message id="48" name="SET_GPS_GLOBAL_ORIGIN">
+      <description>Sets the GPS coordinates of the vehicle local origin (0,0,0) position. Vehicle should emit GPS_GLOBAL_ORIGIN irrespective of whether the origin is changed. This enables transform between the local coordinate frame and the global (GPS) coordinate frame, which may be necessary when (for example) indoor and outdoor settings are connected and the MAV should move from in- to outdoor.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="int32_t" name="latitude" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="longitude" units="degE7">Longitude (WGS84)</field>
+      <field type="int32_t" name="altitude" units="mm">Altitude (MSL). Positive for up.</field>
+      <extensions/>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+    </message>
+    <message id="49" name="GPS_GLOBAL_ORIGIN">
+      <description>Publishes the GPS coordinates of the vehicle local origin (0,0,0) position. Emitted whenever a new GPS-Local position mapping is requested or set - e.g. following SET_GPS_GLOBAL_ORIGIN message.</description>
+      <field type="int32_t" name="latitude" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="longitude" units="degE7">Longitude (WGS84)</field>
+      <field type="int32_t" name="altitude" units="mm">Altitude (MSL). Positive for up.</field>
+      <extensions/>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+    </message>
+    <message id="50" name="PARAM_MAP_RC">
+      <description>Bind a RC channel to a parameter. The parameter should change according to the RC channel value.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="char[16]" name="param_id">Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string</field>
+      <field type="int16_t" name="param_index">Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index.</field>
+      <field type="uint8_t" name="parameter_rc_channel_index">Index of parameter RC channel. Not equal to the RC channel id. Typically corresponds to a potentiometer-knob on the RC.</field>
+      <field type="float" name="param_value0">Initial parameter value</field>
+      <field type="float" name="scale">Scale, maps the RC range [-1, 1] to a parameter value</field>
+      <field type="float" name="param_value_min">Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation)</field>
+      <field type="float" name="param_value_max">Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation)</field>
+    </message>
+    <message id="51" name="MISSION_REQUEST_INT">
+      <description>Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM_INT message. https://mavlink.io/en/services/mission.html</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="seq">Sequence</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+    </message>
+    <!-- Note, id 53 reserved for MISSION_CHECKSUM message (development.xml) -->
+    <message id="54" name="SAFETY_SET_ALLOWED_AREA">
+      <description>Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/waypoints to accept and which to reject. Safety areas are often enforced by national or competition regulations.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint8_t" name="frame" enum="MAV_FRAME">Coordinate frame. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.</field>
+      <field type="float" name="p1x" units="m">x position 1 / Latitude 1</field>
+      <field type="float" name="p1y" units="m">y position 1 / Longitude 1</field>
+      <field type="float" name="p1z" units="m">z position 1 / Altitude 1</field>
+      <field type="float" name="p2x" units="m">x position 2 / Latitude 2</field>
+      <field type="float" name="p2y" units="m">y position 2 / Longitude 2</field>
+      <field type="float" name="p2z" units="m">z position 2 / Altitude 2</field>
+    </message>
+    <message id="55" name="SAFETY_ALLOWED_AREA">
+      <description>Read out the safety zone the MAV currently assumes.</description>
+      <field type="uint8_t" name="frame" enum="MAV_FRAME">Coordinate frame. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.</field>
+      <field type="float" name="p1x" units="m">x position 1 / Latitude 1</field>
+      <field type="float" name="p1y" units="m">y position 1 / Longitude 1</field>
+      <field type="float" name="p1z" units="m">z position 1 / Altitude 1</field>
+      <field type="float" name="p2x" units="m">x position 2 / Latitude 2</field>
+      <field type="float" name="p2y" units="m">y position 2 / Longitude 2</field>
+      <field type="float" name="p2z" units="m">z position 2 / Altitude 2</field>
+    </message>
+    <message id="61" name="ATTITUDE_QUATERNION_COV">
+      <description>The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0).</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float[4]" name="q">Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)</field>
+      <field type="float" name="rollspeed" units="rad/s">Roll angular speed</field>
+      <field type="float" name="pitchspeed" units="rad/s">Pitch angular speed</field>
+      <field type="float" name="yawspeed" units="rad/s">Yaw angular speed</field>
+      <field type="float[9]" name="covariance" invalid="[NaN:]">Row-major representation of a 3x3 attitude covariance matrix (states: roll, pitch, yaw; first three entries are the first ROW, next three entries are the second row, etc.). If unknown, assign NaN value to first element in the array.</field>
+    </message>
+    <message id="62" name="NAV_CONTROLLER_OUTPUT">
+      <description>The state of the navigation and position controller.</description>
+      <field type="float" name="nav_roll" units="deg">Current desired roll</field>
+      <field type="float" name="nav_pitch" units="deg">Current desired pitch</field>
+      <field type="int16_t" name="nav_bearing" units="deg">Current desired heading</field>
+      <field type="int16_t" name="target_bearing" units="deg">Bearing to current waypoint/target</field>
+      <field type="uint16_t" name="wp_dist" units="m">Distance to active waypoint</field>
+      <field type="float" name="alt_error" units="m">Current altitude error</field>
+      <field type="float" name="aspd_error" units="m/s">Current airspeed error</field>
+      <field type="float" name="xtrack_error" units="m">Current crosstrack error on x-y plane</field>
+    </message>
+    <message id="63" name="GLOBAL_POSITION_INT_COV">
+      <description>The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It  is designed as scaled integer message since the resolution of float is not sufficient. NOTE: This message is intended for onboard networks / companion computers and higher-bandwidth links and optimized for accuracy and completeness. Please use the GLOBAL_POSITION_INT message for a minimal subset.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="estimator_type" enum="MAV_ESTIMATOR_TYPE">Class id of the estimator this estimate originated from.</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude</field>
+      <field type="int32_t" name="alt" units="mm">Altitude in meters above MSL</field>
+      <field type="int32_t" name="relative_alt" units="mm">Altitude above ground</field>
+      <field type="float" name="vx" units="m/s">Ground X Speed (Latitude)</field>
+      <field type="float" name="vy" units="m/s">Ground Y Speed (Longitude)</field>
+      <field type="float" name="vz" units="m/s">Ground Z Speed (Altitude)</field>
+      <field type="float[36]" name="covariance" invalid="[NaN:]">Row-major representation of a 6x6 position and velocity 6x6 cross-covariance matrix (states: lat, lon, alt, vx, vy, vz; first six entries are the first ROW, next six entries are the second row, etc.). If unknown, assign NaN value to first element in the array.</field>
+    </message>
+    <message id="64" name="LOCAL_POSITION_NED_COV">
+      <description>The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="estimator_type" enum="MAV_ESTIMATOR_TYPE">Class id of the estimator this estimate originated from.</field>
+      <field type="float" name="x" units="m">X Position</field>
+      <field type="float" name="y" units="m">Y Position</field>
+      <field type="float" name="z" units="m">Z Position</field>
+      <field type="float" name="vx" units="m/s">X Speed</field>
+      <field type="float" name="vy" units="m/s">Y Speed</field>
+      <field type="float" name="vz" units="m/s">Z Speed</field>
+      <field type="float" name="ax" units="m/s/s">X Acceleration</field>
+      <field type="float" name="ay" units="m/s/s">Y Acceleration</field>
+      <field type="float" name="az" units="m/s/s">Z Acceleration</field>
+      <field type="float[45]" name="covariance" invalid="[NaN:]">Row-major representation of position, velocity and acceleration 9x9 cross-covariance matrix upper right triangle (states: x, y, z, vx, vy, vz, ax, ay, az; first nine entries are the first ROW, next eight entries are the second row, etc.). If unknown, assign NaN value to first element in the array.</field>
+    </message>
+    <message id="65" name="RC_CHANNELS">
+      <description>The PPM values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%.  A value of UINT16_MAX implies the channel is unused. Individual receivers/transmitters might violate this specification.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="chancount">Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available.</field>
+      <field type="uint16_t" name="chan1_raw" units="us" invalid="UINT16_MAX">RC channel 1 value.</field>
+      <field type="uint16_t" name="chan2_raw" units="us" invalid="UINT16_MAX">RC channel 2 value.</field>
+      <field type="uint16_t" name="chan3_raw" units="us" invalid="UINT16_MAX">RC channel 3 value.</field>
+      <field type="uint16_t" name="chan4_raw" units="us" invalid="UINT16_MAX">RC channel 4 value.</field>
+      <field type="uint16_t" name="chan5_raw" units="us" invalid="UINT16_MAX">RC channel 5 value.</field>
+      <field type="uint16_t" name="chan6_raw" units="us" invalid="UINT16_MAX">RC channel 6 value.</field>
+      <field type="uint16_t" name="chan7_raw" units="us" invalid="UINT16_MAX">RC channel 7 value.</field>
+      <field type="uint16_t" name="chan8_raw" units="us" invalid="UINT16_MAX">RC channel 8 value.</field>
+      <field type="uint16_t" name="chan9_raw" units="us" invalid="UINT16_MAX">RC channel 9 value.</field>
+      <field type="uint16_t" name="chan10_raw" units="us" invalid="UINT16_MAX">RC channel 10 value.</field>
+      <field type="uint16_t" name="chan11_raw" units="us" invalid="UINT16_MAX">RC channel 11 value.</field>
+      <field type="uint16_t" name="chan12_raw" units="us" invalid="UINT16_MAX">RC channel 12 value.</field>
+      <field type="uint16_t" name="chan13_raw" units="us" invalid="UINT16_MAX">RC channel 13 value.</field>
+      <field type="uint16_t" name="chan14_raw" units="us" invalid="UINT16_MAX">RC channel 14 value.</field>
+      <field type="uint16_t" name="chan15_raw" units="us" invalid="UINT16_MAX">RC channel 15 value.</field>
+      <field type="uint16_t" name="chan16_raw" units="us" invalid="UINT16_MAX">RC channel 16 value.</field>
+      <field type="uint16_t" name="chan17_raw" units="us" invalid="UINT16_MAX">RC channel 17 value.</field>
+      <field type="uint16_t" name="chan18_raw" units="us" invalid="UINT16_MAX">RC channel 18 value.</field>
+      <field type="uint8_t" name="rssi" invalid="UINT8_MAX">Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.</field>
+    </message>
+    <message id="66" name="REQUEST_DATA_STREAM">
+      <deprecated since="2015-08" replaced_by="MAV_CMD_SET_MESSAGE_INTERVAL "/>
+      <description>Request a data stream.</description>
+      <field type="uint8_t" name="target_system">The target requested to send the message stream.</field>
+      <field type="uint8_t" name="target_component">The target requested to send the message stream.</field>
+      <field type="uint8_t" name="req_stream_id">The ID of the requested data stream</field>
+      <field type="uint16_t" name="req_message_rate" units="Hz">The requested message rate</field>
+      <field type="uint8_t" name="start_stop">1 to start sending, 0 to stop sending.</field>
+    </message>
+    <message id="67" name="DATA_STREAM">
+      <deprecated since="2015-08" replaced_by="MESSAGE_INTERVAL"/>
+      <description>Data stream status information.</description>
+      <field type="uint8_t" name="stream_id">The ID of the requested data stream</field>
+      <field type="uint16_t" name="message_rate" units="Hz">The message rate</field>
+      <field type="uint8_t" name="on_off">1 stream is enabled, 0 stream is stopped.</field>
+    </message>
+    <message id="69" name="MANUAL_CONTROL">
+      <description>This message provides an API for manually controlling the vehicle using standard joystick axes nomenclature, along with a joystick-like input device. Unused axes can be disabled and buttons states are transmitted as individual on/off bits of a bitmask</description>
+      <field type="uint8_t" name="target">The system to be controlled.</field>
+      <field type="int16_t" name="x" invalid="INT16_MAX">X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle.</field>
+      <field type="int16_t" name="y" invalid="INT16_MAX">Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle.</field>
+      <field type="int16_t" name="z" invalid="INT16_MAX">Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust.</field>
+      <field type="int16_t" name="r" invalid="INT16_MAX">R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle.</field>
+      <field type="uint16_t" name="buttons">A bitfield corresponding to the joystick buttons' 0-15 current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1.</field>
+      <extensions/>
+      <field type="uint16_t" name="buttons2">A bitfield corresponding to the joystick buttons' 16-31 current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 16.</field>
+      <field type="uint8_t" name="enabled_extensions">Set bits to 1 to indicate which of the following extension fields contain valid data: bit 0: pitch, bit 1: roll, bit 2: aux1, bit 3: aux2, bit 4: aux3, bit 5: aux4, bit 6: aux5, bit 7: aux6</field>
+      <field type="int16_t" name="s">Pitch-only-axis, normalized to the range [-1000,1000]. Generally corresponds to pitch on vehicles with additional degrees of freedom. Valid if bit 0 of enabled_extensions field is set. Set to 0 if invalid.</field>
+      <field type="int16_t" name="t">Roll-only-axis, normalized to the range [-1000,1000]. Generally corresponds to roll on vehicles with additional degrees of freedom. Valid if bit 1 of enabled_extensions field is set. Set to 0 if invalid.</field>
+      <field type="int16_t" name="aux1">Aux continuous input field 1. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 2 of enabled_extensions field is set. 0 if bit 2 is unset.</field>
+      <field type="int16_t" name="aux2">Aux continuous input field 2. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 3 of enabled_extensions field is set. 0 if bit 3 is unset.</field>
+      <field type="int16_t" name="aux3">Aux continuous input field 3. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 4 of enabled_extensions field is set. 0 if bit 4 is unset.</field>
+      <field type="int16_t" name="aux4">Aux continuous input field 4. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 5 of enabled_extensions field is set. 0 if bit 5 is unset.</field>
+      <field type="int16_t" name="aux5">Aux continuous input field 5. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 6 of enabled_extensions field is set. 0 if bit 6 is unset.</field>
+      <field type="int16_t" name="aux6">Aux continuous input field 6. Normalized in the range [-1000,1000]. Purpose defined by recipient. Valid data if bit 7 of enabled_extensions field is set. 0 if bit 7 is unset.</field>
+    </message>
+    <message id="70" name="RC_CHANNELS_OVERRIDE">
+      <description>The RAW values of the RC channels sent to the MAV to override info received from the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification.  Note carefully the semantic differences between the first 8 channels and the subsequent channels</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="chan1_raw" units="us" invalid="UINT16_MAX">RC channel 1 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan2_raw" units="us" invalid="UINT16_MAX">RC channel 2 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan3_raw" units="us" invalid="UINT16_MAX">RC channel 3 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan4_raw" units="us" invalid="UINT16_MAX">RC channel 4 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan5_raw" units="us" invalid="UINT16_MAX">RC channel 5 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan6_raw" units="us" invalid="UINT16_MAX">RC channel 6 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan7_raw" units="us" invalid="UINT16_MAX">RC channel 7 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan8_raw" units="us" invalid="UINT16_MAX">RC channel 8 value. A value of UINT16_MAX means to ignore this field. A value of 0 means to release this channel back to the RC radio.</field>
+      <extensions/>
+      <field type="uint16_t" name="chan9_raw" units="us" invalid="0">RC channel 9 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan10_raw" units="us" invalid="0">RC channel 10 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan11_raw" units="us" invalid="0">RC channel 11 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan12_raw" units="us" invalid="0">RC channel 12 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan13_raw" units="us" invalid="0">RC channel 13 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan14_raw" units="us" invalid="0">RC channel 14 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan15_raw" units="us" invalid="0">RC channel 15 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan16_raw" units="us" invalid="0">RC channel 16 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan17_raw" units="us" invalid="0">RC channel 17 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+      <field type="uint16_t" name="chan18_raw" units="us" invalid="0">RC channel 18 value. A value of 0 or UINT16_MAX means to ignore this field. A value of UINT16_MAX-1 means to release this channel back to the RC radio.</field>
+    </message>
+    <message id="73" name="MISSION_ITEM_INT">
+      <description>Message encoding a mission item. This message is emitted to announce
+                the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). NaN or INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current latitude, yaw rather than a specific value). See also https://mavlink.io/en/services/mission.html.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="seq">Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4).</field>
+      <field type="uint8_t" name="frame" enum="MAV_FRAME">The coordinate system of the waypoint.</field>
+      <field type="uint16_t" name="command" enum="MAV_CMD">The scheduled action for the waypoint.</field>
+      <field type="uint8_t" name="current">false:0, true:1</field>
+      <field type="uint8_t" name="autocontinue">Autocontinue to next waypoint. 0: false, 1: true. Set false to pause mission after the item completes.</field>
+      <field type="float" name="param1">PARAM1, see MAV_CMD enum</field>
+      <field type="float" name="param2">PARAM2, see MAV_CMD enum</field>
+      <field type="float" name="param3">PARAM3, see MAV_CMD enum</field>
+      <field type="float" name="param4">PARAM4, see MAV_CMD enum</field>
+      <field type="int32_t" name="x">PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7</field>
+      <field type="int32_t" name="y">PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7</field>
+      <field type="float" name="z">PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame.</field>
+      <extensions/>
+      <field type="uint8_t" name="mission_type" enum="MAV_MISSION_TYPE">Mission type.</field>
+    </message>
+    <message id="74" name="VFR_HUD">
+      <description>Metrics typically displayed on a HUD for fixed wing aircraft.</description>
+      <field type="float" name="airspeed" units="m/s">Vehicle speed in form appropriate for vehicle type. For standard aircraft this is typically calibrated airspeed (CAS) or indicated airspeed (IAS) - either of which can be used by a pilot to estimate stall speed.</field>
+      <field type="float" name="groundspeed" units="m/s">Current ground speed.</field>
+      <field type="int16_t" name="heading" units="deg">Current heading in compass units (0-360, 0=north).</field>
+      <field type="uint16_t" name="throttle" units="%">Current throttle setting (0 to 100).</field>
+      <field type="float" name="alt" units="m">Current altitude (MSL).</field>
+      <field type="float" name="climb" units="m/s">Current climb rate.</field>
+    </message>
+    <message id="75" name="COMMAND_INT">
+      <description>Send a command with up to seven parameters to the MAV, where params 5 and 6 are integers and the other values are floats. This is preferred over COMMAND_LONG as it allows the MAV_FRAME to be specified for interpreting positional information, such as altitude. COMMAND_INT is also preferred when sending latitude and longitude data in params 5 and 6, as it allows for greater precision. Param 5 and 6 encode positional data as scaled integers, where the scaling depends on the actual command value. NaN or INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current latitude, yaw rather than a specific value). The command microservice is documented at https://mavlink.io/en/services/command.html</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint8_t" name="frame" enum="MAV_FRAME">The coordinate system of the COMMAND.</field>
+      <field type="uint16_t" name="command" enum="MAV_CMD">The scheduled action for the mission item.</field>
+      <field type="uint8_t" name="current">Not used.</field>
+      <field type="uint8_t" name="autocontinue">Not used (set 0).</field>
+      <field type="float" name="param1" invalid="NaN">PARAM1, see MAV_CMD enum</field>
+      <field type="float" name="param2" invalid="NaN">PARAM2, see MAV_CMD enum</field>
+      <field type="float" name="param3" invalid="NaN">PARAM3, see MAV_CMD enum</field>
+      <field type="float" name="param4" invalid="NaN">PARAM4, see MAV_CMD enum</field>
+      <field type="int32_t" name="x" invalid="INT32_MAX">PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7</field>
+      <field type="int32_t" name="y" invalid="INT32_MAX">PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7</field>
+      <field type="float" name="z" invalid="NaN">PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame).</field>
+    </message>
+    <message id="76" name="COMMAND_LONG">
+      <description>Send a command with up to seven parameters to the MAV. COMMAND_INT is generally preferred when sending MAV_CMD commands that include positional information; it offers higher precision and allows the MAV_FRAME to be specified (which may otherwise be ambiguous, particularly for altitude). The command microservice is documented at https://mavlink.io/en/services/command.html</description>
+      <field type="uint8_t" name="target_system">System which should execute the command</field>
+      <field type="uint8_t" name="target_component">Component which should execute the command, 0 for all components</field>
+      <field type="uint16_t" name="command" enum="MAV_CMD">Command ID (of command to send).</field>
+      <field type="uint8_t" name="confirmation">0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)</field>
+      <field type="float" name="param1" invalid="NaN">Parameter 1 (for the specific command).</field>
+      <field type="float" name="param2" invalid="NaN">Parameter 2 (for the specific command).</field>
+      <field type="float" name="param3" invalid="NaN">Parameter 3 (for the specific command).</field>
+      <field type="float" name="param4" invalid="NaN">Parameter 4 (for the specific command).</field>
+      <field type="float" name="param5" invalid="NaN">Parameter 5 (for the specific command).</field>
+      <field type="float" name="param6" invalid="NaN">Parameter 6 (for the specific command).</field>
+      <field type="float" name="param7" invalid="NaN">Parameter 7 (for the specific command).</field>
+    </message>
+    <message id="77" name="COMMAND_ACK">
+      <description>Report status of a command. Includes feedback whether the command was executed. The command microservice is documented at https://mavlink.io/en/services/command.html</description>
+      <field type="uint16_t" name="command" enum="MAV_CMD">Command ID (of acknowledged command).</field>
+      <field type="uint8_t" name="result" enum="MAV_RESULT">Result of command.</field>
+      <extensions/>
+      <field type="uint8_t" name="progress" invalid="UINT8_MAX" units="%">The progress percentage when result is MAV_RESULT_IN_PROGRESS. Values: [0-100], or UINT8_MAX if the progress is unknown.</field>
+      <field type="int32_t" name="result_param2">Additional result information. Can be set with a command-specific enum containing command-specific error reasons for why the command might be denied. If used, the associated enum must be documented in the corresponding MAV_CMD (this enum should have a 0 value to indicate "unused" or "unknown").</field>
+      <field type="uint8_t" name="target_system">System ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.</field>
+      <field type="uint8_t" name="target_component">Component ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.</field>
+    </message>
+    <message id="80" name="COMMAND_CANCEL">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Cancel a long running command. The target system should respond with a COMMAND_ACK to the original command with result=MAV_RESULT_CANCELLED if the long running process was cancelled. If it has already completed, the cancel action can be ignored. The cancel action can be retried until some sort of acknowledgement to the original command has been received. The command microservice is documented at https://mavlink.io/en/services/command.html</description>
+      <field type="uint8_t" name="target_system">System executing long running command. Should not be broadcast (0).</field>
+      <field type="uint8_t" name="target_component">Component executing long running command.</field>
+      <field type="uint16_t" name="command" enum="MAV_CMD">Command ID (of command to cancel).</field>
+    </message>
+    <message id="81" name="MANUAL_SETPOINT">
+      <description>Setpoint in roll, pitch, yaw and thrust from the operator</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="roll" units="rad/s">Desired roll rate</field>
+      <field type="float" name="pitch" units="rad/s">Desired pitch rate</field>
+      <field type="float" name="yaw" units="rad/s">Desired yaw rate</field>
+      <field type="float" name="thrust">Collective thrust, normalized to 0 .. 1</field>
+      <field type="uint8_t" name="mode_switch">Flight mode switch position, 0.. 255</field>
+      <field type="uint8_t" name="manual_override_switch">Override mode switch position, 0.. 255</field>
+    </message>
+    <message id="82" name="SET_ATTITUDE_TARGET">
+      <description>Sets a desired vehicle attitude. Used by an external controller to command the vehicle (manual controller or other system).</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint8_t" name="type_mask" enum="ATTITUDE_TARGET_TYPEMASK" display="bitmask">Bitmap to indicate which dimensions should be ignored by the vehicle.</field>
+      <field type="float[4]" name="q">Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) from MAV_FRAME_LOCAL_NED to MAV_FRAME_BODY_FRD</field>
+      <field type="float" name="body_roll_rate" units="rad/s">Body roll rate</field>
+      <field type="float" name="body_pitch_rate" units="rad/s">Body pitch rate</field>
+      <field type="float" name="body_yaw_rate" units="rad/s">Body yaw rate</field>
+      <field type="float" name="thrust">Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)</field>
+      <extensions/>
+      <field type="float[3]" name="thrust_body">3D thrust setpoint in the body NED frame, normalized to -1 .. 1</field>
+    </message>
+    <message id="83" name="ATTITUDE_TARGET">
+      <description>Reports the current commanded attitude of the vehicle as specified by the autopilot. This should match the commands sent in a SET_ATTITUDE_TARGET message if the vehicle is being controlled this way.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="type_mask" enum="ATTITUDE_TARGET_TYPEMASK" display="bitmask">Bitmap to indicate which dimensions should be ignored by the vehicle.</field>
+      <field type="float[4]" name="q">Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)</field>
+      <field type="float" name="body_roll_rate" units="rad/s">Body roll rate</field>
+      <field type="float" name="body_pitch_rate" units="rad/s">Body pitch rate</field>
+      <field type="float" name="body_yaw_rate" units="rad/s">Body yaw rate</field>
+      <field type="float" name="thrust">Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)</field>
+    </message>
+    <message id="84" name="SET_POSITION_TARGET_LOCAL_NED">
+      <description>Sets a desired vehicle position in a local north-east-down coordinate frame. Used by an external controller to command the vehicle (manual controller or other system).</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint8_t" name="coordinate_frame" enum="MAV_FRAME">Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9</field>
+      <field type="uint16_t" name="type_mask" enum="POSITION_TARGET_TYPEMASK" display="bitmask">Bitmap to indicate which dimensions should be ignored by the vehicle.</field>
+      <field type="float" name="x" units="m">X Position in NED frame</field>
+      <field type="float" name="y" units="m">Y Position in NED frame</field>
+      <field type="float" name="z" units="m">Z Position in NED frame (note, altitude is negative in NED)</field>
+      <field type="float" name="vx" units="m/s">X velocity in NED frame</field>
+      <field type="float" name="vy" units="m/s">Y velocity in NED frame</field>
+      <field type="float" name="vz" units="m/s">Z velocity in NED frame</field>
+      <field type="float" name="afx" units="m/s/s">X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="afy" units="m/s/s">Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="afz" units="m/s/s">Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="yaw" units="rad">yaw setpoint</field>
+      <field type="float" name="yaw_rate" units="rad/s">yaw rate setpoint</field>
+    </message>
+    <message id="85" name="POSITION_TARGET_LOCAL_NED">
+      <description>Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_LOCAL_NED if the vehicle is being controlled this way.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="coordinate_frame" enum="MAV_FRAME">Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9</field>
+      <field type="uint16_t" name="type_mask" enum="POSITION_TARGET_TYPEMASK" display="bitmask">Bitmap to indicate which dimensions should be ignored by the vehicle.</field>
+      <field type="float" name="x" units="m">X Position in NED frame</field>
+      <field type="float" name="y" units="m">Y Position in NED frame</field>
+      <field type="float" name="z" units="m">Z Position in NED frame (note, altitude is negative in NED)</field>
+      <field type="float" name="vx" units="m/s">X velocity in NED frame</field>
+      <field type="float" name="vy" units="m/s">Y velocity in NED frame</field>
+      <field type="float" name="vz" units="m/s">Z velocity in NED frame</field>
+      <field type="float" name="afx" units="m/s/s">X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="afy" units="m/s/s">Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="afz" units="m/s/s">Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="yaw" units="rad">yaw setpoint</field>
+      <field type="float" name="yaw_rate" units="rad/s">yaw rate setpoint</field>
+    </message>
+    <message id="86" name="SET_POSITION_TARGET_GLOBAL_INT">
+      <description>Sets a desired vehicle position, velocity, and/or acceleration in a global coordinate system (WGS84). Used by an external controller to command the vehicle (manual controller or other system).</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot). The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency.</field>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint8_t" name="coordinate_frame" enum="MAV_FRAME">Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11</field>
+      <field type="uint16_t" name="type_mask" enum="POSITION_TARGET_TYPEMASK" display="bitmask">Bitmap to indicate which dimensions should be ignored by the vehicle.</field>
+      <field type="int32_t" name="lat_int" units="degE7">X Position in WGS84 frame</field>
+      <field type="int32_t" name="lon_int" units="degE7">Y Position in WGS84 frame</field>
+      <field type="float" name="alt" units="m">Altitude (MSL, Relative to home, or AGL - depending on frame)</field>
+      <field type="float" name="vx" units="m/s">X velocity in NED frame</field>
+      <field type="float" name="vy" units="m/s">Y velocity in NED frame</field>
+      <field type="float" name="vz" units="m/s">Z velocity in NED frame</field>
+      <field type="float" name="afx" units="m/s/s">X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="afy" units="m/s/s">Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="afz" units="m/s/s">Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="yaw" units="rad">yaw setpoint</field>
+      <field type="float" name="yaw_rate" units="rad/s">yaw rate setpoint</field>
+    </message>
+    <message id="87" name="POSITION_TARGET_GLOBAL_INT">
+      <description>Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being controlled this way.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot). The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency.</field>
+      <field type="uint8_t" name="coordinate_frame" enum="MAV_FRAME">Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11</field>
+      <field type="uint16_t" name="type_mask" enum="POSITION_TARGET_TYPEMASK" display="bitmask">Bitmap to indicate which dimensions should be ignored by the vehicle.</field>
+      <field type="int32_t" name="lat_int" units="degE7">X Position in WGS84 frame</field>
+      <field type="int32_t" name="lon_int" units="degE7">Y Position in WGS84 frame</field>
+      <field type="float" name="alt" units="m">Altitude (MSL, AGL or relative to home altitude, depending on frame)</field>
+      <field type="float" name="vx" units="m/s">X velocity in NED frame</field>
+      <field type="float" name="vy" units="m/s">Y velocity in NED frame</field>
+      <field type="float" name="vz" units="m/s">Z velocity in NED frame</field>
+      <field type="float" name="afx" units="m/s/s">X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="afy" units="m/s/s">Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="afz" units="m/s/s">Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N</field>
+      <field type="float" name="yaw" units="rad">yaw setpoint</field>
+      <field type="float" name="yaw_rate" units="rad/s">yaw rate setpoint</field>
+    </message>
+    <message id="89" name="LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET">
+      <description>The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages of MAV X and the global coordinate frame in NED coordinates. Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="x" units="m">X Position</field>
+      <field type="float" name="y" units="m">Y Position</field>
+      <field type="float" name="z" units="m">Z Position</field>
+      <field type="float" name="roll" units="rad">Roll</field>
+      <field type="float" name="pitch" units="rad">Pitch</field>
+      <field type="float" name="yaw" units="rad">Yaw</field>
+    </message>
+    <message id="90" name="HIL_STATE">
+      <deprecated since="2013-07" replaced_by="HIL_STATE_QUATERNION">Suffers from missing airspeed fields and singularities due to Euler angles</deprecated>
+      <description>Sent from simulation to autopilot. This packet is useful for high throughput applications such as hardware in the loop simulations.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="roll" units="rad">Roll angle</field>
+      <field type="float" name="pitch" units="rad">Pitch angle</field>
+      <field type="float" name="yaw" units="rad">Yaw angle</field>
+      <field type="float" name="rollspeed" units="rad/s">Body frame roll / phi angular speed</field>
+      <field type="float" name="pitchspeed" units="rad/s">Body frame pitch / theta angular speed</field>
+      <field type="float" name="yawspeed" units="rad/s">Body frame yaw / psi angular speed</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude</field>
+      <field type="int32_t" name="alt" units="mm">Altitude</field>
+      <field type="int16_t" name="vx" units="cm/s">Ground X Speed (Latitude)</field>
+      <field type="int16_t" name="vy" units="cm/s">Ground Y Speed (Longitude)</field>
+      <field type="int16_t" name="vz" units="cm/s">Ground Z Speed (Altitude)</field>
+      <field type="int16_t" name="xacc" units="mG">X acceleration</field>
+      <field type="int16_t" name="yacc" units="mG">Y acceleration</field>
+      <field type="int16_t" name="zacc" units="mG">Z acceleration</field>
+    </message>
+    <message id="91" name="HIL_CONTROLS">
+      <description>Sent from autopilot to simulation. Hardware in the loop control outputs</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="roll_ailerons">Control output -1 .. 1</field>
+      <field type="float" name="pitch_elevator">Control output -1 .. 1</field>
+      <field type="float" name="yaw_rudder">Control output -1 .. 1</field>
+      <field type="float" name="throttle">Throttle 0 .. 1</field>
+      <field type="float" name="aux1">Aux 1, -1 .. 1</field>
+      <field type="float" name="aux2">Aux 2, -1 .. 1</field>
+      <field type="float" name="aux3">Aux 3, -1 .. 1</field>
+      <field type="float" name="aux4">Aux 4, -1 .. 1</field>
+      <field type="uint8_t" name="mode" enum="MAV_MODE">System mode.</field>
+      <field type="uint8_t" name="nav_mode">Navigation mode (MAV_NAV_MODE)</field>
+    </message>
+    <message id="92" name="HIL_RC_INPUTS_RAW">
+      <description>Sent from simulation to autopilot. The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint16_t" name="chan1_raw" units="us">RC channel 1 value</field>
+      <field type="uint16_t" name="chan2_raw" units="us">RC channel 2 value</field>
+      <field type="uint16_t" name="chan3_raw" units="us">RC channel 3 value</field>
+      <field type="uint16_t" name="chan4_raw" units="us">RC channel 4 value</field>
+      <field type="uint16_t" name="chan5_raw" units="us">RC channel 5 value</field>
+      <field type="uint16_t" name="chan6_raw" units="us">RC channel 6 value</field>
+      <field type="uint16_t" name="chan7_raw" units="us">RC channel 7 value</field>
+      <field type="uint16_t" name="chan8_raw" units="us">RC channel 8 value</field>
+      <field type="uint16_t" name="chan9_raw" units="us">RC channel 9 value</field>
+      <field type="uint16_t" name="chan10_raw" units="us">RC channel 10 value</field>
+      <field type="uint16_t" name="chan11_raw" units="us">RC channel 11 value</field>
+      <field type="uint16_t" name="chan12_raw" units="us">RC channel 12 value</field>
+      <field type="uint8_t" name="rssi" invalid="UINT8_MAX">Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.</field>
+    </message>
+    <message id="93" name="HIL_ACTUATOR_CONTROLS">
+      <description>Sent from autopilot to simulation. Hardware in the loop control outputs (replacement for HIL_CONTROLS)</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float[16]" name="controls">Control outputs -1 .. 1. Channel assignment depends on the simulated hardware.</field>
+      <field type="uint8_t" name="mode" enum="MAV_MODE_FLAG" display="bitmask">System mode. Includes arming state.</field>
+      <field type="uint64_t" name="flags" display="bitmask">Flags as bitfield, 1: indicate simulation using lockstep.</field>
+    </message>
+    <message id="100" name="OPTICAL_FLOW">
+      <description>Optical flow from a flow sensor (e.g. optical mouse sensor)</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="sensor_id">Sensor ID</field>
+      <field type="int16_t" name="flow_x" units="dpix">Flow in x-sensor direction</field>
+      <field type="int16_t" name="flow_y" units="dpix">Flow in y-sensor direction</field>
+      <field type="float" name="flow_comp_m_x" units="m/s">Flow in x-sensor direction, angular-speed compensated</field>
+      <field type="float" name="flow_comp_m_y" units="m/s">Flow in y-sensor direction, angular-speed compensated</field>
+      <field type="uint8_t" name="quality">Optical flow quality / confidence. 0: bad, 255: maximum quality</field>
+      <field type="float" name="ground_distance" units="m">Ground distance. Positive value: distance known. Negative value: Unknown distance</field>
+      <extensions/>
+      <field type="float" name="flow_rate_x" units="rad/s">Flow rate about X axis</field>
+      <field type="float" name="flow_rate_y" units="rad/s">Flow rate about Y axis</field>
+    </message>
+    <message id="101" name="GLOBAL_VISION_POSITION_ESTIMATE">
+      <description>Global position/attitude estimate from a vision source.</description>
+      <field type="uint64_t" name="usec" units="us">Timestamp (UNIX time or since system boot)</field>
+      <field type="float" name="x" units="m">Global X position</field>
+      <field type="float" name="y" units="m">Global Y position</field>
+      <field type="float" name="z" units="m">Global Z position</field>
+      <field type="float" name="roll" units="rad">Roll angle</field>
+      <field type="float" name="pitch" units="rad">Pitch angle</field>
+      <field type="float" name="yaw" units="rad">Yaw angle</field>
+      <extensions/>
+      <field type="float[21]" name="covariance" invalid="[NaN:]">Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x_global, y_global, z_global, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.</field>
+      <field type="uint8_t" name="reset_counter">Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.</field>
+    </message>
+    <message id="102" name="VISION_POSITION_ESTIMATE">
+      <description>Local position/attitude estimate from a vision source.</description>
+      <field type="uint64_t" name="usec" units="us">Timestamp (UNIX time or time since system boot)</field>
+      <field type="float" name="x" units="m">Local X position</field>
+      <field type="float" name="y" units="m">Local Y position</field>
+      <field type="float" name="z" units="m">Local Z position</field>
+      <field type="float" name="roll" units="rad">Roll angle</field>
+      <field type="float" name="pitch" units="rad">Pitch angle</field>
+      <field type="float" name="yaw" units="rad">Yaw angle</field>
+      <extensions/>
+      <field type="float[21]" name="covariance" invalid="[NaN:]">Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.</field>
+      <field type="uint8_t" name="reset_counter">Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.</field>
+    </message>
+    <message id="103" name="VISION_SPEED_ESTIMATE">
+      <description>Speed estimate from a vision source.</description>
+      <field type="uint64_t" name="usec" units="us">Timestamp (UNIX time or time since system boot)</field>
+      <field type="float" name="x" units="m/s">Global X speed</field>
+      <field type="float" name="y" units="m/s">Global Y speed</field>
+      <field type="float" name="z" units="m/s">Global Z speed</field>
+      <extensions/>
+      <field type="float[9]" name="covariance" invalid="[NaN:]">Row-major representation of 3x3 linear velocity covariance matrix (states: vx, vy, vz; 1st three entries - 1st row, etc.). If unknown, assign NaN value to first element in the array.</field>
+      <field type="uint8_t" name="reset_counter">Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.</field>
+    </message>
+    <message id="104" name="VICON_POSITION_ESTIMATE">
+      <description>Global position estimate from a Vicon motion system source.</description>
+      <field type="uint64_t" name="usec" units="us">Timestamp (UNIX time or time since system boot)</field>
+      <field type="float" name="x" units="m">Global X position</field>
+      <field type="float" name="y" units="m">Global Y position</field>
+      <field type="float" name="z" units="m">Global Z position</field>
+      <field type="float" name="roll" units="rad">Roll angle</field>
+      <field type="float" name="pitch" units="rad">Pitch angle</field>
+      <field type="float" name="yaw" units="rad">Yaw angle</field>
+      <extensions/>
+      <field type="float[21]" name="covariance" invalid="[NaN:]">Row-major representation of 6x6 pose cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.</field>
+    </message>
+    <message id="105" name="HIGHRES_IMU">
+      <description>The IMU readings in SI units in NED body frame</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="xacc" units="m/s/s">X acceleration</field>
+      <field type="float" name="yacc" units="m/s/s">Y acceleration</field>
+      <field type="float" name="zacc" units="m/s/s">Z acceleration</field>
+      <field type="float" name="xgyro" units="rad/s">Angular speed around X axis</field>
+      <field type="float" name="ygyro" units="rad/s">Angular speed around Y axis</field>
+      <field type="float" name="zgyro" units="rad/s">Angular speed around Z axis</field>
+      <field type="float" name="xmag" units="gauss">X Magnetic field</field>
+      <field type="float" name="ymag" units="gauss">Y Magnetic field</field>
+      <field type="float" name="zmag" units="gauss">Z Magnetic field</field>
+      <field type="float" name="abs_pressure" units="hPa">Absolute pressure</field>
+      <field type="float" name="diff_pressure" units="hPa">Differential pressure</field>
+      <field type="float" name="pressure_alt">Altitude calculated from pressure</field>
+      <field type="float" name="temperature" units="degC">Temperature</field>
+      <field type="uint16_t" name="fields_updated" enum="HIGHRES_IMU_UPDATED_FLAGS" display="bitmask">Bitmap for fields that have updated since last message</field>
+      <extensions/>
+      <field type="uint8_t" name="id" instance="true">Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)</field>
+    </message>
+    <message id="106" name="OPTICAL_FLOW_RAD">
+      <description>Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse sensor)</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="sensor_id" instance="true">Sensor ID</field>
+      <field type="uint32_t" name="integration_time_us" units="us">Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.</field>
+      <field type="float" name="integrated_x" units="rad">Flow around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)</field>
+      <field type="float" name="integrated_y" units="rad">Flow around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)</field>
+      <field type="float" name="integrated_xgyro" units="rad">RH rotation around X axis</field>
+      <field type="float" name="integrated_ygyro" units="rad">RH rotation around Y axis</field>
+      <field type="float" name="integrated_zgyro" units="rad">RH rotation around Z axis</field>
+      <field type="int16_t" name="temperature" units="cdegC">Temperature</field>
+      <field type="uint8_t" name="quality">Optical flow quality / confidence. 0: no valid flow, 255: maximum quality</field>
+      <field type="uint32_t" name="time_delta_distance_us" units="us">Time since the distance was sampled.</field>
+      <field type="float" name="distance" units="m">Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance.</field>
+    </message>
+    <message id="107" name="HIL_SENSOR">
+      <description>The IMU readings in SI units in NED body frame</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="xacc" units="m/s/s">X acceleration</field>
+      <field type="float" name="yacc" units="m/s/s">Y acceleration</field>
+      <field type="float" name="zacc" units="m/s/s">Z acceleration</field>
+      <field type="float" name="xgyro" units="rad/s">Angular speed around X axis in body frame</field>
+      <field type="float" name="ygyro" units="rad/s">Angular speed around Y axis in body frame</field>
+      <field type="float" name="zgyro" units="rad/s">Angular speed around Z axis in body frame</field>
+      <field type="float" name="xmag" units="gauss">X Magnetic field</field>
+      <field type="float" name="ymag" units="gauss">Y Magnetic field</field>
+      <field type="float" name="zmag" units="gauss">Z Magnetic field</field>
+      <field type="float" name="abs_pressure" units="hPa">Absolute pressure</field>
+      <field type="float" name="diff_pressure" units="hPa">Differential pressure (airspeed)</field>
+      <field type="float" name="pressure_alt">Altitude calculated from pressure</field>
+      <field type="float" name="temperature" units="degC">Temperature</field>
+      <field type="uint32_t" name="fields_updated" enum="HIL_SENSOR_UPDATED_FLAGS" display="bitmask">Bitmap for fields that have updated since last message</field>
+      <extensions/>
+      <field type="uint8_t" name="id">Sensor ID (zero indexed). Used for multiple sensor inputs</field>
+    </message>
+    <message id="108" name="SIM_STATE">
+      <description>Status of simulation environment, if used</description>
+      <field type="float" name="q1">True attitude quaternion component 1, w (1 in null-rotation)</field>
+      <field type="float" name="q2">True attitude quaternion component 2, x (0 in null-rotation)</field>
+      <field type="float" name="q3">True attitude quaternion component 3, y (0 in null-rotation)</field>
+      <field type="float" name="q4">True attitude quaternion component 4, z (0 in null-rotation)</field>
+      <field type="float" name="roll">Attitude roll expressed as Euler angles, not recommended except for human-readable outputs</field>
+      <field type="float" name="pitch">Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs</field>
+      <field type="float" name="yaw">Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs</field>
+      <field type="float" name="xacc" units="m/s/s">X acceleration</field>
+      <field type="float" name="yacc" units="m/s/s">Y acceleration</field>
+      <field type="float" name="zacc" units="m/s/s">Z acceleration</field>
+      <field type="float" name="xgyro" units="rad/s">Angular speed around X axis</field>
+      <field type="float" name="ygyro" units="rad/s">Angular speed around Y axis</field>
+      <field type="float" name="zgyro" units="rad/s">Angular speed around Z axis</field>
+      <field type="float" name="lat" units="deg">Latitude (lower precision). Both this and the lat_int field should be set.</field>
+      <field type="float" name="lon" units="deg">Longitude (lower precision). Both this and the lon_int field should be set.</field>
+      <field type="float" name="alt" units="m">Altitude</field>
+      <field type="float" name="std_dev_horz">Horizontal position standard deviation</field>
+      <field type="float" name="std_dev_vert">Vertical position standard deviation</field>
+      <field type="float" name="vn" units="m/s">True velocity in north direction in earth-fixed NED frame</field>
+      <field type="float" name="ve" units="m/s">True velocity in east direction in earth-fixed NED frame</field>
+      <field type="float" name="vd" units="m/s">True velocity in down direction in earth-fixed NED frame</field>
+      <extensions/>
+      <field type="int32_t" name="lat_int" units="degE7" invalid="0">Latitude (higher precision). If 0, recipients should use the lat field value (otherwise this field is preferred).</field>
+      <field type="int32_t" name="lon_int" units="degE7" invalid="0">Longitude (higher precision). If 0, recipients should use the lon field value (otherwise this field is preferred).</field>
+    </message>
+    <message id="109" name="RADIO_STATUS">
+      <description>Status generated by radio and injected into MAVLink stream.</description>
+      <field type="uint8_t" name="rssi" invalid="UINT8_MAX">Local (message sender) received signal strength indication in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.</field>
+      <field type="uint8_t" name="remrssi" invalid="UINT8_MAX">Remote (message receiver) signal strength indication in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.</field>
+      <field type="uint8_t" name="txbuf" units="%">Remaining free transmitter buffer space.</field>
+      <field type="uint8_t" name="noise" invalid="UINT8_MAX">Local background noise level. These are device dependent RSSI values (scale as approx 2x dB on SiK radios). Values: [0-254], UINT8_MAX: invalid/unknown.</field>
+      <field type="uint8_t" name="remnoise" invalid="UINT8_MAX">Remote background noise level. These are device dependent RSSI values (scale as approx 2x dB on SiK radios). Values: [0-254], UINT8_MAX: invalid/unknown.</field>
+      <field type="uint16_t" name="rxerrors">Count of radio packet receive errors (since boot).</field>
+      <field type="uint16_t" name="fixed">Count of error corrected radio packets (since boot).</field>
+    </message>
+    <message id="110" name="FILE_TRANSFER_PROTOCOL">
+      <description>File transfer protocol message: https://mavlink.io/en/services/ftp.html.</description>
+      <field type="uint8_t" name="target_network">Network ID (0 for broadcast)</field>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast)</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast)</field>
+      <field type="uint8_t[251]" name="payload">Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The content/format of this block is defined in https://mavlink.io/en/services/ftp.html.</field>
+    </message>
+    <message id="111" name="TIMESYNC">
+      <description>
+        Time synchronization message.
+        The message is used for both timesync requests and responses.
+        The request is sent with `ts1=syncing component timestamp` and `tc1=0`, and may be broadcast or targeted to a specific system/component.
+        The response is sent with `ts1=syncing component timestamp` (mirror back unchanged), and `tc1=responding component timestamp`, with the `target_system` and `target_component` set to ids of the original request.
+        Systems can determine if they are receiving a request or response based on the value of `tc`.
+        If the response has `target_system==target_component==0` the remote system has not been updated to use the component IDs and cannot reliably timesync; the requestor may report an error.
+        Timestamps are UNIX Epoch time or time since system boot in nanoseconds (the timestamp format can be inferred by checking for the magnitude of the number; generally it doesn't matter as only the offset is used).
+        The message sequence is repeated numerous times with results being filtered/averaged to estimate the offset.
+      </description>
+      <field type="int64_t" name="tc1" units="ns">Time sync timestamp 1. Syncing: 0. Responding: Timestamp of responding component.</field>
+      <field type="int64_t" name="ts1" units="ns">Time sync timestamp 2. Timestamp of syncing component (mirrored in response).</field>
+      <extensions/>
+      <field type="uint8_t" name="target_system">Target system id. Request: 0 (broadcast) or id of specific system. Response must contain system id of the requesting component.</field>
+      <field type="uint8_t" name="target_component">Target component id. Request: 0 (broadcast) or id of specific component. Response must contain component id of the requesting component.</field>
+    </message>
+    <message id="112" name="CAMERA_TRIGGER">
+      <description>Camera-IMU triggering and synchronisation message.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp for image frame (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint32_t" name="seq">Image frame sequence</field>
+    </message>
+    <message id="113" name="HIL_GPS">
+      <description>The global position, as returned by the Global Positioning System (GPS). This is
+                 NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION_INT for the global position estimate.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="fix_type">0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude (WGS84)</field>
+      <field type="int32_t" name="alt" units="mm">Altitude (MSL). Positive for up.</field>
+      <field type="uint16_t" name="eph" invalid="UINT16_MAX">GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX</field>
+      <field type="uint16_t" name="epv" invalid="UINT16_MAX">GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX</field>
+      <field type="uint16_t" name="vel" units="cm/s" invalid="UINT16_MAX">GPS ground speed. If unknown, set to: UINT16_MAX</field>
+      <field type="int16_t" name="vn" units="cm/s">GPS velocity in north direction in earth-fixed NED frame</field>
+      <field type="int16_t" name="ve" units="cm/s">GPS velocity in east direction in earth-fixed NED frame</field>
+      <field type="int16_t" name="vd" units="cm/s">GPS velocity in down direction in earth-fixed NED frame</field>
+      <field type="uint16_t" name="cog" units="cdeg" invalid="UINT16_MAX">Course over ground (NOT heading, but direction of movement), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX</field>
+      <field type="uint8_t" name="satellites_visible" invalid="UINT8_MAX">Number of satellites visible. If unknown, set to UINT8_MAX</field>
+      <extensions/>
+      <field type="uint8_t" name="id">GPS ID (zero indexed). Used for multiple GPS inputs</field>
+      <field type="uint16_t" name="yaw" units="cdeg">Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north</field>
+    </message>
+    <message id="114" name="HIL_OPTICAL_FLOW">
+      <description>Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical mouse sensor)</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="sensor_id">Sensor ID</field>
+      <field type="uint32_t" name="integration_time_us" units="us">Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.</field>
+      <field type="float" name="integrated_x" units="rad">Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)</field>
+      <field type="float" name="integrated_y" units="rad">Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)</field>
+      <field type="float" name="integrated_xgyro" units="rad">RH rotation around X axis</field>
+      <field type="float" name="integrated_ygyro" units="rad">RH rotation around Y axis</field>
+      <field type="float" name="integrated_zgyro" units="rad">RH rotation around Z axis</field>
+      <field type="int16_t" name="temperature" units="cdegC">Temperature</field>
+      <field type="uint8_t" name="quality">Optical flow quality / confidence. 0: no valid flow, 255: maximum quality</field>
+      <field type="uint32_t" name="time_delta_distance_us" units="us">Time since the distance was sampled.</field>
+      <field type="float" name="distance" units="m" invalid="-1.0">Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance.</field>
+    </message>
+    <message id="115" name="HIL_STATE_QUATERNION">
+      <description>Sent from simulation to autopilot, avoids in contrast to HIL_STATE singularities. This packet is useful for high throughput applications such as hardware in the loop simulations.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float[4]" name="attitude_quaternion">Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation)</field>
+      <field type="float" name="rollspeed" units="rad/s">Body frame roll / phi angular speed</field>
+      <field type="float" name="pitchspeed" units="rad/s">Body frame pitch / theta angular speed</field>
+      <field type="float" name="yawspeed" units="rad/s">Body frame yaw / psi angular speed</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude</field>
+      <field type="int32_t" name="alt" units="mm">Altitude</field>
+      <field type="int16_t" name="vx" units="cm/s">Ground X Speed (Latitude)</field>
+      <field type="int16_t" name="vy" units="cm/s">Ground Y Speed (Longitude)</field>
+      <field type="int16_t" name="vz" units="cm/s">Ground Z Speed (Altitude)</field>
+      <field type="uint16_t" name="ind_airspeed" units="cm/s">Indicated airspeed</field>
+      <field type="uint16_t" name="true_airspeed" units="cm/s">True airspeed</field>
+      <field type="int16_t" name="xacc" units="mG">X acceleration</field>
+      <field type="int16_t" name="yacc" units="mG">Y acceleration</field>
+      <field type="int16_t" name="zacc" units="mG">Z acceleration</field>
+    </message>
+    <message id="116" name="SCALED_IMU2">
+      <description>The RAW IMU readings for secondary 9DOF sensor setup. This message should contain the scaled values to the described units</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="int16_t" name="xacc" units="mG">X acceleration</field>
+      <field type="int16_t" name="yacc" units="mG">Y acceleration</field>
+      <field type="int16_t" name="zacc" units="mG">Z acceleration</field>
+      <field type="int16_t" name="xgyro" units="mrad/s">Angular speed around X axis</field>
+      <field type="int16_t" name="ygyro" units="mrad/s">Angular speed around Y axis</field>
+      <field type="int16_t" name="zgyro" units="mrad/s">Angular speed around Z axis</field>
+      <field type="int16_t" name="xmag" units="mgauss">X Magnetic field</field>
+      <field type="int16_t" name="ymag" units="mgauss">Y Magnetic field</field>
+      <field type="int16_t" name="zmag" units="mgauss">Z Magnetic field</field>
+      <extensions/>
+      <field type="int16_t" name="temperature" units="cdegC" invalid="0">Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C).</field>
+    </message>
+    <message id="117" name="LOG_REQUEST_LIST">
+      <description>Request a list of available logs. On some systems calling this may stop on-board logging until LOG_REQUEST_END is called. If there are no log files available this request shall be answered with one LOG_ENTRY message with id = 0 and num_logs = 0.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="start">First log id (0 for first available)</field>
+      <field type="uint16_t" name="end">Last log id (0xffff for last available)</field>
+    </message>
+    <message id="118" name="LOG_ENTRY">
+      <description>Reply to LOG_REQUEST_LIST</description>
+      <field type="uint16_t" name="id">Log id</field>
+      <field type="uint16_t" name="num_logs">Total number of logs</field>
+      <field type="uint16_t" name="last_log_num">High log number</field>
+      <field type="uint32_t" name="time_utc" units="s" invalid="0">UTC timestamp of log since 1970, or 0 if not available</field>
+      <field type="uint32_t" name="size" units="bytes">Size of the log (may be approximate)</field>
+    </message>
+    <message id="119" name="LOG_REQUEST_DATA">
+      <description>Request a chunk of a log</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="id">Log id (from LOG_ENTRY reply)</field>
+      <field type="uint32_t" name="ofs">Offset into the log</field>
+      <field type="uint32_t" name="count" units="bytes">Number of bytes</field>
+    </message>
+    <message id="120" name="LOG_DATA">
+      <description>Reply to LOG_REQUEST_DATA</description>
+      <field type="uint16_t" name="id">Log id (from LOG_ENTRY reply)</field>
+      <field type="uint32_t" name="ofs">Offset into the log</field>
+      <field type="uint8_t" name="count" units="bytes">Number of bytes (zero for end of log)</field>
+      <field type="uint8_t[90]" name="data">log data</field>
+    </message>
+    <message id="121" name="LOG_ERASE">
+      <description>Erase all logs</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+    </message>
+    <message id="122" name="LOG_REQUEST_END">
+      <description>Stop log transfer and resume normal logging</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+    </message>
+    <message id="123" name="GPS_INJECT_DATA">
+      <deprecated since="2022-05" replaced_by="GPS_RTCM_DATA"/>
+      <description>Data for injecting into the onboard GPS (used for DGPS)</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint8_t" name="len" units="bytes">Data length</field>
+      <field type="uint8_t[110]" name="data">Raw data (110 is enough for 12 satellites of RTCMv2)</field>
+    </message>
+    <message id="124" name="GPS2_RAW">
+      <description>Second GPS data.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="fix_type" enum="GPS_FIX_TYPE">GPS fix type.</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude (WGS84)</field>
+      <field type="int32_t" name="alt" units="mm">Altitude (MSL). Positive for up.</field>
+      <field type="uint16_t" name="eph" invalid="UINT16_MAX">GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX</field>
+      <field type="uint16_t" name="epv" invalid="UINT16_MAX">GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX</field>
+      <field type="uint16_t" name="vel" units="cm/s" invalid="UINT16_MAX">GPS ground speed. If unknown, set to: UINT16_MAX</field>
+      <field type="uint16_t" name="cog" units="cdeg" invalid="UINT16_MAX">Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX</field>
+      <field type="uint8_t" name="satellites_visible" invalid="UINT8_MAX">Number of satellites visible. If unknown, set to UINT8_MAX</field>
+      <field type="uint8_t" name="dgps_numch">Number of DGPS satellites</field>
+      <field type="uint32_t" name="dgps_age" units="ms">Age of DGPS info</field>
+      <extensions/>
+      <field type="uint16_t" name="yaw" units="cdeg" invalid="0">Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.</field>
+      <field type="int32_t" name="alt_ellipsoid" units="mm">Altitude (above WGS84, EGM96 ellipsoid). Positive for up.</field>
+      <field type="uint32_t" name="h_acc" units="mm">Position uncertainty.</field>
+      <field type="uint32_t" name="v_acc" units="mm">Altitude uncertainty.</field>
+      <field type="uint32_t" name="vel_acc" units="mm">Speed uncertainty.</field>
+      <field type="uint32_t" name="hdg_acc" units="degE5">Heading / track uncertainty</field>
+    </message>
+    <message id="125" name="POWER_STATUS">
+      <description>Power supply status</description>
+      <field type="uint16_t" name="Vcc" units="mV">5V rail voltage.</field>
+      <field type="uint16_t" name="Vservo" units="mV">Servo rail voltage.</field>
+      <field type="uint16_t" name="flags" enum="MAV_POWER_STATUS" display="bitmask">Bitmap of power supply status flags.</field>
+    </message>
+    <message id="126" name="SERIAL_CONTROL">
+      <description>Control a serial port. This can be used for raw access to an onboard serial peripheral such as a GPS or telemetry radio. It is designed to make it possible to update the devices firmware via MAVLink messages or change the devices settings. A message with zero bytes can be used to change just the baudrate.</description>
+      <field type="uint8_t" name="device" enum="SERIAL_CONTROL_DEV">Serial control device type.</field>
+      <field type="uint8_t" name="flags" enum="SERIAL_CONTROL_FLAG" display="bitmask">Bitmap of serial control flags.</field>
+      <field type="uint16_t" name="timeout" units="ms">Timeout for reply data</field>
+      <field type="uint32_t" name="baudrate" units="bits/s">Baudrate of transfer. Zero means no change.</field>
+      <field type="uint8_t" name="count" units="bytes">how many bytes in this transfer</field>
+      <field type="uint8_t[70]" name="data">serial data</field>
+      <extensions/>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+    </message>
+    <message id="127" name="GPS_RTK">
+      <description>RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting</description>
+      <field type="uint32_t" name="time_last_baseline_ms" units="ms">Time since boot of last baseline message received.</field>
+      <field type="uint8_t" name="rtk_receiver_id">Identification of connected RTK receiver.</field>
+      <field type="uint16_t" name="wn">GPS Week Number of last baseline</field>
+      <field type="uint32_t" name="tow" units="ms">GPS Time of Week of last baseline</field>
+      <field type="uint8_t" name="rtk_health">GPS-specific health report for RTK data.</field>
+      <field type="uint8_t" name="rtk_rate" units="Hz">Rate of baseline messages being received by GPS</field>
+      <field type="uint8_t" name="nsats">Current number of sats used for RTK calculation.</field>
+      <field type="uint8_t" name="baseline_coords_type" enum="RTK_BASELINE_COORDINATE_SYSTEM">Coordinate system of baseline</field>
+      <field type="int32_t" name="baseline_a_mm" units="mm">Current baseline in ECEF x or NED north component.</field>
+      <field type="int32_t" name="baseline_b_mm" units="mm">Current baseline in ECEF y or NED east component.</field>
+      <field type="int32_t" name="baseline_c_mm" units="mm">Current baseline in ECEF z or NED down component.</field>
+      <field type="uint32_t" name="accuracy">Current estimate of baseline accuracy.</field>
+      <field type="int32_t" name="iar_num_hypotheses">Current number of integer ambiguity hypotheses.</field>
+    </message>
+    <message id="128" name="GPS2_RTK">
+      <description>RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting</description>
+      <field type="uint32_t" name="time_last_baseline_ms" units="ms">Time since boot of last baseline message received.</field>
+      <field type="uint8_t" name="rtk_receiver_id">Identification of connected RTK receiver.</field>
+      <field type="uint16_t" name="wn">GPS Week Number of last baseline</field>
+      <field type="uint32_t" name="tow" units="ms">GPS Time of Week of last baseline</field>
+      <field type="uint8_t" name="rtk_health">GPS-specific health report for RTK data.</field>
+      <field type="uint8_t" name="rtk_rate" units="Hz">Rate of baseline messages being received by GPS</field>
+      <field type="uint8_t" name="nsats">Current number of sats used for RTK calculation.</field>
+      <field type="uint8_t" name="baseline_coords_type" enum="RTK_BASELINE_COORDINATE_SYSTEM">Coordinate system of baseline</field>
+      <field type="int32_t" name="baseline_a_mm" units="mm">Current baseline in ECEF x or NED north component.</field>
+      <field type="int32_t" name="baseline_b_mm" units="mm">Current baseline in ECEF y or NED east component.</field>
+      <field type="int32_t" name="baseline_c_mm" units="mm">Current baseline in ECEF z or NED down component.</field>
+      <field type="uint32_t" name="accuracy">Current estimate of baseline accuracy.</field>
+      <field type="int32_t" name="iar_num_hypotheses">Current number of integer ambiguity hypotheses.</field>
+    </message>
+    <message id="129" name="SCALED_IMU3">
+      <description>The RAW IMU readings for 3rd 9DOF sensor setup. This message should contain the scaled values to the described units</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="int16_t" name="xacc" units="mG">X acceleration</field>
+      <field type="int16_t" name="yacc" units="mG">Y acceleration</field>
+      <field type="int16_t" name="zacc" units="mG">Z acceleration</field>
+      <field type="int16_t" name="xgyro" units="mrad/s">Angular speed around X axis</field>
+      <field type="int16_t" name="ygyro" units="mrad/s">Angular speed around Y axis</field>
+      <field type="int16_t" name="zgyro" units="mrad/s">Angular speed around Z axis</field>
+      <field type="int16_t" name="xmag" units="mgauss">X Magnetic field</field>
+      <field type="int16_t" name="ymag" units="mgauss">Y Magnetic field</field>
+      <field type="int16_t" name="zmag" units="mgauss">Z Magnetic field</field>
+      <extensions/>
+      <field type="int16_t" name="temperature" units="cdegC" invalid="0">Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C).</field>
+    </message>
+    <message id="130" name="DATA_TRANSMISSION_HANDSHAKE">
+      <description>Handshake message to initiate, control and stop image streaming when using the Image Transmission Protocol: https://mavlink.io/en/services/image_transmission.html.</description>
+      <field type="uint8_t" name="type" enum="MAVLINK_DATA_STREAM_TYPE">Type of requested/acknowledged data.</field>
+      <field type="uint32_t" name="size" units="bytes">total data size (set on ACK only).</field>
+      <field type="uint16_t" name="width">Width of a matrix or image.</field>
+      <field type="uint16_t" name="height">Height of a matrix or image.</field>
+      <field type="uint16_t" name="packets">Number of packets being sent (set on ACK only).</field>
+      <field type="uint8_t" name="payload" units="bytes">Payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only).</field>
+      <field type="uint8_t" name="jpg_quality" units="%">JPEG quality. Values: [1-100].</field>
+    </message>
+    <message id="131" name="ENCAPSULATED_DATA">
+      <description>Data packet for images sent using the Image Transmission Protocol: https://mavlink.io/en/services/image_transmission.html.</description>
+      <field type="uint16_t" name="seqnr">sequence number (starting with 0 on every transmission)</field>
+      <field type="uint8_t[253]" name="data">image data bytes</field>
+    </message>
+    <message id="132" name="DISTANCE_SENSOR">
+      <description>Distance sensor information for an onboard rangefinder.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint16_t" name="min_distance" units="cm">Minimum distance the sensor can measure</field>
+      <field type="uint16_t" name="max_distance" units="cm">Maximum distance the sensor can measure</field>
+      <field type="uint16_t" name="current_distance" units="cm">Current distance reading</field>
+      <field type="uint8_t" name="type" enum="MAV_DISTANCE_SENSOR">Type of distance sensor.</field>
+      <field type="uint8_t" name="id" instance="true">Onboard ID of the sensor</field>
+      <field type="uint8_t" name="orientation" enum="MAV_SENSOR_ORIENTATION">Direction the sensor faces. downward-facing: ROTATION_PITCH_270, upward-facing: ROTATION_PITCH_90, backward-facing: ROTATION_PITCH_180, forward-facing: ROTATION_NONE, left-facing: ROTATION_YAW_90, right-facing: ROTATION_YAW_270</field>
+      <field type="uint8_t" name="covariance" units="cm^2" invalid="UINT8_MAX">Measurement variance. Max standard deviation is 6cm. UINT8_MAX if unknown.</field>
+      <extensions/>
+      <field type="float" name="horizontal_fov" units="rad" invalid="0">Horizontal Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.</field>
+      <field type="float" name="vertical_fov" units="rad" invalid="0">Vertical Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.</field>
+      <field type="float[4]" name="quaternion" invalid="[0]">Quaternion of the sensor orientation in vehicle body frame (w, x, y, z order, zero-rotation is 1, 0, 0, 0). Zero-rotation is along the vehicle body x-axis. This field is required if the orientation is set to MAV_SENSOR_ROTATION_CUSTOM. Set it to 0 if invalid."</field>
+      <field type="uint8_t" name="signal_quality" units="%" invalid="0">Signal quality of the sensor. Specific to each sensor type, representing the relation of the signal strength with the target reflectivity, distance, size or aspect, but normalised as a percentage. 0 = unknown/unset signal quality, 1 = invalid signal, 100 = perfect signal.</field>
+    </message>
+    <message id="133" name="TERRAIN_REQUEST">
+      <description>Request for terrain data and terrain status. See terrain protocol docs: https://mavlink.io/en/services/terrain.html</description>
+      <field type="int32_t" name="lat" units="degE7">Latitude of SW corner of first grid</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude of SW corner of first grid</field>
+      <field type="uint16_t" name="grid_spacing" units="m">Grid spacing</field>
+      <field type="uint64_t" name="mask" display="bitmask" print_format="0x%07x">Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits)</field>
+    </message>
+    <message id="134" name="TERRAIN_DATA">
+      <description>Terrain data sent from GCS. The lat/lon and grid_spacing must be the same as a lat/lon from a TERRAIN_REQUEST. See terrain protocol docs: https://mavlink.io/en/services/terrain.html</description>
+      <field type="int32_t" name="lat" units="degE7">Latitude of SW corner of first grid</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude of SW corner of first grid</field>
+      <field type="uint16_t" name="grid_spacing" units="m">Grid spacing</field>
+      <field type="uint8_t" name="gridbit">bit within the terrain request mask</field>
+      <field type="int16_t[16]" name="data" units="m">Terrain data MSL</field>
+    </message>
+    <message id="135" name="TERRAIN_CHECK">
+      <description>Request that the vehicle report terrain height at the given location (expected response is a TERRAIN_REPORT). Used by GCS to check if vehicle has all terrain data needed for a mission.</description>
+      <field type="int32_t" name="lat" units="degE7">Latitude</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude</field>
+    </message>
+    <message id="136" name="TERRAIN_REPORT">
+      <description>Streamed from drone to report progress of terrain map download (initiated by TERRAIN_REQUEST), or sent as a response to a TERRAIN_CHECK request. See terrain protocol docs: https://mavlink.io/en/services/terrain.html</description>
+      <field type="int32_t" name="lat" units="degE7">Latitude</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude</field>
+      <field type="uint16_t" name="spacing">grid spacing (zero if terrain at this location unavailable)</field>
+      <field type="float" name="terrain_height" units="m">Terrain height MSL</field>
+      <field type="float" name="current_height" units="m">Current vehicle height above lat/lon terrain height</field>
+      <field type="uint16_t" name="pending">Number of 4x4 terrain blocks waiting to be received or read from disk</field>
+      <field type="uint16_t" name="loaded">Number of 4x4 terrain blocks in memory</field>
+    </message>
+    <message id="137" name="SCALED_PRESSURE2">
+      <description>Barometer readings for 2nd barometer</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="press_abs" units="hPa">Absolute pressure</field>
+      <field type="float" name="press_diff" units="hPa">Differential pressure</field>
+      <field type="int16_t" name="temperature" units="cdegC">Absolute pressure temperature</field>
+      <extensions/>
+      <field type="int16_t" name="temperature_press_diff" units="cdegC" invalid="0">Differential pressure temperature (0, if not available). Report values of 0 (or 1) as 1 cdegC.</field>
+    </message>
+    <message id="138" name="ATT_POS_MOCAP">
+      <description>Motion capture attitude and position</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float[4]" name="q">Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)</field>
+      <field type="float" name="x" units="m">X position (NED)</field>
+      <field type="float" name="y" units="m">Y position (NED)</field>
+      <field type="float" name="z" units="m">Z position (NED)</field>
+      <extensions/>
+      <field type="float[21]" name="covariance" invalid="[NaN:]">Row-major representation of a pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.</field>
+    </message>
+    <message id="139" name="SET_ACTUATOR_CONTROL_TARGET">
+      <description>Set the vehicle attitude and body angular rates.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="group_mlx">Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances.</field>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="float[8]" name="controls">Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs.</field>
+    </message>
+    <message id="140" name="ACTUATOR_CONTROL_TARGET">
+      <description>Set the vehicle attitude and body angular rates.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="group_mlx">Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances.</field>
+      <field type="float[8]" name="controls">Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs.</field>
+    </message>
+    <message id="141" name="ALTITUDE">
+      <description>The current system altitude.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="altitude_monotonic" units="m">This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights.</field>
+      <field type="float" name="altitude_amsl" units="m">This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output MSL by default and not the WGS84 altitude.</field>
+      <field type="float" name="altitude_local" units="m">This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive.</field>
+      <field type="float" name="altitude_relative" units="m">This is the altitude above the home position. It resets on each change of the current home position.</field>
+      <field type="float" name="altitude_terrain" units="m">This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown.</field>
+      <field type="float" name="bottom_clearance" units="m">This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available.</field>
+    </message>
+    <message id="142" name="RESOURCE_REQUEST">
+      <description>The autopilot is requesting a resource (file, binary, other type of data)</description>
+      <field type="uint8_t" name="request_id">Request ID. This ID should be re-used when sending back URI contents</field>
+      <field type="uint8_t" name="uri_type">The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary</field>
+      <field type="uint8_t[120]" name="uri">The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum)</field>
+      <field type="uint8_t" name="transfer_type">The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream.</field>
+      <field type="uint8_t[120]" name="storage">The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP).</field>
+    </message>
+    <message id="143" name="SCALED_PRESSURE3">
+      <description>Barometer readings for 3rd barometer</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="press_abs" units="hPa">Absolute pressure</field>
+      <field type="float" name="press_diff" units="hPa">Differential pressure</field>
+      <field type="int16_t" name="temperature" units="cdegC">Absolute pressure temperature</field>
+      <extensions/>
+      <field type="int16_t" name="temperature_press_diff" units="cdegC" invalid="0">Differential pressure temperature (0, if not available). Report values of 0 (or 1) as 1 cdegC.</field>
+    </message>
+    <message id="144" name="FOLLOW_TARGET">
+      <description>Current motion information from a designated system</description>
+      <field type="uint64_t" name="timestamp" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="est_capabilities">bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3)</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude (WGS84)</field>
+      <field type="float" name="alt" units="m">Altitude (MSL)</field>
+      <field type="float[3]" name="vel" units="m/s" invalid="[0]">target velocity (0,0,0) for unknown</field>
+      <field type="float[3]" name="acc" units="m/s/s" invalid="[0]">linear target acceleration (0,0,0) for unknown</field>
+      <field type="float[4]" name="attitude_q" invalid="[0]">(0 0 0 0 for unknown)</field>
+      <field type="float[3]" name="rates" invalid="[0]">(0 0 0 for unknown)</field>
+      <field type="float[3]" name="position_cov">eph epv</field>
+      <field type="uint64_t" name="custom_state">button states or switches of a tracker device</field>
+    </message>
+    <message id="146" name="CONTROL_SYSTEM_STATE">
+      <description>The smoothed, monotonic system state used to feed the control loops of the system.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="x_acc" units="m/s/s">X acceleration in body frame</field>
+      <field type="float" name="y_acc" units="m/s/s">Y acceleration in body frame</field>
+      <field type="float" name="z_acc" units="m/s/s">Z acceleration in body frame</field>
+      <field type="float" name="x_vel" units="m/s">X velocity in body frame</field>
+      <field type="float" name="y_vel" units="m/s">Y velocity in body frame</field>
+      <field type="float" name="z_vel" units="m/s">Z velocity in body frame</field>
+      <field type="float" name="x_pos" units="m">X position in local frame</field>
+      <field type="float" name="y_pos" units="m">Y position in local frame</field>
+      <field type="float" name="z_pos" units="m">Z position in local frame</field>
+      <field type="float" name="airspeed" units="m/s" invalid="-1">Airspeed, set to -1 if unknown</field>
+      <field type="float[3]" name="vel_variance">Variance of body velocity estimate</field>
+      <field type="float[3]" name="pos_variance">Variance in local position</field>
+      <field type="float[4]" name="q">The attitude, represented as Quaternion</field>
+      <field type="float" name="roll_rate" units="rad/s">Angular rate in roll axis</field>
+      <field type="float" name="pitch_rate" units="rad/s">Angular rate in pitch axis</field>
+      <field type="float" name="yaw_rate" units="rad/s">Angular rate in yaw axis</field>
+    </message>
+    <message id="147" name="BATTERY_STATUS">
+      <description>Battery information. Updates GCS with flight controller battery status. Smart batteries also use this message, but may additionally send BATTERY_INFO.</description>
+      <field type="uint8_t" name="id" instance="true">Battery ID</field>
+      <field type="uint8_t" name="battery_function" enum="MAV_BATTERY_FUNCTION">Function of the battery</field>
+      <field type="uint8_t" name="type" enum="MAV_BATTERY_TYPE">Type (chemistry) of the battery</field>
+      <field type="int16_t" name="temperature" units="cdegC" invalid="INT16_MAX">Temperature of the battery. INT16_MAX for unknown temperature.</field>
+      <field type="uint16_t[10]" name="voltages" units="mV" invalid="[UINT16_MAX]">Battery voltage of cells 1 to 10 (see voltages_ext for cells 11-14). Cells in this field above the valid cell count for this battery should have the UINT16_MAX value. If individual cell voltages are unknown or not measured for this battery, then the overall battery voltage should be filled in cell 0, with all others set to UINT16_MAX. If the voltage of the battery is greater than (UINT16_MAX - 1), then cell 0 should be set to (UINT16_MAX - 1), and cell 1 to the remaining voltage. This can be extended to multiple cells if the total voltage is greater than 2 * (UINT16_MAX - 1).</field>
+      <field type="int16_t" name="current_battery" units="cA" invalid="-1">Battery current, -1: autopilot does not measure the current</field>
+      <field type="int32_t" name="current_consumed" units="mAh" invalid="-1">Consumed charge, -1: autopilot does not provide consumption estimate</field>
+      <field type="int32_t" name="energy_consumed" units="hJ" invalid="-1">Consumed energy, -1: autopilot does not provide energy consumption estimate</field>
+      <field type="int8_t" name="battery_remaining" units="%" invalid="-1">Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery.</field>
+      <extensions/>
+      <field type="int32_t" name="time_remaining" units="s" invalid="0">Remaining battery time, 0: autopilot does not provide remaining battery time estimate</field>
+      <field type="uint8_t" name="charge_state" enum="MAV_BATTERY_CHARGE_STATE">State for extent of discharge, provided by autopilot for warning or external reactions</field>
+      <field type="uint16_t[4]" name="voltages_ext" units="mV" invalid="[0]">Battery voltages for cells 11 to 14. Cells above the valid cell count for this battery should have a value of 0, where zero indicates not supported (note, this is different than for the voltages field and allows empty byte truncation). If the measured value is 0 then 1 should be sent instead.</field>
+      <field type="uint8_t" name="mode" enum="MAV_BATTERY_MODE">Battery mode. Default (0) is that battery mode reporting is not supported or battery is in normal-use mode.</field>
+      <field type="uint32_t" name="fault_bitmask" display="bitmask" enum="MAV_BATTERY_FAULT">Fault/health indications. These should be set when charge_state is MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY (if not, fault reporting is not supported).</field>
+    </message>
+    <message id="148" name="AUTOPILOT_VERSION">
+      <description>Version and capability of autopilot software. This should be emitted in response to a request with MAV_CMD_REQUEST_MESSAGE.</description>
+      <field type="uint64_t" name="capabilities" enum="MAV_PROTOCOL_CAPABILITY" display="bitmask">Bitmap of capabilities</field>
+      <field type="uint32_t" name="flight_sw_version">Firmware version number</field>
+      <field type="uint32_t" name="middleware_sw_version">Middleware version number</field>
+      <field type="uint32_t" name="os_sw_version">Operating system version number</field>
+      <field type="uint32_t" name="board_version">HW / board version (last 8 bits should be silicon ID, if any). The first 16 bits of this field specify https://github.com/PX4/PX4-Bootloader/blob/master/board_types.txt</field>
+      <field type="uint8_t[8]" name="flight_custom_version">Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.</field>
+      <field type="uint8_t[8]" name="middleware_custom_version">Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.</field>
+      <field type="uint8_t[8]" name="os_custom_version">Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.</field>
+      <field type="uint16_t" name="vendor_id">ID of the board vendor</field>
+      <field type="uint16_t" name="product_id">ID of the product</field>
+      <field type="uint64_t" name="uid">UID if provided by hardware (see uid2)</field>
+      <extensions/>
+      <field type="uint8_t[18]" name="uid2">UID if provided by hardware (supersedes the uid field. If this is non-zero, use this field, otherwise use uid)</field>
+    </message>
+    <message id="149" name="LANDING_TARGET">
+      <description>The location of a landing target. See: https://mavlink.io/en/services/landing_target.html</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="target_num">The ID of the target if multiple targets are present</field>
+      <field type="uint8_t" name="frame" enum="MAV_FRAME">Coordinate frame used for following fields.</field>
+      <field type="float" name="angle_x" units="rad">X-axis angular offset of the target from the center of the image</field>
+      <field type="float" name="angle_y" units="rad">Y-axis angular offset of the target from the center of the image</field>
+      <field type="float" name="distance" units="m">Distance to the target from the vehicle</field>
+      <field type="float" name="size_x" units="rad">Size of target along x-axis</field>
+      <field type="float" name="size_y" units="rad">Size of target along y-axis</field>
+      <extensions/>
+      <field type="float" name="x" units="m">X Position of the landing target in MAV_FRAME</field>
+      <field type="float" name="y" units="m">Y Position of the landing target in MAV_FRAME</field>
+      <field type="float" name="z" units="m">Z Position of the landing target in MAV_FRAME</field>
+      <field type="float[4]" name="q">Quaternion of landing target orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)</field>
+      <field type="uint8_t" name="type" enum="LANDING_TARGET_TYPE">Type of landing target</field>
+      <field type="uint8_t" name="position_valid" invalid="0">Boolean indicating whether the position fields (x, y, z, q, type) contain valid target position information (valid: 1, invalid: 0). Default is 0 (invalid).</field>
+    </message>
+    <!-- imported from ardupilotmega.xml (2019) -->
+    <message id="162" name="FENCE_STATUS">
+      <description>Status of geo-fencing. Sent in extended status stream when fencing enabled.</description>
+      <field type="uint8_t" name="breach_status">Breach status (0 if currently inside fence, 1 if outside).</field>
+      <field type="uint16_t" name="breach_count">Number of fence breaches.</field>
+      <field type="uint8_t" name="breach_type" enum="FENCE_BREACH">Last breach type.</field>
+      <field type="uint32_t" name="breach_time" units="ms">Time (since boot) of last breach.</field>
+      <extensions/>
+      <field type="uint8_t" name="breach_mitigation" enum="FENCE_MITIGATE">Active action to prevent fence breach</field>
+    </message>
+    <!-- MESSAGE IDs 180 - 229: Space for custom messages in individual projectname_messages.xml files -->
+    <!-- 192 MAG_CAL_REPORT imported from ardupilotmega.xml -->
+    <message id="192" name="MAG_CAL_REPORT">
+      <description>Reports results of completed compass calibration. Sent until MAG_CAL_ACK received.</description>
+      <field type="uint8_t" name="compass_id" instance="true">Compass being calibrated.</field>
+      <field type="uint8_t" name="cal_mask" display="bitmask">Bitmask of compasses being calibrated.</field>
+      <field type="uint8_t" name="cal_status" enum="MAG_CAL_STATUS">Calibration Status.</field>
+      <field type="uint8_t" name="autosaved">0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters.</field>
+      <field type="float" name="fitness" units="mgauss">RMS milligauss residuals.</field>
+      <field type="float" name="ofs_x">X offset.</field>
+      <field type="float" name="ofs_y">Y offset.</field>
+      <field type="float" name="ofs_z">Z offset.</field>
+      <field type="float" name="diag_x">X diagonal (matrix 11).</field>
+      <field type="float" name="diag_y">Y diagonal (matrix 22).</field>
+      <field type="float" name="diag_z">Z diagonal (matrix 33).</field>
+      <field type="float" name="offdiag_x">X off-diagonal (matrix 12 and 21).</field>
+      <field type="float" name="offdiag_y">Y off-diagonal (matrix 13 and 31).</field>
+      <field type="float" name="offdiag_z">Z off-diagonal (matrix 32 and 23).</field>
+      <extensions/>
+      <field type="float" name="orientation_confidence">Confidence in orientation (higher is better).</field>
+      <field type="uint8_t" name="old_orientation" enum="MAV_SENSOR_ORIENTATION">orientation before calibration.</field>
+      <field type="uint8_t" name="new_orientation" enum="MAV_SENSOR_ORIENTATION">orientation after calibration.</field>
+      <field type="float" name="scale_factor">field radius correction factor</field>
+    </message>
+    <!-- 225 EFI_STATUS imported from ardupilotmega.xml -->
+    <message id="225" name="EFI_STATUS">
+      <description>EFI status output</description>
+      <field type="uint8_t" name="health">EFI health status</field>
+      <field type="float" name="ecu_index">ECU index</field>
+      <field type="float" name="rpm">RPM</field>
+      <field type="float" name="fuel_consumed" units="cm^3">Fuel consumed</field>
+      <field type="float" name="fuel_flow" units="cm^3/min">Fuel flow rate</field>
+      <field type="float" name="engine_load" units="%">Engine load</field>
+      <field type="float" name="throttle_position" units="%">Throttle position</field>
+      <field type="float" name="spark_dwell_time" units="ms">Spark dwell time</field>
+      <field type="float" name="barometric_pressure" units="kPa">Barometric pressure</field>
+      <field type="float" name="intake_manifold_pressure" units="kPa">Intake manifold pressure(</field>
+      <field type="float" name="intake_manifold_temperature" units="degC">Intake manifold temperature</field>
+      <field type="float" name="cylinder_head_temperature" units="degC">Cylinder head temperature</field>
+      <field type="float" name="ignition_timing" units="deg">Ignition timing (Crank angle degrees)</field>
+      <field type="float" name="injection_time" units="ms">Injection time</field>
+      <field type="float" name="exhaust_gas_temperature" units="degC">Exhaust gas temperature</field>
+      <field type="float" name="throttle_out" units="%">Output throttle</field>
+      <field type="float" name="pt_compensation">Pressure/temperature compensation</field>
+      <extensions/>
+      <field type="float" name="ignition_voltage" units="V">Supply voltage to EFI sparking system.  Zero in this value means "unknown", so if the supply voltage really is zero volts use 0.0001 instead.</field>
+      <field type="float" name="fuel_pressure" units="kPa">Fuel pressure. Zero in this value means "unknown", so if the fuel pressure really is zero kPa use 0.0001 instead.</field>
+    </message>
+    <!-- MESSAGE IDs 180 - 229: Space for custom messages in individual projectname_messages.xml files -->
+    <message id="230" name="ESTIMATOR_STATUS">
+      <description>Estimator status message including flags, innovation test ratios and estimated accuracies. The flags message is an integer bitmask containing information on which EKF outputs are valid. See the ESTIMATOR_STATUS_FLAGS enum definition for further information. The innovation test ratios show the magnitude of the sensor innovation divided by the innovation check threshold. Under normal operation the innovation test ratios should be below 0.5 with occasional values up to 1.0. Values greater than 1.0 should be rare under normal operation and indicate that a measurement has been rejected by the filter. The user should be notified if an innovation test ratio greater than 1.0 is recorded. Notifications for values in the range between 0.5 and 1.0 should be optional and controllable by the user.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint16_t" name="flags" enum="ESTIMATOR_STATUS_FLAGS" display="bitmask">Bitmap indicating which EKF outputs are valid.</field>
+      <field type="float" name="vel_ratio">Velocity innovation test ratio</field>
+      <field type="float" name="pos_horiz_ratio">Horizontal position innovation test ratio</field>
+      <field type="float" name="pos_vert_ratio">Vertical position innovation test ratio</field>
+      <field type="float" name="mag_ratio">Magnetometer innovation test ratio</field>
+      <field type="float" name="hagl_ratio">Height above terrain innovation test ratio</field>
+      <field type="float" name="tas_ratio">True airspeed innovation test ratio</field>
+      <field type="float" name="pos_horiz_accuracy" units="m">Horizontal position 1-STD accuracy relative to the EKF local origin</field>
+      <field type="float" name="pos_vert_accuracy" units="m">Vertical position 1-STD accuracy relative to the EKF local origin</field>
+    </message>
+    <message id="231" name="WIND_COV">
+      <description>Wind estimate from vehicle. Note that despite the name, this message does not actually contain any covariances but instead variability and accuracy fields in terms of standard deviation (1-STD).</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="wind_x" units="m/s" invalid="NaN">Wind in North (NED) direction (NAN if unknown)</field>
+      <field type="float" name="wind_y" units="m/s" invalid="NaN">Wind in East (NED) direction (NAN if unknown)</field>
+      <field type="float" name="wind_z" units="m/s" invalid="NaN">Wind in down (NED) direction (NAN if unknown)</field>
+      <field type="float" name="var_horiz" units="m/s" invalid="NaN">Variability of wind in XY, 1-STD estimated from a 1 Hz lowpassed wind estimate (NAN if unknown)</field>
+      <field type="float" name="var_vert" units="m/s" invalid="NaN">Variability of wind in Z, 1-STD estimated from a 1 Hz lowpassed wind estimate (NAN if unknown)</field>
+      <field type="float" name="wind_alt" units="m" invalid="NaN">Altitude (MSL) that this measurement was taken at (NAN if unknown)</field>
+      <field type="float" name="horiz_accuracy" units="m/s" invalid="0">Horizontal speed 1-STD accuracy (0 if unknown)</field>
+      <field type="float" name="vert_accuracy" units="m/s" invalid="0">Vertical speed 1-STD accuracy (0 if unknown)</field>
+    </message>
+    <message id="232" name="GPS_INPUT">
+      <description>GPS sensor input message.  This is a raw sensor value sent by the GPS. This is NOT the global position estimate of the system.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="gps_id" instance="true">ID of the GPS for multiple GPS inputs</field>
+      <field type="uint16_t" name="ignore_flags" enum="GPS_INPUT_IGNORE_FLAGS" display="bitmask">Bitmap indicating which GPS input flags fields to ignore.  All other fields must be provided.</field>
+      <field type="uint32_t" name="time_week_ms" units="ms">GPS time (from start of GPS week)</field>
+      <field type="uint16_t" name="time_week">GPS week number</field>
+      <field type="uint8_t" name="fix_type">0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude (WGS84)</field>
+      <field type="float" name="alt" units="m">Altitude (MSL). Positive for up.</field>
+      <field type="float" name="hdop" invalid="UINT16_MAX">GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX</field>
+      <field type="float" name="vdop" invalid="UINT16_MAX">GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX</field>
+      <field type="float" name="vn" units="m/s">GPS velocity in north direction in earth-fixed NED frame</field>
+      <field type="float" name="ve" units="m/s">GPS velocity in east direction in earth-fixed NED frame</field>
+      <field type="float" name="vd" units="m/s">GPS velocity in down direction in earth-fixed NED frame</field>
+      <field type="float" name="speed_accuracy" units="m/s">GPS speed accuracy</field>
+      <field type="float" name="horiz_accuracy" units="m">GPS horizontal accuracy</field>
+      <field type="float" name="vert_accuracy" units="m">GPS vertical accuracy</field>
+      <field type="uint8_t" name="satellites_visible">Number of satellites visible.</field>
+      <extensions/>
+      <field type="uint16_t" name="yaw" units="cdeg">Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north</field>
+    </message>
+    <message id="233" name="GPS_RTCM_DATA">
+      <description>RTCM message for injecting into the onboard GPS (used for DGPS)</description>
+      <field type="uint8_t" name="flags">LSB: 1 means message is fragmented, next 2 bits are the fragment ID, the remaining 5 bits are used for the sequence ID. Messages are only to be flushed to the GPS when the entire message has been reconstructed on the autopilot. The fragment ID specifies which order the fragments should be assembled into a buffer, while the sequence ID is used to detect a mismatch between different buffers. The buffer is considered fully reconstructed when either all 4 fragments are present, or all the fragments before the first fragment with a non full payload is received. This management is used to ensure that normal GPS operation doesn't corrupt RTCM data, and to recover from a unreliable transport delivery order.</field>
+      <field type="uint8_t" name="len" units="bytes">data length</field>
+      <field type="uint8_t[180]" name="data">RTCM message (may be fragmented)</field>
+    </message>
+    <message id="234" name="HIGH_LATENCY">
+      <deprecated since="2020-10" replaced_by="HIGH_LATENCY2"/>
+      <description>Message appropriate for high latency connections like Iridium</description>
+      <field type="uint8_t" name="base_mode" enum="MAV_MODE_FLAG" display="bitmask">Bitmap of enabled system modes.</field>
+      <field type="uint32_t" name="custom_mode" display="bitmask">A bitfield for use for autopilot-specific flags.</field>
+      <field type="uint8_t" name="landed_state" enum="MAV_LANDED_STATE">The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.</field>
+      <field type="int16_t" name="roll" units="cdeg">roll</field>
+      <field type="int16_t" name="pitch" units="cdeg">pitch</field>
+      <field type="uint16_t" name="heading" units="cdeg">heading</field>
+      <field type="int8_t" name="throttle" units="%">throttle (percentage)</field>
+      <field type="int16_t" name="heading_sp" units="cdeg">heading setpoint</field>
+      <field type="int32_t" name="latitude" units="degE7">Latitude</field>
+      <field type="int32_t" name="longitude" units="degE7">Longitude</field>
+      <field type="int16_t" name="altitude_amsl" units="m">Altitude above mean sea level</field>
+      <field type="int16_t" name="altitude_sp" units="m">Altitude setpoint relative to the home position</field>
+      <field type="uint8_t" name="airspeed" units="m/s">airspeed</field>
+      <field type="uint8_t" name="airspeed_sp" units="m/s">airspeed setpoint</field>
+      <field type="uint8_t" name="groundspeed" units="m/s">groundspeed</field>
+      <field type="int8_t" name="climb_rate" units="m/s">climb rate</field>
+      <field type="uint8_t" name="gps_nsat" invalid="UINT8_MAX">Number of satellites visible. If unknown, set to UINT8_MAX</field>
+      <field type="uint8_t" name="gps_fix_type" enum="GPS_FIX_TYPE">GPS Fix type.</field>
+      <field type="uint8_t" name="battery_remaining" units="%">Remaining battery (percentage)</field>
+      <field type="int8_t" name="temperature" units="degC">Autopilot temperature (degrees C)</field>
+      <field type="int8_t" name="temperature_air" units="degC">Air temperature (degrees C) from airspeed sensor</field>
+      <field type="uint8_t" name="failsafe">failsafe (each bit represents a failsafe where 0=ok, 1=failsafe active (bit0:RC, bit1:batt, bit2:GPS, bit3:GCS, bit4:fence)</field>
+      <field type="uint8_t" name="wp_num">current waypoint number</field>
+      <field type="uint16_t" name="wp_distance" units="m">distance to target</field>
+    </message>
+    <message id="235" name="HIGH_LATENCY2">
+      <description>Message appropriate for high latency connections like Iridium (version 2)</description>
+      <field type="uint32_t" name="timestamp" units="ms">Timestamp (milliseconds since boot or Unix epoch)</field>
+      <field type="uint8_t" name="type" enum="MAV_TYPE">Type of the MAV (quadrotor, helicopter, etc.)</field>
+      <field type="uint8_t" name="autopilot" enum="MAV_AUTOPILOT">Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.</field>
+      <field type="uint16_t" name="custom_mode" display="bitmask">A bitfield for use for autopilot-specific flags (2 byte version).</field>
+      <field type="int32_t" name="latitude" units="degE7">Latitude</field>
+      <field type="int32_t" name="longitude" units="degE7">Longitude</field>
+      <field type="int16_t" name="altitude" units="m">Altitude above mean sea level</field>
+      <field type="int16_t" name="target_altitude" units="m">Altitude setpoint</field>
+      <field type="uint8_t" name="heading" units="deg/2">Heading</field>
+      <field type="uint8_t" name="target_heading" units="deg/2">Heading setpoint</field>
+      <field type="uint16_t" name="target_distance" units="dam">Distance to target waypoint or position</field>
+      <field type="uint8_t" name="throttle" units="%">Throttle</field>
+      <field type="uint8_t" name="airspeed" units="m/s*5">Airspeed</field>
+      <field type="uint8_t" name="airspeed_sp" units="m/s*5">Airspeed setpoint</field>
+      <field type="uint8_t" name="groundspeed" units="m/s*5">Groundspeed</field>
+      <field type="uint8_t" name="windspeed" units="m/s*5">Windspeed</field>
+      <field type="uint8_t" name="wind_heading" units="deg/2">Wind heading</field>
+      <field type="uint8_t" name="eph" units="dm">Maximum error horizontal position since last message</field>
+      <field type="uint8_t" name="epv" units="dm">Maximum error vertical position since last message</field>
+      <field type="int8_t" name="temperature_air" units="degC">Air temperature from airspeed sensor</field>
+      <field type="int8_t" name="climb_rate" units="dm/s">Maximum climb rate magnitude since last message</field>
+      <field type="int8_t" name="battery" units="%" invalid="-1">Battery level (-1 if field not provided).</field>
+      <field type="uint16_t" name="wp_num">Current waypoint number</field>
+      <field type="uint16_t" name="failure_flags" enum="HL_FAILURE_FLAG" display="bitmask">Bitmap of failure flags.</field>
+      <field type="int8_t" name="custom0">Field for custom payload.</field>
+      <field type="int8_t" name="custom1">Field for custom payload.</field>
+      <field type="int8_t" name="custom2">Field for custom payload.</field>
+    </message>
+    <message id="241" name="VIBRATION">
+      <description>Vibration levels and accelerometer clipping</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="vibration_x">Vibration levels on X-axis</field>
+      <field type="float" name="vibration_y">Vibration levels on Y-axis</field>
+      <field type="float" name="vibration_z">Vibration levels on Z-axis</field>
+      <field type="uint32_t" name="clipping_0">first accelerometer clipping count</field>
+      <field type="uint32_t" name="clipping_1">second accelerometer clipping count</field>
+      <field type="uint32_t" name="clipping_2">third accelerometer clipping count</field>
+    </message>
+    <message id="242" name="HOME_POSITION">
+      <description>
+	Contains the home position.
+	The home position is the default position that the system will return to and land on.
+	The position must be set automatically by the system during the takeoff, and may also be explicitly set using MAV_CMD_DO_SET_HOME.
+	The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface.
+	Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach.
+	The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector.
+        Note: this message can be requested by sending the MAV_CMD_REQUEST_MESSAGE with param1=242 (or the deprecated MAV_CMD_GET_HOME_POSITION command).
+      </description>
+      <field type="int32_t" name="latitude" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="longitude" units="degE7">Longitude (WGS84)</field>
+      <field type="int32_t" name="altitude" units="mm">Altitude (MSL). Positive for up.</field>
+      <field type="float" name="x" units="m">Local X position of this position in the local coordinate frame (NED)</field>
+      <field type="float" name="y" units="m">Local Y position of this position in the local coordinate frame (NED)</field>
+      <field type="float" name="z" units="m">Local Z position of this position in the local coordinate frame (NED: positive "down")</field>
+      <field type="float[4]" name="q" invalid="[NaN]">
+        Quaternion indicating world-to-surface-normal and heading transformation of the takeoff position.
+        Used to indicate the heading and slope of the ground.
+        All fields should be set to NaN if an accurate quaternion for both heading and surface slope cannot be supplied.
+      </field>
+      <field type="float" name="approach_x" units="m">Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone.</field>
+      <field type="float" name="approach_y" units="m">Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone.</field>
+      <field type="float" name="approach_z" units="m">Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone.</field>
+      <extensions/>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+    </message>
+    <message id="243" name="SET_HOME_POSITION">
+      <deprecated since="2022-02" replaced_by="MAV_CMD_DO_SET_HOME">The command protocol version (MAV_CMD_DO_SET_HOME) allows a GCS to detect when setting the home position has failed.</deprecated>
+      <description>
+        Sets the home position.
+	The home position is the default position that the system will return to and land on.
+        The position is set automatically by the system during the takeoff (and may also be set using this message).
+        The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface.
+        Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach.
+        The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector.
+        Note: the current home position may be emitted in a HOME_POSITION message on request (using MAV_CMD_REQUEST_MESSAGE with param1=242).
+      </description>
+      <field type="uint8_t" name="target_system">System ID.</field>
+      <field type="int32_t" name="latitude" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="longitude" units="degE7">Longitude (WGS84)</field>
+      <field type="int32_t" name="altitude" units="mm">Altitude (MSL). Positive for up.</field>
+      <field type="float" name="x" units="m">Local X position of this position in the local coordinate frame (NED)</field>
+      <field type="float" name="y" units="m">Local Y position of this position in the local coordinate frame (NED)</field>
+      <field type="float" name="z" units="m">Local Z position of this position in the local coordinate frame (NED: positive "down")</field>
+      <field type="float[4]" name="q">World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground</field>
+      <field type="float" name="approach_x" units="m">Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone.</field>
+      <field type="float" name="approach_y" units="m">Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone.</field>
+      <field type="float" name="approach_z" units="m">Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone.</field>
+      <extensions/>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+    </message>
+    <message id="244" name="MESSAGE_INTERVAL">
+      <description>
+        The interval between messages for a particular MAVLink message ID.
+        This message is sent in response to the MAV_CMD_REQUEST_MESSAGE command with param1=244 (this message) and param2=message_id (the id of the message for which the interval is required).
+	It may also be sent in response to MAV_CMD_GET_MESSAGE_INTERVAL.
+	This interface replaces DATA_STREAM.</description>
+      <field type="uint16_t" name="message_id">The ID of the requested MAVLink message. v1.0 is limited to 254 messages.</field>
+      <field type="int32_t" name="interval_us" units="us">The interval between two messages. A value of -1 indicates this stream is disabled, 0 indicates it is not available, &gt; 0 indicates the interval at which it is sent.</field>
+    </message>
+    <message id="245" name="EXTENDED_SYS_STATE">
+      <description>Provides state for additional features</description>
+      <field type="uint8_t" name="vtol_state" enum="MAV_VTOL_STATE">The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration.</field>
+      <field type="uint8_t" name="landed_state" enum="MAV_LANDED_STATE">The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.</field>
+    </message>
+    <message id="246" name="ADSB_VEHICLE">
+      <description>The location and information of an ADSB vehicle</description>
+      <field type="uint32_t" name="ICAO_address">ICAO address</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude</field>
+      <field type="uint8_t" name="altitude_type" enum="ADSB_ALTITUDE_TYPE">ADSB altitude type.</field>
+      <field type="int32_t" name="altitude" units="mm">Altitude(ASL)</field>
+      <field type="uint16_t" name="heading" units="cdeg">Course over ground</field>
+      <field type="uint16_t" name="hor_velocity" units="cm/s">The horizontal velocity</field>
+      <field type="int16_t" name="ver_velocity" units="cm/s">The vertical velocity. Positive is up</field>
+      <field type="char[9]" name="callsign">The callsign, 8+null</field>
+      <field type="uint8_t" name="emitter_type" enum="ADSB_EMITTER_TYPE">ADSB emitter type.</field>
+      <field type="uint8_t" name="tslc" units="s">Time since last communication in seconds</field>
+      <field type="uint16_t" name="flags" enum="ADSB_FLAGS" display="bitmask">Bitmap to indicate various statuses including valid data fields</field>
+      <field type="uint16_t" name="squawk">Squawk code</field>
+    </message>
+    <message id="247" name="COLLISION">
+      <description>Information about a potential collision</description>
+      <field type="uint8_t" name="src" enum="MAV_COLLISION_SRC">Collision data source</field>
+      <field type="uint32_t" name="id">Unique identifier, domain based on src field</field>
+      <field type="uint8_t" name="action" enum="MAV_COLLISION_ACTION">Action that is being taken to avoid this collision</field>
+      <field type="uint8_t" name="threat_level" enum="MAV_COLLISION_THREAT_LEVEL">How concerned the aircraft is about this collision</field>
+      <field type="float" name="time_to_minimum_delta" units="s">Estimated time until collision occurs</field>
+      <field type="float" name="altitude_minimum_delta" units="m">Closest vertical distance between vehicle and object</field>
+      <field type="float" name="horizontal_minimum_delta" units="m">Closest horizontal distance between vehicle and object</field>
+    </message>
+    <message id="248" name="V2_EXTENSION">
+      <description>Message implementing parts of the V2 payload specs in V1 frames for transitional support.</description>
+      <field type="uint8_t" name="target_network">Network ID (0 for broadcast)</field>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast)</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast)</field>
+      <field type="uint16_t" name="message_type">A code that identifies the software component that understands this message (analogous to USB device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/definition_files/extension_message_ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase.</field>
+      <field type="uint8_t[249]" name="payload">Variable length payload. The length must be encoded in the payload as part of the message_type protocol, e.g. by including the length as payload data, or by terminating the payload data with a non-zero marker. This is required in order to reconstruct zero-terminated payloads that are (or otherwise would be) trimmed by MAVLink 2 empty-byte truncation. The entire content of the payload block is opaque unless you understand the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the MAVLink specification.</field>
+    </message>
+    <message id="249" name="MEMORY_VECT">
+      <description>Send raw controller memory. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output.</description>
+      <field type="uint16_t" name="address">Starting address of the debug variables</field>
+      <field type="uint8_t" name="ver" invalid="0">Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below</field>
+      <field type="uint8_t" name="type">Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14</field>
+      <field type="int8_t[32]" name="value">Memory contents at specified address</field>
+    </message>
+    <message id="250" name="DEBUG_VECT">
+      <description>To debug something using a named 3D vector.</description>
+      <field type="char[10]" name="name" instance="true">Name</field>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="x">x</field>
+      <field type="float" name="y">y</field>
+      <field type="float" name="z">z</field>
+    </message>
+    <message id="251" name="NAMED_VALUE_FLOAT">
+      <description>Send a key-value pair as float. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="char[10]" name="name" instance="true">Name of the debug variable</field>
+      <field type="float" name="value">Floating point value</field>
+    </message>
+    <message id="252" name="NAMED_VALUE_INT">
+      <description>Send a key-value pair as integer. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="char[10]" name="name" instance="true">Name of the debug variable</field>
+      <field type="int32_t" name="value">Signed integer value</field>
+    </message>
+    <message id="253" name="STATUSTEXT">
+      <description>Status text message. These messages are printed in yellow in the COMM console of QGroundControl. WARNING: They consume quite some bandwidth, so use only for important status and error messages. If implemented wisely, these messages are buffered on the MCU and sent only at a limited rate (e.g. 10 Hz).</description>
+      <field type="uint8_t" name="severity" enum="MAV_SEVERITY">Severity of status. Relies on the definitions within RFC-5424.</field>
+      <field type="char[50]" name="text">Status text message, without null termination character</field>
+      <extensions/>
+      <field type="uint16_t" name="id">Unique (opaque) identifier for this statustext message.  May be used to reassemble a logical long-statustext message from a sequence of chunks.  A value of zero indicates this is the only chunk in the sequence and the message can be emitted immediately.</field>
+      <field type="uint8_t" name="chunk_seq">This chunk's sequence number; indexing is from zero.  Any null character in the text field is taken to mean this was the last chunk.</field>
+    </message>
+    <message id="254" name="DEBUG">
+      <description>Send a debug value. The index is used to discriminate between values. These values show up in the plot of QGroundControl as DEBUG N.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="ind">index of debug variable</field>
+      <field type="float" name="value">DEBUG value</field>
+    </message>
+    <!-- messages with ID 256 and above are only available in MAVLink2 -->
+    <message id="256" name="SETUP_SIGNING">
+      <description>Setup a MAVLink2 signing key. If called with secret_key of all zero and zero initial_timestamp will disable signing</description>
+      <field type="uint8_t" name="target_system">system id of the target</field>
+      <field type="uint8_t" name="target_component">component ID of the target</field>
+      <field type="uint8_t[32]" name="secret_key">signing key</field>
+      <field type="uint64_t" name="initial_timestamp">initial timestamp</field>
+    </message>
+    <message id="257" name="BUTTON_CHANGE">
+      <description>Report button state change.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint32_t" name="last_change_ms" units="ms">Time of last change of button state.</field>
+      <field type="uint8_t" name="state" display="bitmask">Bitmap for state of buttons.</field>
+    </message>
+    <message id="258" name="PLAY_TUNE">
+      <deprecated since="2019-10" replaced_by="PLAY_TUNE_V2">New version explicitly defines format. More interoperable.</deprecated>
+      <description>Control vehicle tone generation (buzzer).</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="char[30]" name="tune">tune in board specific format</field>
+      <extensions/>
+      <field type="char[200]" name="tune2">tune extension (appended to tune)</field>
+    </message>
+    <message id="259" name="CAMERA_INFORMATION">
+      <description>Information about a camera. Can be requested with a MAV_CMD_REQUEST_MESSAGE command.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t[32]" name="vendor_name">Name of the camera vendor</field>
+      <field type="uint8_t[32]" name="model_name">Name of the camera model</field>
+      <field type="uint32_t" name="firmware_version" invalid="0">Version of the camera firmware, encoded as: (Dev &amp; 0xff) &lt;&lt; 24 | (Patch &amp; 0xff) &lt;&lt; 16 | (Minor &amp; 0xff) &lt;&lt; 8 | (Major &amp; 0xff). Use 0 if not known.</field>
+      <field type="float" name="focal_length" units="mm" invalid="NaN">Focal length. Use NaN if not known.</field>
+      <field type="float" name="sensor_size_h" units="mm" invalid="NaN">Image sensor size horizontal. Use NaN if not known.</field>
+      <field type="float" name="sensor_size_v" units="mm" invalid="NaN">Image sensor size vertical. Use NaN if not known.</field>
+      <field type="uint16_t" name="resolution_h" units="pix" invalid="0">Horizontal image resolution. Use 0 if not known.</field>
+      <field type="uint16_t" name="resolution_v" units="pix" invalid="0">Vertical image resolution. Use 0 if not known.</field>
+      <field type="uint8_t" name="lens_id" invalid="0">Reserved for a lens ID.  Use 0 if not known.</field>
+      <field type="uint32_t" name="flags" enum="CAMERA_CAP_FLAGS" display="bitmask">Bitmap of camera capability flags.</field>
+      <field type="uint16_t" name="cam_definition_version">Camera definition version (iteration).  Use 0 if not known.</field>
+      <field type="char[140]" name="cam_definition_uri">Camera definition URI (if any, otherwise only basic functions will be available). HTTP- (http://) and MAVLink FTP- (mavlinkftp://) formatted URIs are allowed (and both must be supported by any GCS that implements the Camera Protocol). The definition file may be xz compressed, which will be indicated by the file extension .xml.xz (a GCS that implements the protocol must support decompressing the file). The string needs to be zero terminated.  Use a zero-length string if not known.</field>
+      <extensions/>
+      <field type="uint8_t" name="gimbal_device_id" invalid="0">Gimbal id of a gimbal associated with this camera. This is the component id of the gimbal device, or 1-6 for non mavlink gimbals. Use 0 if no gimbal is associated with the camera.</field>
+    </message>
+    <message id="260" name="CAMERA_SETTINGS">
+      <description>Settings of a camera. Can be requested with a MAV_CMD_REQUEST_MESSAGE command.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="mode_id" enum="CAMERA_MODE">Camera mode</field>
+      <extensions/>
+      <field type="float" name="zoomLevel" invalid="NaN">Current zoom level as a percentage of the full range (0.0 to 100.0, NaN if not known)</field>
+      <field type="float" name="focusLevel" invalid="NaN">Current focus level as a percentage of the full range (0.0 to 100.0, NaN if not known)</field>
+    </message>
+    <message id="261" name="STORAGE_INFORMATION">
+      <description>Information about a storage medium. This message is sent in response to a request with MAV_CMD_REQUEST_MESSAGE and whenever the status of the storage changes (STORAGE_STATUS). Use MAV_CMD_REQUEST_MESSAGE.param2 to indicate the index/id of requested storage: 0 for all, 1 for first, 2 for second, etc.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="storage_id" instance="true">Storage ID (1 for first, 2 for second, etc.)</field>
+      <field type="uint8_t" name="storage_count">Number of storage devices</field>
+      <field type="uint8_t" name="status" enum="STORAGE_STATUS">Status of storage</field>
+      <field type="float" name="total_capacity" units="MiB">Total capacity. If storage is not ready (STORAGE_STATUS_READY) value will be ignored.</field>
+      <field type="float" name="used_capacity" units="MiB">Used capacity. If storage is not ready (STORAGE_STATUS_READY) value will be ignored.</field>
+      <field type="float" name="available_capacity" units="MiB">Available storage capacity. If storage is not ready (STORAGE_STATUS_READY) value will be ignored.</field>
+      <field type="float" name="read_speed" units="MiB/s">Read speed.</field>
+      <field type="float" name="write_speed" units="MiB/s">Write speed.</field>
+      <extensions/>
+      <field type="uint8_t" name="type" enum="STORAGE_TYPE">Type of storage</field>
+      <field type="char[32]" name="name">Textual storage name to be used in UI (microSD 1, Internal Memory, etc.) This is a NULL terminated string. If it is exactly 32 characters long, add a terminating NULL. If this string is empty, the generic type is shown to the user.</field>
+      <field type="uint8_t" name="storage_usage" enum="STORAGE_USAGE_FLAG">Flags indicating whether this instance is preferred storage for photos, videos, etc.
+        Note: Implementations should initially set the flags on the system-default storage id used for saving media (if possible/supported).
+        This setting can then be overridden using MAV_CMD_SET_STORAGE_USAGE.
+        If the media usage flags are not set, a GCS may assume storage ID 1 is the default storage for all media types.</field>
+    </message>
+    <message id="262" name="CAMERA_CAPTURE_STATUS">
+      <description>Information about the status of a capture. Can be requested with a MAV_CMD_REQUEST_MESSAGE command.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint8_t" name="image_status">Current status of image capturing (0: idle, 1: capture in progress, 2: interval set but idle, 3: interval set and capture in progress)</field>
+      <field type="uint8_t" name="video_status">Current status of video capturing (0: idle, 1: capture in progress)</field>
+      <field type="float" name="image_interval" units="s">Image capture interval</field>
+      <field type="uint32_t" name="recording_time_ms" units="ms">Elapsed time since recording started (0: Not supported/available). A GCS should compute recording time and use non-zero values of this field to correct any discrepancy.</field>
+      <field type="float" name="available_capacity" units="MiB">Available storage capacity.</field>
+      <extensions/>
+      <field type="int32_t" name="image_count">Total number of images captured ('forever', or until reset using MAV_CMD_STORAGE_FORMAT).</field>
+    </message>
+    <message id="263" name="CAMERA_IMAGE_CAPTURED">
+      <description>Information about a captured image. This is emitted every time a message is captured.
+        MAV_CMD_REQUEST_MESSAGE can be used to (re)request this message for a specific sequence number or range of sequence numbers:
+        MAV_CMD_REQUEST_MESSAGE.param2 indicates the sequence number the first image to send, or set to -1 to send the message for all sequence numbers.
+        MAV_CMD_REQUEST_MESSAGE.param3 is used to specify a range of messages to send:
+        set to 0 (default) to send just the the message for the sequence number in param 2,
+        set to -1 to send the message for the sequence number in param 2 and all the following sequence numbers,
+        set to the sequence number of the final message in the range.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint64_t" name="time_utc" units="us" invalid="0">Timestamp (time since UNIX epoch) in UTC. 0 for unknown.</field>
+      <field type="uint8_t" name="camera_id">Deprecated/unused. Component IDs are used to differentiate multiple cameras.</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude where image was taken</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude where capture was taken</field>
+      <field type="int32_t" name="alt" units="mm">Altitude (MSL) where image was taken</field>
+      <field type="int32_t" name="relative_alt" units="mm">Altitude above ground</field>
+      <field type="float[4]" name="q">Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)</field>
+      <field type="int32_t" name="image_index">Zero based index of this image (i.e. a new image will have index CAMERA_CAPTURE_STATUS.image count -1)</field>
+      <field type="int8_t" name="capture_result">Boolean indicating success (1) or failure (0) while capturing this image.</field>
+      <field type="char[205]" name="file_url">URL of image taken. Either local storage or http://foo.jpg if camera provides an HTTP interface.</field>
+    </message>
+    <message id="264" name="FLIGHT_INFORMATION">
+      <description>Flight information.
+        This includes time since boot for arm, takeoff, and land, and a flight number.
+        Takeoff and landing values reset to zero on arm.
+        This can be requested using MAV_CMD_REQUEST_MESSAGE.
+        Note, some fields are misnamed - timestamps are from boot (not UTC) and the flight_uuid is a sequence number.
+      </description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint64_t" name="arming_time_utc" units="us" invalid="0">Timestamp at arming (since system boot). Set to 0 on boot. Set value on arming. Note, field is misnamed UTC.</field>
+      <field type="uint64_t" name="takeoff_time_utc" units="us" invalid="0">Timestamp at takeoff (since system boot). Set to 0 at boot and on arming. Note, field is misnamed UTC.</field>
+      <field type="uint64_t" name="flight_uuid" invalid="0">Flight number. Note, field is misnamed UUID.</field>
+      <extensions/>
+      <field type="uint32_t" name="landing_time" units="ms" invalid="0">Timestamp at landing (in ms since system boot). Set to 0 at boot and on arming.</field>
+    </message>
+    <message id="265" name="MOUNT_ORIENTATION">
+      <deprecated since="2020-01" replaced_by="MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW">This message is being superseded by MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW. The message can still be used to communicate with legacy gimbals implementing it.</deprecated>
+      <description>Orientation of a mount</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="float" name="roll" units="deg" invalid="NaN">Roll in global frame (set to NaN for invalid).</field>
+      <field type="float" name="pitch" units="deg" invalid="NaN">Pitch in global frame (set to NaN for invalid).</field>
+      <field type="float" name="yaw" units="deg" invalid="NaN">Yaw relative to vehicle (set to NaN for invalid).</field>
+      <extensions/>
+      <field type="float" name="yaw_absolute" units="deg" invalid="NaN">Yaw in absolute frame relative to Earth's North, north is 0 (set to NaN for invalid).</field>
+    </message>
+    <message id="266" name="LOGGING_DATA">
+      <description>A message containing logged data (see also MAV_CMD_LOGGING_START)</description>
+      <field type="uint8_t" name="target_system">system ID of the target</field>
+      <field type="uint8_t" name="target_component">component ID of the target</field>
+      <field type="uint16_t" name="sequence">sequence number (can wrap)</field>
+      <field type="uint8_t" name="length" units="bytes">data length</field>
+      <field type="uint8_t" name="first_message_offset" units="bytes" invalid="UINT8_MAX">offset into data where first message starts. This can be used for recovery, when a previous message got lost (set to UINT8_MAX if no start exists).</field>
+      <field type="uint8_t[249]" name="data">logged data</field>
+    </message>
+    <message id="267" name="LOGGING_DATA_ACKED">
+      <description>A message containing logged data which requires a LOGGING_ACK to be sent back</description>
+      <field type="uint8_t" name="target_system">system ID of the target</field>
+      <field type="uint8_t" name="target_component">component ID of the target</field>
+      <field type="uint16_t" name="sequence">sequence number (can wrap)</field>
+      <field type="uint8_t" name="length" units="bytes">data length</field>
+      <field type="uint8_t" name="first_message_offset" units="bytes" invalid="UINT8_MAX">offset into data where first message starts. This can be used for recovery, when a previous message got lost (set to UINT8_MAX if no start exists).</field>
+      <field type="uint8_t[249]" name="data">logged data</field>
+    </message>
+    <message id="268" name="LOGGING_ACK">
+      <description>An ack for a LOGGING_DATA_ACKED message</description>
+      <field type="uint8_t" name="target_system">system ID of the target</field>
+      <field type="uint8_t" name="target_component">component ID of the target</field>
+      <field type="uint16_t" name="sequence">sequence number (must match the one in LOGGING_DATA_ACKED)</field>
+    </message>
+    <message id="269" name="VIDEO_STREAM_INFORMATION">
+      <description>Information about video stream. It may be requested using MAV_CMD_REQUEST_MESSAGE, where param2 indicates the video stream id: 0 for all streams, 1 for first, 2 for second, etc.</description>
+      <field type="uint8_t" name="stream_id" instance="true">Video Stream ID (1 for first, 2 for second, etc.)</field>
+      <field type="uint8_t" name="count">Number of streams available.</field>
+      <field type="uint8_t" name="type" enum="VIDEO_STREAM_TYPE">Type of stream.</field>
+      <field type="uint16_t" name="flags" enum="VIDEO_STREAM_STATUS_FLAGS">Bitmap of stream status flags.</field>
+      <field type="float" name="framerate" units="Hz">Frame rate.</field>
+      <field type="uint16_t" name="resolution_h" units="pix">Horizontal resolution.</field>
+      <field type="uint16_t" name="resolution_v" units="pix">Vertical resolution.</field>
+      <field type="uint32_t" name="bitrate" units="bits/s">Bit rate.</field>
+      <field type="uint16_t" name="rotation" units="deg">Video image rotation clockwise.</field>
+      <field type="uint16_t" name="hfov" units="deg">Horizontal Field of view.</field>
+      <field type="char[32]" name="name">Stream name.</field>
+      <field type="char[160]" name="uri">Video stream URI (TCP or RTSP URI ground station should connect to) or port number (UDP port ground station should listen to).</field>
+    </message>
+    <message id="270" name="VIDEO_STREAM_STATUS">
+      <description>Information about the status of a video stream. It may be requested using MAV_CMD_REQUEST_MESSAGE.</description>
+      <field type="uint8_t" name="stream_id" instance="true">Video Stream ID (1 for first, 2 for second, etc.)</field>
+      <field type="uint16_t" name="flags" enum="VIDEO_STREAM_STATUS_FLAGS">Bitmap of stream status flags</field>
+      <field type="float" name="framerate" units="Hz">Frame rate</field>
+      <field type="uint16_t" name="resolution_h" units="pix">Horizontal resolution</field>
+      <field type="uint16_t" name="resolution_v" units="pix">Vertical resolution</field>
+      <field type="uint32_t" name="bitrate" units="bits/s">Bit rate</field>
+      <field type="uint16_t" name="rotation" units="deg">Video image rotation clockwise</field>
+      <field type="uint16_t" name="hfov" units="deg">Horizontal Field of view</field>
+    </message>
+    <message id="271" name="CAMERA_FOV_STATUS">
+      <description>Information about the field of view of a camera. Can be requested with a MAV_CMD_REQUEST_MESSAGE command.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="int32_t" name="lat_camera" units="degE7" invalid="INT32_MAX">Latitude of camera (INT32_MAX if unknown).</field>
+      <field type="int32_t" name="lon_camera" units="degE7" invalid="INT32_MAX">Longitude of camera (INT32_MAX if unknown).</field>
+      <field type="int32_t" name="alt_camera" units="mm" invalid="INT32_MAX">Altitude (MSL) of camera (INT32_MAX if unknown).</field>
+      <field type="int32_t" name="lat_image" units="degE7" invalid="INT32_MAX">Latitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).</field>
+      <field type="int32_t" name="lon_image" units="degE7" invalid="INT32_MAX">Longitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).</field>
+      <field type="int32_t" name="alt_image" units="mm" invalid="INT32_MAX">Altitude (MSL) of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).</field>
+      <field type="float[4]" name="q">Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)</field>
+      <field type="float" name="hfov" units="deg" invalid="NaN">Horizontal field of view (NaN if unknown).</field>
+      <field type="float" name="vfov" units="deg" invalid="NaN">Vertical field of view (NaN if unknown).</field>
+    </message>
+    <message id="275" name="CAMERA_TRACKING_IMAGE_STATUS">
+      <description>Camera tracking status, sent while in active tracking. Use MAV_CMD_SET_MESSAGE_INTERVAL to define message interval.</description>
+      <field type="uint8_t" name="tracking_status" enum="CAMERA_TRACKING_STATUS_FLAGS">Current tracking status</field>
+      <field type="uint8_t" name="tracking_mode" enum="CAMERA_TRACKING_MODE">Current tracking mode</field>
+      <field type="uint8_t" name="target_data" enum="CAMERA_TRACKING_TARGET_DATA">Defines location of target data</field>
+      <field type="float" name="point_x" invalid="NaN">Current tracked point x value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is left, 1 is right), NAN if unknown</field>
+      <field type="float" name="point_y" invalid="NaN">Current tracked point y value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown</field>
+      <field type="float" name="radius" invalid="NaN">Current tracked radius if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is image left, 1 is image right), NAN if unknown</field>
+      <field type="float" name="rec_top_x" invalid="NaN">Current tracked rectangle top x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown</field>
+      <field type="float" name="rec_top_y" invalid="NaN">Current tracked rectangle top y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown</field>
+      <field type="float" name="rec_bottom_x" invalid="NaN">Current tracked rectangle bottom x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown</field>
+      <field type="float" name="rec_bottom_y" invalid="NaN">Current tracked rectangle bottom y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown</field>
+    </message>
+    <message id="276" name="CAMERA_TRACKING_GEO_STATUS">
+      <description>Camera tracking status, sent while in active tracking. Use MAV_CMD_SET_MESSAGE_INTERVAL to define message interval.</description>
+      <field type="uint8_t" name="tracking_status" enum="CAMERA_TRACKING_STATUS_FLAGS">Current tracking status</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude of tracked object</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude of tracked object</field>
+      <field type="float" name="alt" units="m">Altitude of tracked object(AMSL, WGS84)</field>
+      <field type="float" name="h_acc" units="m" invalid="NaN">Horizontal accuracy. NAN if unknown</field>
+      <field type="float" name="v_acc" units="m" invalid="NaN">Vertical accuracy. NAN if unknown</field>
+      <field type="float" name="vel_n" units="m/s" invalid="NaN">North velocity of tracked object. NAN if unknown</field>
+      <field type="float" name="vel_e" units="m/s" invalid="NaN">East velocity of tracked object. NAN if unknown</field>
+      <field type="float" name="vel_d" units="m/s" invalid="NaN">Down velocity of tracked object. NAN if unknown</field>
+      <field type="float" name="vel_acc" units="m/s" invalid="NaN">Velocity accuracy. NAN if unknown</field>
+      <field type="float" name="dist" units="m" invalid="NaN">Distance between camera and tracked object. NAN if unknown</field>
+      <field type="float" name="hdg" units="rad" invalid="NaN">Heading in radians, in NED. NAN if unknown</field>
+      <field type="float" name="hdg_acc" units="rad" invalid="NaN">Accuracy of heading, in NED. NAN if unknown</field>
+    </message>
+    <message id="280" name="GIMBAL_MANAGER_INFORMATION">
+      <description>Information about a high level gimbal manager. This message should be requested by a ground station using MAV_CMD_REQUEST_MESSAGE.</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint32_t" name="cap_flags" enum="GIMBAL_MANAGER_CAP_FLAGS" display="bitmask">Bitmap of gimbal capability flags.</field>
+      <field type="uint8_t" name="gimbal_device_id" instance="true">Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).</field>
+      <field type="float" name="roll_min" units="rad">Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left)</field>
+      <field type="float" name="roll_max" units="rad">Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left)</field>
+      <field type="float" name="pitch_min" units="rad">Minimum pitch angle (positive: up, negative: down)</field>
+      <field type="float" name="pitch_max" units="rad">Maximum pitch angle (positive: up, negative: down)</field>
+      <field type="float" name="yaw_min" units="rad">Minimum yaw angle (positive: to the right, negative: to the left)</field>
+      <field type="float" name="yaw_max" units="rad">Maximum yaw angle (positive: to the right, negative: to the left)</field>
+    </message>
+    <message id="281" name="GIMBAL_MANAGER_STATUS">
+      <description>Current status about a high level gimbal manager. This message should be broadcast at a low regular rate (e.g. 5Hz).</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint32_t" name="flags" enum="GIMBAL_MANAGER_FLAGS" display="bitmask">High level gimbal manager flags currently applied.</field>
+      <field type="uint8_t" name="gimbal_device_id" instance="true">Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).</field>
+      <field type="uint8_t" name="primary_control_sysid">System ID of MAVLink component with primary control, 0 for none.</field>
+      <field type="uint8_t" name="primary_control_compid">Component ID of MAVLink component with primary control, 0 for none.</field>
+      <field type="uint8_t" name="secondary_control_sysid">System ID of MAVLink component with secondary control, 0 for none.</field>
+      <field type="uint8_t" name="secondary_control_compid">Component ID of MAVLink component with secondary control, 0 for none.</field>
+    </message>
+    <message id="282" name="GIMBAL_MANAGER_SET_ATTITUDE">
+      <description>High level message to control a gimbal's attitude. This message is to be sent to the gimbal manager (e.g. from a ground station). Angles and rates can be set to NaN according to use case.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint32_t" name="flags" enum="GIMBAL_MANAGER_FLAGS">High level gimbal manager flags to use.</field>
+      <field type="uint8_t" name="gimbal_device_id" instance="true">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</field>
+      <field type="float[4]" name="q">Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation, the frame is depends on whether the flag GIMBAL_MANAGER_FLAGS_YAW_LOCK is set)</field>
+      <field type="float" name="angular_velocity_x" units="rad/s" invalid="NaN">X component of angular velocity, positive is rolling to the right, NaN to be ignored.</field>
+      <field type="float" name="angular_velocity_y" units="rad/s" invalid="NaN">Y component of angular velocity, positive is pitching up, NaN to be ignored.</field>
+      <field type="float" name="angular_velocity_z" units="rad/s" invalid="NaN">Z component of angular velocity, positive is yawing to the right, NaN to be ignored.</field>
+    </message>
+    <message id="283" name="GIMBAL_DEVICE_INFORMATION">
+      <description>Information about a low level gimbal. This message should be requested by the gimbal manager or a ground station using MAV_CMD_REQUEST_MESSAGE. The maximum angles and rates are the limits by hardware. However, the limits by software used are likely different/smaller and dependent on mode/settings/etc..</description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="char[32]" name="vendor_name">Name of the gimbal vendor.</field>
+      <field type="char[32]" name="model_name">Name of the gimbal model.</field>
+      <field type="char[32]" name="custom_name">Custom name of the gimbal given to it by the user.</field>
+      <field type="uint32_t" name="firmware_version">Version of the gimbal firmware, encoded as: (Dev &amp; 0xff) &lt;&lt; 24 | (Patch &amp; 0xff) &lt;&lt; 16 | (Minor &amp; 0xff) &lt;&lt; 8 | (Major &amp; 0xff).</field>
+      <field type="uint32_t" name="hardware_version">Version of the gimbal hardware, encoded as: (Dev &amp; 0xff) &lt;&lt; 24 | (Patch &amp; 0xff) &lt;&lt; 16 | (Minor &amp; 0xff) &lt;&lt; 8 | (Major &amp; 0xff).</field>
+      <field type="uint64_t" name="uid" invalid="0">UID of gimbal hardware (0 if unknown).</field>
+      <field type="uint16_t" name="cap_flags" enum="GIMBAL_DEVICE_CAP_FLAGS" display="bitmask">Bitmap of gimbal capability flags.</field>
+      <field type="uint16_t" name="custom_cap_flags" display="bitmask">Bitmap for use for gimbal-specific capability flags.</field>
+      <field type="float" name="roll_min" units="rad" invalid="NaN">Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.</field>
+      <field type="float" name="roll_max" units="rad" invalid="NaN">Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.</field>
+      <field type="float" name="pitch_min" units="rad" invalid="NaN">Minimum hardware pitch angle (positive: up, negative: down). NAN if unknown.</field>
+      <field type="float" name="pitch_max" units="rad" invalid="NaN">Maximum hardware pitch angle (positive: up, negative: down). NAN if unknown.</field>
+      <field type="float" name="yaw_min" units="rad" invalid="NaN">Minimum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.</field>
+      <field type="float" name="yaw_max" units="rad" invalid="NaN">Maximum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.</field>
+      <extensions/>
+      <field type="uint8_t" name="gimbal_device_id" invalid="0">This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set to a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.</field>
+    </message>
+    <message id="284" name="GIMBAL_DEVICE_SET_ATTITUDE">
+      <description>Low level message to control a gimbal device's attitude.
+	  This message is to be sent from the gimbal manager to the gimbal device component.
+	  The quaternion and angular velocities can be set to NaN according to use case.
+	  For the angles encoded in the quaternion and the angular velocities holds:
+	  If the flag GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME is set, then they are relative to the vehicle heading (vehicle frame).
+	  If the flag GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME is set, then they are relative to absolute North (earth frame).
+	  If neither of these flags are set, then (for backwards compatibility) it holds:
+	  If the flag GIMBAL_DEVICE_FLAGS_YAW_LOCK is set, then they are relative to absolute North (earth frame),
+	  else they are relative to the vehicle heading (vehicle frame).
+	  Setting both GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME and GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME is not allowed.
+	  These rules are to ensure backwards compatibility.
+	  New implementations should always set either GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME or GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="flags" enum="GIMBAL_DEVICE_FLAGS" display="bitmask">Low level gimbal flags.</field>
+      <field type="float[4]" name="q" invalid="[NaN]">Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description. Set fields to NaN to be ignored.</field>
+      <field type="float" name="angular_velocity_x" units="rad/s" invalid="NaN">X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN to be ignored.</field>
+      <field type="float" name="angular_velocity_y" units="rad/s" invalid="NaN">Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN to be ignored.</field>
+      <field type="float" name="angular_velocity_z" units="rad/s" invalid="NaN">Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN to be ignored.</field>
+    </message>
+    <message id="285" name="GIMBAL_DEVICE_ATTITUDE_STATUS">
+      <description>Message reporting the status of a gimbal device.
+	  This message should be broadcast by a gimbal device component at a low regular rate (e.g. 5 Hz).
+	  For the angles encoded in the quaternion and the angular velocities holds:
+	  If the flag GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME is set, then they are relative to the vehicle heading (vehicle frame).
+	  If the flag GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME is set, then they are relative to absolute North (earth frame).
+	  If neither of these flags are set, then (for backwards compatibility) it holds:
+	  If the flag GIMBAL_DEVICE_FLAGS_YAW_LOCK is set, then they are relative to absolute North (earth frame),
+	  else they are relative to the vehicle heading (vehicle frame).
+	  Other conditions of the flags are not allowed.
+	  The quaternion and angular velocities in the other frame can be calculated from delta_yaw and delta_yaw_velocity as
+	  q_earth = q_delta_yaw * q_vehicle and w_earth = w_delta_yaw_velocity + w_vehicle (if not NaN).
+	  If neither the GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME nor the GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME flag is set,
+	  then (for backwards compatibility) the data in the delta_yaw and delta_yaw_velocity fields are to be ignored.
+	  New implementations should always set either GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME or GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME,
+	  and always should set delta_yaw and delta_yaw_velocity either to the proper value or NaN.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint16_t" name="flags" enum="GIMBAL_DEVICE_FLAGS" display="bitmask">Current gimbal flags set.</field>
+      <field type="float[4]" name="q">Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description.</field>
+      <field type="float" name="angular_velocity_x" units="rad/s" invalid="NaN">X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN if unknown.</field>
+      <field type="float" name="angular_velocity_y" units="rad/s" invalid="NaN">Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN if unknown.</field>
+      <field type="float" name="angular_velocity_z" units="rad/s" invalid="NaN">Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN if unknown.</field>
+      <field type="uint32_t" name="failure_flags" enum="GIMBAL_DEVICE_ERROR_FLAGS" display="bitmask">Failure flags (0 for no failure)</field>
+      <extensions/>
+      <field type="float" name="delta_yaw" units="rad" invalid="NAN">Yaw angle relating the quaternions in earth and body frames (see message description). NaN if unknown.</field>
+      <field type="float" name="delta_yaw_velocity" units="rad/s" invalid="NAN">Yaw angular velocity relating the angular velocities in earth and body frames (see message description). NaN if unknown.</field>
+      <field type="uint8_t" name="gimbal_device_id" invalid="0">This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.</field>
+    </message>
+    <message id="286" name="AUTOPILOT_STATE_FOR_GIMBAL_DEVICE">
+      <description>Low level message containing autopilot state relevant for a gimbal device. This message is to be sent from the autopilot to the gimbal device component. The data of this message are for the gimbal device's estimator corrections, in particular horizon compensation, as well as indicates autopilot control intentions, e.g. feed forward angular control in the z-axis.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint64_t" name="time_boot_us" units="us">Timestamp (time since system boot).</field>
+      <field type="float[4]" name="q">Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention).</field>
+      <field type="uint32_t" name="q_estimated_delay_us" units="us" invalid="0">Estimated delay of the attitude data. 0 if unknown.</field>
+      <field type="float" name="vx" units="m/s" invalid="NaN">X Speed in NED (North, East, Down). NAN if unknown.</field>
+      <field type="float" name="vy" units="m/s" invalid="NaN">Y Speed in NED (North, East, Down). NAN if unknown.</field>
+      <field type="float" name="vz" units="m/s" invalid="NaN">Z Speed in NED (North, East, Down). NAN if unknown.</field>
+      <field type="uint32_t" name="v_estimated_delay_us" units="us" invalid="0">Estimated delay of the speed data. 0 if unknown.</field>
+      <field type="float" name="feed_forward_angular_velocity_z" units="rad/s" invalid="NaN">Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing.</field>
+      <field type="uint16_t" name="estimator_status" enum="ESTIMATOR_STATUS_FLAGS" display="bitmask">Bitmap indicating which estimator outputs are valid.</field>
+      <field type="uint8_t" name="landed_state" enum="MAV_LANDED_STATE" invalid="MAV_LANDED_STATE_UNDEFINED">The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.</field>
+      <extensions/>
+      <field type="float" name="angular_velocity_z" units="rad/s" invalid="NaN">Z component of angular velocity in NED (North, East, Down). NaN if unknown.</field>
+    </message>
+    <message id="287" name="GIMBAL_MANAGER_SET_PITCHYAW">
+      <description>Set gimbal manager pitch and yaw angles (high rate message). This message is to be sent to the gimbal manager (e.g. from a ground station) and will be ignored by gimbal devices. Angles and rates can be set to NaN according to use case. Use MAV_CMD_DO_GIMBAL_MANAGER_PITCHYAW for low-rate adjustments that require confirmation.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint32_t" name="flags" enum="GIMBAL_MANAGER_FLAGS">High level gimbal manager flags to use.</field>
+      <field type="uint8_t" name="gimbal_device_id" instance="true">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</field>
+      <field type="float" name="pitch" units="rad" invalid="NaN">Pitch angle (positive: up, negative: down, NaN to be ignored).</field>
+      <field type="float" name="yaw" units="rad" invalid="NaN">Yaw angle (positive: to the right, negative: to the left, NaN to be ignored).</field>
+      <field type="float" name="pitch_rate" units="rad/s" invalid="NaN">Pitch angular rate (positive: up, negative: down, NaN to be ignored).</field>
+      <field type="float" name="yaw_rate" units="rad/s" invalid="NaN">Yaw angular rate (positive: to the right, negative: to the left, NaN to be ignored).</field>
+    </message>
+    <message id="288" name="GIMBAL_MANAGER_SET_MANUAL_CONTROL">
+      <description>High level message to control a gimbal manually. The angles or angular rates are unitless; the actual rates will depend on internal gimbal manager settings/configuration (e.g. set by parameters). This message is to be sent to the gimbal manager (e.g. from a ground station). Angles and rates can be set to NaN according to use case.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint32_t" name="flags" enum="GIMBAL_MANAGER_FLAGS">High level gimbal manager flags.</field>
+      <field type="uint8_t" name="gimbal_device_id" instance="true">Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).</field>
+      <field type="float" name="pitch" invalid="NaN">Pitch angle unitless (-1..1, positive: up, negative: down, NaN to be ignored).</field>
+      <field type="float" name="yaw" invalid="NaN">Yaw angle unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).</field>
+      <field type="float" name="pitch_rate" invalid="NaN">Pitch angular rate unitless (-1..1, positive: up, negative: down, NaN to be ignored).</field>
+      <field type="float" name="yaw_rate" invalid="NaN">Yaw angular rate unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).</field>
+    </message>
+    <message id="290" name="ESC_INFO">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>ESC information for lower rate streaming. Recommended streaming rate 1Hz. See ESC_STATUS for higher-rate ESC data.</description>
+      <field type="uint8_t" name="index" instance="true">Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.</field>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.</field>
+      <field type="uint16_t" name="counter">Counter of data packets received.</field>
+      <field type="uint8_t" name="count">Total number of ESCs in all messages of this type. Message fields with an index higher than this should be ignored because they contain invalid data.</field>
+      <field type="uint8_t" name="connection_type" enum="ESC_CONNECTION_TYPE">Connection type protocol for all ESC.</field>
+      <field type="uint8_t" name="info" display="bitmask">Information regarding online/offline status of each ESC.</field>
+      <field type="uint16_t[4]" name="failure_flags" enum="ESC_FAILURE_FLAGS" display="bitmask">Bitmap of ESC failure flags.</field>
+      <field type="uint32_t[4]" name="error_count">Number of reported errors by each ESC since boot.</field>
+      <field type="int16_t[4]" name="temperature" units="cdegC" invalid="[INT16_MAX]">Temperature of each ESC. INT16_MAX: if data not supplied by ESC.</field>
+    </message>
+    <message id="291" name="ESC_STATUS">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>ESC information for higher rate streaming. Recommended streaming rate is ~10 Hz. Information that changes more slowly is sent in ESC_INFO. It should typically only be streamed on high-bandwidth links (i.e. to a companion computer).</description>
+      <field type="uint8_t" name="index" instance="true">Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.</field>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.</field>
+      <field type="int32_t[4]" name="rpm" units="rpm">Reported motor RPM from each ESC (negative for reverse rotation).</field>
+      <field type="float[4]" name="voltage" units="V">Voltage measured from each ESC.</field>
+      <field type="float[4]" name="current" units="A">Current measured from each ESC.</field>
+    </message>
+    <!-- id 295 reserved for AIRSPEED message (development.xml). -->
+    <message id="299" name="WIFI_CONFIG_AP">
+      <description>Configure WiFi AP SSID, password, and mode. This message is re-emitted as an acknowledgement by the AP. The message may also be explicitly requested using MAV_CMD_REQUEST_MESSAGE</description>
+      <field type="char[32]" name="ssid">Name of Wi-Fi network (SSID). Blank to leave it unchanged when setting. Current SSID when sent back as a response.</field>
+      <field type="char[64]" name="password">Password. Blank for an open AP. MD5 hash when message is sent back as a response.</field>
+      <extensions/>
+      <field type="int8_t" name="mode" enum="WIFI_CONFIG_AP_MODE">WiFi Mode.</field>
+      <field type="int8_t" name="response" enum="WIFI_CONFIG_AP_RESPONSE">Message acceptance response (sent back to GS).</field>
+    </message>
+    <message id="301" name="AIS_VESSEL">
+      <description>The location and information of an AIS vessel</description>
+      <field type="uint32_t" name="MMSI">Mobile Marine Service Identifier, 9 decimal digits</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude</field>
+      <field type="uint16_t" name="COG" units="cdeg">Course over ground</field>
+      <field type="uint16_t" name="heading" units="cdeg">True heading</field>
+      <field type="uint16_t" name="velocity" units="cm/s">Speed over ground</field>
+      <field type="int8_t" name="turn_rate" units="cdeg/s">Turn rate</field>
+      <field type="uint8_t" name="navigational_status" enum="AIS_NAV_STATUS">Navigational status</field>
+      <field type="uint8_t" name="type" enum="AIS_TYPE">Type of vessels</field>
+      <field type="uint16_t" name="dimension_bow" units="m">Distance from lat/lon location to bow</field>
+      <field type="uint16_t" name="dimension_stern" units="m">Distance from lat/lon location to stern</field>
+      <field type="uint8_t" name="dimension_port" units="m">Distance from lat/lon location to port side</field>
+      <field type="uint8_t" name="dimension_starboard" units="m">Distance from lat/lon location to starboard side</field>
+      <field type="char[7]" name="callsign">The vessel callsign</field>
+      <field type="char[20]" name="name">The vessel name</field>
+      <field type="uint16_t" name="tslc" units="s">Time since last communication in seconds</field>
+      <field type="uint16_t" name="flags" enum="AIS_FLAGS" display="bitmask">Bitmask to indicate various statuses including valid data fields</field>
+    </message>
+    <!-- UAVCAN related messages. Please keep the range [310, 320) reserved for UAVCAN. -->
+    <message id="310" name="UAVCAN_NODE_STATUS">
+      <description>General status information of an UAVCAN node. Please refer to the definition of the UAVCAN message "uavcan.protocol.NodeStatus" for the background information. The UAVCAN specification is available at http://uavcan.org.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint32_t" name="uptime_sec" units="s">Time since the start-up of the node.</field>
+      <field type="uint8_t" name="health" enum="UAVCAN_NODE_HEALTH">Generalized node health status.</field>
+      <field type="uint8_t" name="mode" enum="UAVCAN_NODE_MODE">Generalized operating mode.</field>
+      <field type="uint8_t" name="sub_mode">Not used currently.</field>
+      <field type="uint16_t" name="vendor_specific_status_code">Vendor-specific status information.</field>
+    </message>
+    <message id="311" name="UAVCAN_NODE_INFO">
+      <description>General information describing a particular UAVCAN node. Please refer to the definition of the UAVCAN service "uavcan.protocol.GetNodeInfo" for the background information. This message should be emitted by the system whenever a new node appears online, or an existing node reboots. Additionally, it can be emitted upon request from the other end of the MAVLink channel (see MAV_CMD_UAVCAN_GET_NODE_INFO). It is also not prohibited to emit this message unconditionally at a low frequency. The UAVCAN specification is available at http://uavcan.org.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint32_t" name="uptime_sec" units="s">Time since the start-up of the node.</field>
+      <field type="char[80]" name="name">Node name string. For example, "sapog.px4.io".</field>
+      <field type="uint8_t" name="hw_version_major">Hardware major version number.</field>
+      <field type="uint8_t" name="hw_version_minor">Hardware minor version number.</field>
+      <field type="uint8_t[16]" name="hw_unique_id">Hardware unique 128-bit ID.</field>
+      <field type="uint8_t" name="sw_version_major">Software major version number.</field>
+      <field type="uint8_t" name="sw_version_minor">Software minor version number.</field>
+      <field type="uint32_t" name="sw_vcs_commit" invalid="0">Version control system (VCS) revision identifier (e.g. git short commit hash). 0 if unknown.</field>
+    </message>
+    <message id="320" name="PARAM_EXT_REQUEST_READ">
+      <description>Request to read the value of a parameter with either the param_id string id or param_index. PARAM_EXT_VALUE should be emitted in response.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="char[16]" name="param_id">Parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string</field>
+      <field type="int16_t" name="param_index" invalid="-1">Parameter index. Set to -1 to use the Parameter ID field as identifier (else param_id will be ignored)</field>
+    </message>
+    <message id="321" name="PARAM_EXT_REQUEST_LIST">
+      <description>Request all parameters of this component. All parameters should be emitted in response as PARAM_EXT_VALUE.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+    </message>
+    <message id="322" name="PARAM_EXT_VALUE">
+      <description>Emit the value of a parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows them to re-request missing parameters after a loss or timeout.</description>
+      <field type="char[16]" name="param_id">Parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string</field>
+      <field type="char[128]" name="param_value">Parameter value</field>
+      <field type="uint8_t" name="param_type" enum="MAV_PARAM_EXT_TYPE">Parameter type.</field>
+      <field type="uint16_t" name="param_count">Total number of parameters</field>
+      <field type="uint16_t" name="param_index">Index of this parameter</field>
+    </message>
+    <message id="323" name="PARAM_EXT_SET">
+      <description>Set a parameter value. In order to deal with message loss (and retransmission of PARAM_EXT_SET), when setting a parameter value and the new value is the same as the current value, you will immediately get a PARAM_ACK_ACCEPTED response. If the current state is PARAM_ACK_IN_PROGRESS, you will accordingly receive a PARAM_ACK_IN_PROGRESS in response.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="char[16]" name="param_id">Parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string</field>
+      <field type="char[128]" name="param_value">Parameter value</field>
+      <field type="uint8_t" name="param_type" enum="MAV_PARAM_EXT_TYPE">Parameter type.</field>
+    </message>
+    <message id="324" name="PARAM_EXT_ACK">
+      <description>Response from a PARAM_EXT_SET message.</description>
+      <field type="char[16]" name="param_id">Parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string</field>
+      <field type="char[128]" name="param_value">Parameter value (new value if PARAM_ACK_ACCEPTED, current value otherwise)</field>
+      <field type="uint8_t" name="param_type" enum="MAV_PARAM_EXT_TYPE">Parameter type.</field>
+      <field type="uint8_t" name="param_result" enum="PARAM_ACK">Result code.</field>
+    </message>
+    <message id="330" name="OBSTACLE_DISTANCE">
+      <description>Obstacle distances in front of the sensor, starting from the left in increment degrees to the right</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="sensor_type" enum="MAV_DISTANCE_SENSOR">Class id of the distance sensor type.</field>
+      <field type="uint16_t[72]" name="distances" units="cm" invalid="[UINT16_MAX]">Distance of obstacles around the vehicle with index 0 corresponding to north + angle_offset, unless otherwise specified in the frame. A value of 0 is valid and means that the obstacle is practically touching the sensor. A value of max_distance +1 means no obstacle is present. A value of UINT16_MAX for unknown/not used. In a array element, one unit corresponds to 1cm.</field>
+      <field type="uint8_t" name="increment" units="deg">Angular width in degrees of each array element. Increment direction is clockwise. This field is ignored if increment_f is non-zero.</field>
+      <field type="uint16_t" name="min_distance" units="cm">Minimum distance the sensor can measure.</field>
+      <field type="uint16_t" name="max_distance" units="cm">Maximum distance the sensor can measure.</field>
+      <extensions/>
+      <field type="float" name="increment_f" units="deg">Angular width in degrees of each array element as a float. If non-zero then this value is used instead of the uint8_t increment field. Positive is clockwise direction, negative is counter-clockwise.</field>
+      <field type="float" name="angle_offset" units="deg">Relative angle offset of the 0-index element in the distances array. Value of 0 corresponds to forward. Positive is clockwise direction, negative is counter-clockwise.</field>
+      <field type="uint8_t" name="frame" enum="MAV_FRAME">Coordinate frame of reference for the yaw rotation and offset of the sensor data. Defaults to MAV_FRAME_GLOBAL, which is north aligned. For body-mounted sensors use MAV_FRAME_BODY_FRD, which is vehicle front aligned.</field>
+    </message>
+    <message id="331" name="ODOMETRY">
+      <description>Odometry message to communicate odometry information with an external interface. Fits ROS REP 147 standard for aerial vehicles (http://www.ros.org/reps/rep-0147.html).</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="frame_id" enum="MAV_FRAME">Coordinate frame of reference for the pose data.</field>
+      <field type="uint8_t" name="child_frame_id" enum="MAV_FRAME">Coordinate frame of reference for the velocity in free space (twist) data.</field>
+      <field type="float" name="x" units="m">X Position</field>
+      <field type="float" name="y" units="m">Y Position</field>
+      <field type="float" name="z" units="m">Z Position</field>
+      <field type="float[4]" name="q">Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)</field>
+      <field type="float" name="vx" units="m/s">X linear speed</field>
+      <field type="float" name="vy" units="m/s">Y linear speed</field>
+      <field type="float" name="vz" units="m/s">Z linear speed</field>
+      <field type="float" name="rollspeed" units="rad/s">Roll angular speed</field>
+      <field type="float" name="pitchspeed" units="rad/s">Pitch angular speed</field>
+      <field type="float" name="yawspeed" units="rad/s">Yaw angular speed</field>
+      <field type="float[21]" name="pose_covariance" invalid="[NaN:]">Row-major representation of a 6x6 pose cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.</field>
+      <field type="float[21]" name="velocity_covariance" invalid="[NaN:]">Row-major representation of a 6x6 velocity cross-covariance matrix upper right triangle (states: vx, vy, vz, rollspeed, pitchspeed, yawspeed; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.</field>
+      <extensions/>
+      <field type="uint8_t" name="reset_counter">Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.</field>
+      <field type="uint8_t" name="estimator_type" enum="MAV_ESTIMATOR_TYPE">Type of estimator that is providing the odometry.</field>
+      <field type="int8_t" name="quality" units="%" invalid="0">Optional odometry quality metric as a percentage. -1 = odometry has failed, 0 = unknown/unset quality, 1 = worst quality, 100 = best quality</field>
+    </message>
+    <message id="332" name="TRAJECTORY_REPRESENTATION_WAYPOINTS">
+      <description>Describe a trajectory using an array of up-to 5 waypoints in the local frame (MAV_FRAME_LOCAL_NED).</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="valid_points">Number of valid points (up-to 5 waypoints are possible)</field>
+      <field type="float[5]" name="pos_x" units="m" invalid="[NaN]">X-coordinate of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="pos_y" units="m" invalid="[NaN]">Y-coordinate of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="pos_z" units="m" invalid="[NaN]">Z-coordinate of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="vel_x" units="m/s" invalid="[NaN]">X-velocity of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="vel_y" units="m/s" invalid="[NaN]">Y-velocity of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="vel_z" units="m/s" invalid="[NaN]">Z-velocity of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="acc_x" units="m/s/s" invalid="[NaN]">X-acceleration of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="acc_y" units="m/s/s" invalid="[NaN]">Y-acceleration of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="acc_z" units="m/s/s" invalid="[NaN]">Z-acceleration of waypoint, set to NaN if not being used</field>
+      <field type="float[5]" name="pos_yaw" units="rad" invalid="[NaN]">Yaw angle, set to NaN if not being used</field>
+      <field type="float[5]" name="vel_yaw" units="rad/s" invalid="[NaN]">Yaw rate, set to NaN if not being used</field>
+      <field type="uint16_t[5]" name="command" enum="MAV_CMD" invalid="[UINT16_MAX]">MAV_CMD command id of waypoint, set to UINT16_MAX if not being used.</field>
+    </message>
+    <message id="333" name="TRAJECTORY_REPRESENTATION_BEZIER">
+      <description>Describe a trajectory using an array of up-to 5 bezier control points in the local frame (MAV_FRAME_LOCAL_NED).</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint8_t" name="valid_points">Number of valid control points (up-to 5 points are possible)</field>
+      <field type="float[5]" name="pos_x" units="m" invalid="[NaN]">X-coordinate of bezier control points. Set to NaN if not being used</field>
+      <field type="float[5]" name="pos_y" units="m" invalid="[NaN]">Y-coordinate of bezier control points. Set to NaN if not being used</field>
+      <field type="float[5]" name="pos_z" units="m" invalid="[NaN]">Z-coordinate of bezier control points. Set to NaN if not being used</field>
+      <field type="float[5]" name="delta" units="s" invalid="[NaN]">Bezier time horizon. Set to NaN if velocity/acceleration should not be incorporated</field>
+      <field type="float[5]" name="pos_yaw" units="rad" invalid="[NaN]">Yaw. Set to NaN for unchanged</field>
+    </message>
+    <!-- cellular status information -->
+    <message id="334" name="CELLULAR_STATUS">
+      <description>Report current used cellular network status</description>
+      <field type="uint8_t" name="status" enum="CELLULAR_STATUS_FLAG">Cellular modem status</field>
+      <field type="uint8_t" name="failure_reason" enum="CELLULAR_NETWORK_FAILED_REASON">Failure reason when status in in CELLULAR_STATUS_FLAG_FAILED</field>
+      <field type="uint8_t" name="type" enum="CELLULAR_NETWORK_RADIO_TYPE">Cellular network radio type: gsm, cdma, lte...</field>
+      <field type="uint8_t" name="quality" invalid="UINT8_MAX">Signal quality in percent. If unknown, set to UINT8_MAX</field>
+      <field type="uint16_t" name="mcc" invalid="UINT16_MAX">Mobile country code. If unknown, set to UINT16_MAX</field>
+      <field type="uint16_t" name="mnc" invalid="UINT16_MAX">Mobile network code. If unknown, set to UINT16_MAX</field>
+      <field type="uint16_t" name="lac" invalid="0">Location area code. If unknown, set to 0</field>
+    </message>
+    <message id="335" name="ISBD_LINK_STATUS">
+      <description>Status of the Iridium SBD link.</description>
+      <field type="uint64_t" name="timestamp" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint64_t" name="last_heartbeat" units="us">Timestamp of the last successful sbd session. The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint16_t" name="failed_sessions">Number of failed SBD sessions.</field>
+      <field type="uint16_t" name="successful_sessions">Number of successful SBD sessions.</field>
+      <field type="uint8_t" name="signal_quality">Signal quality equal to the number of bars displayed on the ISU signal strength indicator. Range is 0 to 5, where 0 indicates no signal and 5 indicates maximum signal strength.</field>
+      <field type="uint8_t" name="ring_pending">1: Ring call pending, 0: No call pending.</field>
+      <field type="uint8_t" name="tx_session_pending">1: Transmission session pending, 0: No transmission session pending.</field>
+      <field type="uint8_t" name="rx_session_pending">1: Receiving session pending, 0: No receiving session pending.</field>
+    </message>
+    <message id="336" name="CELLULAR_CONFIG">
+      <description>Configure cellular modems.
+        This message is re-emitted as an acknowledgement by the modem.
+        The message may also be explicitly requested using MAV_CMD_REQUEST_MESSAGE.</description>
+      <field type="uint8_t" name="enable_lte">Enable/disable LTE. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.</field>
+      <field type="uint8_t" name="enable_pin">Enable/disable PIN on the SIM card. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.</field>
+      <field type="char[16]" name="pin">PIN sent to the SIM card. Blank when PIN is disabled. Empty when message is sent back as a response.</field>
+      <field type="char[16]" name="new_pin">New PIN when changing the PIN. Blank to leave it unchanged. Empty when message is sent back as a response.</field>
+      <field type="char[32]" name="apn">Name of the cellular APN. Blank to leave it unchanged. Current APN when sent back as a response.</field>
+      <field type="char[16]" name="puk">Required PUK code in case the user failed to authenticate 3 times with the PIN. Empty when message is sent back as a response.</field>
+      <field type="uint8_t" name="roaming">Enable/disable roaming. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.</field>
+      <field type="uint8_t" name="response" enum="CELLULAR_CONFIG_RESPONSE">Message acceptance response (sent back to GS).</field>
+    </message>
+    <message id="339" name="RAW_RPM">
+      <description>RPM sensor data message.</description>
+      <field type="uint8_t" name="index">Index of this RPM sensor (0-indexed)</field>
+      <field type="float" name="frequency" units="rpm">Indicated rate</field>
+    </message>
+    <message id="340" name="UTM_GLOBAL_POSITION">
+      <description>The global position resulting from GPS and sensor fusion.</description>
+      <field type="uint64_t" name="time" units="us">Time of applicability of position (microseconds since UNIX epoch).</field>
+      <field type="uint8_t[18]" name="uas_id">Unique UAS ID.</field>
+      <field type="int32_t" name="lat" units="degE7">Latitude (WGS84)</field>
+      <field type="int32_t" name="lon" units="degE7">Longitude (WGS84)</field>
+      <field type="int32_t" name="alt" units="mm">Altitude (WGS84)</field>
+      <field type="int32_t" name="relative_alt" units="mm">Altitude above ground</field>
+      <field type="int16_t" name="vx" units="cm/s">Ground X speed (latitude, positive north)</field>
+      <field type="int16_t" name="vy" units="cm/s">Ground Y speed (longitude, positive east)</field>
+      <field type="int16_t" name="vz" units="cm/s">Ground Z speed (altitude, positive down)</field>
+      <field type="uint16_t" name="h_acc" units="mm">Horizontal position uncertainty (standard deviation)</field>
+      <field type="uint16_t" name="v_acc" units="mm">Altitude uncertainty (standard deviation)</field>
+      <field type="uint16_t" name="vel_acc" units="cm/s">Speed uncertainty (standard deviation)</field>
+      <field type="int32_t" name="next_lat" units="degE7">Next waypoint, latitude (WGS84)</field>
+      <field type="int32_t" name="next_lon" units="degE7">Next waypoint, longitude (WGS84)</field>
+      <field type="int32_t" name="next_alt" units="mm">Next waypoint, altitude (WGS84)</field>
+      <field type="uint16_t" name="update_rate" units="cs" invalid="0">Time until next update. Set to 0 if unknown or in data driven mode.</field>
+      <field type="uint8_t" name="flight_state" enum="UTM_FLIGHT_STATE">Flight state</field>
+      <field type="uint8_t" name="flags" enum="UTM_DATA_AVAIL_FLAGS" display="bitmask">Bitwise OR combination of the data available flags.</field>
+    </message>
+    <message id="350" name="DEBUG_FLOAT_ARRAY">
+      <description>Large debug/prototyping array. The message uses the maximum available payload for data. The array_id and name fields are used to discriminate between messages in code and in user interfaces (respectively). Do not use in production code.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="char[10]" name="name">Name, for human-friendly display in a Ground Control Station</field>
+      <field type="uint16_t" name="array_id" instance="true">Unique ID used to discriminate between arrays</field>
+      <extensions/>
+      <field type="float[58]" name="data">data</field>
+    </message>
+    <message id="360" name="ORBIT_EXECUTION_STATUS">
+      <wip/>
+      <!-- This message is work-in-progress it can therefore change, and should NOT be used in stable production environments -->
+      <description>Vehicle status report that is sent out while orbit execution is in progress (see MAV_CMD_DO_ORBIT).</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="float" name="radius" units="m">Radius of the orbit circle. Positive values orbit clockwise, negative values orbit counter-clockwise.</field>
+      <field type="uint8_t" name="frame" enum="MAV_FRAME">The coordinate system of the fields: x, y, z.</field>
+      <field type="int32_t" name="x">X coordinate of center point. Coordinate system depends on frame field: local = x position in meters * 1e4, global = latitude in degrees * 1e7.</field>
+      <field type="int32_t" name="y">Y coordinate of center point.  Coordinate system depends on frame field: local = x position in meters * 1e4, global = latitude in degrees * 1e7.</field>
+      <field type="float" name="z" units="m">Altitude of center point. Coordinate system depends on frame field.</field>
+    </message>
+    <message id="370" name="BATTERY_INFO">
+      <wip/>
+      <description>
+        Battery information that is static, or requires infrequent update.
+        This message should requested using MAV_CMD_REQUEST_MESSAGE and/or streamed at very low rate.
+        BATTERY_STATUS_V2 is used for higher-rate battery status information.
+      </description>
+      <field type="uint8_t" name="id" instance="true">Battery ID</field>
+      <field type="uint8_t" name="battery_function" enum="MAV_BATTERY_FUNCTION">Function of the battery.</field>
+      <field type="uint8_t" name="type" enum="MAV_BATTERY_TYPE">Type (chemistry) of the battery.</field>
+      <field type="uint8_t" name="state_of_health" units="%" invalid="UINT8_MAX">State of Health (SOH) estimate. Typically 100% at the time of manufacture and will decrease over time and use. -1: field not provided.</field>
+      <field type="uint8_t" name="cells_in_series" invalid="0">Number of battery cells in series. 0: field not provided.</field>
+      <field type="uint16_t" name="cycle_count" invalid="UINT16_MAX">Lifetime count of the number of charge/discharge cycles (https://en.wikipedia.org/wiki/Charge_cycle). UINT16_MAX: field not provided.</field>
+      <field type="uint16_t" name="weight" units="g" invalid="0">Battery weight. 0: field not provided.</field>
+      <field type="float" name="discharge_minimum_voltage" units="V" invalid="0">Minimum per-cell voltage when discharging. 0: field not provided.</field>
+      <field type="float" name="charging_minimum_voltage" units="V" invalid="0">Minimum per-cell voltage when charging. 0: field not provided.</field>
+      <field type="float" name="resting_minimum_voltage" units="V" invalid="0">Minimum per-cell voltage when resting. 0: field not provided.</field>
+      <field type="float" name="charging_maximum_voltage" units="V" invalid="0">Maximum per-cell voltage when charged. 0: field not provided.</field>
+      <field type="float" name="charging_maximum_current" units="A" invalid="0">Maximum pack continuous charge current. 0: field not provided.</field>
+      <field type="float" name="nominal_voltage" units="V" invalid="0">Battery nominal voltage. Used for conversion between Wh and Ah. 0: field not provided.</field>
+      <field type="float" name="discharge_maximum_current" units="A" invalid="0">Maximum pack discharge current. 0: field not provided.</field>
+      <field type="float" name="discharge_maximum_burst_current" units="A" invalid="0">Maximum pack discharge burst current. 0: field not provided.</field>
+      <field type="float" name="design_capacity" units="Ah" invalid="0">Fully charged design capacity. 0: field not provided.</field>
+      <field type="float" name="full_charge_capacity" units="Ah" invalid="NaN">Predicted battery capacity when fully charged (accounting for battery degradation). NAN: field not provided.</field>
+      <field type="char[9]" name="manufacture_date" invalid="[0]">Manufacture date (DDMMYYYY) in ASCII characters, 0 terminated. All 0: field not provided.</field>
+      <field type="char[32]" name="serial_number" invalid="[0]">Serial number in ASCII characters, 0 terminated. All 0: field not provided.</field>
+      <field type="char[50]" name="name" invalid="[0]">Battery device name. Formatted as manufacturer name then product name, separated with an underscore (in ASCII characters), 0 terminated. All 0: field not provided.</field>
+    </message>
+    <message id="373" name="GENERATOR_STATUS">
+      <description>Telemetry of power generation system. Alternator or mechanical generator.</description>
+      <field type="uint64_t" name="status" display="bitmask" enum="MAV_GENERATOR_STATUS_FLAG">Status flags.</field>
+      <field type="uint16_t" name="generator_speed" units="rpm" invalid="UINT16_MAX">Speed of electrical generator or alternator. UINT16_MAX: field not provided.</field>
+      <field type="float" name="battery_current" units="A" invalid="NaN">Current into/out of battery. Positive for out. Negative for in. NaN: field not provided.</field>
+      <field type="float" name="load_current" units="A" invalid="NaN">Current going to the UAV. If battery current not available this is the DC current from the generator. Positive for out. Negative for in. NaN: field not provided</field>
+      <field type="float" name="power_generated" units="W" invalid="NaN">The power being generated. NaN: field not provided</field>
+      <field type="float" name="bus_voltage" units="V">Voltage of the bus seen at the generator, or battery bus if battery bus is controlled by generator and at a different voltage to main bus.</field>
+      <field type="int16_t" name="rectifier_temperature" units="degC" invalid="INT16_MAX">The temperature of the rectifier or power converter. INT16_MAX: field not provided.</field>
+      <field type="float" name="bat_current_setpoint" units="A" invalid="NaN">The target battery current. Positive for out. Negative for in. NaN: field not provided</field>
+      <field type="int16_t" name="generator_temperature" units="degC" invalid="INT16_MAX">The temperature of the mechanical motor, fuel cell core or generator. INT16_MAX: field not provided.</field>
+      <field type="uint32_t" name="runtime" units="s" invalid="UINT32_MAX">Seconds this generator has run since it was rebooted. UINT32_MAX: field not provided.</field>
+      <field type="int32_t" name="time_until_maintenance" units="s" invalid="INT32_MAX">Seconds until this generator requires maintenance.  A negative value indicates maintenance is past-due. INT32_MAX: field not provided.</field>
+    </message>
+    <message id="375" name="ACTUATOR_OUTPUT_STATUS">
+      <description>The raw values of the actuator outputs (e.g. on Pixhawk, from MAIN, AUX ports). This message supersedes SERVO_OUTPUT_RAW.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (since system boot).</field>
+      <field type="uint32_t" name="active" display="bitmask">Active outputs</field>
+      <field type="float[32]" name="actuator">Servo / motor output array values. Zero values indicate unused channels.</field>
+    </message>
+    <message id="380" name="TIME_ESTIMATE_TO_TARGET">
+      <wip/>
+      <!-- This message is work-in-progress it can therefore change, and should NOT be used in stable production environments -->
+      <description>Time/duration estimates for various events and actions given the current vehicle state and position.</description>
+      <field type="int32_t" name="safe_return" units="s">Estimated time to complete the vehicle's configured "safe return" action from its current position (e.g. RTL, Smart RTL, etc.). -1 indicates that the vehicle is landed, or that no time estimate available.</field>
+      <field type="int32_t" name="land" units="s">Estimated time for vehicle to complete the LAND action from its current position. -1 indicates that the vehicle is landed, or that no time estimate available.</field>
+      <field type="int32_t" name="mission_next_item" units="s" invalid="-1">Estimated time for reaching/completing the currently active mission item. -1 means no time estimate available.</field>
+      <field type="int32_t" name="mission_end" units="s" invalid="-1">Estimated time for completing the current mission. -1 means no mission active and/or no estimate available.</field>
+      <field type="int32_t" name="commanded_action" units="s" invalid="-1">Estimated time for completing the current commanded action (i.e. Go To, Takeoff, Land, etc.). -1 means no action active and/or no estimate available.</field>
+    </message>
+    <message id="385" name="TUNNEL">
+      <description>Message for transporting "arbitrary" variable-length data from one component to another (broadcast is not forbidden, but discouraged). The encoding of the data is usually extension specific, i.e. determined by the source, and is usually not documented as part of the MAVLink specification.</description>
+      <field type="uint8_t" name="target_system">System ID (can be 0 for broadcast, but this is discouraged)</field>
+      <field type="uint8_t" name="target_component">Component ID (can be 0 for broadcast, but this is discouraged)</field>
+      <field type="uint16_t" name="payload_type" enum="MAV_TUNNEL_PAYLOAD_TYPE">A code that identifies the content of the payload (0 for unknown, which is the default). If this code is less than 32768, it is a 'registered' payload type and the corresponding code should be added to the MAV_TUNNEL_PAYLOAD_TYPE enum. Software creators can register blocks of types as needed. Codes greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase.</field>
+      <field type="uint8_t" name="payload_length">Length of the data transported in payload</field>
+      <field type="uint8_t[128]" name="payload">Variable length payload. The payload length is defined by payload_length. The entire content of this block is opaque unless you understand the encoding specified by payload_type.</field>
+    </message>
+    <message id="386" name="CAN_FRAME">
+      <description>A forwarded CAN frame as requested by MAV_CMD_CAN_FORWARD.</description>
+      <field type="uint8_t" name="target_system">System ID.</field>
+      <field type="uint8_t" name="target_component">Component ID.</field>
+      <field type="uint8_t" name="bus">Bus number</field>
+      <field type="uint8_t" name="len">Frame length</field>
+      <field type="uint32_t" name="id">Frame ID</field>
+      <field type="uint8_t[8]" name="data">Frame data</field>
+    </message>
+    <message id="390" name="ONBOARD_COMPUTER_STATUS">
+      <wip/>
+      <!-- This message is work-in-progress it can therefore change, and should NOT be used in stable production environments -->
+      <description>Hardware status sent by an onboard computer.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.</field>
+      <field type="uint32_t" name="uptime" units="ms">Time since system boot.</field>
+      <field type="uint8_t" name="type">Type of the onboard computer: 0: Mission computer primary, 1: Mission computer backup 1, 2: Mission computer backup 2, 3: Compute node, 4-5: Compute spares, 6-9: Payload computers.</field>
+      <field type="uint8_t[8]" name="cpu_cores" invalid="[UINT8_MAX]">CPU usage on the component in percent (100 - idle). A value of UINT8_MAX implies the field is unused.</field>
+      <field type="uint8_t[10]" name="cpu_combined" invalid="[UINT8_MAX]">Combined CPU usage as the last 10 slices of 100 MS (a histogram). This allows to identify spikes in load that max out the system, but only for a short amount of time. A value of UINT8_MAX implies the field is unused.</field>
+      <field type="uint8_t[4]" name="gpu_cores" invalid="[UINT8_MAX]">GPU usage on the component in percent (100 - idle). A value of UINT8_MAX implies the field is unused.</field>
+      <field type="uint8_t[10]" name="gpu_combined" invalid="[UINT8_MAX]">Combined GPU usage as the last 10 slices of 100 MS (a histogram). This allows to identify spikes in load that max out the system, but only for a short amount of time. A value of UINT8_MAX implies the field is unused.</field>
+      <field type="int8_t" name="temperature_board" units="degC" invalid="INT8_MAX">Temperature of the board. A value of INT8_MAX implies the field is unused.</field>
+      <field type="int8_t[8]" name="temperature_core" units="degC" invalid="[INT8_MAX]">Temperature of the CPU core. A value of INT8_MAX implies the field is unused.</field>
+      <field type="int16_t[4]" name="fan_speed" units="rpm" invalid="[INT16_MAX]">Fan speeds. A value of INT16_MAX implies the field is unused.</field>
+      <field type="uint32_t" name="ram_usage" units="MiB" invalid="UINT32_MAX">Amount of used RAM on the component system. A value of UINT32_MAX implies the field is unused.</field>
+      <field type="uint32_t" name="ram_total" units="MiB" invalid="UINT32_MAX">Total amount of RAM on the component system. A value of UINT32_MAX implies the field is unused.</field>
+      <field type="uint32_t[4]" name="storage_type" invalid="[UINT32_MAX]">Storage type: 0: HDD, 1: SSD, 2: EMMC, 3: SD card (non-removable), 4: SD card (removable). A value of UINT32_MAX implies the field is unused.</field>
+      <field type="uint32_t[4]" name="storage_usage" units="MiB" invalid="[UINT32_MAX]">Amount of used storage space on the component system. A value of UINT32_MAX implies the field is unused.</field>
+      <field type="uint32_t[4]" name="storage_total" units="MiB" invalid="[UINT32_MAX]">Total amount of storage space on the component system. A value of UINT32_MAX implies the field is unused.</field>
+      <field type="uint32_t[6]" name="link_type">Link type: 0-9: UART, 10-19: Wired network, 20-29: Wifi, 30-39: Point-to-point proprietary, 40-49: Mesh proprietary</field>
+      <field type="uint32_t[6]" name="link_tx_rate" units="KiB/s" invalid="[UINT32_MAX]">Network traffic from the component system. A value of UINT32_MAX implies the field is unused.</field>
+      <field type="uint32_t[6]" name="link_rx_rate" units="KiB/s" invalid="[UINT32_MAX]">Network traffic to the component system. A value of UINT32_MAX implies the field is unused.</field>
+      <field type="uint32_t[6]" name="link_tx_max" units="KiB/s" invalid="[UINT32_MAX]">Network capacity from the component system. A value of UINT32_MAX implies the field is unused.</field>
+      <field type="uint32_t[6]" name="link_rx_max" units="KiB/s" invalid="[UINT32_MAX]">Network capacity to the component system. A value of UINT32_MAX implies the field is unused.</field>
+    </message>
+    <message id="395" name="COMPONENT_INFORMATION">
+      <deprecated since="2022-04" replaced_by="COMPONENT_METADATA"/>
+      <description>
+        Component information message, which may be requested using MAV_CMD_REQUEST_MESSAGE.
+      </description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint32_t" name="general_metadata_file_crc">CRC32 of the general metadata file (general_metadata_uri).</field>
+      <field type="char[100]" name="general_metadata_uri">MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.</field>
+      <field type="uint32_t" name="peripherals_metadata_file_crc">CRC32 of peripherals metadata file (peripherals_metadata_uri).</field>
+      <field type="char[100]" name="peripherals_metadata_uri">(Optional) MAVLink FTP URI for the peripherals metadata file (COMP_METADATA_TYPE_PERIPHERALS), which may be compressed with xz. This contains data about "attached components" such as UAVCAN nodes. The peripherals are in a separate file because the information must be generated dynamically at runtime. The string needs to be zero terminated.</field>
+    </message>
+    <message id="397" name="COMPONENT_METADATA">
+      <wip/>
+      <!-- This message is work-in-progress it can therefore change, and should NOT be used in stable production environments -->
+      <description>
+        Component metadata message, which may be requested using MAV_CMD_REQUEST_MESSAGE.
+
+        This contains the MAVLink FTP URI and CRC for the component's general metadata file.
+        The file must be hosted on the component, and may be xz compressed.
+        The file CRC can be used for file caching.
+
+        The general metadata file can be read to get the locations of other metadata files (COMP_METADATA_TYPE) and translations, which may be hosted either on the vehicle or the internet.
+        For more information see: https://mavlink.io/en/services/component_information.html.
+
+        Note: Camera components should use CAMERA_INFORMATION instead, and autopilots may use both this message and AUTOPILOT_VERSION.
+      </description>
+      <field type="uint32_t" name="time_boot_ms" units="ms">Timestamp (time since system boot).</field>
+      <field type="uint32_t" name="file_crc">CRC32 of the general metadata file.</field>
+      <field type="char[100]" name="uri">MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.</field>
+    </message>
+    <message id="400" name="PLAY_TUNE_V2">
+      <description>Play vehicle tone/tune (buzzer). Supersedes message PLAY_TUNE.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint32_t" name="format" enum="TUNE_FORMAT" display="bitmask">Tune format</field>
+      <field type="char[248]" name="tune">Tune definition as a NULL-terminated string.</field>
+    </message>
+    <message id="401" name="SUPPORTED_TUNES">
+      <description>Tune formats supported by vehicle. This should be emitted as response to MAV_CMD_REQUEST_MESSAGE.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint32_t" name="format" enum="TUNE_FORMAT" display="bitmask">Bitfield of supported tune formats.</field>
+    </message>
+    <!-- Events Protocol -->
+    <message id="410" name="EVENT">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Event message. Each new event from a particular component gets a new sequence number. The same message might be sent multiple times if (re-)requested. Most events are broadcast, some can be specific to a target component (as receivers keep track of the sequence for missed events, all events need to be broadcast. Thus we use destination_component instead of target_component).</description>
+      <field type="uint8_t" name="destination_component">Component ID</field>
+      <field type="uint8_t" name="destination_system">System ID</field>
+      <field type="uint32_t" name="id">Event ID (as defined in the component metadata)</field>
+      <field type="uint32_t" name="event_time_boot_ms" units="ms">Timestamp (time since system boot when the event happened).</field>
+      <field type="uint16_t" name="sequence">Sequence number.</field>
+      <field type="uint8_t" name="log_levels">Log levels: 4 bits MSB: internal (for logging purposes), 4 bits LSB: external. Levels: Emergency = 0, Alert = 1, Critical = 2, Error = 3, Warning = 4, Notice = 5, Info = 6, Debug = 7, Protocol = 8, Disabled = 9</field>
+      <field type="uint8_t[40]" name="arguments">Arguments (depend on event ID).</field>
+    </message>
+    <message id="411" name="CURRENT_EVENT_SEQUENCE">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Regular broadcast for the current latest event sequence number for a component. This is used to check for dropped events.</description>
+      <field type="uint16_t" name="sequence">Sequence number.</field>
+      <field type="uint8_t" name="flags" enum="MAV_EVENT_CURRENT_SEQUENCE_FLAGS" display="bitmask">Flag bitset.</field>
+    </message>
+    <message id="412" name="REQUEST_EVENT">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Request one or more events to be (re-)sent. If first_sequence==last_sequence, only a single event is requested. Note that first_sequence can be larger than last_sequence (because the sequence number can wrap). Each sequence will trigger an EVENT or EVENT_ERROR response.</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="first_sequence">First sequence number of the requested event.</field>
+      <field type="uint16_t" name="last_sequence">Last sequence number of the requested event.</field>
+    </message>
+    <message id="413" name="RESPONSE_EVENT_ERROR">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Response to a REQUEST_EVENT in case of an error (e.g. the event is not available anymore).</description>
+      <field type="uint8_t" name="target_system">System ID</field>
+      <field type="uint8_t" name="target_component">Component ID</field>
+      <field type="uint16_t" name="sequence">Sequence number.</field>
+      <field type="uint16_t" name="sequence_oldest_available">Oldest Sequence number that is still available after the sequence set in REQUEST_EVENT.</field>
+      <field type="uint8_t" name="reason" enum="MAV_EVENT_ERROR_REASON">Error reason.</field>
+    </message>
+    <!-- The message ids 510 and 511 are reserved for ABSOLUTE_TARGET and RELATIVE_TARGET, currently in development.xml. -->
+    <message id="387" name="CANFD_FRAME">
+      <description>A forwarded CANFD frame as requested by MAV_CMD_CAN_FORWARD. These are separated from CAN_FRAME as they need different handling (eg. TAO handling)</description>
+      <field type="uint8_t" name="target_system">System ID.</field>
+      <field type="uint8_t" name="target_component">Component ID.</field>
+      <field type="uint8_t" name="bus">bus number</field>
+      <field type="uint8_t" name="len">Frame length</field>
+      <field type="uint32_t" name="id">Frame ID</field>
+      <field type="uint8_t[64]" name="data">Frame data</field>
+    </message>
+    <message id="388" name="CAN_FILTER_MODIFY">
+      <description>Modify the filter of what CAN messages to forward over the mavlink. This can be used to make CAN forwarding work well on low bandwidth links. The filtering is applied on bits 8 to 24 of the CAN id (2nd and 3rd bytes) which corresponds to the DroneCAN message ID for DroneCAN. Filters with more than 16 IDs can be constructed by sending multiple CAN_FILTER_MODIFY messages.</description>
+      <field type="uint8_t" name="target_system">System ID.</field>
+      <field type="uint8_t" name="target_component">Component ID.</field>
+      <field type="uint8_t" name="bus">bus number</field>
+      <field type="uint8_t" name="operation" enum="CAN_FILTER_OP">what operation to perform on the filter list. See CAN_FILTER_OP enum.</field>
+      <field type="uint8_t" name="num_ids">number of IDs in filter list</field>
+      <field type="uint16_t[16]" name="ids">filter IDs, length num_ids</field>
+    </message>
+    <!-- Rover specific messages -->
+    <message id="9000" name="WHEEL_DISTANCE">
+      <description>Cumulative distance traveled for each reported wheel.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (synced to UNIX time or since system boot).</field>
+      <field type="uint8_t" name="count">Number of wheels reported.</field>
+      <field type="double[16]" name="distance" units="m">Distance reported by individual wheel encoders. Forward rotations increase values, reverse rotations decrease them. Not all wheels will necessarily have wheel encoders; the mapping of encoders to wheel positions must be agreed/understood by the endpoints.</field>
+    </message>
+    <message id="9005" name="WINCH_STATUS">
+      <description>Winch status.</description>
+      <field type="uint64_t" name="time_usec" units="us">Timestamp (synced to UNIX time or since system boot).</field>
+      <field type="float" name="line_length" units="m" invalid="NaN">Length of line released. NaN if unknown</field>
+      <field type="float" name="speed" units="m/s" invalid="NaN">Speed line is being released or retracted. Positive values if being released, negative values if being retracted, NaN if unknown</field>
+      <field type="float" name="tension" units="kg" invalid="NaN">Tension on the line. NaN if unknown</field>
+      <field type="float" name="voltage" units="V" invalid="NaN">Voltage of the battery supplying the winch. NaN if unknown</field>
+      <field type="float" name="current" units="A" invalid="NaN">Current draw from the winch. NaN if unknown</field>
+      <field type="int16_t" name="temperature" units="degC" invalid="INT16_MAX">Temperature of the motor. INT16_MAX if unknown</field>
+      <field type="uint32_t" name="status" display="bitmask" enum="MAV_WINCH_STATUS_FLAG">Status flags</field>
+    </message>
+    <message id="12900" name="OPEN_DRONE_ID_BASIC_ID">
+      <description>Data for filling the OpenDroneID Basic ID message. This and the below messages are primarily meant for feeding data to/from an OpenDroneID implementation. E.g. https://github.com/opendroneid/opendroneid-core-c. These messages are compatible with the ASTM F3411 Remote ID standard and the ASD-STAN prEN 4709-002 Direct Remote ID standard. Additional information and usage of these messages is documented at https://mavlink.io/en/services/opendroneid.html.</description>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast).</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast).</field>
+      <field type="uint8_t[20]" name="id_or_mac">Only used for drone ID data received from other UAs. See detailed description at https://mavlink.io/en/services/opendroneid.html. </field>
+      <field type="uint8_t" name="id_type" enum="MAV_ODID_ID_TYPE">Indicates the format for the uas_id field of this message.</field>
+      <field type="uint8_t" name="ua_type" enum="MAV_ODID_UA_TYPE">Indicates the type of UA (Unmanned Aircraft).</field>
+      <field type="uint8_t[20]" name="uas_id">UAS (Unmanned Aircraft System) ID following the format specified by id_type. Shall be filled with nulls in the unused portion of the field.</field>
+    </message>
+    <message id="12901" name="OPEN_DRONE_ID_LOCATION">
+      <description>Data for filling the OpenDroneID Location message. The float data types are 32-bit IEEE 754. The Location message provides the location, altitude, direction and speed of the aircraft.</description>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast).</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast).</field>
+      <field type="uint8_t[20]" name="id_or_mac">Only used for drone ID data received from other UAs. See detailed description at https://mavlink.io/en/services/opendroneid.html. </field>
+      <field type="uint8_t" name="status" enum="MAV_ODID_STATUS">Indicates whether the unmanned aircraft is on the ground or in the air.</field>
+      <field type="uint16_t" name="direction" units="cdeg" invalid="36100">Direction over ground (not heading, but direction of movement) measured clockwise from true North: 0 - 35999 centi-degrees. If unknown: 36100 centi-degrees.</field>
+      <field type="uint16_t" name="speed_horizontal" units="cm/s">Ground speed. Positive only. If unknown: 25500 cm/s. If speed is larger than 25425 cm/s, use 25425 cm/s.</field>
+      <field type="int16_t" name="speed_vertical" units="cm/s">The vertical speed. Up is positive. If unknown: 6300 cm/s. If speed is larger than 6200 cm/s, use 6200 cm/s. If lower than -6200 cm/s, use -6200 cm/s.</field>
+      <field type="int32_t" name="latitude" units="degE7" invalid="0">Current latitude of the unmanned aircraft. If unknown: 0 (both Lat/Lon).</field>
+      <field type="int32_t" name="longitude" units="degE7" invalid="0">Current longitude of the unmanned aircraft. If unknown: 0 (both Lat/Lon).</field>
+      <field type="float" name="altitude_barometric" units="m" invalid="-1000">The altitude calculated from the barometric pressue. Reference is against 29.92inHg or 1013.2mb. If unknown: -1000 m.</field>
+      <field type="float" name="altitude_geodetic" units="m" invalid="-1000">The geodetic altitude as defined by WGS84. If unknown: -1000 m.</field>
+      <field type="uint8_t" name="height_reference" enum="MAV_ODID_HEIGHT_REF">Indicates the reference point for the height field.</field>
+      <field type="float" name="height" units="m" invalid="-1000">The current height of the unmanned aircraft above the take-off location or the ground as indicated by height_reference. If unknown: -1000 m.</field>
+      <field type="uint8_t" name="horizontal_accuracy" enum="MAV_ODID_HOR_ACC">The accuracy of the horizontal position.</field>
+      <field type="uint8_t" name="vertical_accuracy" enum="MAV_ODID_VER_ACC">The accuracy of the vertical position.</field>
+      <field type="uint8_t" name="barometer_accuracy" enum="MAV_ODID_VER_ACC">The accuracy of the barometric altitude.</field>
+      <field type="uint8_t" name="speed_accuracy" enum="MAV_ODID_SPEED_ACC">The accuracy of the horizontal and vertical speed.</field>
+      <field type="float" name="timestamp" units="s" invalid="0xFFFF">Seconds after the full hour with reference to UTC time. Typically the GPS outputs a time-of-week value in milliseconds. First convert that to UTC and then convert for this field using ((float) (time_week_ms % (60*60*1000))) / 1000. If unknown: 0xFFFF.</field>
+      <field type="uint8_t" name="timestamp_accuracy" enum="MAV_ODID_TIME_ACC">The accuracy of the timestamps.</field>
+    </message>
+    <message id="12902" name="OPEN_DRONE_ID_AUTHENTICATION">
+      <description>Data for filling the OpenDroneID Authentication message. The Authentication Message defines a field that can provide a means of authenticity for the identity of the UAS (Unmanned Aircraft System). The Authentication message can have two different formats. For data page 0, the fields PageCount, Length and TimeStamp are present and AuthData is only 17 bytes. For data page 1 through 15, PageCount, Length and TimeStamp are not present and the size of AuthData is 23 bytes.</description>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast).</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast).</field>
+      <field type="uint8_t[20]" name="id_or_mac">Only used for drone ID data received from other UAs. See detailed description at https://mavlink.io/en/services/opendroneid.html. </field>
+      <field type="uint8_t" name="authentication_type" enum="MAV_ODID_AUTH_TYPE">Indicates the type of authentication.</field>
+      <field type="uint8_t" name="data_page">Allowed range is 0 - 15.</field>
+      <field type="uint8_t" name="last_page_index">This field is only present for page 0. Allowed range is 0 - 15. See the description of struct ODID_Auth_data at https://github.com/opendroneid/opendroneid-core-c/blob/master/libopendroneid/opendroneid.h.</field>
+      <field type="uint8_t" name="length" units="bytes">This field is only present for page 0. Total bytes of authentication_data from all data pages. See the description of struct ODID_Auth_data at https://github.com/opendroneid/opendroneid-core-c/blob/master/libopendroneid/opendroneid.h.</field>
+      <field type="uint32_t" name="timestamp" units="s">This field is only present for page 0. 32 bit Unix Timestamp in seconds since 00:00:00 01/01/2019.</field>
+      <field type="uint8_t[23]" name="authentication_data">Opaque authentication data. For page 0, the size is only 17 bytes. For other pages, the size is 23 bytes. Shall be filled with nulls in the unused portion of the field.</field>
+    </message>
+    <message id="12903" name="OPEN_DRONE_ID_SELF_ID">
+      <description>Data for filling the OpenDroneID Self ID message. The Self ID Message is an opportunity for the operator to (optionally) declare their identity and purpose of the flight. This message can provide additional information that could reduce the threat profile of a UA (Unmanned Aircraft) flying in a particular area or manner. This message can also be used to provide optional additional clarification in an emergency/remote ID system failure situation.</description>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast).</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast).</field>
+      <field type="uint8_t[20]" name="id_or_mac">Only used for drone ID data received from other UAs. See detailed description at https://mavlink.io/en/services/opendroneid.html. </field>
+      <field type="uint8_t" name="description_type" enum="MAV_ODID_DESC_TYPE">Indicates the type of the description field.</field>
+      <field type="char[23]" name="description">Text description or numeric value expressed as ASCII characters. Shall be filled with nulls in the unused portion of the field.</field>
+    </message>
+    <message id="12904" name="OPEN_DRONE_ID_SYSTEM">
+      <description>Data for filling the OpenDroneID System message. The System Message contains general system information including the operator location/altitude and possible aircraft group and/or category/class information.</description>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast).</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast).</field>
+      <field type="uint8_t[20]" name="id_or_mac">Only used for drone ID data received from other UAs. See detailed description at https://mavlink.io/en/services/opendroneid.html. </field>
+      <field type="uint8_t" name="operator_location_type" enum="MAV_ODID_OPERATOR_LOCATION_TYPE">Specifies the operator location type.</field>
+      <field type="uint8_t" name="classification_type" enum="MAV_ODID_CLASSIFICATION_TYPE">Specifies the classification type of the UA.</field>
+      <field type="int32_t" name="operator_latitude" units="degE7" invalid="0">Latitude of the operator. If unknown: 0 (both Lat/Lon).</field>
+      <field type="int32_t" name="operator_longitude" units="degE7" invalid="0">Longitude of the operator. If unknown: 0 (both Lat/Lon).</field>
+      <field type="uint16_t" name="area_count">Number of aircraft in the area, group or formation (default 1). Used only for swarms/multiple UA.</field>
+      <field type="uint16_t" name="area_radius" units="m">Radius of the cylindrical area of the group or formation (default 0). Used only for swarms/multiple UA.</field>
+      <field type="float" name="area_ceiling" units="m" invalid="-1000">Area Operations Ceiling relative to WGS84. If unknown: -1000 m. Used only for swarms/multiple UA.</field>
+      <field type="float" name="area_floor" units="m" invalid="-1000">Area Operations Floor relative to WGS84. If unknown: -1000 m. Used only for swarms/multiple UA.</field>
+      <field type="uint8_t" name="category_eu" enum="MAV_ODID_CATEGORY_EU">When classification_type is MAV_ODID_CLASSIFICATION_TYPE_EU, specifies the category of the UA.</field>
+      <field type="uint8_t" name="class_eu" enum="MAV_ODID_CLASS_EU">When classification_type is MAV_ODID_CLASSIFICATION_TYPE_EU, specifies the class of the UA.</field>
+      <field type="float" name="operator_altitude_geo" units="m" invalid="-1000">Geodetic altitude of the operator relative to WGS84. If unknown: -1000 m.</field>
+      <field type="uint32_t" name="timestamp" units="s">32 bit Unix Timestamp in seconds since 00:00:00 01/01/2019.</field>
+    </message>
+    <message id="12905" name="OPEN_DRONE_ID_OPERATOR_ID">
+      <description>Data for filling the OpenDroneID Operator ID message, which contains the CAA (Civil Aviation Authority) issued operator ID.</description>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast).</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast).</field>
+      <field type="uint8_t[20]" name="id_or_mac">Only used for drone ID data received from other UAs. See detailed description at https://mavlink.io/en/services/opendroneid.html. </field>
+      <field type="uint8_t" name="operator_id_type" enum="MAV_ODID_OPERATOR_ID_TYPE">Indicates the type of the operator_id field.</field>
+      <field type="char[20]" name="operator_id">Text description or numeric value expressed as ASCII characters. Shall be filled with nulls in the unused portion of the field.</field>
+    </message>
+    <!-- The message ids 12906 - 12914 are reserved for OpenDroneID. -->
+    <message id="12915" name="OPEN_DRONE_ID_MESSAGE_PACK">
+      <description>An OpenDroneID message pack is a container for multiple encoded OpenDroneID messages (i.e. not in the format given for the above message descriptions but after encoding into the compressed OpenDroneID byte format). Used e.g. when transmitting on Bluetooth 5.0 Long Range/Extended Advertising or on WiFi Neighbor Aware Networking or on WiFi Beacon.</description>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast).</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast).</field>
+      <field type="uint8_t[20]" name="id_or_mac">Only used for drone ID data received from other UAs. See detailed description at https://mavlink.io/en/services/opendroneid.html. </field>
+      <field type="uint8_t" name="single_message_size" units="bytes">This field must currently always be equal to 25 (bytes), since all encoded OpenDroneID messages are specified to have this length.</field>
+      <field type="uint8_t" name="msg_pack_size">Number of encoded messages in the pack (not the number of bytes). Allowed range is 1 - 9.</field>
+      <field type="uint8_t[225]" name="messages">Concatenation of encoded OpenDroneID messages. Shall be filled with nulls in the unused portion of the field.</field>
+    </message>
+    <!-- The message ids 12916 - 12917 are reserved for OpenDroneID. -->
+    <message id="12918" name="OPEN_DRONE_ID_ARM_STATUS">
+      <description>Transmitter (remote ID system) is enabled and ready to start sending location and other required information. This is streamed by transmitter. A flight controller uses it as a condition to arm.</description>
+      <field type="uint8_t" name="status" enum="MAV_ODID_ARM_STATUS">Status level indicating if arming is allowed.</field>
+      <field type="char[50]" name="error">Text error message, should be empty if status is good to arm. Fill with nulls in unused portion.</field>
+    </message>
+    <message id="12919" name="OPEN_DRONE_ID_SYSTEM_UPDATE">
+      <description>Update the data in the OPEN_DRONE_ID_SYSTEM message with new location information. This can be sent to update the location information for the operator when no other information in the SYSTEM message has changed. This message allows for efficient operation on radio links which have limited uplink bandwidth while meeting requirements for update frequency of the operator location.</description>
+      <field type="uint8_t" name="target_system">System ID (0 for broadcast).</field>
+      <field type="uint8_t" name="target_component">Component ID (0 for broadcast).</field>
+      <field type="int32_t" name="operator_latitude" units="degE7" invalid="0">Latitude of the operator. If unknown: 0 (both Lat/Lon).</field>
+      <field type="int32_t" name="operator_longitude" units="degE7" invalid="0">Longitude of the operator. If unknown: 0 (both Lat/Lon).</field>
+      <field type="float" name="operator_altitude_geo" units="m" invalid="-1000">Geodetic altitude of the operator relative to WGS84. If unknown: -1000 m.</field>
+      <field type="uint32_t" name="timestamp" units="s">32 bit Unix Timestamp in seconds since 00:00:00 01/01/2019.</field>
+    </message>
+    <message id="12920" name="HYGROMETER_SENSOR">
+      <description>Temperature and humidity from hygrometer.</description>
+      <field type="uint8_t" name="id" instance="true">Hygrometer ID</field>
+      <field type="int16_t" name="temperature" units="cdegC">Temperature</field>
+      <field type="uint16_t" name="humidity" units="c%">Humidity</field>
+    </message>
+  </messages>
+</mavlink>

+ 728 - 0
msg_definitions/minimal.xml

@@ -0,0 +1,728 @@
+<?xml version="1.0"?>
+<mavlink>
+  <version>3</version>
+  <enums>
+    <enum name="MAV_AUTOPILOT">
+      <description>Micro air vehicle / autopilot classes. This identifies the individual model.</description>
+      <entry value="0" name="MAV_AUTOPILOT_GENERIC">
+        <description>Generic autopilot, full support for everything</description>
+      </entry>
+      <entry value="1" name="MAV_AUTOPILOT_RESERVED">
+        <description>Reserved for future use.</description>
+      </entry>
+      <entry value="2" name="MAV_AUTOPILOT_SLUGS">
+        <description>SLUGS autopilot, http://slugsuav.soe.ucsc.edu</description>
+      </entry>
+      <entry value="3" name="MAV_AUTOPILOT_ARDUPILOTMEGA">
+        <description>ArduPilot - Plane/Copter/Rover/Sub/Tracker, https://ardupilot.org</description>
+      </entry>
+      <entry value="4" name="MAV_AUTOPILOT_OPENPILOT">
+        <description>OpenPilot, http://openpilot.org</description>
+      </entry>
+      <entry value="5" name="MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY">
+        <description>Generic autopilot only supporting simple waypoints</description>
+      </entry>
+      <entry value="6" name="MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY">
+        <description>Generic autopilot supporting waypoints and other simple navigation commands</description>
+      </entry>
+      <entry value="7" name="MAV_AUTOPILOT_GENERIC_MISSION_FULL">
+        <description>Generic autopilot supporting the full mission command set</description>
+      </entry>
+      <entry value="8" name="MAV_AUTOPILOT_INVALID">
+        <description>No valid autopilot, e.g. a GCS or other MAVLink component</description>
+      </entry>
+      <entry value="9" name="MAV_AUTOPILOT_PPZ">
+        <description>PPZ UAV - http://nongnu.org/paparazzi</description>
+      </entry>
+      <entry value="10" name="MAV_AUTOPILOT_UDB">
+        <description>UAV Dev Board</description>
+      </entry>
+      <entry value="11" name="MAV_AUTOPILOT_FP">
+        <description>FlexiPilot</description>
+      </entry>
+      <entry value="12" name="MAV_AUTOPILOT_PX4">
+        <description>PX4 Autopilot - http://px4.io/</description>
+      </entry>
+      <entry value="13" name="MAV_AUTOPILOT_SMACCMPILOT">
+        <description>SMACCMPilot - http://smaccmpilot.org</description>
+      </entry>
+      <entry value="14" name="MAV_AUTOPILOT_AUTOQUAD">
+        <description>AutoQuad -- http://autoquad.org</description>
+      </entry>
+      <entry value="15" name="MAV_AUTOPILOT_ARMAZILA">
+        <description>Armazila -- http://armazila.com</description>
+      </entry>
+      <entry value="16" name="MAV_AUTOPILOT_AEROB">
+        <description>Aerob -- http://aerob.ru</description>
+      </entry>
+      <entry value="17" name="MAV_AUTOPILOT_ASLUAV">
+        <description>ASLUAV autopilot -- http://www.asl.ethz.ch</description>
+      </entry>
+      <entry value="18" name="MAV_AUTOPILOT_SMARTAP">
+        <description>SmartAP Autopilot - http://sky-drones.com</description>
+      </entry>
+      <entry value="19" name="MAV_AUTOPILOT_AIRRAILS">
+        <description>AirRails - http://uaventure.com</description>
+      </entry>
+      <entry value="20" name="MAV_AUTOPILOT_REFLEX">
+        <description>Fusion Reflex - https://fusion.engineering</description>
+      </entry>
+      <entry value="30" name="MAV_AUTOPILOT_VKFLY">
+        <description>vK-Fly Autopilot - https://fusion.engineering</description>
+      </entry>
+    </enum>
+    <enum name="MAV_TYPE">
+      <description>MAVLINK component type reported in HEARTBEAT message. Flight controllers must report the type of the vehicle on which they are mounted (e.g. MAV_TYPE_OCTOROTOR). All other components must report a value appropriate for their type (e.g. a camera must use MAV_TYPE_CAMERA).</description>
+      <entry value="0" name="MAV_TYPE_GENERIC">
+        <description>Generic micro air vehicle</description>
+      </entry>
+      <entry value="1" name="MAV_TYPE_FIXED_WING">
+        <description>Fixed wing aircraft.</description>
+      </entry>
+      <entry value="2" name="MAV_TYPE_QUADROTOR">
+        <description>Quadrotor</description>
+      </entry>
+      <entry value="3" name="MAV_TYPE_COAXIAL">
+        <description>Coaxial helicopter</description>
+      </entry>
+      <entry value="4" name="MAV_TYPE_HELICOPTER">
+        <description>Normal helicopter with tail rotor.</description>
+      </entry>
+      <entry value="5" name="MAV_TYPE_ANTENNA_TRACKER">
+        <description>Ground installation</description>
+      </entry>
+      <entry value="6" name="MAV_TYPE_GCS">
+        <description>Operator control unit / ground control station</description>
+      </entry>
+      <entry value="7" name="MAV_TYPE_AIRSHIP">
+        <description>Airship, controlled</description>
+      </entry>
+      <entry value="8" name="MAV_TYPE_FREE_BALLOON">
+        <description>Free balloon, uncontrolled</description>
+      </entry>
+      <entry value="9" name="MAV_TYPE_ROCKET">
+        <description>Rocket</description>
+      </entry>
+      <entry value="10" name="MAV_TYPE_GROUND_ROVER">
+        <description>Ground rover</description>
+      </entry>
+      <entry value="11" name="MAV_TYPE_SURFACE_BOAT">
+        <description>Surface vessel, boat, ship</description>
+      </entry>
+      <entry value="12" name="MAV_TYPE_SUBMARINE">
+        <description>Submarine</description>
+      </entry>
+      <entry value="13" name="MAV_TYPE_HEXAROTOR">
+        <description>Hexarotor</description>
+      </entry>
+      <entry value="14" name="MAV_TYPE_OCTOROTOR">
+        <description>Octorotor</description>
+      </entry>
+      <entry value="15" name="MAV_TYPE_TRICOPTER">
+        <description>Tricopter</description>
+      </entry>
+      <entry value="16" name="MAV_TYPE_FLAPPING_WING">
+        <description>Flapping wing</description>
+      </entry>
+      <entry value="17" name="MAV_TYPE_KITE">
+        <description>Kite</description>
+      </entry>
+      <entry value="18" name="MAV_TYPE_ONBOARD_CONTROLLER">
+        <description>Onboard companion controller</description>
+      </entry>
+      <entry value="19" name="MAV_TYPE_VTOL_TAILSITTER_DUOROTOR">
+        <description>Two-rotor Tailsitter VTOL that additionally uses control surfaces in vertical operation. Note, value previously named MAV_TYPE_VTOL_DUOROTOR.</description>
+      </entry>
+      <entry value="20" name="MAV_TYPE_VTOL_TAILSITTER_QUADROTOR">
+        <description>Quad-rotor Tailsitter VTOL using a V-shaped quad config in vertical operation. Note: value previously named MAV_TYPE_VTOL_QUADROTOR.</description>
+      </entry>
+      <entry value="21" name="MAV_TYPE_VTOL_TILTROTOR">
+        <description>Tiltrotor VTOL. Fuselage and wings stay (nominally) horizontal in all flight phases. It able to tilt (some) rotors to provide thrust in cruise flight.</description>
+      </entry>
+      <entry value="22" name="MAV_TYPE_VTOL_FIXEDROTOR">
+        <description>VTOL with separate fixed rotors for hover and cruise flight. Fuselage and wings stay (nominally) horizontal in all flight phases.</description>
+      </entry>
+      <entry value="23" name="MAV_TYPE_VTOL_TAILSITTER">
+        <description>Tailsitter VTOL. Fuselage and wings orientation changes depending on flight phase: vertical for hover, horizontal for cruise. Use more specific VTOL MAV_TYPE_VTOL_TAILSITTER_DUOROTOR or MAV_TYPE_VTOL_TAILSITTER_QUADROTOR if appropriate.</description>
+      </entry>
+      <entry value="24" name="MAV_TYPE_VTOL_TILTWING">
+        <description>Tiltwing VTOL. Fuselage stays horizontal in all flight phases. The whole wing, along with any attached engine, can tilt between vertical and horizontal mode.</description>
+      </entry>
+      <!-- Entry 25 reserved for other VTOL airframe -->
+      <entry value="25" name="MAV_TYPE_VTOL_RESERVED5">
+        <description>VTOL reserved 5</description>
+      </entry>
+      <entry value="26" name="MAV_TYPE_GIMBAL">
+        <description>Gimbal</description>
+      </entry>
+      <entry value="27" name="MAV_TYPE_ADSB">
+        <description>ADSB system</description>
+      </entry>
+      <entry value="28" name="MAV_TYPE_PARAFOIL">
+        <description>Steerable, nonrigid airfoil</description>
+      </entry>
+      <entry value="29" name="MAV_TYPE_DODECAROTOR">
+        <description>Dodecarotor</description>
+      </entry>
+      <entry value="30" name="MAV_TYPE_CAMERA">
+        <description>Camera</description>
+      </entry>
+      <entry value="31" name="MAV_TYPE_CHARGING_STATION">
+        <description>Charging station</description>
+      </entry>
+      <entry value="32" name="MAV_TYPE_FLARM">
+        <description>FLARM collision avoidance system</description>
+      </entry>
+      <entry value="33" name="MAV_TYPE_SERVO">
+        <description>Servo</description>
+      </entry>
+      <entry value="34" name="MAV_TYPE_ODID">
+        <description>Open Drone ID. See https://mavlink.io/en/services/opendroneid.html.</description>
+      </entry>
+      <entry value="35" name="MAV_TYPE_DECAROTOR">
+        <description>Decarotor</description>
+      </entry>
+      <entry value="36" name="MAV_TYPE_BATTERY">
+        <description>Battery</description>
+      </entry>
+      <entry value="37" name="MAV_TYPE_PARACHUTE">
+        <description>Parachute</description>
+      </entry>
+      <entry value="38" name="MAV_TYPE_LOG">
+        <description>Log</description>
+      </entry>
+      <entry value="39" name="MAV_TYPE_OSD">
+        <description>OSD</description>
+      </entry>
+      <entry value="40" name="MAV_TYPE_IMU">
+        <description>IMU</description>
+      </entry>
+      <entry value="41" name="MAV_TYPE_GPS">
+        <description>GPS</description>
+      </entry>
+      <entry value="42" name="MAV_TYPE_WINCH">
+        <description>Winch</description>
+      </entry>
+      <entry value="43" name="MAV_TYPE_GENERIC_MULTIROTOR">
+        <description>Generic multirotor that does not fit into a specific type or whose type is unknown</description>
+      </entry>
+    </enum>
+    <enum name="MAV_MODE_FLAG" bitmask="true">
+      <description>These flags encode the MAV mode.</description>
+      <entry value="128" name="MAV_MODE_FLAG_SAFETY_ARMED">
+        <description>0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. Additional note: this flag is to be ignore when sent in the command MAV_CMD_DO_SET_MODE and MAV_CMD_COMPONENT_ARM_DISARM shall be used instead. The flag can still be used to report the armed state.</description>
+      </entry>
+      <entry value="64" name="MAV_MODE_FLAG_MANUAL_INPUT_ENABLED">
+        <description>0b01000000 remote control input is enabled.</description>
+      </entry>
+      <entry value="32" name="MAV_MODE_FLAG_HIL_ENABLED">
+        <description>0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.</description>
+      </entry>
+      <entry value="16" name="MAV_MODE_FLAG_STABILIZE_ENABLED">
+        <description>0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.</description>
+      </entry>
+      <entry value="8" name="MAV_MODE_FLAG_GUIDED_ENABLED">
+        <description>0b00001000 guided mode enabled, system flies waypoints / mission items.</description>
+      </entry>
+      <entry value="4" name="MAV_MODE_FLAG_AUTO_ENABLED">
+        <description>0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.</description>
+      </entry>
+      <entry value="2" name="MAV_MODE_FLAG_TEST_ENABLED">
+        <description>0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.</description>
+      </entry>
+      <entry value="1" name="MAV_MODE_FLAG_CUSTOM_MODE_ENABLED">
+        <description>0b00000001 Reserved for future use.</description>
+      </entry>
+    </enum>
+    <enum name="MAV_MODE_FLAG_DECODE_POSITION" bitmask="true">
+      <description>These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not.</description>
+      <entry value="128" name="MAV_MODE_FLAG_DECODE_POSITION_SAFETY">
+        <description>First bit:  10000000</description>
+      </entry>
+      <entry value="64" name="MAV_MODE_FLAG_DECODE_POSITION_MANUAL">
+        <description>Second bit: 01000000</description>
+      </entry>
+      <entry value="32" name="MAV_MODE_FLAG_DECODE_POSITION_HIL">
+        <description>Third bit:  00100000</description>
+      </entry>
+      <entry value="16" name="MAV_MODE_FLAG_DECODE_POSITION_STABILIZE">
+        <description>Fourth bit: 00010000</description>
+      </entry>
+      <entry value="8" name="MAV_MODE_FLAG_DECODE_POSITION_GUIDED">
+        <description>Fifth bit:  00001000</description>
+      </entry>
+      <entry value="4" name="MAV_MODE_FLAG_DECODE_POSITION_AUTO">
+        <description>Sixth bit:   00000100</description>
+      </entry>
+      <entry value="2" name="MAV_MODE_FLAG_DECODE_POSITION_TEST">
+        <description>Seventh bit: 00000010</description>
+      </entry>
+      <entry value="1" name="MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE">
+        <description>Eighth bit: 00000001</description>
+      </entry>
+    </enum>
+    <enum name="MAV_STATE">
+      <entry value="0" name="MAV_STATE_UNINIT">
+        <description>Uninitialized system, state is unknown.</description>
+      </entry>
+      <entry value="1" name="MAV_STATE_BOOT">
+        <description>System is booting up.</description>
+      </entry>
+      <entry value="2" name="MAV_STATE_CALIBRATING">
+        <description>System is calibrating and not flight-ready.</description>
+      </entry>
+      <entry value="3" name="MAV_STATE_STANDBY">
+        <description>System is grounded and on standby. It can be launched any time.</description>
+      </entry>
+      <entry value="4" name="MAV_STATE_ACTIVE">
+        <description>System is active and might be already airborne. Motors are engaged.</description>
+      </entry>
+      <entry value="5" name="MAV_STATE_CRITICAL">
+        <description>System is in a non-normal flight mode (failsafe). It can however still navigate.</description>
+      </entry>
+      <entry value="6" name="MAV_STATE_EMERGENCY">
+        <description>System is in a non-normal flight mode (failsafe). It lost control over parts or over the whole airframe. It is in mayday and going down.</description>
+      </entry>
+      <entry value="7" name="MAV_STATE_POWEROFF">
+        <description>System just initialized its power-down sequence, will shut down now.</description>
+      </entry>
+      <entry value="8" name="MAV_STATE_FLIGHT_TERMINATION">
+        <description>System is terminating itself (failsafe or commanded).</description>
+      </entry>
+    </enum>
+    <enum name="MAV_COMPONENT">
+      <description>Component ids (values) for the different types and instances of onboard hardware/software that might make up a MAVLink system (autopilot, cameras, servos, GPS systems, avoidance systems etc.).
+      Components must use the appropriate ID in their source address when sending messages. Components can also use IDs to determine if they are the intended recipient of an incoming message. The MAV_COMP_ID_ALL value is used to indicate messages that must be processed by all components.
+      When creating new entries, components that can have multiple instances (e.g. cameras, servos etc.) should be allocated sequential values. An appropriate number of values should be left free after these components to allow the number of instances to be expanded.</description>
+      <entry value="0" name="MAV_COMP_ID_ALL">
+        <description>Target id (target_component) used to broadcast messages to all components of the receiving system. Components should attempt to process messages with this component ID and forward to components on any other interfaces. Note: This is not a valid *source* component id for a message.</description>
+      </entry>
+      <entry value="1" name="MAV_COMP_ID_AUTOPILOT1">
+        <description>System flight controller component ("autopilot"). Only one autopilot is expected in a particular system.</description>
+      </entry>
+      <!-- Component ids from 25-99 are reserved for private OEM component definitions (and may be incompatible with other private components). Note that if this range is later reduced, higher ids will be reallocated first. -->
+      <entry value="25" name="MAV_COMP_ID_USER1">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="26" name="MAV_COMP_ID_USER2">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="27" name="MAV_COMP_ID_USER3">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="28" name="MAV_COMP_ID_USER4">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="29" name="MAV_COMP_ID_USER5">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="30" name="MAV_COMP_ID_USER6">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="31" name="MAV_COMP_ID_USER7">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="32" name="MAV_COMP_ID_USER8">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="33" name="MAV_COMP_ID_USER9">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="34" name="MAV_COMP_ID_USER10">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="35" name="MAV_COMP_ID_USER11">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="36" name="MAV_COMP_ID_USER12">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="37" name="MAV_COMP_ID_USER13">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="38" name="MAV_COMP_ID_USER14">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="39" name="MAV_COMP_ID_USER15">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="40" name="MAV_COMP_ID_USER16">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="41" name="MAV_COMP_ID_USER17">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="42" name="MAV_COMP_ID_USER18">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="43" name="MAV_COMP_ID_USER19">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="44" name="MAV_COMP_ID_USER20">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="45" name="MAV_COMP_ID_USER21">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="46" name="MAV_COMP_ID_USER22">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="47" name="MAV_COMP_ID_USER23">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="48" name="MAV_COMP_ID_USER24">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="49" name="MAV_COMP_ID_USER25">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="50" name="MAV_COMP_ID_USER26">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="51" name="MAV_COMP_ID_USER27">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="52" name="MAV_COMP_ID_USER28">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="53" name="MAV_COMP_ID_USER29">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="54" name="MAV_COMP_ID_USER30">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="55" name="MAV_COMP_ID_USER31">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="56" name="MAV_COMP_ID_USER32">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="57" name="MAV_COMP_ID_USER33">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="58" name="MAV_COMP_ID_USER34">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="59" name="MAV_COMP_ID_USER35">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="60" name="MAV_COMP_ID_USER36">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="61" name="MAV_COMP_ID_USER37">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="62" name="MAV_COMP_ID_USER38">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="63" name="MAV_COMP_ID_USER39">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="64" name="MAV_COMP_ID_USER40">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="65" name="MAV_COMP_ID_USER41">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="66" name="MAV_COMP_ID_USER42">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="67" name="MAV_COMP_ID_USER43">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="68" name="MAV_COMP_ID_TELEMETRY_RADIO">
+        <description>Telemetry radio (e.g. SiK radio, or other component that emits RADIO_STATUS messages).</description>
+      </entry>
+      <entry value="69" name="MAV_COMP_ID_USER45">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="70" name="MAV_COMP_ID_USER46">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="71" name="MAV_COMP_ID_USER47">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="72" name="MAV_COMP_ID_USER48">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="73" name="MAV_COMP_ID_USER49">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="74" name="MAV_COMP_ID_USER50">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="75" name="MAV_COMP_ID_USER51">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="76" name="MAV_COMP_ID_USER52">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="77" name="MAV_COMP_ID_USER53">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="78" name="MAV_COMP_ID_USER54">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="79" name="MAV_COMP_ID_USER55">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="80" name="MAV_COMP_ID_USER56">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="81" name="MAV_COMP_ID_USER57">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="82" name="MAV_COMP_ID_USER58">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="83" name="MAV_COMP_ID_USER59">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="84" name="MAV_COMP_ID_USER60">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="85" name="MAV_COMP_ID_USER61">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="86" name="MAV_COMP_ID_USER62">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="87" name="MAV_COMP_ID_USER63">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="88" name="MAV_COMP_ID_USER64">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="89" name="MAV_COMP_ID_USER65">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="90" name="MAV_COMP_ID_USER66">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="91" name="MAV_COMP_ID_USER67">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="92" name="MAV_COMP_ID_USER68">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="93" name="MAV_COMP_ID_USER69">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="94" name="MAV_COMP_ID_USER70">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="95" name="MAV_COMP_ID_USER71">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="96" name="MAV_COMP_ID_USER72">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="97" name="MAV_COMP_ID_USER73">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="98" name="MAV_COMP_ID_USER74">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="99" name="MAV_COMP_ID_USER75">
+        <description>Id for a component on privately managed MAVLink network. Can be used for any purpose but may not be published by components outside of the private network.</description>
+      </entry>
+      <entry value="100" name="MAV_COMP_ID_CAMERA">
+        <description>Camera #1.</description>
+      </entry>
+      <entry value="101" name="MAV_COMP_ID_CAMERA2">
+        <description>Camera #2.</description>
+      </entry>
+      <entry value="102" name="MAV_COMP_ID_CAMERA3">
+        <description>Camera #3.</description>
+      </entry>
+      <entry value="103" name="MAV_COMP_ID_CAMERA4">
+        <description>Camera #4.</description>
+      </entry>
+      <entry value="104" name="MAV_COMP_ID_CAMERA5">
+        <description>Camera #5.</description>
+      </entry>
+      <entry value="105" name="MAV_COMP_ID_CAMERA6">
+        <description>Camera #6.</description>
+      </entry>
+      <entry value="140" name="MAV_COMP_ID_SERVO1">
+        <description>Servo #1.</description>
+      </entry>
+      <entry value="141" name="MAV_COMP_ID_SERVO2">
+        <description>Servo #2.</description>
+      </entry>
+      <entry value="142" name="MAV_COMP_ID_SERVO3">
+        <description>Servo #3.</description>
+      </entry>
+      <entry value="143" name="MAV_COMP_ID_SERVO4">
+        <description>Servo #4.</description>
+      </entry>
+      <entry value="144" name="MAV_COMP_ID_SERVO5">
+        <description>Servo #5.</description>
+      </entry>
+      <entry value="145" name="MAV_COMP_ID_SERVO6">
+        <description>Servo #6.</description>
+      </entry>
+      <entry value="146" name="MAV_COMP_ID_SERVO7">
+        <description>Servo #7.</description>
+      </entry>
+      <entry value="147" name="MAV_COMP_ID_SERVO8">
+        <description>Servo #8.</description>
+      </entry>
+      <entry value="148" name="MAV_COMP_ID_SERVO9">
+        <description>Servo #9.</description>
+      </entry>
+      <entry value="149" name="MAV_COMP_ID_SERVO10">
+        <description>Servo #10.</description>
+      </entry>
+      <entry value="150" name="MAV_COMP_ID_SERVO11">
+        <description>Servo #11.</description>
+      </entry>
+      <entry value="151" name="MAV_COMP_ID_SERVO12">
+        <description>Servo #12.</description>
+      </entry>
+      <entry value="152" name="MAV_COMP_ID_SERVO13">
+        <description>Servo #13.</description>
+      </entry>
+      <entry value="153" name="MAV_COMP_ID_SERVO14">
+        <description>Servo #14.</description>
+      </entry>
+      <entry value="154" name="MAV_COMP_ID_GIMBAL">
+        <description>Gimbal #1.</description>
+      </entry>
+      <entry value="155" name="MAV_COMP_ID_LOG">
+        <description>Logging component.</description>
+      </entry>
+      <entry value="156" name="MAV_COMP_ID_ADSB">
+        <description>Automatic Dependent Surveillance-Broadcast (ADS-B) component.</description>
+      </entry>
+      <entry value="157" name="MAV_COMP_ID_OSD">
+        <description>On Screen Display (OSD) devices for video links.</description>
+      </entry>
+      <entry value="158" name="MAV_COMP_ID_PERIPHERAL">
+        <description>Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter microservice.</description>
+      </entry>
+      <entry value="159" name="MAV_COMP_ID_QX1_GIMBAL">
+        <deprecated since="2018-11" replaced_by="MAV_COMP_ID_GIMBAL">All gimbals should use MAV_COMP_ID_GIMBAL.</deprecated>
+        <description>Gimbal ID for QX1.</description>
+      </entry>
+      <entry value="160" name="MAV_COMP_ID_FLARM">
+        <description>FLARM collision alert component.</description>
+      </entry>
+      <entry value="161" name="MAV_COMP_ID_PARACHUTE">
+        <description>Parachute component.</description>
+      </entry>
+      <entry value="169" name="MAV_COMP_ID_WINCH">
+        <description>Winch component.</description>
+      </entry>
+      <entry value="171" name="MAV_COMP_ID_GIMBAL2">
+        <description>Gimbal #2.</description>
+      </entry>
+      <entry value="172" name="MAV_COMP_ID_GIMBAL3">
+        <description>Gimbal #3.</description>
+      </entry>
+      <entry value="173" name="MAV_COMP_ID_GIMBAL4">
+        <description>Gimbal #4</description>
+      </entry>
+      <entry value="174" name="MAV_COMP_ID_GIMBAL5">
+        <description>Gimbal #5.</description>
+      </entry>
+      <entry value="175" name="MAV_COMP_ID_GIMBAL6">
+        <description>Gimbal #6.</description>
+      </entry>
+      <entry value="180" name="MAV_COMP_ID_BATTERY">
+        <description>Battery #1.</description>
+      </entry>
+      <entry value="181" name="MAV_COMP_ID_BATTERY2">
+        <description>Battery #2.</description>
+      </entry>
+      <entry value="189" name="MAV_COMP_ID_MAVCAN">
+        <description>CAN over MAVLink client.</description>
+      </entry>
+      <entry value="190" name="MAV_COMP_ID_MISSIONPLANNER">
+        <description>Component that can generate/supply a mission flight plan (e.g. GCS or developer API).</description>
+      </entry>
+      <entry value="191" name="MAV_COMP_ID_ONBOARD_COMPUTER">
+        <description>Component that lives on the onboard computer (companion computer) and has some generic functionalities, such as settings system parameters and monitoring the status of some processes that don't directly speak mavlink and so on.</description>
+      </entry>
+      <entry value="192" name="MAV_COMP_ID_ONBOARD_COMPUTER2">
+        <description>Component that lives on the onboard computer (companion computer) and has some generic functionalities, such as settings system parameters and monitoring the status of some processes that don't directly speak mavlink and so on.</description>
+      </entry>
+      <entry value="193" name="MAV_COMP_ID_ONBOARD_COMPUTER3">
+        <description>Component that lives on the onboard computer (companion computer) and has some generic functionalities, such as settings system parameters and monitoring the status of some processes that don't directly speak mavlink and so on.</description>
+      </entry>
+      <entry value="194" name="MAV_COMP_ID_ONBOARD_COMPUTER4">
+        <description>Component that lives on the onboard computer (companion computer) and has some generic functionalities, such as settings system parameters and monitoring the status of some processes that don't directly speak mavlink and so on.</description>
+      </entry>
+      <entry value="195" name="MAV_COMP_ID_PATHPLANNER">
+        <description>Component that finds an optimal path between points based on a certain constraint (e.g. minimum snap, shortest path, cost, etc.).</description>
+      </entry>
+      <entry value="196" name="MAV_COMP_ID_OBSTACLE_AVOIDANCE">
+        <description>Component that plans a collision free path between two points.</description>
+      </entry>
+      <entry value="197" name="MAV_COMP_ID_VISUAL_INERTIAL_ODOMETRY">
+        <description>Component that provides position estimates using VIO techniques.</description>
+      </entry>
+      <entry value="198" name="MAV_COMP_ID_PAIRING_MANAGER">
+        <description>Component that manages pairing of vehicle and GCS.</description>
+      </entry>
+      <entry value="200" name="MAV_COMP_ID_IMU">
+        <description>Inertial Measurement Unit (IMU) #1.</description>
+      </entry>
+      <entry value="201" name="MAV_COMP_ID_IMU_2">
+        <description>Inertial Measurement Unit (IMU) #2.</description>
+      </entry>
+      <entry value="202" name="MAV_COMP_ID_IMU_3">
+        <description>Inertial Measurement Unit (IMU) #3.</description>
+      </entry>
+      <entry value="220" name="MAV_COMP_ID_GPS">
+        <description>GPS #1.</description>
+      </entry>
+      <entry value="221" name="MAV_COMP_ID_GPS2">
+        <description>GPS #2.</description>
+      </entry>
+      <entry value="236" name="MAV_COMP_ID_ODID_TXRX_1">
+        <description>Open Drone ID transmitter/receiver (Bluetooth/WiFi/Internet).</description>
+      </entry>
+      <entry value="237" name="MAV_COMP_ID_ODID_TXRX_2">
+        <description>Open Drone ID transmitter/receiver (Bluetooth/WiFi/Internet).</description>
+      </entry>
+      <entry value="238" name="MAV_COMP_ID_ODID_TXRX_3">
+        <description>Open Drone ID transmitter/receiver (Bluetooth/WiFi/Internet).</description>
+      </entry>
+      <entry value="240" name="MAV_COMP_ID_UDP_BRIDGE">
+        <description>Component to bridge MAVLink to UDP (i.e. from a UART).</description>
+      </entry>
+      <entry value="241" name="MAV_COMP_ID_UART_BRIDGE">
+        <description>Component to bridge to UART (i.e. from UDP).</description>
+      </entry>
+      <entry value="242" name="MAV_COMP_ID_TUNNEL_NODE">
+        <description>Component handling TUNNEL messages (e.g. vendor specific GUI of a component).</description>
+      </entry>
+      <entry value="250" name="MAV_COMP_ID_SYSTEM_CONTROL">
+        <deprecated since="2018-11" replaced_by="MAV_COMP_ID_ALL">System control does not require a separate component ID. Instead, system commands should be sent with target_component=MAV_COMP_ID_ALL allowing the target component to use any appropriate component id.</deprecated>
+        <description>Deprecated, don't use. Component for handling system messages (e.g. to ARM, takeoff, etc.).</description>
+      </entry>
+    </enum>
+  </enums>
+  <messages>
+    <message id="0" name="HEARTBEAT">
+      <description>The heartbeat message shows that a system or component is present and responding. The type and autopilot fields (along with the message component id), allow the receiving system to treat further messages from this system appropriately (e.g. by laying out the user interface based on the autopilot). This microservice is documented at https://mavlink.io/en/services/heartbeat.html</description>
+      <field type="uint8_t" name="type" enum="MAV_TYPE">Vehicle or component type. For a flight controller component the vehicle type (quadrotor, helicopter, etc.). For other components the component type (e.g. camera, gimbal, etc.). This should be used in preference to component id for identifying the component type.</field>
+      <field type="uint8_t" name="autopilot" enum="MAV_AUTOPILOT">Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.</field>
+      <field type="uint8_t" name="base_mode" enum="MAV_MODE_FLAG" display="bitmask">System mode bitmap.</field>
+      <field type="uint32_t" name="custom_mode">A bitfield for use for autopilot-specific flags</field>
+      <field type="uint8_t" name="system_status" enum="MAV_STATE">System status flag.</field>
+      <field type="uint8_t_mavlink_version" name="mavlink_version">MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version</field>
+    </message>
+    <message id="300" name="PROTOCOL_VERSION">
+      <wip/>
+      <!-- This message is work-in-progress and it can therefore change. It should NOT be used in stable production environments. -->
+      <description>Version and capability of protocol version. This message can be requested with MAV_CMD_REQUEST_MESSAGE and is used as part of the handshaking to establish which MAVLink version should be used on the network. Every node should respond to a request for PROTOCOL_VERSION to enable the handshaking. Library implementers should consider adding this into the default decoding state machine to allow the protocol core to respond directly.</description>
+      <field type="uint16_t" name="version">Currently active MAVLink version number * 100: v1.0 is 100, v2.0 is 200, etc.</field>
+      <field type="uint16_t" name="min_version">Minimum MAVLink version supported</field>
+      <field type="uint16_t" name="max_version">Maximum MAVLink version supported (set to the same value as version by default)</field>
+      <field type="uint8_t[8]" name="spec_version_hash">The first 8 bytes (not characters printed in hex!) of the git hash.</field>
+      <field type="uint8_t[8]" name="library_version_hash">The first 8 bytes (not characters printed in hex!) of the git hash.</field>
+    </message>
+  </messages>
+</mavlink>

+ 10 - 0
msg_definitions/standard.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<mavlink>
+  <!-- MAVLink standard messages -->
+  <include>minimal.xml</include>
+  <dialect>0</dialect>
+  <!-- use minimal.xml enums -->
+  <enums/>
+  <!-- use minimal.xml messages -->
+  <messages/>
+</mavlink>

File diff suppressed because it is too large
+ 25 - 0
v2.0/VKFly/VKFly.h


+ 34 - 0
v2.0/VKFly/mavlink.h

@@ -0,0 +1,34 @@
+/** @file
+ *  @brief MAVLink comm protocol built from VKFly.xml
+ *  @see http://mavlink.org
+ */
+#pragma once
+#ifndef MAVLINK_H
+#define MAVLINK_H
+
+#define MAVLINK_PRIMARY_XML_HASH -1375384045188272973
+
+#ifndef MAVLINK_STX
+#define MAVLINK_STX 253
+#endif
+
+#ifndef MAVLINK_ENDIAN
+#define MAVLINK_ENDIAN MAVLINK_LITTLE_ENDIAN
+#endif
+
+#ifndef MAVLINK_ALIGNED_FIELDS
+#define MAVLINK_ALIGNED_FIELDS 1
+#endif
+
+#ifndef MAVLINK_CRC_EXTRA
+#define MAVLINK_CRC_EXTRA 1
+#endif
+
+#ifndef MAVLINK_COMMAND_24BIT
+#define MAVLINK_COMMAND_24BIT 1
+#endif
+
+#include "version.h"
+#include "VKFly.h"
+
+#endif // MAVLINK_H

+ 313 - 0
v2.0/VKFly/mavlink_msg_vkfmu_status.h

@@ -0,0 +1,313 @@
+#pragma once
+// MESSAGE VKFMU_STATUS PACKING
+
+#define MAVLINK_MSG_ID_VKFMU_STATUS 53001
+
+
+typedef struct __mavlink_vkfmu_status_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp in ms from system boot.*/
+ uint8_t s_flag1; /*<  fmu sflag1*/
+ uint8_t s_flag2; /*<  fmu sflag2*/
+ uint8_t s_flag3; /*<  fmu sflag3*/
+ uint8_t s_flag4; /*<  fmu sflag4*/
+} mavlink_vkfmu_status_t;
+
+#define MAVLINK_MSG_ID_VKFMU_STATUS_LEN 8
+#define MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN 8
+#define MAVLINK_MSG_ID_53001_LEN 8
+#define MAVLINK_MSG_ID_53001_MIN_LEN 8
+
+#define MAVLINK_MSG_ID_VKFMU_STATUS_CRC 5
+#define MAVLINK_MSG_ID_53001_CRC 5
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VKFMU_STATUS { \
+    53001, \
+    "VKFMU_STATUS", \
+    5, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vkfmu_status_t, time_boot_ms) }, \
+         { "s_flag1", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_vkfmu_status_t, s_flag1) }, \
+         { "s_flag2", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_vkfmu_status_t, s_flag2) }, \
+         { "s_flag3", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_vkfmu_status_t, s_flag3) }, \
+         { "s_flag4", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_vkfmu_status_t, s_flag4) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VKFMU_STATUS { \
+    "VKFMU_STATUS", \
+    5, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vkfmu_status_t, time_boot_ms) }, \
+         { "s_flag1", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_vkfmu_status_t, s_flag1) }, \
+         { "s_flag2", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_vkfmu_status_t, s_flag2) }, \
+         { "s_flag3", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_vkfmu_status_t, s_flag3) }, \
+         { "s_flag4", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_vkfmu_status_t, s_flag4) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vkfmu_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp in ms from system boot.
+ * @param s_flag1  fmu sflag1
+ * @param s_flag2  fmu sflag2
+ * @param s_flag3  fmu sflag3
+ * @param s_flag4  fmu sflag4
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vkfmu_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint8_t s_flag1, uint8_t s_flag2, uint8_t s_flag3, uint8_t s_flag4)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VKFMU_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint8_t(buf, 4, s_flag1);
+    _mav_put_uint8_t(buf, 5, s_flag2);
+    _mav_put_uint8_t(buf, 6, s_flag3);
+    _mav_put_uint8_t(buf, 7, s_flag4);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VKFMU_STATUS_LEN);
+#else
+    mavlink_vkfmu_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.s_flag1 = s_flag1;
+    packet.s_flag2 = s_flag2;
+    packet.s_flag3 = s_flag3;
+    packet.s_flag4 = s_flag4;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VKFMU_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VKFMU_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a vkfmu_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp in ms from system boot.
+ * @param s_flag1  fmu sflag1
+ * @param s_flag2  fmu sflag2
+ * @param s_flag3  fmu sflag3
+ * @param s_flag4  fmu sflag4
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vkfmu_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint8_t s_flag1,uint8_t s_flag2,uint8_t s_flag3,uint8_t s_flag4)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VKFMU_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint8_t(buf, 4, s_flag1);
+    _mav_put_uint8_t(buf, 5, s_flag2);
+    _mav_put_uint8_t(buf, 6, s_flag3);
+    _mav_put_uint8_t(buf, 7, s_flag4);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VKFMU_STATUS_LEN);
+#else
+    mavlink_vkfmu_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.s_flag1 = s_flag1;
+    packet.s_flag2 = s_flag2;
+    packet.s_flag3 = s_flag3;
+    packet.s_flag4 = s_flag4;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VKFMU_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VKFMU_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a vkfmu_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param vkfmu_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vkfmu_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vkfmu_status_t* vkfmu_status)
+{
+    return mavlink_msg_vkfmu_status_pack(system_id, component_id, msg, vkfmu_status->time_boot_ms, vkfmu_status->s_flag1, vkfmu_status->s_flag2, vkfmu_status->s_flag3, vkfmu_status->s_flag4);
+}
+
+/**
+ * @brief Encode a vkfmu_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param vkfmu_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vkfmu_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vkfmu_status_t* vkfmu_status)
+{
+    return mavlink_msg_vkfmu_status_pack_chan(system_id, component_id, chan, msg, vkfmu_status->time_boot_ms, vkfmu_status->s_flag1, vkfmu_status->s_flag2, vkfmu_status->s_flag3, vkfmu_status->s_flag4);
+}
+
+/**
+ * @brief Send a vkfmu_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp in ms from system boot.
+ * @param s_flag1  fmu sflag1
+ * @param s_flag2  fmu sflag2
+ * @param s_flag3  fmu sflag3
+ * @param s_flag4  fmu sflag4
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vkfmu_status_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t s_flag1, uint8_t s_flag2, uint8_t s_flag3, uint8_t s_flag4)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VKFMU_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint8_t(buf, 4, s_flag1);
+    _mav_put_uint8_t(buf, 5, s_flag2);
+    _mav_put_uint8_t(buf, 6, s_flag3);
+    _mav_put_uint8_t(buf, 7, s_flag4);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKFMU_STATUS, buf, MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_CRC);
+#else
+    mavlink_vkfmu_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.s_flag1 = s_flag1;
+    packet.s_flag2 = s_flag2;
+    packet.s_flag3 = s_flag3;
+    packet.s_flag4 = s_flag4;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKFMU_STATUS, (const char *)&packet, MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vkfmu_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vkfmu_status_send_struct(mavlink_channel_t chan, const mavlink_vkfmu_status_t* vkfmu_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vkfmu_status_send(chan, vkfmu_status->time_boot_ms, vkfmu_status->s_flag1, vkfmu_status->s_flag2, vkfmu_status->s_flag3, vkfmu_status->s_flag4);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKFMU_STATUS, (const char *)vkfmu_status, MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VKFMU_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_vkfmu_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint8_t s_flag1, uint8_t s_flag2, uint8_t s_flag3, uint8_t s_flag4)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint8_t(buf, 4, s_flag1);
+    _mav_put_uint8_t(buf, 5, s_flag2);
+    _mav_put_uint8_t(buf, 6, s_flag3);
+    _mav_put_uint8_t(buf, 7, s_flag4);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKFMU_STATUS, buf, MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_CRC);
+#else
+    mavlink_vkfmu_status_t *packet = (mavlink_vkfmu_status_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->s_flag1 = s_flag1;
+    packet->s_flag2 = s_flag2;
+    packet->s_flag3 = s_flag3;
+    packet->s_flag4 = s_flag4;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKFMU_STATUS, (const char *)packet, MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_LEN, MAVLINK_MSG_ID_VKFMU_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VKFMU_STATUS UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from vkfmu_status message
+ *
+ * @return [ms] Timestamp in ms from system boot.
+ */
+static inline uint32_t mavlink_msg_vkfmu_status_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field s_flag1 from vkfmu_status message
+ *
+ * @return  fmu sflag1
+ */
+static inline uint8_t mavlink_msg_vkfmu_status_get_s_flag1(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  4);
+}
+
+/**
+ * @brief Get field s_flag2 from vkfmu_status message
+ *
+ * @return  fmu sflag2
+ */
+static inline uint8_t mavlink_msg_vkfmu_status_get_s_flag2(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  5);
+}
+
+/**
+ * @brief Get field s_flag3 from vkfmu_status message
+ *
+ * @return  fmu sflag3
+ */
+static inline uint8_t mavlink_msg_vkfmu_status_get_s_flag3(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  6);
+}
+
+/**
+ * @brief Get field s_flag4 from vkfmu_status message
+ *
+ * @return  fmu sflag4
+ */
+static inline uint8_t mavlink_msg_vkfmu_status_get_s_flag4(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  7);
+}
+
+/**
+ * @brief Decode a vkfmu_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param vkfmu_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vkfmu_status_decode(const mavlink_message_t* msg, mavlink_vkfmu_status_t* vkfmu_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vkfmu_status->time_boot_ms = mavlink_msg_vkfmu_status_get_time_boot_ms(msg);
+    vkfmu_status->s_flag1 = mavlink_msg_vkfmu_status_get_s_flag1(msg);
+    vkfmu_status->s_flag2 = mavlink_msg_vkfmu_status_get_s_flag2(msg);
+    vkfmu_status->s_flag3 = mavlink_msg_vkfmu_status_get_s_flag3(msg);
+    vkfmu_status->s_flag4 = mavlink_msg_vkfmu_status_get_s_flag4(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VKFMU_STATUS_LEN? msg->len : MAVLINK_MSG_ID_VKFMU_STATUS_LEN;
+        memset(vkfmu_status, 0, MAVLINK_MSG_ID_VKFMU_STATUS_LEN);
+    memcpy(vkfmu_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 648 - 0
v2.0/VKFly/mavlink_msg_vkins_status.h

@@ -0,0 +1,648 @@
+#pragma once
+// MESSAGE VKINS_STATUS PACKING
+
+#define MAVLINK_MSG_ID_VKINS_STATUS 53000
+
+
+typedef struct __mavlink_vkins_status_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp in ms from system boot.*/
+ float g0; /*< [m/s/s] vkins initial calibrated gravitation acceleration.*/
+ int32_t raw_latitude; /*< [degE7] raw longitude for data fusion*/
+ int32_t raw_longitude; /*< [degE7] raw latitidue for data fusion*/
+ float baro_alt; /*< [m] raw baromoter altitude for data fusion*/
+ float raw_gps_alt; /*< [m] gps amsl altitude for data fusion*/
+ int16_t temperature; /*< [cdegC] temperature*/
+ uint8_t nav_status; /*<  VKINS
+        navigation status flag.*/
+ uint8_t s_flag1; /*<  vinks flag1*/
+ uint8_t s_flag2; /*<  vinks flag2.*/
+ uint8_t s_flag3; /*<  vinks flag3.*/
+ uint8_t s_flag4; /*<  vinks flag4.*/
+ uint8_t s_flag5; /*<  vinks flag5.*/
+ uint8_t s_flag6; /*<  vinks flag6.*/
+ uint8_t mag_calib_stage; /*<  vkins mag calib
+        stage.*/
+ uint8_t solv_psat_num; /*<  satelites number for position*/
+ uint8_t solv_hsat_num; /*<  satelites number for heading*/
+ uint8_t vibe_coe; /*<  */
+} mavlink_vkins_status_t;
+
+#define MAVLINK_MSG_ID_VKINS_STATUS_LEN 37
+#define MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN 37
+#define MAVLINK_MSG_ID_53000_LEN 37
+#define MAVLINK_MSG_ID_53000_MIN_LEN 37
+
+#define MAVLINK_MSG_ID_VKINS_STATUS_CRC 22
+#define MAVLINK_MSG_ID_53000_CRC 22
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VKINS_STATUS { \
+    53000, \
+    "VKINS_STATUS", \
+    18, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vkins_status_t, time_boot_ms) }, \
+         { "nav_status", "0x%02x", MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_vkins_status_t, nav_status) }, \
+         { "s_flag1", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_vkins_status_t, s_flag1) }, \
+         { "s_flag2", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_vkins_status_t, s_flag2) }, \
+         { "s_flag3", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_vkins_status_t, s_flag3) }, \
+         { "s_flag4", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_vkins_status_t, s_flag4) }, \
+         { "s_flag5", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_vkins_status_t, s_flag5) }, \
+         { "s_flag6", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_vkins_status_t, s_flag6) }, \
+         { "mag_calib_stage", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_vkins_status_t, mag_calib_stage) }, \
+         { "g0", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_vkins_status_t, g0) }, \
+         { "raw_latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_vkins_status_t, raw_latitude) }, \
+         { "raw_longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_vkins_status_t, raw_longitude) }, \
+         { "baro_alt", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_vkins_status_t, baro_alt) }, \
+         { "raw_gps_alt", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_vkins_status_t, raw_gps_alt) }, \
+         { "solv_psat_num", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_vkins_status_t, solv_psat_num) }, \
+         { "solv_hsat_num", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_vkins_status_t, solv_hsat_num) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 24, offsetof(mavlink_vkins_status_t, temperature) }, \
+         { "vibe_coe", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_vkins_status_t, vibe_coe) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VKINS_STATUS { \
+    "VKINS_STATUS", \
+    18, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vkins_status_t, time_boot_ms) }, \
+         { "nav_status", "0x%02x", MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_vkins_status_t, nav_status) }, \
+         { "s_flag1", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_vkins_status_t, s_flag1) }, \
+         { "s_flag2", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_vkins_status_t, s_flag2) }, \
+         { "s_flag3", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_vkins_status_t, s_flag3) }, \
+         { "s_flag4", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_vkins_status_t, s_flag4) }, \
+         { "s_flag5", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_vkins_status_t, s_flag5) }, \
+         { "s_flag6", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_vkins_status_t, s_flag6) }, \
+         { "mag_calib_stage", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_vkins_status_t, mag_calib_stage) }, \
+         { "g0", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_vkins_status_t, g0) }, \
+         { "raw_latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_vkins_status_t, raw_latitude) }, \
+         { "raw_longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_vkins_status_t, raw_longitude) }, \
+         { "baro_alt", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_vkins_status_t, baro_alt) }, \
+         { "raw_gps_alt", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_vkins_status_t, raw_gps_alt) }, \
+         { "solv_psat_num", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_vkins_status_t, solv_psat_num) }, \
+         { "solv_hsat_num", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_vkins_status_t, solv_hsat_num) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 24, offsetof(mavlink_vkins_status_t, temperature) }, \
+         { "vibe_coe", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_vkins_status_t, vibe_coe) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vkins_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp in ms from system boot.
+ * @param nav_status  VKINS
+        navigation status flag.
+ * @param s_flag1  vinks flag1
+ * @param s_flag2  vinks flag2.
+ * @param s_flag3  vinks flag3.
+ * @param s_flag4  vinks flag4.
+ * @param s_flag5  vinks flag5.
+ * @param s_flag6  vinks flag6.
+ * @param mag_calib_stage  vkins mag calib
+        stage.
+ * @param g0 [m/s/s] vkins initial calibrated gravitation acceleration.
+ * @param raw_latitude [degE7] raw longitude for data fusion
+ * @param raw_longitude [degE7] raw latitidue for data fusion
+ * @param baro_alt [m] raw baromoter altitude for data fusion
+ * @param raw_gps_alt [m] gps amsl altitude for data fusion
+ * @param solv_psat_num  satelites number for position
+ * @param solv_hsat_num  satelites number for heading
+ * @param temperature [cdegC] temperature
+ * @param vibe_coe  
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vkins_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint8_t nav_status, uint8_t s_flag1, uint8_t s_flag2, uint8_t s_flag3, uint8_t s_flag4, uint8_t s_flag5, uint8_t s_flag6, uint8_t mag_calib_stage, float g0, int32_t raw_latitude, int32_t raw_longitude, float baro_alt, float raw_gps_alt, uint8_t solv_psat_num, uint8_t solv_hsat_num, int16_t temperature, uint8_t vibe_coe)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VKINS_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, g0);
+    _mav_put_int32_t(buf, 8, raw_latitude);
+    _mav_put_int32_t(buf, 12, raw_longitude);
+    _mav_put_float(buf, 16, baro_alt);
+    _mav_put_float(buf, 20, raw_gps_alt);
+    _mav_put_int16_t(buf, 24, temperature);
+    _mav_put_uint8_t(buf, 26, nav_status);
+    _mav_put_uint8_t(buf, 27, s_flag1);
+    _mav_put_uint8_t(buf, 28, s_flag2);
+    _mav_put_uint8_t(buf, 29, s_flag3);
+    _mav_put_uint8_t(buf, 30, s_flag4);
+    _mav_put_uint8_t(buf, 31, s_flag5);
+    _mav_put_uint8_t(buf, 32, s_flag6);
+    _mav_put_uint8_t(buf, 33, mag_calib_stage);
+    _mav_put_uint8_t(buf, 34, solv_psat_num);
+    _mav_put_uint8_t(buf, 35, solv_hsat_num);
+    _mav_put_uint8_t(buf, 36, vibe_coe);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VKINS_STATUS_LEN);
+#else
+    mavlink_vkins_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.g0 = g0;
+    packet.raw_latitude = raw_latitude;
+    packet.raw_longitude = raw_longitude;
+    packet.baro_alt = baro_alt;
+    packet.raw_gps_alt = raw_gps_alt;
+    packet.temperature = temperature;
+    packet.nav_status = nav_status;
+    packet.s_flag1 = s_flag1;
+    packet.s_flag2 = s_flag2;
+    packet.s_flag3 = s_flag3;
+    packet.s_flag4 = s_flag4;
+    packet.s_flag5 = s_flag5;
+    packet.s_flag6 = s_flag6;
+    packet.mag_calib_stage = mag_calib_stage;
+    packet.solv_psat_num = solv_psat_num;
+    packet.solv_hsat_num = solv_hsat_num;
+    packet.vibe_coe = vibe_coe;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VKINS_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VKINS_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKINS_STATUS_LEN, MAVLINK_MSG_ID_VKINS_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a vkins_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp in ms from system boot.
+ * @param nav_status  VKINS
+        navigation status flag.
+ * @param s_flag1  vinks flag1
+ * @param s_flag2  vinks flag2.
+ * @param s_flag3  vinks flag3.
+ * @param s_flag4  vinks flag4.
+ * @param s_flag5  vinks flag5.
+ * @param s_flag6  vinks flag6.
+ * @param mag_calib_stage  vkins mag calib
+        stage.
+ * @param g0 [m/s/s] vkins initial calibrated gravitation acceleration.
+ * @param raw_latitude [degE7] raw longitude for data fusion
+ * @param raw_longitude [degE7] raw latitidue for data fusion
+ * @param baro_alt [m] raw baromoter altitude for data fusion
+ * @param raw_gps_alt [m] gps amsl altitude for data fusion
+ * @param solv_psat_num  satelites number for position
+ * @param solv_hsat_num  satelites number for heading
+ * @param temperature [cdegC] temperature
+ * @param vibe_coe  
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vkins_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint8_t nav_status,uint8_t s_flag1,uint8_t s_flag2,uint8_t s_flag3,uint8_t s_flag4,uint8_t s_flag5,uint8_t s_flag6,uint8_t mag_calib_stage,float g0,int32_t raw_latitude,int32_t raw_longitude,float baro_alt,float raw_gps_alt,uint8_t solv_psat_num,uint8_t solv_hsat_num,int16_t temperature,uint8_t vibe_coe)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VKINS_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, g0);
+    _mav_put_int32_t(buf, 8, raw_latitude);
+    _mav_put_int32_t(buf, 12, raw_longitude);
+    _mav_put_float(buf, 16, baro_alt);
+    _mav_put_float(buf, 20, raw_gps_alt);
+    _mav_put_int16_t(buf, 24, temperature);
+    _mav_put_uint8_t(buf, 26, nav_status);
+    _mav_put_uint8_t(buf, 27, s_flag1);
+    _mav_put_uint8_t(buf, 28, s_flag2);
+    _mav_put_uint8_t(buf, 29, s_flag3);
+    _mav_put_uint8_t(buf, 30, s_flag4);
+    _mav_put_uint8_t(buf, 31, s_flag5);
+    _mav_put_uint8_t(buf, 32, s_flag6);
+    _mav_put_uint8_t(buf, 33, mag_calib_stage);
+    _mav_put_uint8_t(buf, 34, solv_psat_num);
+    _mav_put_uint8_t(buf, 35, solv_hsat_num);
+    _mav_put_uint8_t(buf, 36, vibe_coe);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VKINS_STATUS_LEN);
+#else
+    mavlink_vkins_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.g0 = g0;
+    packet.raw_latitude = raw_latitude;
+    packet.raw_longitude = raw_longitude;
+    packet.baro_alt = baro_alt;
+    packet.raw_gps_alt = raw_gps_alt;
+    packet.temperature = temperature;
+    packet.nav_status = nav_status;
+    packet.s_flag1 = s_flag1;
+    packet.s_flag2 = s_flag2;
+    packet.s_flag3 = s_flag3;
+    packet.s_flag4 = s_flag4;
+    packet.s_flag5 = s_flag5;
+    packet.s_flag6 = s_flag6;
+    packet.mag_calib_stage = mag_calib_stage;
+    packet.solv_psat_num = solv_psat_num;
+    packet.solv_hsat_num = solv_hsat_num;
+    packet.vibe_coe = vibe_coe;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VKINS_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VKINS_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKINS_STATUS_LEN, MAVLINK_MSG_ID_VKINS_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a vkins_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param vkins_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vkins_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vkins_status_t* vkins_status)
+{
+    return mavlink_msg_vkins_status_pack(system_id, component_id, msg, vkins_status->time_boot_ms, vkins_status->nav_status, vkins_status->s_flag1, vkins_status->s_flag2, vkins_status->s_flag3, vkins_status->s_flag4, vkins_status->s_flag5, vkins_status->s_flag6, vkins_status->mag_calib_stage, vkins_status->g0, vkins_status->raw_latitude, vkins_status->raw_longitude, vkins_status->baro_alt, vkins_status->raw_gps_alt, vkins_status->solv_psat_num, vkins_status->solv_hsat_num, vkins_status->temperature, vkins_status->vibe_coe);
+}
+
+/**
+ * @brief Encode a vkins_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param vkins_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vkins_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vkins_status_t* vkins_status)
+{
+    return mavlink_msg_vkins_status_pack_chan(system_id, component_id, chan, msg, vkins_status->time_boot_ms, vkins_status->nav_status, vkins_status->s_flag1, vkins_status->s_flag2, vkins_status->s_flag3, vkins_status->s_flag4, vkins_status->s_flag5, vkins_status->s_flag6, vkins_status->mag_calib_stage, vkins_status->g0, vkins_status->raw_latitude, vkins_status->raw_longitude, vkins_status->baro_alt, vkins_status->raw_gps_alt, vkins_status->solv_psat_num, vkins_status->solv_hsat_num, vkins_status->temperature, vkins_status->vibe_coe);
+}
+
+/**
+ * @brief Send a vkins_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp in ms from system boot.
+ * @param nav_status  VKINS
+        navigation status flag.
+ * @param s_flag1  vinks flag1
+ * @param s_flag2  vinks flag2.
+ * @param s_flag3  vinks flag3.
+ * @param s_flag4  vinks flag4.
+ * @param s_flag5  vinks flag5.
+ * @param s_flag6  vinks flag6.
+ * @param mag_calib_stage  vkins mag calib
+        stage.
+ * @param g0 [m/s/s] vkins initial calibrated gravitation acceleration.
+ * @param raw_latitude [degE7] raw longitude for data fusion
+ * @param raw_longitude [degE7] raw latitidue for data fusion
+ * @param baro_alt [m] raw baromoter altitude for data fusion
+ * @param raw_gps_alt [m] gps amsl altitude for data fusion
+ * @param solv_psat_num  satelites number for position
+ * @param solv_hsat_num  satelites number for heading
+ * @param temperature [cdegC] temperature
+ * @param vibe_coe  
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vkins_status_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t nav_status, uint8_t s_flag1, uint8_t s_flag2, uint8_t s_flag3, uint8_t s_flag4, uint8_t s_flag5, uint8_t s_flag6, uint8_t mag_calib_stage, float g0, int32_t raw_latitude, int32_t raw_longitude, float baro_alt, float raw_gps_alt, uint8_t solv_psat_num, uint8_t solv_hsat_num, int16_t temperature, uint8_t vibe_coe)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VKINS_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, g0);
+    _mav_put_int32_t(buf, 8, raw_latitude);
+    _mav_put_int32_t(buf, 12, raw_longitude);
+    _mav_put_float(buf, 16, baro_alt);
+    _mav_put_float(buf, 20, raw_gps_alt);
+    _mav_put_int16_t(buf, 24, temperature);
+    _mav_put_uint8_t(buf, 26, nav_status);
+    _mav_put_uint8_t(buf, 27, s_flag1);
+    _mav_put_uint8_t(buf, 28, s_flag2);
+    _mav_put_uint8_t(buf, 29, s_flag3);
+    _mav_put_uint8_t(buf, 30, s_flag4);
+    _mav_put_uint8_t(buf, 31, s_flag5);
+    _mav_put_uint8_t(buf, 32, s_flag6);
+    _mav_put_uint8_t(buf, 33, mag_calib_stage);
+    _mav_put_uint8_t(buf, 34, solv_psat_num);
+    _mav_put_uint8_t(buf, 35, solv_hsat_num);
+    _mav_put_uint8_t(buf, 36, vibe_coe);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKINS_STATUS, buf, MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKINS_STATUS_LEN, MAVLINK_MSG_ID_VKINS_STATUS_CRC);
+#else
+    mavlink_vkins_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.g0 = g0;
+    packet.raw_latitude = raw_latitude;
+    packet.raw_longitude = raw_longitude;
+    packet.baro_alt = baro_alt;
+    packet.raw_gps_alt = raw_gps_alt;
+    packet.temperature = temperature;
+    packet.nav_status = nav_status;
+    packet.s_flag1 = s_flag1;
+    packet.s_flag2 = s_flag2;
+    packet.s_flag3 = s_flag3;
+    packet.s_flag4 = s_flag4;
+    packet.s_flag5 = s_flag5;
+    packet.s_flag6 = s_flag6;
+    packet.mag_calib_stage = mag_calib_stage;
+    packet.solv_psat_num = solv_psat_num;
+    packet.solv_hsat_num = solv_hsat_num;
+    packet.vibe_coe = vibe_coe;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKINS_STATUS, (const char *)&packet, MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKINS_STATUS_LEN, MAVLINK_MSG_ID_VKINS_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vkins_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vkins_status_send_struct(mavlink_channel_t chan, const mavlink_vkins_status_t* vkins_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vkins_status_send(chan, vkins_status->time_boot_ms, vkins_status->nav_status, vkins_status->s_flag1, vkins_status->s_flag2, vkins_status->s_flag3, vkins_status->s_flag4, vkins_status->s_flag5, vkins_status->s_flag6, vkins_status->mag_calib_stage, vkins_status->g0, vkins_status->raw_latitude, vkins_status->raw_longitude, vkins_status->baro_alt, vkins_status->raw_gps_alt, vkins_status->solv_psat_num, vkins_status->solv_hsat_num, vkins_status->temperature, vkins_status->vibe_coe);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKINS_STATUS, (const char *)vkins_status, MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKINS_STATUS_LEN, MAVLINK_MSG_ID_VKINS_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VKINS_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_vkins_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint8_t nav_status, uint8_t s_flag1, uint8_t s_flag2, uint8_t s_flag3, uint8_t s_flag4, uint8_t s_flag5, uint8_t s_flag6, uint8_t mag_calib_stage, float g0, int32_t raw_latitude, int32_t raw_longitude, float baro_alt, float raw_gps_alt, uint8_t solv_psat_num, uint8_t solv_hsat_num, int16_t temperature, uint8_t vibe_coe)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, g0);
+    _mav_put_int32_t(buf, 8, raw_latitude);
+    _mav_put_int32_t(buf, 12, raw_longitude);
+    _mav_put_float(buf, 16, baro_alt);
+    _mav_put_float(buf, 20, raw_gps_alt);
+    _mav_put_int16_t(buf, 24, temperature);
+    _mav_put_uint8_t(buf, 26, nav_status);
+    _mav_put_uint8_t(buf, 27, s_flag1);
+    _mav_put_uint8_t(buf, 28, s_flag2);
+    _mav_put_uint8_t(buf, 29, s_flag3);
+    _mav_put_uint8_t(buf, 30, s_flag4);
+    _mav_put_uint8_t(buf, 31, s_flag5);
+    _mav_put_uint8_t(buf, 32, s_flag6);
+    _mav_put_uint8_t(buf, 33, mag_calib_stage);
+    _mav_put_uint8_t(buf, 34, solv_psat_num);
+    _mav_put_uint8_t(buf, 35, solv_hsat_num);
+    _mav_put_uint8_t(buf, 36, vibe_coe);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKINS_STATUS, buf, MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKINS_STATUS_LEN, MAVLINK_MSG_ID_VKINS_STATUS_CRC);
+#else
+    mavlink_vkins_status_t *packet = (mavlink_vkins_status_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->g0 = g0;
+    packet->raw_latitude = raw_latitude;
+    packet->raw_longitude = raw_longitude;
+    packet->baro_alt = baro_alt;
+    packet->raw_gps_alt = raw_gps_alt;
+    packet->temperature = temperature;
+    packet->nav_status = nav_status;
+    packet->s_flag1 = s_flag1;
+    packet->s_flag2 = s_flag2;
+    packet->s_flag3 = s_flag3;
+    packet->s_flag4 = s_flag4;
+    packet->s_flag5 = s_flag5;
+    packet->s_flag6 = s_flag6;
+    packet->mag_calib_stage = mag_calib_stage;
+    packet->solv_psat_num = solv_psat_num;
+    packet->solv_hsat_num = solv_hsat_num;
+    packet->vibe_coe = vibe_coe;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VKINS_STATUS, (const char *)packet, MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN, MAVLINK_MSG_ID_VKINS_STATUS_LEN, MAVLINK_MSG_ID_VKINS_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VKINS_STATUS UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from vkins_status message
+ *
+ * @return [ms] Timestamp in ms from system boot.
+ */
+static inline uint32_t mavlink_msg_vkins_status_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field nav_status from vkins_status message
+ *
+ * @return  VKINS
+        navigation status flag.
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_nav_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  26);
+}
+
+/**
+ * @brief Get field s_flag1 from vkins_status message
+ *
+ * @return  vinks flag1
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_s_flag1(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  27);
+}
+
+/**
+ * @brief Get field s_flag2 from vkins_status message
+ *
+ * @return  vinks flag2.
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_s_flag2(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  28);
+}
+
+/**
+ * @brief Get field s_flag3 from vkins_status message
+ *
+ * @return  vinks flag3.
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_s_flag3(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  29);
+}
+
+/**
+ * @brief Get field s_flag4 from vkins_status message
+ *
+ * @return  vinks flag4.
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_s_flag4(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field s_flag5 from vkins_status message
+ *
+ * @return  vinks flag5.
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_s_flag5(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  31);
+}
+
+/**
+ * @brief Get field s_flag6 from vkins_status message
+ *
+ * @return  vinks flag6.
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_s_flag6(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field mag_calib_stage from vkins_status message
+ *
+ * @return  vkins mag calib
+        stage.
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_mag_calib_stage(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field g0 from vkins_status message
+ *
+ * @return [m/s/s] vkins initial calibrated gravitation acceleration.
+ */
+static inline float mavlink_msg_vkins_status_get_g0(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field raw_latitude from vkins_status message
+ *
+ * @return [degE7] raw longitude for data fusion
+ */
+static inline int32_t mavlink_msg_vkins_status_get_raw_latitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field raw_longitude from vkins_status message
+ *
+ * @return [degE7] raw latitidue for data fusion
+ */
+static inline int32_t mavlink_msg_vkins_status_get_raw_longitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field baro_alt from vkins_status message
+ *
+ * @return [m] raw baromoter altitude for data fusion
+ */
+static inline float mavlink_msg_vkins_status_get_baro_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field raw_gps_alt from vkins_status message
+ *
+ * @return [m] gps amsl altitude for data fusion
+ */
+static inline float mavlink_msg_vkins_status_get_raw_gps_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field solv_psat_num from vkins_status message
+ *
+ * @return  satelites number for position
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_solv_psat_num(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field solv_hsat_num from vkins_status message
+ *
+ * @return  satelites number for heading
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_solv_hsat_num(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  35);
+}
+
+/**
+ * @brief Get field temperature from vkins_status message
+ *
+ * @return [cdegC] temperature
+ */
+static inline int16_t mavlink_msg_vkins_status_get_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  24);
+}
+
+/**
+ * @brief Get field vibe_coe from vkins_status message
+ *
+ * @return  
+ */
+static inline uint8_t mavlink_msg_vkins_status_get_vibe_coe(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  36);
+}
+
+/**
+ * @brief Decode a vkins_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param vkins_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vkins_status_decode(const mavlink_message_t* msg, mavlink_vkins_status_t* vkins_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vkins_status->time_boot_ms = mavlink_msg_vkins_status_get_time_boot_ms(msg);
+    vkins_status->g0 = mavlink_msg_vkins_status_get_g0(msg);
+    vkins_status->raw_latitude = mavlink_msg_vkins_status_get_raw_latitude(msg);
+    vkins_status->raw_longitude = mavlink_msg_vkins_status_get_raw_longitude(msg);
+    vkins_status->baro_alt = mavlink_msg_vkins_status_get_baro_alt(msg);
+    vkins_status->raw_gps_alt = mavlink_msg_vkins_status_get_raw_gps_alt(msg);
+    vkins_status->temperature = mavlink_msg_vkins_status_get_temperature(msg);
+    vkins_status->nav_status = mavlink_msg_vkins_status_get_nav_status(msg);
+    vkins_status->s_flag1 = mavlink_msg_vkins_status_get_s_flag1(msg);
+    vkins_status->s_flag2 = mavlink_msg_vkins_status_get_s_flag2(msg);
+    vkins_status->s_flag3 = mavlink_msg_vkins_status_get_s_flag3(msg);
+    vkins_status->s_flag4 = mavlink_msg_vkins_status_get_s_flag4(msg);
+    vkins_status->s_flag5 = mavlink_msg_vkins_status_get_s_flag5(msg);
+    vkins_status->s_flag6 = mavlink_msg_vkins_status_get_s_flag6(msg);
+    vkins_status->mag_calib_stage = mavlink_msg_vkins_status_get_mag_calib_stage(msg);
+    vkins_status->solv_psat_num = mavlink_msg_vkins_status_get_solv_psat_num(msg);
+    vkins_status->solv_hsat_num = mavlink_msg_vkins_status_get_solv_hsat_num(msg);
+    vkins_status->vibe_coe = mavlink_msg_vkins_status_get_vibe_coe(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VKINS_STATUS_LEN? msg->len : MAVLINK_MSG_ID_VKINS_STATUS_LEN;
+        memset(vkins_status, 0, MAVLINK_MSG_ID_VKINS_STATUS_LEN);
+    memcpy(vkins_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 176 - 0
v2.0/VKFly/testsuite.h

@@ -0,0 +1,176 @@
+/** @file
+ *    @brief MAVLink comm protocol testsuite generated from VKFly.xml
+ *    @see https://mavlink.io/en/
+ */
+#pragma once
+#ifndef VKFLY_TESTSUITE_H
+#define VKFLY_TESTSUITE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef MAVLINK_TEST_ALL
+#define MAVLINK_TEST_ALL
+static void mavlink_test_common(uint8_t, uint8_t, mavlink_message_t *last_msg);
+static void mavlink_test_VKFly(uint8_t, uint8_t, mavlink_message_t *last_msg);
+
+static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
+{
+    mavlink_test_common(system_id, component_id, last_msg);
+    mavlink_test_VKFly(system_id, component_id, last_msg);
+}
+#endif
+
+#include "../common/testsuite.h"
+
+
+static void mavlink_test_vkins_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
+{
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+    mavlink_status_t *status = mavlink_get_channel_status(MAVLINK_COMM_0);
+        if ((status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_VKINS_STATUS >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vkins_status_t packet_in = {
+        963497464,45.0,963497880,963498088,129.0,157.0,18483,211,22,89,156,223,34,101,168,235,46,113
+    };
+    mavlink_vkins_status_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.time_boot_ms = packet_in.time_boot_ms;
+        packet1.g0 = packet_in.g0;
+        packet1.raw_latitude = packet_in.raw_latitude;
+        packet1.raw_longitude = packet_in.raw_longitude;
+        packet1.baro_alt = packet_in.baro_alt;
+        packet1.raw_gps_alt = packet_in.raw_gps_alt;
+        packet1.temperature = packet_in.temperature;
+        packet1.nav_status = packet_in.nav_status;
+        packet1.s_flag1 = packet_in.s_flag1;
+        packet1.s_flag2 = packet_in.s_flag2;
+        packet1.s_flag3 = packet_in.s_flag3;
+        packet1.s_flag4 = packet_in.s_flag4;
+        packet1.s_flag5 = packet_in.s_flag5;
+        packet1.s_flag6 = packet_in.s_flag6;
+        packet1.mag_calib_stage = packet_in.mag_calib_stage;
+        packet1.solv_psat_num = packet_in.solv_psat_num;
+        packet1.solv_hsat_num = packet_in.solv_hsat_num;
+        packet1.vibe_coe = packet_in.vibe_coe;
+        
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VKINS_STATUS_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vkins_status_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vkins_status_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vkins_status_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.nav_status , packet1.s_flag1 , packet1.s_flag2 , packet1.s_flag3 , packet1.s_flag4 , packet1.s_flag5 , packet1.s_flag6 , packet1.mag_calib_stage , packet1.g0 , packet1.raw_latitude , packet1.raw_longitude , packet1.baro_alt , packet1.raw_gps_alt , packet1.solv_psat_num , packet1.solv_hsat_num , packet1.temperature , packet1.vibe_coe );
+    mavlink_msg_vkins_status_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vkins_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.nav_status , packet1.s_flag1 , packet1.s_flag2 , packet1.s_flag3 , packet1.s_flag4 , packet1.s_flag5 , packet1.s_flag6 , packet1.mag_calib_stage , packet1.g0 , packet1.raw_latitude , packet1.raw_longitude , packet1.baro_alt , packet1.raw_gps_alt , packet1.solv_psat_num , packet1.solv_hsat_num , packet1.temperature , packet1.vibe_coe );
+    mavlink_msg_vkins_status_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+        mavlink_msg_to_send_buffer(buffer, &msg);
+        for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
+            comm_send_ch(MAVLINK_COMM_0, buffer[i]);
+        }
+    mavlink_msg_vkins_status_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vkins_status_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.nav_status , packet1.s_flag1 , packet1.s_flag2 , packet1.s_flag3 , packet1.s_flag4 , packet1.s_flag5 , packet1.s_flag6 , packet1.mag_calib_stage , packet1.g0 , packet1.raw_latitude , packet1.raw_longitude , packet1.baro_alt , packet1.raw_gps_alt , packet1.solv_psat_num , packet1.solv_hsat_num , packet1.temperature , packet1.vibe_coe );
+    mavlink_msg_vkins_status_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+#ifdef MAVLINK_HAVE_GET_MESSAGE_INFO
+    MAVLINK_ASSERT(mavlink_get_message_info_by_name("VKINS_STATUS") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VKINS_STATUS) != NULL);
+#endif
+}
+
+static void mavlink_test_vkfmu_status(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
+{
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+    mavlink_status_t *status = mavlink_get_channel_status(MAVLINK_COMM_0);
+        if ((status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_VKFMU_STATUS >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vkfmu_status_t packet_in = {
+        963497464,17,84,151,218
+    };
+    mavlink_vkfmu_status_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.time_boot_ms = packet_in.time_boot_ms;
+        packet1.s_flag1 = packet_in.s_flag1;
+        packet1.s_flag2 = packet_in.s_flag2;
+        packet1.s_flag3 = packet_in.s_flag3;
+        packet1.s_flag4 = packet_in.s_flag4;
+        
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VKFMU_STATUS_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vkfmu_status_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vkfmu_status_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vkfmu_status_pack(system_id, component_id, &msg , packet1.time_boot_ms , packet1.s_flag1 , packet1.s_flag2 , packet1.s_flag3 , packet1.s_flag4 );
+    mavlink_msg_vkfmu_status_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vkfmu_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.time_boot_ms , packet1.s_flag1 , packet1.s_flag2 , packet1.s_flag3 , packet1.s_flag4 );
+    mavlink_msg_vkfmu_status_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+        mavlink_msg_to_send_buffer(buffer, &msg);
+        for (i=0; i<mavlink_msg_get_send_buffer_length(&msg); i++) {
+            comm_send_ch(MAVLINK_COMM_0, buffer[i]);
+        }
+    mavlink_msg_vkfmu_status_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vkfmu_status_send(MAVLINK_COMM_1 , packet1.time_boot_ms , packet1.s_flag1 , packet1.s_flag2 , packet1.s_flag3 , packet1.s_flag4 );
+    mavlink_msg_vkfmu_status_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+#ifdef MAVLINK_HAVE_GET_MESSAGE_INFO
+    MAVLINK_ASSERT(mavlink_get_message_info_by_name("VKFMU_STATUS") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VKFMU_STATUS) != NULL);
+#endif
+}
+
+static void mavlink_test_VKFly(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg)
+{
+    mavlink_test_vkins_status(system_id, component_id, last_msg);
+    mavlink_test_vkfmu_status(system_id, component_id, last_msg);
+}
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+#endif // VKFLY_TESTSUITE_H

+ 14 - 0
v2.0/VKFly/version.h

@@ -0,0 +1,14 @@
+/** @file
+ *  @brief MAVLink comm protocol built from VKFly.xml
+ *  @see http://mavlink.org
+ */
+#pragma once
+ 
+#ifndef MAVLINK_VERSION_H
+#define MAVLINK_VERSION_H
+
+#define MAVLINK_BUILD_DATE "Tue Apr 16 2024"
+#define MAVLINK_WIRE_PROTOCOL_VERSION "2.0"
+#define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 255
+ 
+#endif // MAVLINK_VERSION_H

+ 95 - 0
v2.0/checksum.h

@@ -0,0 +1,95 @@
+#pragma once
+
+#if defined(MAVLINK_USE_CXX_NAMESPACE)
+namespace mavlink {
+#elif defined(__cplusplus)
+extern "C" {
+#endif
+
+// Visual Studio versions before 2010 don't have stdint.h, so we just error out.
+#if (defined _MSC_VER) && (_MSC_VER < 1600)
+#error "The C-MAVLink implementation requires Visual Studio 2010 or greater"
+#endif
+
+#include <stdint.h>
+
+/**
+ *
+ *  CALCULATE THE CHECKSUM
+ *
+ */
+
+#define X25_INIT_CRC 0xffff
+#define X25_VALIDATE_CRC 0xf0b8
+
+#ifndef HAVE_CRC_ACCUMULATE
+/**
+ * @brief Accumulate the CRC16_MCRF4XX checksum by adding one char at a time.
+ *
+ * The checksum function adds the hash of one char at a time to the
+ * 16 bit checksum (uint16_t).
+ *
+ * @param data new char to hash
+ * @param crcAccum the already accumulated checksum
+ **/
+static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum)
+{
+        /*Accumulate one byte of data into the CRC*/
+        uint8_t tmp;
+
+        tmp = data ^ (uint8_t)(*crcAccum &0xff);
+        tmp ^= (tmp<<4);
+        *crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4);
+}
+#endif
+
+
+/**
+ * @brief Initialize the buffer for the MCRF4XX CRC16
+ *
+ * @param crcAccum the 16 bit MCRF4XX CRC16
+ */
+static inline void crc_init(uint16_t* crcAccum)
+{
+        *crcAccum = X25_INIT_CRC;
+}
+
+
+/**
+ * @brief Calculates the CRC16_MCRF4XX checksum on a byte buffer
+ *
+ * @param  pBuffer buffer containing the byte array to hash
+ * @param  length  length of the byte array
+ * @return the checksum over the buffer bytes
+ **/
+static inline uint16_t crc_calculate(const uint8_t* pBuffer, uint16_t length)
+{
+        uint16_t crcTmp;
+        crc_init(&crcTmp);
+	while (length--) {
+                crc_accumulate(*pBuffer++, &crcTmp);
+        }
+        return crcTmp;
+}
+
+
+/**
+ * @brief Accumulate the MCRF4XX CRC16 by adding an array of bytes
+ *
+ * The checksum function adds the hash of one char at a time to the
+ * 16 bit checksum (uint16_t).
+ *
+ * @param data new bytes to hash
+ * @param crcAccum the already accumulated checksum
+ **/
+static inline void crc_accumulate_buffer(uint16_t *crcAccum, const char *pBuffer, uint16_t length)
+{
+	const uint8_t *p = (const uint8_t *)pBuffer;
+	while (length--) {
+                crc_accumulate(*p++, crcAccum);
+        }
+}
+
+#if defined(MAVLINK_USE_CXX_NAMESPACE) || defined(__cplusplus)
+}
+#endif

File diff suppressed because it is too large
+ 25 - 0
v2.0/common/common.h


+ 34 - 0
v2.0/common/mavlink.h

@@ -0,0 +1,34 @@
+/** @file
+ *  @brief MAVLink comm protocol built from common.xml
+ *  @see http://mavlink.org
+ */
+#pragma once
+#ifndef MAVLINK_H
+#define MAVLINK_H
+
+#define MAVLINK_PRIMARY_XML_HASH -839295890051356236
+
+#ifndef MAVLINK_STX
+#define MAVLINK_STX 253
+#endif
+
+#ifndef MAVLINK_ENDIAN
+#define MAVLINK_ENDIAN MAVLINK_LITTLE_ENDIAN
+#endif
+
+#ifndef MAVLINK_ALIGNED_FIELDS
+#define MAVLINK_ALIGNED_FIELDS 1
+#endif
+
+#ifndef MAVLINK_CRC_EXTRA
+#define MAVLINK_CRC_EXTRA 1
+#endif
+
+#ifndef MAVLINK_COMMAND_24BIT
+#define MAVLINK_COMMAND_24BIT 1
+#endif
+
+#include "version.h"
+#include "common.h"
+
+#endif // MAVLINK_H

+ 255 - 0
v2.0/common/mavlink_msg_actuator_control_target.h

@@ -0,0 +1,255 @@
+#pragma once
+// MESSAGE ACTUATOR_CONTROL_TARGET PACKING
+
+#define MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET 140
+
+
+typedef struct __mavlink_actuator_control_target_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float controls[8]; /*<  Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs.*/
+ uint8_t group_mlx; /*<  Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances.*/
+} mavlink_actuator_control_target_t;
+
+#define MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN 41
+#define MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_MIN_LEN 41
+#define MAVLINK_MSG_ID_140_LEN 41
+#define MAVLINK_MSG_ID_140_MIN_LEN 41
+
+#define MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_CRC 181
+#define MAVLINK_MSG_ID_140_CRC 181
+
+#define MAVLINK_MSG_ACTUATOR_CONTROL_TARGET_FIELD_CONTROLS_LEN 8
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ACTUATOR_CONTROL_TARGET { \
+    140, \
+    "ACTUATOR_CONTROL_TARGET", \
+    3, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_actuator_control_target_t, time_usec) }, \
+         { "group_mlx", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_actuator_control_target_t, group_mlx) }, \
+         { "controls", NULL, MAVLINK_TYPE_FLOAT, 8, 8, offsetof(mavlink_actuator_control_target_t, controls) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ACTUATOR_CONTROL_TARGET { \
+    "ACTUATOR_CONTROL_TARGET", \
+    3, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_actuator_control_target_t, time_usec) }, \
+         { "group_mlx", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_actuator_control_target_t, group_mlx) }, \
+         { "controls", NULL, MAVLINK_TYPE_FLOAT, 8, 8, offsetof(mavlink_actuator_control_target_t, controls) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a actuator_control_target message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param group_mlx  Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances.
+ * @param controls  Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_actuator_control_target_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint8_t group_mlx, const float *controls)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint8_t(buf, 40, group_mlx);
+    _mav_put_float_array(buf, 8, controls, 8);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN);
+#else
+    mavlink_actuator_control_target_t packet;
+    packet.time_usec = time_usec;
+    packet.group_mlx = group_mlx;
+    mav_array_memcpy(packet.controls, controls, sizeof(float)*8);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_CRC);
+}
+
+/**
+ * @brief Pack a actuator_control_target message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param group_mlx  Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances.
+ * @param controls  Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_actuator_control_target_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint8_t group_mlx,const float *controls)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint8_t(buf, 40, group_mlx);
+    _mav_put_float_array(buf, 8, controls, 8);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN);
+#else
+    mavlink_actuator_control_target_t packet;
+    packet.time_usec = time_usec;
+    packet.group_mlx = group_mlx;
+    mav_array_memcpy(packet.controls, controls, sizeof(float)*8);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_CRC);
+}
+
+/**
+ * @brief Encode a actuator_control_target struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param actuator_control_target C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_actuator_control_target_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_actuator_control_target_t* actuator_control_target)
+{
+    return mavlink_msg_actuator_control_target_pack(system_id, component_id, msg, actuator_control_target->time_usec, actuator_control_target->group_mlx, actuator_control_target->controls);
+}
+
+/**
+ * @brief Encode a actuator_control_target struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param actuator_control_target C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_actuator_control_target_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_actuator_control_target_t* actuator_control_target)
+{
+    return mavlink_msg_actuator_control_target_pack_chan(system_id, component_id, chan, msg, actuator_control_target->time_usec, actuator_control_target->group_mlx, actuator_control_target->controls);
+}
+
+/**
+ * @brief Send a actuator_control_target message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param group_mlx  Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances.
+ * @param controls  Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_actuator_control_target_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t group_mlx, const float *controls)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint8_t(buf, 40, group_mlx);
+    _mav_put_float_array(buf, 8, controls, 8);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET, buf, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_CRC);
+#else
+    mavlink_actuator_control_target_t packet;
+    packet.time_usec = time_usec;
+    packet.group_mlx = group_mlx;
+    mav_array_memcpy(packet.controls, controls, sizeof(float)*8);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET, (const char *)&packet, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_CRC);
+#endif
+}
+
+/**
+ * @brief Send a actuator_control_target message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_actuator_control_target_send_struct(mavlink_channel_t chan, const mavlink_actuator_control_target_t* actuator_control_target)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_actuator_control_target_send(chan, actuator_control_target->time_usec, actuator_control_target->group_mlx, actuator_control_target->controls);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET, (const char *)actuator_control_target, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_actuator_control_target_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint8_t group_mlx, const float *controls)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint8_t(buf, 40, group_mlx);
+    _mav_put_float_array(buf, 8, controls, 8);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET, buf, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_CRC);
+#else
+    mavlink_actuator_control_target_t *packet = (mavlink_actuator_control_target_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->group_mlx = group_mlx;
+    mav_array_memcpy(packet->controls, controls, sizeof(float)*8);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET, (const char *)packet, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ACTUATOR_CONTROL_TARGET UNPACKING
+
+
+/**
+ * @brief Get field time_usec from actuator_control_target message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_actuator_control_target_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field group_mlx from actuator_control_target message
+ *
+ * @return  Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances.
+ */
+static inline uint8_t mavlink_msg_actuator_control_target_get_group_mlx(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  40);
+}
+
+/**
+ * @brief Get field controls from actuator_control_target message
+ *
+ * @return  Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs.
+ */
+static inline uint16_t mavlink_msg_actuator_control_target_get_controls(const mavlink_message_t* msg, float *controls)
+{
+    return _MAV_RETURN_float_array(msg, controls, 8,  8);
+}
+
+/**
+ * @brief Decode a actuator_control_target message into a struct
+ *
+ * @param msg The message to decode
+ * @param actuator_control_target C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_actuator_control_target_decode(const mavlink_message_t* msg, mavlink_actuator_control_target_t* actuator_control_target)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    actuator_control_target->time_usec = mavlink_msg_actuator_control_target_get_time_usec(msg);
+    mavlink_msg_actuator_control_target_get_controls(msg, actuator_control_target->controls);
+    actuator_control_target->group_mlx = mavlink_msg_actuator_control_target_get_group_mlx(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN? msg->len : MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN;
+        memset(actuator_control_target, 0, MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET_LEN);
+    memcpy(actuator_control_target, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 255 - 0
v2.0/common/mavlink_msg_actuator_output_status.h

@@ -0,0 +1,255 @@
+#pragma once
+// MESSAGE ACTUATOR_OUTPUT_STATUS PACKING
+
+#define MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS 375
+
+
+typedef struct __mavlink_actuator_output_status_t {
+ uint64_t time_usec; /*< [us] Timestamp (since system boot).*/
+ uint32_t active; /*<  Active outputs*/
+ float actuator[32]; /*<  Servo / motor output array values. Zero values indicate unused channels.*/
+} mavlink_actuator_output_status_t;
+
+#define MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN 140
+#define MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_MIN_LEN 140
+#define MAVLINK_MSG_ID_375_LEN 140
+#define MAVLINK_MSG_ID_375_MIN_LEN 140
+
+#define MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_CRC 251
+#define MAVLINK_MSG_ID_375_CRC 251
+
+#define MAVLINK_MSG_ACTUATOR_OUTPUT_STATUS_FIELD_ACTUATOR_LEN 32
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ACTUATOR_OUTPUT_STATUS { \
+    375, \
+    "ACTUATOR_OUTPUT_STATUS", \
+    3, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_actuator_output_status_t, time_usec) }, \
+         { "active", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_actuator_output_status_t, active) }, \
+         { "actuator", NULL, MAVLINK_TYPE_FLOAT, 32, 12, offsetof(mavlink_actuator_output_status_t, actuator) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ACTUATOR_OUTPUT_STATUS { \
+    "ACTUATOR_OUTPUT_STATUS", \
+    3, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_actuator_output_status_t, time_usec) }, \
+         { "active", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_actuator_output_status_t, active) }, \
+         { "actuator", NULL, MAVLINK_TYPE_FLOAT, 32, 12, offsetof(mavlink_actuator_output_status_t, actuator) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a actuator_output_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (since system boot).
+ * @param active  Active outputs
+ * @param actuator  Servo / motor output array values. Zero values indicate unused channels.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_actuator_output_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint32_t active, const float *actuator)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, active);
+    _mav_put_float_array(buf, 12, actuator, 32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN);
+#else
+    mavlink_actuator_output_status_t packet;
+    packet.time_usec = time_usec;
+    packet.active = active;
+    mav_array_memcpy(packet.actuator, actuator, sizeof(float)*32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a actuator_output_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (since system boot).
+ * @param active  Active outputs
+ * @param actuator  Servo / motor output array values. Zero values indicate unused channels.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_actuator_output_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint32_t active,const float *actuator)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, active);
+    _mav_put_float_array(buf, 12, actuator, 32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN);
+#else
+    mavlink_actuator_output_status_t packet;
+    packet.time_usec = time_usec;
+    packet.active = active;
+    mav_array_memcpy(packet.actuator, actuator, sizeof(float)*32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a actuator_output_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param actuator_output_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_actuator_output_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_actuator_output_status_t* actuator_output_status)
+{
+    return mavlink_msg_actuator_output_status_pack(system_id, component_id, msg, actuator_output_status->time_usec, actuator_output_status->active, actuator_output_status->actuator);
+}
+
+/**
+ * @brief Encode a actuator_output_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param actuator_output_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_actuator_output_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_actuator_output_status_t* actuator_output_status)
+{
+    return mavlink_msg_actuator_output_status_pack_chan(system_id, component_id, chan, msg, actuator_output_status->time_usec, actuator_output_status->active, actuator_output_status->actuator);
+}
+
+/**
+ * @brief Send a actuator_output_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (since system boot).
+ * @param active  Active outputs
+ * @param actuator  Servo / motor output array values. Zero values indicate unused channels.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_actuator_output_status_send(mavlink_channel_t chan, uint64_t time_usec, uint32_t active, const float *actuator)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, active);
+    _mav_put_float_array(buf, 12, actuator, 32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS, buf, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_CRC);
+#else
+    mavlink_actuator_output_status_t packet;
+    packet.time_usec = time_usec;
+    packet.active = active;
+    mav_array_memcpy(packet.actuator, actuator, sizeof(float)*32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS, (const char *)&packet, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a actuator_output_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_actuator_output_status_send_struct(mavlink_channel_t chan, const mavlink_actuator_output_status_t* actuator_output_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_actuator_output_status_send(chan, actuator_output_status->time_usec, actuator_output_status->active, actuator_output_status->actuator);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS, (const char *)actuator_output_status, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_actuator_output_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint32_t active, const float *actuator)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, active);
+    _mav_put_float_array(buf, 12, actuator, 32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS, buf, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_CRC);
+#else
+    mavlink_actuator_output_status_t *packet = (mavlink_actuator_output_status_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->active = active;
+    mav_array_memcpy(packet->actuator, actuator, sizeof(float)*32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS, (const char *)packet, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_MIN_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ACTUATOR_OUTPUT_STATUS UNPACKING
+
+
+/**
+ * @brief Get field time_usec from actuator_output_status message
+ *
+ * @return [us] Timestamp (since system boot).
+ */
+static inline uint64_t mavlink_msg_actuator_output_status_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field active from actuator_output_status message
+ *
+ * @return  Active outputs
+ */
+static inline uint32_t mavlink_msg_actuator_output_status_get_active(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  8);
+}
+
+/**
+ * @brief Get field actuator from actuator_output_status message
+ *
+ * @return  Servo / motor output array values. Zero values indicate unused channels.
+ */
+static inline uint16_t mavlink_msg_actuator_output_status_get_actuator(const mavlink_message_t* msg, float *actuator)
+{
+    return _MAV_RETURN_float_array(msg, actuator, 32,  12);
+}
+
+/**
+ * @brief Decode a actuator_output_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param actuator_output_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_actuator_output_status_decode(const mavlink_message_t* msg, mavlink_actuator_output_status_t* actuator_output_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    actuator_output_status->time_usec = mavlink_msg_actuator_output_status_get_time_usec(msg);
+    actuator_output_status->active = mavlink_msg_actuator_output_status_get_active(msg);
+    mavlink_msg_actuator_output_status_get_actuator(msg, actuator_output_status->actuator);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN? msg->len : MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN;
+        memset(actuator_output_status, 0, MAVLINK_MSG_ID_ACTUATOR_OUTPUT_STATUS_LEN);
+    memcpy(actuator_output_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 505 - 0
v2.0/common/mavlink_msg_adsb_vehicle.h

@@ -0,0 +1,505 @@
+#pragma once
+// MESSAGE ADSB_VEHICLE PACKING
+
+#define MAVLINK_MSG_ID_ADSB_VEHICLE 246
+
+
+typedef struct __mavlink_adsb_vehicle_t {
+ uint32_t ICAO_address; /*<  ICAO address*/
+ int32_t lat; /*< [degE7] Latitude*/
+ int32_t lon; /*< [degE7] Longitude*/
+ int32_t altitude; /*< [mm] Altitude(ASL)*/
+ uint16_t heading; /*< [cdeg] Course over ground*/
+ uint16_t hor_velocity; /*< [cm/s] The horizontal velocity*/
+ int16_t ver_velocity; /*< [cm/s] The vertical velocity. Positive is up*/
+ uint16_t flags; /*<  Bitmap to indicate various statuses including valid data fields*/
+ uint16_t squawk; /*<  Squawk code*/
+ uint8_t altitude_type; /*<  ADSB altitude type.*/
+ char callsign[9]; /*<  The callsign, 8+null*/
+ uint8_t emitter_type; /*<  ADSB emitter type.*/
+ uint8_t tslc; /*< [s] Time since last communication in seconds*/
+} mavlink_adsb_vehicle_t;
+
+#define MAVLINK_MSG_ID_ADSB_VEHICLE_LEN 38
+#define MAVLINK_MSG_ID_ADSB_VEHICLE_MIN_LEN 38
+#define MAVLINK_MSG_ID_246_LEN 38
+#define MAVLINK_MSG_ID_246_MIN_LEN 38
+
+#define MAVLINK_MSG_ID_ADSB_VEHICLE_CRC 184
+#define MAVLINK_MSG_ID_246_CRC 184
+
+#define MAVLINK_MSG_ADSB_VEHICLE_FIELD_CALLSIGN_LEN 9
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ADSB_VEHICLE { \
+    246, \
+    "ADSB_VEHICLE", \
+    13, \
+    {  { "ICAO_address", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_adsb_vehicle_t, ICAO_address) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_adsb_vehicle_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_adsb_vehicle_t, lon) }, \
+         { "altitude_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_adsb_vehicle_t, altitude_type) }, \
+         { "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_adsb_vehicle_t, altitude) }, \
+         { "heading", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_adsb_vehicle_t, heading) }, \
+         { "hor_velocity", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_adsb_vehicle_t, hor_velocity) }, \
+         { "ver_velocity", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_adsb_vehicle_t, ver_velocity) }, \
+         { "callsign", NULL, MAVLINK_TYPE_CHAR, 9, 27, offsetof(mavlink_adsb_vehicle_t, callsign) }, \
+         { "emitter_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_adsb_vehicle_t, emitter_type) }, \
+         { "tslc", NULL, MAVLINK_TYPE_UINT8_T, 0, 37, offsetof(mavlink_adsb_vehicle_t, tslc) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_adsb_vehicle_t, flags) }, \
+         { "squawk", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_adsb_vehicle_t, squawk) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ADSB_VEHICLE { \
+    "ADSB_VEHICLE", \
+    13, \
+    {  { "ICAO_address", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_adsb_vehicle_t, ICAO_address) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_adsb_vehicle_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_adsb_vehicle_t, lon) }, \
+         { "altitude_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_adsb_vehicle_t, altitude_type) }, \
+         { "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_adsb_vehicle_t, altitude) }, \
+         { "heading", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_adsb_vehicle_t, heading) }, \
+         { "hor_velocity", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_adsb_vehicle_t, hor_velocity) }, \
+         { "ver_velocity", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_adsb_vehicle_t, ver_velocity) }, \
+         { "callsign", NULL, MAVLINK_TYPE_CHAR, 9, 27, offsetof(mavlink_adsb_vehicle_t, callsign) }, \
+         { "emitter_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_adsb_vehicle_t, emitter_type) }, \
+         { "tslc", NULL, MAVLINK_TYPE_UINT8_T, 0, 37, offsetof(mavlink_adsb_vehicle_t, tslc) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_adsb_vehicle_t, flags) }, \
+         { "squawk", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_adsb_vehicle_t, squawk) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a adsb_vehicle message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param ICAO_address  ICAO address
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param altitude_type  ADSB altitude type.
+ * @param altitude [mm] Altitude(ASL)
+ * @param heading [cdeg] Course over ground
+ * @param hor_velocity [cm/s] The horizontal velocity
+ * @param ver_velocity [cm/s] The vertical velocity. Positive is up
+ * @param callsign  The callsign, 8+null
+ * @param emitter_type  ADSB emitter type.
+ * @param tslc [s] Time since last communication in seconds
+ * @param flags  Bitmap to indicate various statuses including valid data fields
+ * @param squawk  Squawk code
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t ICAO_address, int32_t lat, int32_t lon, uint8_t altitude_type, int32_t altitude, uint16_t heading, uint16_t hor_velocity, int16_t ver_velocity, const char *callsign, uint8_t emitter_type, uint8_t tslc, uint16_t flags, uint16_t squawk)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ADSB_VEHICLE_LEN];
+    _mav_put_uint32_t(buf, 0, ICAO_address);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_int32_t(buf, 12, altitude);
+    _mav_put_uint16_t(buf, 16, heading);
+    _mav_put_uint16_t(buf, 18, hor_velocity);
+    _mav_put_int16_t(buf, 20, ver_velocity);
+    _mav_put_uint16_t(buf, 22, flags);
+    _mav_put_uint16_t(buf, 24, squawk);
+    _mav_put_uint8_t(buf, 26, altitude_type);
+    _mav_put_uint8_t(buf, 36, emitter_type);
+    _mav_put_uint8_t(buf, 37, tslc);
+    _mav_put_char_array(buf, 27, callsign, 9);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN);
+#else
+    mavlink_adsb_vehicle_t packet;
+    packet.ICAO_address = ICAO_address;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.altitude = altitude;
+    packet.heading = heading;
+    packet.hor_velocity = hor_velocity;
+    packet.ver_velocity = ver_velocity;
+    packet.flags = flags;
+    packet.squawk = squawk;
+    packet.altitude_type = altitude_type;
+    packet.emitter_type = emitter_type;
+    packet.tslc = tslc;
+    mav_array_memcpy(packet.callsign, callsign, sizeof(char)*9);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ADSB_VEHICLE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ADSB_VEHICLE_MIN_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_CRC);
+}
+
+/**
+ * @brief Pack a adsb_vehicle message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param ICAO_address  ICAO address
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param altitude_type  ADSB altitude type.
+ * @param altitude [mm] Altitude(ASL)
+ * @param heading [cdeg] Course over ground
+ * @param hor_velocity [cm/s] The horizontal velocity
+ * @param ver_velocity [cm/s] The vertical velocity. Positive is up
+ * @param callsign  The callsign, 8+null
+ * @param emitter_type  ADSB emitter type.
+ * @param tslc [s] Time since last communication in seconds
+ * @param flags  Bitmap to indicate various statuses including valid data fields
+ * @param squawk  Squawk code
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t ICAO_address,int32_t lat,int32_t lon,uint8_t altitude_type,int32_t altitude,uint16_t heading,uint16_t hor_velocity,int16_t ver_velocity,const char *callsign,uint8_t emitter_type,uint8_t tslc,uint16_t flags,uint16_t squawk)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ADSB_VEHICLE_LEN];
+    _mav_put_uint32_t(buf, 0, ICAO_address);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_int32_t(buf, 12, altitude);
+    _mav_put_uint16_t(buf, 16, heading);
+    _mav_put_uint16_t(buf, 18, hor_velocity);
+    _mav_put_int16_t(buf, 20, ver_velocity);
+    _mav_put_uint16_t(buf, 22, flags);
+    _mav_put_uint16_t(buf, 24, squawk);
+    _mav_put_uint8_t(buf, 26, altitude_type);
+    _mav_put_uint8_t(buf, 36, emitter_type);
+    _mav_put_uint8_t(buf, 37, tslc);
+    _mav_put_char_array(buf, 27, callsign, 9);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN);
+#else
+    mavlink_adsb_vehicle_t packet;
+    packet.ICAO_address = ICAO_address;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.altitude = altitude;
+    packet.heading = heading;
+    packet.hor_velocity = hor_velocity;
+    packet.ver_velocity = ver_velocity;
+    packet.flags = flags;
+    packet.squawk = squawk;
+    packet.altitude_type = altitude_type;
+    packet.emitter_type = emitter_type;
+    packet.tslc = tslc;
+    mav_array_memcpy(packet.callsign, callsign, sizeof(char)*9);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ADSB_VEHICLE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ADSB_VEHICLE_MIN_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_CRC);
+}
+
+/**
+ * @brief Encode a adsb_vehicle struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param adsb_vehicle C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_adsb_vehicle_t* adsb_vehicle)
+{
+    return mavlink_msg_adsb_vehicle_pack(system_id, component_id, msg, adsb_vehicle->ICAO_address, adsb_vehicle->lat, adsb_vehicle->lon, adsb_vehicle->altitude_type, adsb_vehicle->altitude, adsb_vehicle->heading, adsb_vehicle->hor_velocity, adsb_vehicle->ver_velocity, adsb_vehicle->callsign, adsb_vehicle->emitter_type, adsb_vehicle->tslc, adsb_vehicle->flags, adsb_vehicle->squawk);
+}
+
+/**
+ * @brief Encode a adsb_vehicle struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param adsb_vehicle C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_adsb_vehicle_t* adsb_vehicle)
+{
+    return mavlink_msg_adsb_vehicle_pack_chan(system_id, component_id, chan, msg, adsb_vehicle->ICAO_address, adsb_vehicle->lat, adsb_vehicle->lon, adsb_vehicle->altitude_type, adsb_vehicle->altitude, adsb_vehicle->heading, adsb_vehicle->hor_velocity, adsb_vehicle->ver_velocity, adsb_vehicle->callsign, adsb_vehicle->emitter_type, adsb_vehicle->tslc, adsb_vehicle->flags, adsb_vehicle->squawk);
+}
+
+/**
+ * @brief Send a adsb_vehicle message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param ICAO_address  ICAO address
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param altitude_type  ADSB altitude type.
+ * @param altitude [mm] Altitude(ASL)
+ * @param heading [cdeg] Course over ground
+ * @param hor_velocity [cm/s] The horizontal velocity
+ * @param ver_velocity [cm/s] The vertical velocity. Positive is up
+ * @param callsign  The callsign, 8+null
+ * @param emitter_type  ADSB emitter type.
+ * @param tslc [s] Time since last communication in seconds
+ * @param flags  Bitmap to indicate various statuses including valid data fields
+ * @param squawk  Squawk code
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_adsb_vehicle_send(mavlink_channel_t chan, uint32_t ICAO_address, int32_t lat, int32_t lon, uint8_t altitude_type, int32_t altitude, uint16_t heading, uint16_t hor_velocity, int16_t ver_velocity, const char *callsign, uint8_t emitter_type, uint8_t tslc, uint16_t flags, uint16_t squawk)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ADSB_VEHICLE_LEN];
+    _mav_put_uint32_t(buf, 0, ICAO_address);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_int32_t(buf, 12, altitude);
+    _mav_put_uint16_t(buf, 16, heading);
+    _mav_put_uint16_t(buf, 18, hor_velocity);
+    _mav_put_int16_t(buf, 20, ver_velocity);
+    _mav_put_uint16_t(buf, 22, flags);
+    _mav_put_uint16_t(buf, 24, squawk);
+    _mav_put_uint8_t(buf, 26, altitude_type);
+    _mav_put_uint8_t(buf, 36, emitter_type);
+    _mav_put_uint8_t(buf, 37, tslc);
+    _mav_put_char_array(buf, 27, callsign, 9);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ADSB_VEHICLE, buf, MAVLINK_MSG_ID_ADSB_VEHICLE_MIN_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_CRC);
+#else
+    mavlink_adsb_vehicle_t packet;
+    packet.ICAO_address = ICAO_address;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.altitude = altitude;
+    packet.heading = heading;
+    packet.hor_velocity = hor_velocity;
+    packet.ver_velocity = ver_velocity;
+    packet.flags = flags;
+    packet.squawk = squawk;
+    packet.altitude_type = altitude_type;
+    packet.emitter_type = emitter_type;
+    packet.tslc = tslc;
+    mav_array_memcpy(packet.callsign, callsign, sizeof(char)*9);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ADSB_VEHICLE, (const char *)&packet, MAVLINK_MSG_ID_ADSB_VEHICLE_MIN_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a adsb_vehicle message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_adsb_vehicle_send_struct(mavlink_channel_t chan, const mavlink_adsb_vehicle_t* adsb_vehicle)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_adsb_vehicle_send(chan, adsb_vehicle->ICAO_address, adsb_vehicle->lat, adsb_vehicle->lon, adsb_vehicle->altitude_type, adsb_vehicle->altitude, adsb_vehicle->heading, adsb_vehicle->hor_velocity, adsb_vehicle->ver_velocity, adsb_vehicle->callsign, adsb_vehicle->emitter_type, adsb_vehicle->tslc, adsb_vehicle->flags, adsb_vehicle->squawk);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ADSB_VEHICLE, (const char *)adsb_vehicle, MAVLINK_MSG_ID_ADSB_VEHICLE_MIN_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ADSB_VEHICLE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_adsb_vehicle_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t ICAO_address, int32_t lat, int32_t lon, uint8_t altitude_type, int32_t altitude, uint16_t heading, uint16_t hor_velocity, int16_t ver_velocity, const char *callsign, uint8_t emitter_type, uint8_t tslc, uint16_t flags, uint16_t squawk)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, ICAO_address);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_int32_t(buf, 12, altitude);
+    _mav_put_uint16_t(buf, 16, heading);
+    _mav_put_uint16_t(buf, 18, hor_velocity);
+    _mav_put_int16_t(buf, 20, ver_velocity);
+    _mav_put_uint16_t(buf, 22, flags);
+    _mav_put_uint16_t(buf, 24, squawk);
+    _mav_put_uint8_t(buf, 26, altitude_type);
+    _mav_put_uint8_t(buf, 36, emitter_type);
+    _mav_put_uint8_t(buf, 37, tslc);
+    _mav_put_char_array(buf, 27, callsign, 9);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ADSB_VEHICLE, buf, MAVLINK_MSG_ID_ADSB_VEHICLE_MIN_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_CRC);
+#else
+    mavlink_adsb_vehicle_t *packet = (mavlink_adsb_vehicle_t *)msgbuf;
+    packet->ICAO_address = ICAO_address;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->altitude = altitude;
+    packet->heading = heading;
+    packet->hor_velocity = hor_velocity;
+    packet->ver_velocity = ver_velocity;
+    packet->flags = flags;
+    packet->squawk = squawk;
+    packet->altitude_type = altitude_type;
+    packet->emitter_type = emitter_type;
+    packet->tslc = tslc;
+    mav_array_memcpy(packet->callsign, callsign, sizeof(char)*9);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ADSB_VEHICLE, (const char *)packet, MAVLINK_MSG_ID_ADSB_VEHICLE_MIN_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN, MAVLINK_MSG_ID_ADSB_VEHICLE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ADSB_VEHICLE UNPACKING
+
+
+/**
+ * @brief Get field ICAO_address from adsb_vehicle message
+ *
+ * @return  ICAO address
+ */
+static inline uint32_t mavlink_msg_adsb_vehicle_get_ICAO_address(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field lat from adsb_vehicle message
+ *
+ * @return [degE7] Latitude
+ */
+static inline int32_t mavlink_msg_adsb_vehicle_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field lon from adsb_vehicle message
+ *
+ * @return [degE7] Longitude
+ */
+static inline int32_t mavlink_msg_adsb_vehicle_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field altitude_type from adsb_vehicle message
+ *
+ * @return  ADSB altitude type.
+ */
+static inline uint8_t mavlink_msg_adsb_vehicle_get_altitude_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  26);
+}
+
+/**
+ * @brief Get field altitude from adsb_vehicle message
+ *
+ * @return [mm] Altitude(ASL)
+ */
+static inline int32_t mavlink_msg_adsb_vehicle_get_altitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field heading from adsb_vehicle message
+ *
+ * @return [cdeg] Course over ground
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_get_heading(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  16);
+}
+
+/**
+ * @brief Get field hor_velocity from adsb_vehicle message
+ *
+ * @return [cm/s] The horizontal velocity
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_get_hor_velocity(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  18);
+}
+
+/**
+ * @brief Get field ver_velocity from adsb_vehicle message
+ *
+ * @return [cm/s] The vertical velocity. Positive is up
+ */
+static inline int16_t mavlink_msg_adsb_vehicle_get_ver_velocity(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  20);
+}
+
+/**
+ * @brief Get field callsign from adsb_vehicle message
+ *
+ * @return  The callsign, 8+null
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_get_callsign(const mavlink_message_t* msg, char *callsign)
+{
+    return _MAV_RETURN_char_array(msg, callsign, 9,  27);
+}
+
+/**
+ * @brief Get field emitter_type from adsb_vehicle message
+ *
+ * @return  ADSB emitter type.
+ */
+static inline uint8_t mavlink_msg_adsb_vehicle_get_emitter_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  36);
+}
+
+/**
+ * @brief Get field tslc from adsb_vehicle message
+ *
+ * @return [s] Time since last communication in seconds
+ */
+static inline uint8_t mavlink_msg_adsb_vehicle_get_tslc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  37);
+}
+
+/**
+ * @brief Get field flags from adsb_vehicle message
+ *
+ * @return  Bitmap to indicate various statuses including valid data fields
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  22);
+}
+
+/**
+ * @brief Get field squawk from adsb_vehicle message
+ *
+ * @return  Squawk code
+ */
+static inline uint16_t mavlink_msg_adsb_vehicle_get_squawk(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Decode a adsb_vehicle message into a struct
+ *
+ * @param msg The message to decode
+ * @param adsb_vehicle C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_adsb_vehicle_decode(const mavlink_message_t* msg, mavlink_adsb_vehicle_t* adsb_vehicle)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    adsb_vehicle->ICAO_address = mavlink_msg_adsb_vehicle_get_ICAO_address(msg);
+    adsb_vehicle->lat = mavlink_msg_adsb_vehicle_get_lat(msg);
+    adsb_vehicle->lon = mavlink_msg_adsb_vehicle_get_lon(msg);
+    adsb_vehicle->altitude = mavlink_msg_adsb_vehicle_get_altitude(msg);
+    adsb_vehicle->heading = mavlink_msg_adsb_vehicle_get_heading(msg);
+    adsb_vehicle->hor_velocity = mavlink_msg_adsb_vehicle_get_hor_velocity(msg);
+    adsb_vehicle->ver_velocity = mavlink_msg_adsb_vehicle_get_ver_velocity(msg);
+    adsb_vehicle->flags = mavlink_msg_adsb_vehicle_get_flags(msg);
+    adsb_vehicle->squawk = mavlink_msg_adsb_vehicle_get_squawk(msg);
+    adsb_vehicle->altitude_type = mavlink_msg_adsb_vehicle_get_altitude_type(msg);
+    mavlink_msg_adsb_vehicle_get_callsign(msg, adsb_vehicle->callsign);
+    adsb_vehicle->emitter_type = mavlink_msg_adsb_vehicle_get_emitter_type(msg);
+    adsb_vehicle->tslc = mavlink_msg_adsb_vehicle_get_tslc(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ADSB_VEHICLE_LEN? msg->len : MAVLINK_MSG_ID_ADSB_VEHICLE_LEN;
+        memset(adsb_vehicle, 0, MAVLINK_MSG_ID_ADSB_VEHICLE_LEN);
+    memcpy(adsb_vehicle, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 606 - 0
v2.0/common/mavlink_msg_ais_vessel.h

@@ -0,0 +1,606 @@
+#pragma once
+// MESSAGE AIS_VESSEL PACKING
+
+#define MAVLINK_MSG_ID_AIS_VESSEL 301
+
+
+typedef struct __mavlink_ais_vessel_t {
+ uint32_t MMSI; /*<  Mobile Marine Service Identifier, 9 decimal digits*/
+ int32_t lat; /*< [degE7] Latitude*/
+ int32_t lon; /*< [degE7] Longitude*/
+ uint16_t COG; /*< [cdeg] Course over ground*/
+ uint16_t heading; /*< [cdeg] True heading*/
+ uint16_t velocity; /*< [cm/s] Speed over ground*/
+ uint16_t dimension_bow; /*< [m] Distance from lat/lon location to bow*/
+ uint16_t dimension_stern; /*< [m] Distance from lat/lon location to stern*/
+ uint16_t tslc; /*< [s] Time since last communication in seconds*/
+ uint16_t flags; /*<  Bitmask to indicate various statuses including valid data fields*/
+ int8_t turn_rate; /*< [cdeg/s] Turn rate*/
+ uint8_t navigational_status; /*<  Navigational status*/
+ uint8_t type; /*<  Type of vessels*/
+ uint8_t dimension_port; /*< [m] Distance from lat/lon location to port side*/
+ uint8_t dimension_starboard; /*< [m] Distance from lat/lon location to starboard side*/
+ char callsign[7]; /*<  The vessel callsign*/
+ char name[20]; /*<  The vessel name*/
+} mavlink_ais_vessel_t;
+
+#define MAVLINK_MSG_ID_AIS_VESSEL_LEN 58
+#define MAVLINK_MSG_ID_AIS_VESSEL_MIN_LEN 58
+#define MAVLINK_MSG_ID_301_LEN 58
+#define MAVLINK_MSG_ID_301_MIN_LEN 58
+
+#define MAVLINK_MSG_ID_AIS_VESSEL_CRC 243
+#define MAVLINK_MSG_ID_301_CRC 243
+
+#define MAVLINK_MSG_AIS_VESSEL_FIELD_CALLSIGN_LEN 7
+#define MAVLINK_MSG_AIS_VESSEL_FIELD_NAME_LEN 20
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_AIS_VESSEL { \
+    301, \
+    "AIS_VESSEL", \
+    17, \
+    {  { "MMSI", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_ais_vessel_t, MMSI) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_ais_vessel_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_ais_vessel_t, lon) }, \
+         { "COG", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_ais_vessel_t, COG) }, \
+         { "heading", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_ais_vessel_t, heading) }, \
+         { "velocity", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_ais_vessel_t, velocity) }, \
+         { "turn_rate", NULL, MAVLINK_TYPE_INT8_T, 0, 26, offsetof(mavlink_ais_vessel_t, turn_rate) }, \
+         { "navigational_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_ais_vessel_t, navigational_status) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_ais_vessel_t, type) }, \
+         { "dimension_bow", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_ais_vessel_t, dimension_bow) }, \
+         { "dimension_stern", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_ais_vessel_t, dimension_stern) }, \
+         { "dimension_port", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_ais_vessel_t, dimension_port) }, \
+         { "dimension_starboard", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_ais_vessel_t, dimension_starboard) }, \
+         { "callsign", NULL, MAVLINK_TYPE_CHAR, 7, 31, offsetof(mavlink_ais_vessel_t, callsign) }, \
+         { "name", NULL, MAVLINK_TYPE_CHAR, 20, 38, offsetof(mavlink_ais_vessel_t, name) }, \
+         { "tslc", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_ais_vessel_t, tslc) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_ais_vessel_t, flags) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_AIS_VESSEL { \
+    "AIS_VESSEL", \
+    17, \
+    {  { "MMSI", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_ais_vessel_t, MMSI) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_ais_vessel_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_ais_vessel_t, lon) }, \
+         { "COG", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_ais_vessel_t, COG) }, \
+         { "heading", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_ais_vessel_t, heading) }, \
+         { "velocity", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_ais_vessel_t, velocity) }, \
+         { "turn_rate", NULL, MAVLINK_TYPE_INT8_T, 0, 26, offsetof(mavlink_ais_vessel_t, turn_rate) }, \
+         { "navigational_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_ais_vessel_t, navigational_status) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_ais_vessel_t, type) }, \
+         { "dimension_bow", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_ais_vessel_t, dimension_bow) }, \
+         { "dimension_stern", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_ais_vessel_t, dimension_stern) }, \
+         { "dimension_port", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_ais_vessel_t, dimension_port) }, \
+         { "dimension_starboard", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_ais_vessel_t, dimension_starboard) }, \
+         { "callsign", NULL, MAVLINK_TYPE_CHAR, 7, 31, offsetof(mavlink_ais_vessel_t, callsign) }, \
+         { "name", NULL, MAVLINK_TYPE_CHAR, 20, 38, offsetof(mavlink_ais_vessel_t, name) }, \
+         { "tslc", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_ais_vessel_t, tslc) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_ais_vessel_t, flags) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a ais_vessel message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param MMSI  Mobile Marine Service Identifier, 9 decimal digits
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param COG [cdeg] Course over ground
+ * @param heading [cdeg] True heading
+ * @param velocity [cm/s] Speed over ground
+ * @param turn_rate [cdeg/s] Turn rate
+ * @param navigational_status  Navigational status
+ * @param type  Type of vessels
+ * @param dimension_bow [m] Distance from lat/lon location to bow
+ * @param dimension_stern [m] Distance from lat/lon location to stern
+ * @param dimension_port [m] Distance from lat/lon location to port side
+ * @param dimension_starboard [m] Distance from lat/lon location to starboard side
+ * @param callsign  The vessel callsign
+ * @param name  The vessel name
+ * @param tslc [s] Time since last communication in seconds
+ * @param flags  Bitmask to indicate various statuses including valid data fields
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_ais_vessel_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t MMSI, int32_t lat, int32_t lon, uint16_t COG, uint16_t heading, uint16_t velocity, int8_t turn_rate, uint8_t navigational_status, uint8_t type, uint16_t dimension_bow, uint16_t dimension_stern, uint8_t dimension_port, uint8_t dimension_starboard, const char *callsign, const char *name, uint16_t tslc, uint16_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AIS_VESSEL_LEN];
+    _mav_put_uint32_t(buf, 0, MMSI);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_uint16_t(buf, 12, COG);
+    _mav_put_uint16_t(buf, 14, heading);
+    _mav_put_uint16_t(buf, 16, velocity);
+    _mav_put_uint16_t(buf, 18, dimension_bow);
+    _mav_put_uint16_t(buf, 20, dimension_stern);
+    _mav_put_uint16_t(buf, 22, tslc);
+    _mav_put_uint16_t(buf, 24, flags);
+    _mav_put_int8_t(buf, 26, turn_rate);
+    _mav_put_uint8_t(buf, 27, navigational_status);
+    _mav_put_uint8_t(buf, 28, type);
+    _mav_put_uint8_t(buf, 29, dimension_port);
+    _mav_put_uint8_t(buf, 30, dimension_starboard);
+    _mav_put_char_array(buf, 31, callsign, 7);
+    _mav_put_char_array(buf, 38, name, 20);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_AIS_VESSEL_LEN);
+#else
+    mavlink_ais_vessel_t packet;
+    packet.MMSI = MMSI;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.COG = COG;
+    packet.heading = heading;
+    packet.velocity = velocity;
+    packet.dimension_bow = dimension_bow;
+    packet.dimension_stern = dimension_stern;
+    packet.tslc = tslc;
+    packet.flags = flags;
+    packet.turn_rate = turn_rate;
+    packet.navigational_status = navigational_status;
+    packet.type = type;
+    packet.dimension_port = dimension_port;
+    packet.dimension_starboard = dimension_starboard;
+    mav_array_memcpy(packet.callsign, callsign, sizeof(char)*7);
+    mav_array_memcpy(packet.name, name, sizeof(char)*20);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_AIS_VESSEL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_AIS_VESSEL;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_AIS_VESSEL_MIN_LEN, MAVLINK_MSG_ID_AIS_VESSEL_LEN, MAVLINK_MSG_ID_AIS_VESSEL_CRC);
+}
+
+/**
+ * @brief Pack a ais_vessel message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param MMSI  Mobile Marine Service Identifier, 9 decimal digits
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param COG [cdeg] Course over ground
+ * @param heading [cdeg] True heading
+ * @param velocity [cm/s] Speed over ground
+ * @param turn_rate [cdeg/s] Turn rate
+ * @param navigational_status  Navigational status
+ * @param type  Type of vessels
+ * @param dimension_bow [m] Distance from lat/lon location to bow
+ * @param dimension_stern [m] Distance from lat/lon location to stern
+ * @param dimension_port [m] Distance from lat/lon location to port side
+ * @param dimension_starboard [m] Distance from lat/lon location to starboard side
+ * @param callsign  The vessel callsign
+ * @param name  The vessel name
+ * @param tslc [s] Time since last communication in seconds
+ * @param flags  Bitmask to indicate various statuses including valid data fields
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_ais_vessel_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t MMSI,int32_t lat,int32_t lon,uint16_t COG,uint16_t heading,uint16_t velocity,int8_t turn_rate,uint8_t navigational_status,uint8_t type,uint16_t dimension_bow,uint16_t dimension_stern,uint8_t dimension_port,uint8_t dimension_starboard,const char *callsign,const char *name,uint16_t tslc,uint16_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AIS_VESSEL_LEN];
+    _mav_put_uint32_t(buf, 0, MMSI);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_uint16_t(buf, 12, COG);
+    _mav_put_uint16_t(buf, 14, heading);
+    _mav_put_uint16_t(buf, 16, velocity);
+    _mav_put_uint16_t(buf, 18, dimension_bow);
+    _mav_put_uint16_t(buf, 20, dimension_stern);
+    _mav_put_uint16_t(buf, 22, tslc);
+    _mav_put_uint16_t(buf, 24, flags);
+    _mav_put_int8_t(buf, 26, turn_rate);
+    _mav_put_uint8_t(buf, 27, navigational_status);
+    _mav_put_uint8_t(buf, 28, type);
+    _mav_put_uint8_t(buf, 29, dimension_port);
+    _mav_put_uint8_t(buf, 30, dimension_starboard);
+    _mav_put_char_array(buf, 31, callsign, 7);
+    _mav_put_char_array(buf, 38, name, 20);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_AIS_VESSEL_LEN);
+#else
+    mavlink_ais_vessel_t packet;
+    packet.MMSI = MMSI;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.COG = COG;
+    packet.heading = heading;
+    packet.velocity = velocity;
+    packet.dimension_bow = dimension_bow;
+    packet.dimension_stern = dimension_stern;
+    packet.tslc = tslc;
+    packet.flags = flags;
+    packet.turn_rate = turn_rate;
+    packet.navigational_status = navigational_status;
+    packet.type = type;
+    packet.dimension_port = dimension_port;
+    packet.dimension_starboard = dimension_starboard;
+    mav_array_memcpy(packet.callsign, callsign, sizeof(char)*7);
+    mav_array_memcpy(packet.name, name, sizeof(char)*20);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_AIS_VESSEL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_AIS_VESSEL;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_AIS_VESSEL_MIN_LEN, MAVLINK_MSG_ID_AIS_VESSEL_LEN, MAVLINK_MSG_ID_AIS_VESSEL_CRC);
+}
+
+/**
+ * @brief Encode a ais_vessel struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param ais_vessel C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_ais_vessel_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ais_vessel_t* ais_vessel)
+{
+    return mavlink_msg_ais_vessel_pack(system_id, component_id, msg, ais_vessel->MMSI, ais_vessel->lat, ais_vessel->lon, ais_vessel->COG, ais_vessel->heading, ais_vessel->velocity, ais_vessel->turn_rate, ais_vessel->navigational_status, ais_vessel->type, ais_vessel->dimension_bow, ais_vessel->dimension_stern, ais_vessel->dimension_port, ais_vessel->dimension_starboard, ais_vessel->callsign, ais_vessel->name, ais_vessel->tslc, ais_vessel->flags);
+}
+
+/**
+ * @brief Encode a ais_vessel struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param ais_vessel C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_ais_vessel_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_ais_vessel_t* ais_vessel)
+{
+    return mavlink_msg_ais_vessel_pack_chan(system_id, component_id, chan, msg, ais_vessel->MMSI, ais_vessel->lat, ais_vessel->lon, ais_vessel->COG, ais_vessel->heading, ais_vessel->velocity, ais_vessel->turn_rate, ais_vessel->navigational_status, ais_vessel->type, ais_vessel->dimension_bow, ais_vessel->dimension_stern, ais_vessel->dimension_port, ais_vessel->dimension_starboard, ais_vessel->callsign, ais_vessel->name, ais_vessel->tslc, ais_vessel->flags);
+}
+
+/**
+ * @brief Send a ais_vessel message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param MMSI  Mobile Marine Service Identifier, 9 decimal digits
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param COG [cdeg] Course over ground
+ * @param heading [cdeg] True heading
+ * @param velocity [cm/s] Speed over ground
+ * @param turn_rate [cdeg/s] Turn rate
+ * @param navigational_status  Navigational status
+ * @param type  Type of vessels
+ * @param dimension_bow [m] Distance from lat/lon location to bow
+ * @param dimension_stern [m] Distance from lat/lon location to stern
+ * @param dimension_port [m] Distance from lat/lon location to port side
+ * @param dimension_starboard [m] Distance from lat/lon location to starboard side
+ * @param callsign  The vessel callsign
+ * @param name  The vessel name
+ * @param tslc [s] Time since last communication in seconds
+ * @param flags  Bitmask to indicate various statuses including valid data fields
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_ais_vessel_send(mavlink_channel_t chan, uint32_t MMSI, int32_t lat, int32_t lon, uint16_t COG, uint16_t heading, uint16_t velocity, int8_t turn_rate, uint8_t navigational_status, uint8_t type, uint16_t dimension_bow, uint16_t dimension_stern, uint8_t dimension_port, uint8_t dimension_starboard, const char *callsign, const char *name, uint16_t tslc, uint16_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AIS_VESSEL_LEN];
+    _mav_put_uint32_t(buf, 0, MMSI);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_uint16_t(buf, 12, COG);
+    _mav_put_uint16_t(buf, 14, heading);
+    _mav_put_uint16_t(buf, 16, velocity);
+    _mav_put_uint16_t(buf, 18, dimension_bow);
+    _mav_put_uint16_t(buf, 20, dimension_stern);
+    _mav_put_uint16_t(buf, 22, tslc);
+    _mav_put_uint16_t(buf, 24, flags);
+    _mav_put_int8_t(buf, 26, turn_rate);
+    _mav_put_uint8_t(buf, 27, navigational_status);
+    _mav_put_uint8_t(buf, 28, type);
+    _mav_put_uint8_t(buf, 29, dimension_port);
+    _mav_put_uint8_t(buf, 30, dimension_starboard);
+    _mav_put_char_array(buf, 31, callsign, 7);
+    _mav_put_char_array(buf, 38, name, 20);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AIS_VESSEL, buf, MAVLINK_MSG_ID_AIS_VESSEL_MIN_LEN, MAVLINK_MSG_ID_AIS_VESSEL_LEN, MAVLINK_MSG_ID_AIS_VESSEL_CRC);
+#else
+    mavlink_ais_vessel_t packet;
+    packet.MMSI = MMSI;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.COG = COG;
+    packet.heading = heading;
+    packet.velocity = velocity;
+    packet.dimension_bow = dimension_bow;
+    packet.dimension_stern = dimension_stern;
+    packet.tslc = tslc;
+    packet.flags = flags;
+    packet.turn_rate = turn_rate;
+    packet.navigational_status = navigational_status;
+    packet.type = type;
+    packet.dimension_port = dimension_port;
+    packet.dimension_starboard = dimension_starboard;
+    mav_array_memcpy(packet.callsign, callsign, sizeof(char)*7);
+    mav_array_memcpy(packet.name, name, sizeof(char)*20);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AIS_VESSEL, (const char *)&packet, MAVLINK_MSG_ID_AIS_VESSEL_MIN_LEN, MAVLINK_MSG_ID_AIS_VESSEL_LEN, MAVLINK_MSG_ID_AIS_VESSEL_CRC);
+#endif
+}
+
+/**
+ * @brief Send a ais_vessel message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_ais_vessel_send_struct(mavlink_channel_t chan, const mavlink_ais_vessel_t* ais_vessel)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_ais_vessel_send(chan, ais_vessel->MMSI, ais_vessel->lat, ais_vessel->lon, ais_vessel->COG, ais_vessel->heading, ais_vessel->velocity, ais_vessel->turn_rate, ais_vessel->navigational_status, ais_vessel->type, ais_vessel->dimension_bow, ais_vessel->dimension_stern, ais_vessel->dimension_port, ais_vessel->dimension_starboard, ais_vessel->callsign, ais_vessel->name, ais_vessel->tslc, ais_vessel->flags);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AIS_VESSEL, (const char *)ais_vessel, MAVLINK_MSG_ID_AIS_VESSEL_MIN_LEN, MAVLINK_MSG_ID_AIS_VESSEL_LEN, MAVLINK_MSG_ID_AIS_VESSEL_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_AIS_VESSEL_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_ais_vessel_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t MMSI, int32_t lat, int32_t lon, uint16_t COG, uint16_t heading, uint16_t velocity, int8_t turn_rate, uint8_t navigational_status, uint8_t type, uint16_t dimension_bow, uint16_t dimension_stern, uint8_t dimension_port, uint8_t dimension_starboard, const char *callsign, const char *name, uint16_t tslc, uint16_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, MMSI);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_uint16_t(buf, 12, COG);
+    _mav_put_uint16_t(buf, 14, heading);
+    _mav_put_uint16_t(buf, 16, velocity);
+    _mav_put_uint16_t(buf, 18, dimension_bow);
+    _mav_put_uint16_t(buf, 20, dimension_stern);
+    _mav_put_uint16_t(buf, 22, tslc);
+    _mav_put_uint16_t(buf, 24, flags);
+    _mav_put_int8_t(buf, 26, turn_rate);
+    _mav_put_uint8_t(buf, 27, navigational_status);
+    _mav_put_uint8_t(buf, 28, type);
+    _mav_put_uint8_t(buf, 29, dimension_port);
+    _mav_put_uint8_t(buf, 30, dimension_starboard);
+    _mav_put_char_array(buf, 31, callsign, 7);
+    _mav_put_char_array(buf, 38, name, 20);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AIS_VESSEL, buf, MAVLINK_MSG_ID_AIS_VESSEL_MIN_LEN, MAVLINK_MSG_ID_AIS_VESSEL_LEN, MAVLINK_MSG_ID_AIS_VESSEL_CRC);
+#else
+    mavlink_ais_vessel_t *packet = (mavlink_ais_vessel_t *)msgbuf;
+    packet->MMSI = MMSI;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->COG = COG;
+    packet->heading = heading;
+    packet->velocity = velocity;
+    packet->dimension_bow = dimension_bow;
+    packet->dimension_stern = dimension_stern;
+    packet->tslc = tslc;
+    packet->flags = flags;
+    packet->turn_rate = turn_rate;
+    packet->navigational_status = navigational_status;
+    packet->type = type;
+    packet->dimension_port = dimension_port;
+    packet->dimension_starboard = dimension_starboard;
+    mav_array_memcpy(packet->callsign, callsign, sizeof(char)*7);
+    mav_array_memcpy(packet->name, name, sizeof(char)*20);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AIS_VESSEL, (const char *)packet, MAVLINK_MSG_ID_AIS_VESSEL_MIN_LEN, MAVLINK_MSG_ID_AIS_VESSEL_LEN, MAVLINK_MSG_ID_AIS_VESSEL_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE AIS_VESSEL UNPACKING
+
+
+/**
+ * @brief Get field MMSI from ais_vessel message
+ *
+ * @return  Mobile Marine Service Identifier, 9 decimal digits
+ */
+static inline uint32_t mavlink_msg_ais_vessel_get_MMSI(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field lat from ais_vessel message
+ *
+ * @return [degE7] Latitude
+ */
+static inline int32_t mavlink_msg_ais_vessel_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field lon from ais_vessel message
+ *
+ * @return [degE7] Longitude
+ */
+static inline int32_t mavlink_msg_ais_vessel_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field COG from ais_vessel message
+ *
+ * @return [cdeg] Course over ground
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_COG(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  12);
+}
+
+/**
+ * @brief Get field heading from ais_vessel message
+ *
+ * @return [cdeg] True heading
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_heading(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  14);
+}
+
+/**
+ * @brief Get field velocity from ais_vessel message
+ *
+ * @return [cm/s] Speed over ground
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_velocity(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  16);
+}
+
+/**
+ * @brief Get field turn_rate from ais_vessel message
+ *
+ * @return [cdeg/s] Turn rate
+ */
+static inline int8_t mavlink_msg_ais_vessel_get_turn_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  26);
+}
+
+/**
+ * @brief Get field navigational_status from ais_vessel message
+ *
+ * @return  Navigational status
+ */
+static inline uint8_t mavlink_msg_ais_vessel_get_navigational_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  27);
+}
+
+/**
+ * @brief Get field type from ais_vessel message
+ *
+ * @return  Type of vessels
+ */
+static inline uint8_t mavlink_msg_ais_vessel_get_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  28);
+}
+
+/**
+ * @brief Get field dimension_bow from ais_vessel message
+ *
+ * @return [m] Distance from lat/lon location to bow
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_dimension_bow(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  18);
+}
+
+/**
+ * @brief Get field dimension_stern from ais_vessel message
+ *
+ * @return [m] Distance from lat/lon location to stern
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_dimension_stern(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  20);
+}
+
+/**
+ * @brief Get field dimension_port from ais_vessel message
+ *
+ * @return [m] Distance from lat/lon location to port side
+ */
+static inline uint8_t mavlink_msg_ais_vessel_get_dimension_port(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  29);
+}
+
+/**
+ * @brief Get field dimension_starboard from ais_vessel message
+ *
+ * @return [m] Distance from lat/lon location to starboard side
+ */
+static inline uint8_t mavlink_msg_ais_vessel_get_dimension_starboard(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field callsign from ais_vessel message
+ *
+ * @return  The vessel callsign
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_callsign(const mavlink_message_t* msg, char *callsign)
+{
+    return _MAV_RETURN_char_array(msg, callsign, 7,  31);
+}
+
+/**
+ * @brief Get field name from ais_vessel message
+ *
+ * @return  The vessel name
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_name(const mavlink_message_t* msg, char *name)
+{
+    return _MAV_RETURN_char_array(msg, name, 20,  38);
+}
+
+/**
+ * @brief Get field tslc from ais_vessel message
+ *
+ * @return [s] Time since last communication in seconds
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_tslc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  22);
+}
+
+/**
+ * @brief Get field flags from ais_vessel message
+ *
+ * @return  Bitmask to indicate various statuses including valid data fields
+ */
+static inline uint16_t mavlink_msg_ais_vessel_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Decode a ais_vessel message into a struct
+ *
+ * @param msg The message to decode
+ * @param ais_vessel C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_ais_vessel_decode(const mavlink_message_t* msg, mavlink_ais_vessel_t* ais_vessel)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    ais_vessel->MMSI = mavlink_msg_ais_vessel_get_MMSI(msg);
+    ais_vessel->lat = mavlink_msg_ais_vessel_get_lat(msg);
+    ais_vessel->lon = mavlink_msg_ais_vessel_get_lon(msg);
+    ais_vessel->COG = mavlink_msg_ais_vessel_get_COG(msg);
+    ais_vessel->heading = mavlink_msg_ais_vessel_get_heading(msg);
+    ais_vessel->velocity = mavlink_msg_ais_vessel_get_velocity(msg);
+    ais_vessel->dimension_bow = mavlink_msg_ais_vessel_get_dimension_bow(msg);
+    ais_vessel->dimension_stern = mavlink_msg_ais_vessel_get_dimension_stern(msg);
+    ais_vessel->tslc = mavlink_msg_ais_vessel_get_tslc(msg);
+    ais_vessel->flags = mavlink_msg_ais_vessel_get_flags(msg);
+    ais_vessel->turn_rate = mavlink_msg_ais_vessel_get_turn_rate(msg);
+    ais_vessel->navigational_status = mavlink_msg_ais_vessel_get_navigational_status(msg);
+    ais_vessel->type = mavlink_msg_ais_vessel_get_type(msg);
+    ais_vessel->dimension_port = mavlink_msg_ais_vessel_get_dimension_port(msg);
+    ais_vessel->dimension_starboard = mavlink_msg_ais_vessel_get_dimension_starboard(msg);
+    mavlink_msg_ais_vessel_get_callsign(msg, ais_vessel->callsign);
+    mavlink_msg_ais_vessel_get_name(msg, ais_vessel->name);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_AIS_VESSEL_LEN? msg->len : MAVLINK_MSG_ID_AIS_VESSEL_LEN;
+        memset(ais_vessel, 0, MAVLINK_MSG_ID_AIS_VESSEL_LEN);
+    memcpy(ais_vessel, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 363 - 0
v2.0/common/mavlink_msg_altitude.h

@@ -0,0 +1,363 @@
+#pragma once
+// MESSAGE ALTITUDE PACKING
+
+#define MAVLINK_MSG_ID_ALTITUDE 141
+
+
+typedef struct __mavlink_altitude_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float altitude_monotonic; /*< [m] This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights.*/
+ float altitude_amsl; /*< [m] This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output MSL by default and not the WGS84 altitude.*/
+ float altitude_local; /*< [m] This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive.*/
+ float altitude_relative; /*< [m] This is the altitude above the home position. It resets on each change of the current home position.*/
+ float altitude_terrain; /*< [m] This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown.*/
+ float bottom_clearance; /*< [m] This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available.*/
+} mavlink_altitude_t;
+
+#define MAVLINK_MSG_ID_ALTITUDE_LEN 32
+#define MAVLINK_MSG_ID_ALTITUDE_MIN_LEN 32
+#define MAVLINK_MSG_ID_141_LEN 32
+#define MAVLINK_MSG_ID_141_MIN_LEN 32
+
+#define MAVLINK_MSG_ID_ALTITUDE_CRC 47
+#define MAVLINK_MSG_ID_141_CRC 47
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ALTITUDE { \
+    141, \
+    "ALTITUDE", \
+    7, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_altitude_t, time_usec) }, \
+         { "altitude_monotonic", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_altitude_t, altitude_monotonic) }, \
+         { "altitude_amsl", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_altitude_t, altitude_amsl) }, \
+         { "altitude_local", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_altitude_t, altitude_local) }, \
+         { "altitude_relative", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_altitude_t, altitude_relative) }, \
+         { "altitude_terrain", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_altitude_t, altitude_terrain) }, \
+         { "bottom_clearance", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_altitude_t, bottom_clearance) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ALTITUDE { \
+    "ALTITUDE", \
+    7, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_altitude_t, time_usec) }, \
+         { "altitude_monotonic", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_altitude_t, altitude_monotonic) }, \
+         { "altitude_amsl", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_altitude_t, altitude_amsl) }, \
+         { "altitude_local", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_altitude_t, altitude_local) }, \
+         { "altitude_relative", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_altitude_t, altitude_relative) }, \
+         { "altitude_terrain", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_altitude_t, altitude_terrain) }, \
+         { "bottom_clearance", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_altitude_t, bottom_clearance) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a altitude message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param altitude_monotonic [m] This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights.
+ * @param altitude_amsl [m] This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output MSL by default and not the WGS84 altitude.
+ * @param altitude_local [m] This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive.
+ * @param altitude_relative [m] This is the altitude above the home position. It resets on each change of the current home position.
+ * @param altitude_terrain [m] This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown.
+ * @param bottom_clearance [m] This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_altitude_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, float altitude_monotonic, float altitude_amsl, float altitude_local, float altitude_relative, float altitude_terrain, float bottom_clearance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ALTITUDE_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, altitude_monotonic);
+    _mav_put_float(buf, 12, altitude_amsl);
+    _mav_put_float(buf, 16, altitude_local);
+    _mav_put_float(buf, 20, altitude_relative);
+    _mav_put_float(buf, 24, altitude_terrain);
+    _mav_put_float(buf, 28, bottom_clearance);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ALTITUDE_LEN);
+#else
+    mavlink_altitude_t packet;
+    packet.time_usec = time_usec;
+    packet.altitude_monotonic = altitude_monotonic;
+    packet.altitude_amsl = altitude_amsl;
+    packet.altitude_local = altitude_local;
+    packet.altitude_relative = altitude_relative;
+    packet.altitude_terrain = altitude_terrain;
+    packet.bottom_clearance = bottom_clearance;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ALTITUDE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ALTITUDE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ALTITUDE_MIN_LEN, MAVLINK_MSG_ID_ALTITUDE_LEN, MAVLINK_MSG_ID_ALTITUDE_CRC);
+}
+
+/**
+ * @brief Pack a altitude message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param altitude_monotonic [m] This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights.
+ * @param altitude_amsl [m] This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output MSL by default and not the WGS84 altitude.
+ * @param altitude_local [m] This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive.
+ * @param altitude_relative [m] This is the altitude above the home position. It resets on each change of the current home position.
+ * @param altitude_terrain [m] This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown.
+ * @param bottom_clearance [m] This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_altitude_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,float altitude_monotonic,float altitude_amsl,float altitude_local,float altitude_relative,float altitude_terrain,float bottom_clearance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ALTITUDE_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, altitude_monotonic);
+    _mav_put_float(buf, 12, altitude_amsl);
+    _mav_put_float(buf, 16, altitude_local);
+    _mav_put_float(buf, 20, altitude_relative);
+    _mav_put_float(buf, 24, altitude_terrain);
+    _mav_put_float(buf, 28, bottom_clearance);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ALTITUDE_LEN);
+#else
+    mavlink_altitude_t packet;
+    packet.time_usec = time_usec;
+    packet.altitude_monotonic = altitude_monotonic;
+    packet.altitude_amsl = altitude_amsl;
+    packet.altitude_local = altitude_local;
+    packet.altitude_relative = altitude_relative;
+    packet.altitude_terrain = altitude_terrain;
+    packet.bottom_clearance = bottom_clearance;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ALTITUDE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ALTITUDE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ALTITUDE_MIN_LEN, MAVLINK_MSG_ID_ALTITUDE_LEN, MAVLINK_MSG_ID_ALTITUDE_CRC);
+}
+
+/**
+ * @brief Encode a altitude struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param altitude C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_altitude_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_altitude_t* altitude)
+{
+    return mavlink_msg_altitude_pack(system_id, component_id, msg, altitude->time_usec, altitude->altitude_monotonic, altitude->altitude_amsl, altitude->altitude_local, altitude->altitude_relative, altitude->altitude_terrain, altitude->bottom_clearance);
+}
+
+/**
+ * @brief Encode a altitude struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param altitude C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_altitude_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_altitude_t* altitude)
+{
+    return mavlink_msg_altitude_pack_chan(system_id, component_id, chan, msg, altitude->time_usec, altitude->altitude_monotonic, altitude->altitude_amsl, altitude->altitude_local, altitude->altitude_relative, altitude->altitude_terrain, altitude->bottom_clearance);
+}
+
+/**
+ * @brief Send a altitude message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param altitude_monotonic [m] This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights.
+ * @param altitude_amsl [m] This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output MSL by default and not the WGS84 altitude.
+ * @param altitude_local [m] This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive.
+ * @param altitude_relative [m] This is the altitude above the home position. It resets on each change of the current home position.
+ * @param altitude_terrain [m] This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown.
+ * @param bottom_clearance [m] This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_altitude_send(mavlink_channel_t chan, uint64_t time_usec, float altitude_monotonic, float altitude_amsl, float altitude_local, float altitude_relative, float altitude_terrain, float bottom_clearance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ALTITUDE_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, altitude_monotonic);
+    _mav_put_float(buf, 12, altitude_amsl);
+    _mav_put_float(buf, 16, altitude_local);
+    _mav_put_float(buf, 20, altitude_relative);
+    _mav_put_float(buf, 24, altitude_terrain);
+    _mav_put_float(buf, 28, bottom_clearance);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ALTITUDE, buf, MAVLINK_MSG_ID_ALTITUDE_MIN_LEN, MAVLINK_MSG_ID_ALTITUDE_LEN, MAVLINK_MSG_ID_ALTITUDE_CRC);
+#else
+    mavlink_altitude_t packet;
+    packet.time_usec = time_usec;
+    packet.altitude_monotonic = altitude_monotonic;
+    packet.altitude_amsl = altitude_amsl;
+    packet.altitude_local = altitude_local;
+    packet.altitude_relative = altitude_relative;
+    packet.altitude_terrain = altitude_terrain;
+    packet.bottom_clearance = bottom_clearance;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ALTITUDE, (const char *)&packet, MAVLINK_MSG_ID_ALTITUDE_MIN_LEN, MAVLINK_MSG_ID_ALTITUDE_LEN, MAVLINK_MSG_ID_ALTITUDE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a altitude message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_altitude_send_struct(mavlink_channel_t chan, const mavlink_altitude_t* altitude)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_altitude_send(chan, altitude->time_usec, altitude->altitude_monotonic, altitude->altitude_amsl, altitude->altitude_local, altitude->altitude_relative, altitude->altitude_terrain, altitude->bottom_clearance);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ALTITUDE, (const char *)altitude, MAVLINK_MSG_ID_ALTITUDE_MIN_LEN, MAVLINK_MSG_ID_ALTITUDE_LEN, MAVLINK_MSG_ID_ALTITUDE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ALTITUDE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_altitude_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, float altitude_monotonic, float altitude_amsl, float altitude_local, float altitude_relative, float altitude_terrain, float bottom_clearance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, altitude_monotonic);
+    _mav_put_float(buf, 12, altitude_amsl);
+    _mav_put_float(buf, 16, altitude_local);
+    _mav_put_float(buf, 20, altitude_relative);
+    _mav_put_float(buf, 24, altitude_terrain);
+    _mav_put_float(buf, 28, bottom_clearance);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ALTITUDE, buf, MAVLINK_MSG_ID_ALTITUDE_MIN_LEN, MAVLINK_MSG_ID_ALTITUDE_LEN, MAVLINK_MSG_ID_ALTITUDE_CRC);
+#else
+    mavlink_altitude_t *packet = (mavlink_altitude_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->altitude_monotonic = altitude_monotonic;
+    packet->altitude_amsl = altitude_amsl;
+    packet->altitude_local = altitude_local;
+    packet->altitude_relative = altitude_relative;
+    packet->altitude_terrain = altitude_terrain;
+    packet->bottom_clearance = bottom_clearance;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ALTITUDE, (const char *)packet, MAVLINK_MSG_ID_ALTITUDE_MIN_LEN, MAVLINK_MSG_ID_ALTITUDE_LEN, MAVLINK_MSG_ID_ALTITUDE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ALTITUDE UNPACKING
+
+
+/**
+ * @brief Get field time_usec from altitude message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_altitude_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field altitude_monotonic from altitude message
+ *
+ * @return [m] This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights.
+ */
+static inline float mavlink_msg_altitude_get_altitude_monotonic(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field altitude_amsl from altitude message
+ *
+ * @return [m] This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output MSL by default and not the WGS84 altitude.
+ */
+static inline float mavlink_msg_altitude_get_altitude_amsl(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field altitude_local from altitude message
+ *
+ * @return [m] This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive.
+ */
+static inline float mavlink_msg_altitude_get_altitude_local(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field altitude_relative from altitude message
+ *
+ * @return [m] This is the altitude above the home position. It resets on each change of the current home position.
+ */
+static inline float mavlink_msg_altitude_get_altitude_relative(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field altitude_terrain from altitude message
+ *
+ * @return [m] This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown.
+ */
+static inline float mavlink_msg_altitude_get_altitude_terrain(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field bottom_clearance from altitude message
+ *
+ * @return [m] This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available.
+ */
+static inline float mavlink_msg_altitude_get_bottom_clearance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Decode a altitude message into a struct
+ *
+ * @param msg The message to decode
+ * @param altitude C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_altitude_decode(const mavlink_message_t* msg, mavlink_altitude_t* altitude)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    altitude->time_usec = mavlink_msg_altitude_get_time_usec(msg);
+    altitude->altitude_monotonic = mavlink_msg_altitude_get_altitude_monotonic(msg);
+    altitude->altitude_amsl = mavlink_msg_altitude_get_altitude_amsl(msg);
+    altitude->altitude_local = mavlink_msg_altitude_get_altitude_local(msg);
+    altitude->altitude_relative = mavlink_msg_altitude_get_altitude_relative(msg);
+    altitude->altitude_terrain = mavlink_msg_altitude_get_altitude_terrain(msg);
+    altitude->bottom_clearance = mavlink_msg_altitude_get_bottom_clearance(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ALTITUDE_LEN? msg->len : MAVLINK_MSG_ID_ALTITUDE_LEN;
+        memset(altitude, 0, MAVLINK_MSG_ID_ALTITUDE_LEN);
+    memcpy(altitude, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 331 - 0
v2.0/common/mavlink_msg_att_pos_mocap.h

@@ -0,0 +1,331 @@
+#pragma once
+// MESSAGE ATT_POS_MOCAP PACKING
+
+#define MAVLINK_MSG_ID_ATT_POS_MOCAP 138
+
+
+typedef struct __mavlink_att_pos_mocap_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float q[4]; /*<  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)*/
+ float x; /*< [m] X position (NED)*/
+ float y; /*< [m] Y position (NED)*/
+ float z; /*< [m] Z position (NED)*/
+ float covariance[21]; /*<  Row-major representation of a pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.*/
+} mavlink_att_pos_mocap_t;
+
+#define MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN 120
+#define MAVLINK_MSG_ID_ATT_POS_MOCAP_MIN_LEN 36
+#define MAVLINK_MSG_ID_138_LEN 120
+#define MAVLINK_MSG_ID_138_MIN_LEN 36
+
+#define MAVLINK_MSG_ID_ATT_POS_MOCAP_CRC 109
+#define MAVLINK_MSG_ID_138_CRC 109
+
+#define MAVLINK_MSG_ATT_POS_MOCAP_FIELD_Q_LEN 4
+#define MAVLINK_MSG_ATT_POS_MOCAP_FIELD_COVARIANCE_LEN 21
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ATT_POS_MOCAP { \
+    138, \
+    "ATT_POS_MOCAP", \
+    6, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_att_pos_mocap_t, time_usec) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 8, offsetof(mavlink_att_pos_mocap_t, q) }, \
+         { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_att_pos_mocap_t, x) }, \
+         { "y", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_att_pos_mocap_t, y) }, \
+         { "z", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_att_pos_mocap_t, z) }, \
+         { "covariance", NULL, MAVLINK_TYPE_FLOAT, 21, 36, offsetof(mavlink_att_pos_mocap_t, covariance) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ATT_POS_MOCAP { \
+    "ATT_POS_MOCAP", \
+    6, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_att_pos_mocap_t, time_usec) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 8, offsetof(mavlink_att_pos_mocap_t, q) }, \
+         { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_att_pos_mocap_t, x) }, \
+         { "y", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_att_pos_mocap_t, y) }, \
+         { "z", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_att_pos_mocap_t, z) }, \
+         { "covariance", NULL, MAVLINK_TYPE_FLOAT, 21, 36, offsetof(mavlink_att_pos_mocap_t, covariance) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a att_pos_mocap message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param q  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param x [m] X position (NED)
+ * @param y [m] Y position (NED)
+ * @param z [m] Z position (NED)
+ * @param covariance  Row-major representation of a pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_att_pos_mocap_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, const float *q, float x, float y, float z, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 24, x);
+    _mav_put_float(buf, 28, y);
+    _mav_put_float(buf, 32, z);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_put_float_array(buf, 36, covariance, 21);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN);
+#else
+    mavlink_att_pos_mocap_t packet;
+    packet.time_usec = time_usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*21);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATT_POS_MOCAP;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ATT_POS_MOCAP_MIN_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_CRC);
+}
+
+/**
+ * @brief Pack a att_pos_mocap message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param q  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param x [m] X position (NED)
+ * @param y [m] Y position (NED)
+ * @param z [m] Z position (NED)
+ * @param covariance  Row-major representation of a pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_att_pos_mocap_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,const float *q,float x,float y,float z,const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 24, x);
+    _mav_put_float(buf, 28, y);
+    _mav_put_float(buf, 32, z);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_put_float_array(buf, 36, covariance, 21);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN);
+#else
+    mavlink_att_pos_mocap_t packet;
+    packet.time_usec = time_usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*21);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATT_POS_MOCAP;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ATT_POS_MOCAP_MIN_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_CRC);
+}
+
+/**
+ * @brief Encode a att_pos_mocap struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param att_pos_mocap C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_att_pos_mocap_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_att_pos_mocap_t* att_pos_mocap)
+{
+    return mavlink_msg_att_pos_mocap_pack(system_id, component_id, msg, att_pos_mocap->time_usec, att_pos_mocap->q, att_pos_mocap->x, att_pos_mocap->y, att_pos_mocap->z, att_pos_mocap->covariance);
+}
+
+/**
+ * @brief Encode a att_pos_mocap struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param att_pos_mocap C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_att_pos_mocap_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_att_pos_mocap_t* att_pos_mocap)
+{
+    return mavlink_msg_att_pos_mocap_pack_chan(system_id, component_id, chan, msg, att_pos_mocap->time_usec, att_pos_mocap->q, att_pos_mocap->x, att_pos_mocap->y, att_pos_mocap->z, att_pos_mocap->covariance);
+}
+
+/**
+ * @brief Send a att_pos_mocap message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param q  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param x [m] X position (NED)
+ * @param y [m] Y position (NED)
+ * @param z [m] Z position (NED)
+ * @param covariance  Row-major representation of a pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_att_pos_mocap_send(mavlink_channel_t chan, uint64_t time_usec, const float *q, float x, float y, float z, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 24, x);
+    _mav_put_float(buf, 28, y);
+    _mav_put_float(buf, 32, z);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_put_float_array(buf, 36, covariance, 21);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_POS_MOCAP, buf, MAVLINK_MSG_ID_ATT_POS_MOCAP_MIN_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_CRC);
+#else
+    mavlink_att_pos_mocap_t packet;
+    packet.time_usec = time_usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*21);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_POS_MOCAP, (const char *)&packet, MAVLINK_MSG_ID_ATT_POS_MOCAP_MIN_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_CRC);
+#endif
+}
+
+/**
+ * @brief Send a att_pos_mocap message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_att_pos_mocap_send_struct(mavlink_channel_t chan, const mavlink_att_pos_mocap_t* att_pos_mocap)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_att_pos_mocap_send(chan, att_pos_mocap->time_usec, att_pos_mocap->q, att_pos_mocap->x, att_pos_mocap->y, att_pos_mocap->z, att_pos_mocap->covariance);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_POS_MOCAP, (const char *)att_pos_mocap, MAVLINK_MSG_ID_ATT_POS_MOCAP_MIN_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_att_pos_mocap_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, const float *q, float x, float y, float z, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 24, x);
+    _mav_put_float(buf, 28, y);
+    _mav_put_float(buf, 32, z);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_put_float_array(buf, 36, covariance, 21);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_POS_MOCAP, buf, MAVLINK_MSG_ID_ATT_POS_MOCAP_MIN_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_CRC);
+#else
+    mavlink_att_pos_mocap_t *packet = (mavlink_att_pos_mocap_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->x = x;
+    packet->y = y;
+    packet->z = z;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    mav_array_memcpy(packet->covariance, covariance, sizeof(float)*21);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATT_POS_MOCAP, (const char *)packet, MAVLINK_MSG_ID_ATT_POS_MOCAP_MIN_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN, MAVLINK_MSG_ID_ATT_POS_MOCAP_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ATT_POS_MOCAP UNPACKING
+
+
+/**
+ * @brief Get field time_usec from att_pos_mocap message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_att_pos_mocap_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field q from att_pos_mocap message
+ *
+ * @return  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ */
+static inline uint16_t mavlink_msg_att_pos_mocap_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  8);
+}
+
+/**
+ * @brief Get field x from att_pos_mocap message
+ *
+ * @return [m] X position (NED)
+ */
+static inline float mavlink_msg_att_pos_mocap_get_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field y from att_pos_mocap message
+ *
+ * @return [m] Y position (NED)
+ */
+static inline float mavlink_msg_att_pos_mocap_get_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field z from att_pos_mocap message
+ *
+ * @return [m] Z position (NED)
+ */
+static inline float mavlink_msg_att_pos_mocap_get_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field covariance from att_pos_mocap message
+ *
+ * @return  Row-major representation of a pose 6x6 cross-covariance matrix upper right triangle (states: x, y, z, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.
+ */
+static inline uint16_t mavlink_msg_att_pos_mocap_get_covariance(const mavlink_message_t* msg, float *covariance)
+{
+    return _MAV_RETURN_float_array(msg, covariance, 21,  36);
+}
+
+/**
+ * @brief Decode a att_pos_mocap message into a struct
+ *
+ * @param msg The message to decode
+ * @param att_pos_mocap C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_att_pos_mocap_decode(const mavlink_message_t* msg, mavlink_att_pos_mocap_t* att_pos_mocap)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    att_pos_mocap->time_usec = mavlink_msg_att_pos_mocap_get_time_usec(msg);
+    mavlink_msg_att_pos_mocap_get_q(msg, att_pos_mocap->q);
+    att_pos_mocap->x = mavlink_msg_att_pos_mocap_get_x(msg);
+    att_pos_mocap->y = mavlink_msg_att_pos_mocap_get_y(msg);
+    att_pos_mocap->z = mavlink_msg_att_pos_mocap_get_z(msg);
+    mavlink_msg_att_pos_mocap_get_covariance(msg, att_pos_mocap->covariance);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN? msg->len : MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN;
+        memset(att_pos_mocap, 0, MAVLINK_MSG_ID_ATT_POS_MOCAP_LEN);
+    memcpy(att_pos_mocap, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 363 - 0
v2.0/common/mavlink_msg_attitude.h

@@ -0,0 +1,363 @@
+#pragma once
+// MESSAGE ATTITUDE PACKING
+
+#define MAVLINK_MSG_ID_ATTITUDE 30
+
+
+typedef struct __mavlink_attitude_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ float roll; /*< [rad] Roll angle (-pi..+pi)*/
+ float pitch; /*< [rad] Pitch angle (-pi..+pi)*/
+ float yaw; /*< [rad] Yaw angle (-pi..+pi)*/
+ float rollspeed; /*< [rad/s] Roll angular speed*/
+ float pitchspeed; /*< [rad/s] Pitch angular speed*/
+ float yawspeed; /*< [rad/s] Yaw angular speed*/
+} mavlink_attitude_t;
+
+#define MAVLINK_MSG_ID_ATTITUDE_LEN 28
+#define MAVLINK_MSG_ID_ATTITUDE_MIN_LEN 28
+#define MAVLINK_MSG_ID_30_LEN 28
+#define MAVLINK_MSG_ID_30_MIN_LEN 28
+
+#define MAVLINK_MSG_ID_ATTITUDE_CRC 39
+#define MAVLINK_MSG_ID_30_CRC 39
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ATTITUDE { \
+    30, \
+    "ATTITUDE", \
+    7, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_attitude_t, time_boot_ms) }, \
+         { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_attitude_t, roll) }, \
+         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_attitude_t, pitch) }, \
+         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_attitude_t, yaw) }, \
+         { "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_attitude_t, rollspeed) }, \
+         { "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_t, pitchspeed) }, \
+         { "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_t, yawspeed) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ATTITUDE { \
+    "ATTITUDE", \
+    7, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_attitude_t, time_boot_ms) }, \
+         { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_attitude_t, roll) }, \
+         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_attitude_t, pitch) }, \
+         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_attitude_t, yaw) }, \
+         { "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_attitude_t, rollspeed) }, \
+         { "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_t, pitchspeed) }, \
+         { "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_t, yawspeed) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a attitude message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param roll [rad] Roll angle (-pi..+pi)
+ * @param pitch [rad] Pitch angle (-pi..+pi)
+ * @param yaw [rad] Yaw angle (-pi..+pi)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_attitude_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, roll);
+    _mav_put_float(buf, 8, pitch);
+    _mav_put_float(buf, 12, yaw);
+    _mav_put_float(buf, 16, rollspeed);
+    _mav_put_float(buf, 20, pitchspeed);
+    _mav_put_float(buf, 24, yawspeed);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATTITUDE_LEN);
+#else
+    mavlink_attitude_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATTITUDE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATTITUDE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_LEN, MAVLINK_MSG_ID_ATTITUDE_CRC);
+}
+
+/**
+ * @brief Pack a attitude message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param roll [rad] Roll angle (-pi..+pi)
+ * @param pitch [rad] Pitch angle (-pi..+pi)
+ * @param yaw [rad] Yaw angle (-pi..+pi)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_attitude_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,float roll,float pitch,float yaw,float rollspeed,float pitchspeed,float yawspeed)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, roll);
+    _mav_put_float(buf, 8, pitch);
+    _mav_put_float(buf, 12, yaw);
+    _mav_put_float(buf, 16, rollspeed);
+    _mav_put_float(buf, 20, pitchspeed);
+    _mav_put_float(buf, 24, yawspeed);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATTITUDE_LEN);
+#else
+    mavlink_attitude_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATTITUDE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATTITUDE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_LEN, MAVLINK_MSG_ID_ATTITUDE_CRC);
+}
+
+/**
+ * @brief Encode a attitude struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param attitude C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_attitude_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_attitude_t* attitude)
+{
+    return mavlink_msg_attitude_pack(system_id, component_id, msg, attitude->time_boot_ms, attitude->roll, attitude->pitch, attitude->yaw, attitude->rollspeed, attitude->pitchspeed, attitude->yawspeed);
+}
+
+/**
+ * @brief Encode a attitude struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param attitude C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_attitude_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_attitude_t* attitude)
+{
+    return mavlink_msg_attitude_pack_chan(system_id, component_id, chan, msg, attitude->time_boot_ms, attitude->roll, attitude->pitch, attitude->yaw, attitude->rollspeed, attitude->pitchspeed, attitude->yawspeed);
+}
+
+/**
+ * @brief Send a attitude message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param roll [rad] Roll angle (-pi..+pi)
+ * @param pitch [rad] Pitch angle (-pi..+pi)
+ * @param yaw [rad] Yaw angle (-pi..+pi)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_attitude_send(mavlink_channel_t chan, uint32_t time_boot_ms, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, roll);
+    _mav_put_float(buf, 8, pitch);
+    _mav_put_float(buf, 12, yaw);
+    _mav_put_float(buf, 16, rollspeed);
+    _mav_put_float(buf, 20, pitchspeed);
+    _mav_put_float(buf, 24, yawspeed);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, buf, MAVLINK_MSG_ID_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_LEN, MAVLINK_MSG_ID_ATTITUDE_CRC);
+#else
+    mavlink_attitude_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, (const char *)&packet, MAVLINK_MSG_ID_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_LEN, MAVLINK_MSG_ID_ATTITUDE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a attitude message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_attitude_send_struct(mavlink_channel_t chan, const mavlink_attitude_t* attitude)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_attitude_send(chan, attitude->time_boot_ms, attitude->roll, attitude->pitch, attitude->yaw, attitude->rollspeed, attitude->pitchspeed, attitude->yawspeed);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, (const char *)attitude, MAVLINK_MSG_ID_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_LEN, MAVLINK_MSG_ID_ATTITUDE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ATTITUDE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_attitude_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, float roll, float pitch, float yaw, float rollspeed, float pitchspeed, float yawspeed)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, roll);
+    _mav_put_float(buf, 8, pitch);
+    _mav_put_float(buf, 12, yaw);
+    _mav_put_float(buf, 16, rollspeed);
+    _mav_put_float(buf, 20, pitchspeed);
+    _mav_put_float(buf, 24, yawspeed);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, buf, MAVLINK_MSG_ID_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_LEN, MAVLINK_MSG_ID_ATTITUDE_CRC);
+#else
+    mavlink_attitude_t *packet = (mavlink_attitude_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->roll = roll;
+    packet->pitch = pitch;
+    packet->yaw = yaw;
+    packet->rollspeed = rollspeed;
+    packet->pitchspeed = pitchspeed;
+    packet->yawspeed = yawspeed;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE, (const char *)packet, MAVLINK_MSG_ID_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_LEN, MAVLINK_MSG_ID_ATTITUDE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ATTITUDE UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from attitude message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_attitude_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field roll from attitude message
+ *
+ * @return [rad] Roll angle (-pi..+pi)
+ */
+static inline float mavlink_msg_attitude_get_roll(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field pitch from attitude message
+ *
+ * @return [rad] Pitch angle (-pi..+pi)
+ */
+static inline float mavlink_msg_attitude_get_pitch(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field yaw from attitude message
+ *
+ * @return [rad] Yaw angle (-pi..+pi)
+ */
+static inline float mavlink_msg_attitude_get_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field rollspeed from attitude message
+ *
+ * @return [rad/s] Roll angular speed
+ */
+static inline float mavlink_msg_attitude_get_rollspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field pitchspeed from attitude message
+ *
+ * @return [rad/s] Pitch angular speed
+ */
+static inline float mavlink_msg_attitude_get_pitchspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field yawspeed from attitude message
+ *
+ * @return [rad/s] Yaw angular speed
+ */
+static inline float mavlink_msg_attitude_get_yawspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Decode a attitude message into a struct
+ *
+ * @param msg The message to decode
+ * @param attitude C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_attitude_decode(const mavlink_message_t* msg, mavlink_attitude_t* attitude)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    attitude->time_boot_ms = mavlink_msg_attitude_get_time_boot_ms(msg);
+    attitude->roll = mavlink_msg_attitude_get_roll(msg);
+    attitude->pitch = mavlink_msg_attitude_get_pitch(msg);
+    attitude->yaw = mavlink_msg_attitude_get_yaw(msg);
+    attitude->rollspeed = mavlink_msg_attitude_get_rollspeed(msg);
+    attitude->pitchspeed = mavlink_msg_attitude_get_pitchspeed(msg);
+    attitude->yawspeed = mavlink_msg_attitude_get_yawspeed(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ATTITUDE_LEN? msg->len : MAVLINK_MSG_ID_ATTITUDE_LEN;
+        memset(attitude, 0, MAVLINK_MSG_ID_ATTITUDE_LEN);
+    memcpy(attitude, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 405 - 0
v2.0/common/mavlink_msg_attitude_quaternion.h

@@ -0,0 +1,405 @@
+#pragma once
+// MESSAGE ATTITUDE_QUATERNION PACKING
+
+#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION 31
+
+
+typedef struct __mavlink_attitude_quaternion_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ float q1; /*<  Quaternion component 1, w (1 in null-rotation)*/
+ float q2; /*<  Quaternion component 2, x (0 in null-rotation)*/
+ float q3; /*<  Quaternion component 3, y (0 in null-rotation)*/
+ float q4; /*<  Quaternion component 4, z (0 in null-rotation)*/
+ float rollspeed; /*< [rad/s] Roll angular speed*/
+ float pitchspeed; /*< [rad/s] Pitch angular speed*/
+ float yawspeed; /*< [rad/s] Yaw angular speed*/
+ float repr_offset_q[4]; /*<  Rotation offset by which the attitude quaternion and angular speed vector should be rotated for user display (quaternion with [w, x, y, z] order, zero-rotation is [1, 0, 0, 0], send [0, 0, 0, 0] if field not supported). This field is intended for systems in which the reference attitude may change during flight. For example, tailsitters VTOLs rotate their reference attitude by 90 degrees between hover mode and fixed wing mode, thus repr_offset_q is equal to [1, 0, 0, 0] in hover mode and equal to [0.7071, 0, 0.7071, 0] in fixed wing mode.*/
+} mavlink_attitude_quaternion_t;
+
+#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN 48
+#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION_MIN_LEN 32
+#define MAVLINK_MSG_ID_31_LEN 48
+#define MAVLINK_MSG_ID_31_MIN_LEN 32
+
+#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION_CRC 246
+#define MAVLINK_MSG_ID_31_CRC 246
+
+#define MAVLINK_MSG_ATTITUDE_QUATERNION_FIELD_REPR_OFFSET_Q_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION { \
+    31, \
+    "ATTITUDE_QUATERNION", \
+    9, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_attitude_quaternion_t, time_boot_ms) }, \
+         { "q1", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_attitude_quaternion_t, q1) }, \
+         { "q2", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_attitude_quaternion_t, q2) }, \
+         { "q3", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_attitude_quaternion_t, q3) }, \
+         { "q4", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_attitude_quaternion_t, q4) }, \
+         { "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_quaternion_t, rollspeed) }, \
+         { "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_quaternion_t, pitchspeed) }, \
+         { "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_attitude_quaternion_t, yawspeed) }, \
+         { "repr_offset_q", NULL, MAVLINK_TYPE_FLOAT, 4, 32, offsetof(mavlink_attitude_quaternion_t, repr_offset_q) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION { \
+    "ATTITUDE_QUATERNION", \
+    9, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_attitude_quaternion_t, time_boot_ms) }, \
+         { "q1", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_attitude_quaternion_t, q1) }, \
+         { "q2", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_attitude_quaternion_t, q2) }, \
+         { "q3", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_attitude_quaternion_t, q3) }, \
+         { "q4", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_attitude_quaternion_t, q4) }, \
+         { "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_quaternion_t, rollspeed) }, \
+         { "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_quaternion_t, pitchspeed) }, \
+         { "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_attitude_quaternion_t, yawspeed) }, \
+         { "repr_offset_q", NULL, MAVLINK_TYPE_FLOAT, 4, 32, offsetof(mavlink_attitude_quaternion_t, repr_offset_q) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a attitude_quaternion message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param q1  Quaternion component 1, w (1 in null-rotation)
+ * @param q2  Quaternion component 2, x (0 in null-rotation)
+ * @param q3  Quaternion component 3, y (0 in null-rotation)
+ * @param q4  Quaternion component 4, z (0 in null-rotation)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ * @param repr_offset_q  Rotation offset by which the attitude quaternion and angular speed vector should be rotated for user display (quaternion with [w, x, y, z] order, zero-rotation is [1, 0, 0, 0], send [0, 0, 0, 0] if field not supported). This field is intended for systems in which the reference attitude may change during flight. For example, tailsitters VTOLs rotate their reference attitude by 90 degrees between hover mode and fixed wing mode, thus repr_offset_q is equal to [1, 0, 0, 0] in hover mode and equal to [0.7071, 0, 0.7071, 0] in fixed wing mode.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, float q1, float q2, float q3, float q4, float rollspeed, float pitchspeed, float yawspeed, const float *repr_offset_q)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, q1);
+    _mav_put_float(buf, 8, q2);
+    _mav_put_float(buf, 12, q3);
+    _mav_put_float(buf, 16, q4);
+    _mav_put_float(buf, 20, rollspeed);
+    _mav_put_float(buf, 24, pitchspeed);
+    _mav_put_float(buf, 28, yawspeed);
+    _mav_put_float_array(buf, 32, repr_offset_q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN);
+#else
+    mavlink_attitude_quaternion_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.q1 = q1;
+    packet.q2 = q2;
+    packet.q3 = q3;
+    packet.q4 = q4;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+    mav_array_memcpy(packet.repr_offset_q, repr_offset_q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATTITUDE_QUATERNION;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_CRC);
+}
+
+/**
+ * @brief Pack a attitude_quaternion message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param q1  Quaternion component 1, w (1 in null-rotation)
+ * @param q2  Quaternion component 2, x (0 in null-rotation)
+ * @param q3  Quaternion component 3, y (0 in null-rotation)
+ * @param q4  Quaternion component 4, z (0 in null-rotation)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ * @param repr_offset_q  Rotation offset by which the attitude quaternion and angular speed vector should be rotated for user display (quaternion with [w, x, y, z] order, zero-rotation is [1, 0, 0, 0], send [0, 0, 0, 0] if field not supported). This field is intended for systems in which the reference attitude may change during flight. For example, tailsitters VTOLs rotate their reference attitude by 90 degrees between hover mode and fixed wing mode, thus repr_offset_q is equal to [1, 0, 0, 0] in hover mode and equal to [0.7071, 0, 0.7071, 0] in fixed wing mode.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,float q1,float q2,float q3,float q4,float rollspeed,float pitchspeed,float yawspeed,const float *repr_offset_q)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, q1);
+    _mav_put_float(buf, 8, q2);
+    _mav_put_float(buf, 12, q3);
+    _mav_put_float(buf, 16, q4);
+    _mav_put_float(buf, 20, rollspeed);
+    _mav_put_float(buf, 24, pitchspeed);
+    _mav_put_float(buf, 28, yawspeed);
+    _mav_put_float_array(buf, 32, repr_offset_q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN);
+#else
+    mavlink_attitude_quaternion_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.q1 = q1;
+    packet.q2 = q2;
+    packet.q3 = q3;
+    packet.q4 = q4;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+    mav_array_memcpy(packet.repr_offset_q, repr_offset_q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATTITUDE_QUATERNION;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_CRC);
+}
+
+/**
+ * @brief Encode a attitude_quaternion struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param attitude_quaternion C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_attitude_quaternion_t* attitude_quaternion)
+{
+    return mavlink_msg_attitude_quaternion_pack(system_id, component_id, msg, attitude_quaternion->time_boot_ms, attitude_quaternion->q1, attitude_quaternion->q2, attitude_quaternion->q3, attitude_quaternion->q4, attitude_quaternion->rollspeed, attitude_quaternion->pitchspeed, attitude_quaternion->yawspeed, attitude_quaternion->repr_offset_q);
+}
+
+/**
+ * @brief Encode a attitude_quaternion struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param attitude_quaternion C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_attitude_quaternion_t* attitude_quaternion)
+{
+    return mavlink_msg_attitude_quaternion_pack_chan(system_id, component_id, chan, msg, attitude_quaternion->time_boot_ms, attitude_quaternion->q1, attitude_quaternion->q2, attitude_quaternion->q3, attitude_quaternion->q4, attitude_quaternion->rollspeed, attitude_quaternion->pitchspeed, attitude_quaternion->yawspeed, attitude_quaternion->repr_offset_q);
+}
+
+/**
+ * @brief Send a attitude_quaternion message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param q1  Quaternion component 1, w (1 in null-rotation)
+ * @param q2  Quaternion component 2, x (0 in null-rotation)
+ * @param q3  Quaternion component 3, y (0 in null-rotation)
+ * @param q4  Quaternion component 4, z (0 in null-rotation)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ * @param repr_offset_q  Rotation offset by which the attitude quaternion and angular speed vector should be rotated for user display (quaternion with [w, x, y, z] order, zero-rotation is [1, 0, 0, 0], send [0, 0, 0, 0] if field not supported). This field is intended for systems in which the reference attitude may change during flight. For example, tailsitters VTOLs rotate their reference attitude by 90 degrees between hover mode and fixed wing mode, thus repr_offset_q is equal to [1, 0, 0, 0] in hover mode and equal to [0.7071, 0, 0.7071, 0] in fixed wing mode.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_attitude_quaternion_send(mavlink_channel_t chan, uint32_t time_boot_ms, float q1, float q2, float q3, float q4, float rollspeed, float pitchspeed, float yawspeed, const float *repr_offset_q)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, q1);
+    _mav_put_float(buf, 8, q2);
+    _mav_put_float(buf, 12, q3);
+    _mav_put_float(buf, 16, q4);
+    _mav_put_float(buf, 20, rollspeed);
+    _mav_put_float(buf, 24, pitchspeed);
+    _mav_put_float(buf, 28, yawspeed);
+    _mav_put_float_array(buf, 32, repr_offset_q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION, buf, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_CRC);
+#else
+    mavlink_attitude_quaternion_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.q1 = q1;
+    packet.q2 = q2;
+    packet.q3 = q3;
+    packet.q4 = q4;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+    mav_array_memcpy(packet.repr_offset_q, repr_offset_q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION, (const char *)&packet, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_CRC);
+#endif
+}
+
+/**
+ * @brief Send a attitude_quaternion message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_attitude_quaternion_send_struct(mavlink_channel_t chan, const mavlink_attitude_quaternion_t* attitude_quaternion)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_attitude_quaternion_send(chan, attitude_quaternion->time_boot_ms, attitude_quaternion->q1, attitude_quaternion->q2, attitude_quaternion->q3, attitude_quaternion->q4, attitude_quaternion->rollspeed, attitude_quaternion->pitchspeed, attitude_quaternion->yawspeed, attitude_quaternion->repr_offset_q);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION, (const char *)attitude_quaternion, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_attitude_quaternion_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, float q1, float q2, float q3, float q4, float rollspeed, float pitchspeed, float yawspeed, const float *repr_offset_q)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, q1);
+    _mav_put_float(buf, 8, q2);
+    _mav_put_float(buf, 12, q3);
+    _mav_put_float(buf, 16, q4);
+    _mav_put_float(buf, 20, rollspeed);
+    _mav_put_float(buf, 24, pitchspeed);
+    _mav_put_float(buf, 28, yawspeed);
+    _mav_put_float_array(buf, 32, repr_offset_q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION, buf, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_CRC);
+#else
+    mavlink_attitude_quaternion_t *packet = (mavlink_attitude_quaternion_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->q1 = q1;
+    packet->q2 = q2;
+    packet->q3 = q3;
+    packet->q4 = q4;
+    packet->rollspeed = rollspeed;
+    packet->pitchspeed = pitchspeed;
+    packet->yawspeed = yawspeed;
+    mav_array_memcpy(packet->repr_offset_q, repr_offset_q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION, (const char *)packet, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ATTITUDE_QUATERNION UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from attitude_quaternion message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_attitude_quaternion_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field q1 from attitude_quaternion message
+ *
+ * @return  Quaternion component 1, w (1 in null-rotation)
+ */
+static inline float mavlink_msg_attitude_quaternion_get_q1(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field q2 from attitude_quaternion message
+ *
+ * @return  Quaternion component 2, x (0 in null-rotation)
+ */
+static inline float mavlink_msg_attitude_quaternion_get_q2(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field q3 from attitude_quaternion message
+ *
+ * @return  Quaternion component 3, y (0 in null-rotation)
+ */
+static inline float mavlink_msg_attitude_quaternion_get_q3(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field q4 from attitude_quaternion message
+ *
+ * @return  Quaternion component 4, z (0 in null-rotation)
+ */
+static inline float mavlink_msg_attitude_quaternion_get_q4(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field rollspeed from attitude_quaternion message
+ *
+ * @return [rad/s] Roll angular speed
+ */
+static inline float mavlink_msg_attitude_quaternion_get_rollspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field pitchspeed from attitude_quaternion message
+ *
+ * @return [rad/s] Pitch angular speed
+ */
+static inline float mavlink_msg_attitude_quaternion_get_pitchspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field yawspeed from attitude_quaternion message
+ *
+ * @return [rad/s] Yaw angular speed
+ */
+static inline float mavlink_msg_attitude_quaternion_get_yawspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field repr_offset_q from attitude_quaternion message
+ *
+ * @return  Rotation offset by which the attitude quaternion and angular speed vector should be rotated for user display (quaternion with [w, x, y, z] order, zero-rotation is [1, 0, 0, 0], send [0, 0, 0, 0] if field not supported). This field is intended for systems in which the reference attitude may change during flight. For example, tailsitters VTOLs rotate their reference attitude by 90 degrees between hover mode and fixed wing mode, thus repr_offset_q is equal to [1, 0, 0, 0] in hover mode and equal to [0.7071, 0, 0.7071, 0] in fixed wing mode.
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_get_repr_offset_q(const mavlink_message_t* msg, float *repr_offset_q)
+{
+    return _MAV_RETURN_float_array(msg, repr_offset_q, 4,  32);
+}
+
+/**
+ * @brief Decode a attitude_quaternion message into a struct
+ *
+ * @param msg The message to decode
+ * @param attitude_quaternion C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_attitude_quaternion_decode(const mavlink_message_t* msg, mavlink_attitude_quaternion_t* attitude_quaternion)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    attitude_quaternion->time_boot_ms = mavlink_msg_attitude_quaternion_get_time_boot_ms(msg);
+    attitude_quaternion->q1 = mavlink_msg_attitude_quaternion_get_q1(msg);
+    attitude_quaternion->q2 = mavlink_msg_attitude_quaternion_get_q2(msg);
+    attitude_quaternion->q3 = mavlink_msg_attitude_quaternion_get_q3(msg);
+    attitude_quaternion->q4 = mavlink_msg_attitude_quaternion_get_q4(msg);
+    attitude_quaternion->rollspeed = mavlink_msg_attitude_quaternion_get_rollspeed(msg);
+    attitude_quaternion->pitchspeed = mavlink_msg_attitude_quaternion_get_pitchspeed(msg);
+    attitude_quaternion->yawspeed = mavlink_msg_attitude_quaternion_get_yawspeed(msg);
+    mavlink_msg_attitude_quaternion_get_repr_offset_q(msg, attitude_quaternion->repr_offset_q);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN? msg->len : MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN;
+        memset(attitude_quaternion, 0, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN);
+    memcpy(attitude_quaternion, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 331 - 0
v2.0/common/mavlink_msg_attitude_quaternion_cov.h

@@ -0,0 +1,331 @@
+#pragma once
+// MESSAGE ATTITUDE_QUATERNION_COV PACKING
+
+#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV 61
+
+
+typedef struct __mavlink_attitude_quaternion_cov_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float q[4]; /*<  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)*/
+ float rollspeed; /*< [rad/s] Roll angular speed*/
+ float pitchspeed; /*< [rad/s] Pitch angular speed*/
+ float yawspeed; /*< [rad/s] Yaw angular speed*/
+ float covariance[9]; /*<  Row-major representation of a 3x3 attitude covariance matrix (states: roll, pitch, yaw; first three entries are the first ROW, next three entries are the second row, etc.). If unknown, assign NaN value to first element in the array.*/
+} mavlink_attitude_quaternion_cov_t;
+
+#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN 72
+#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_MIN_LEN 72
+#define MAVLINK_MSG_ID_61_LEN 72
+#define MAVLINK_MSG_ID_61_MIN_LEN 72
+
+#define MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_CRC 167
+#define MAVLINK_MSG_ID_61_CRC 167
+
+#define MAVLINK_MSG_ATTITUDE_QUATERNION_COV_FIELD_Q_LEN 4
+#define MAVLINK_MSG_ATTITUDE_QUATERNION_COV_FIELD_COVARIANCE_LEN 9
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION_COV { \
+    61, \
+    "ATTITUDE_QUATERNION_COV", \
+    6, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_attitude_quaternion_cov_t, time_usec) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 8, offsetof(mavlink_attitude_quaternion_cov_t, q) }, \
+         { "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_quaternion_cov_t, rollspeed) }, \
+         { "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_attitude_quaternion_cov_t, pitchspeed) }, \
+         { "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_attitude_quaternion_cov_t, yawspeed) }, \
+         { "covariance", NULL, MAVLINK_TYPE_FLOAT, 9, 36, offsetof(mavlink_attitude_quaternion_cov_t, covariance) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ATTITUDE_QUATERNION_COV { \
+    "ATTITUDE_QUATERNION_COV", \
+    6, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_attitude_quaternion_cov_t, time_usec) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 8, offsetof(mavlink_attitude_quaternion_cov_t, q) }, \
+         { "rollspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_quaternion_cov_t, rollspeed) }, \
+         { "pitchspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_attitude_quaternion_cov_t, pitchspeed) }, \
+         { "yawspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_attitude_quaternion_cov_t, yawspeed) }, \
+         { "covariance", NULL, MAVLINK_TYPE_FLOAT, 9, 36, offsetof(mavlink_attitude_quaternion_cov_t, covariance) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a attitude_quaternion_cov message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ * @param covariance  Row-major representation of a 3x3 attitude covariance matrix (states: roll, pitch, yaw; first three entries are the first ROW, next three entries are the second row, etc.). If unknown, assign NaN value to first element in the array.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_cov_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, const float *q, float rollspeed, float pitchspeed, float yawspeed, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 24, rollspeed);
+    _mav_put_float(buf, 28, pitchspeed);
+    _mav_put_float(buf, 32, yawspeed);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_put_float_array(buf, 36, covariance, 9);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN);
+#else
+    mavlink_attitude_quaternion_cov_t packet;
+    packet.time_usec = time_usec;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*9);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_CRC);
+}
+
+/**
+ * @brief Pack a attitude_quaternion_cov message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ * @param covariance  Row-major representation of a 3x3 attitude covariance matrix (states: roll, pitch, yaw; first three entries are the first ROW, next three entries are the second row, etc.). If unknown, assign NaN value to first element in the array.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_cov_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,const float *q,float rollspeed,float pitchspeed,float yawspeed,const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 24, rollspeed);
+    _mav_put_float(buf, 28, pitchspeed);
+    _mav_put_float(buf, 32, yawspeed);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_put_float_array(buf, 36, covariance, 9);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN);
+#else
+    mavlink_attitude_quaternion_cov_t packet;
+    packet.time_usec = time_usec;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*9);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_CRC);
+}
+
+/**
+ * @brief Encode a attitude_quaternion_cov struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param attitude_quaternion_cov C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_cov_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_attitude_quaternion_cov_t* attitude_quaternion_cov)
+{
+    return mavlink_msg_attitude_quaternion_cov_pack(system_id, component_id, msg, attitude_quaternion_cov->time_usec, attitude_quaternion_cov->q, attitude_quaternion_cov->rollspeed, attitude_quaternion_cov->pitchspeed, attitude_quaternion_cov->yawspeed, attitude_quaternion_cov->covariance);
+}
+
+/**
+ * @brief Encode a attitude_quaternion_cov struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param attitude_quaternion_cov C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_cov_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_attitude_quaternion_cov_t* attitude_quaternion_cov)
+{
+    return mavlink_msg_attitude_quaternion_cov_pack_chan(system_id, component_id, chan, msg, attitude_quaternion_cov->time_usec, attitude_quaternion_cov->q, attitude_quaternion_cov->rollspeed, attitude_quaternion_cov->pitchspeed, attitude_quaternion_cov->yawspeed, attitude_quaternion_cov->covariance);
+}
+
+/**
+ * @brief Send a attitude_quaternion_cov message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)
+ * @param rollspeed [rad/s] Roll angular speed
+ * @param pitchspeed [rad/s] Pitch angular speed
+ * @param yawspeed [rad/s] Yaw angular speed
+ * @param covariance  Row-major representation of a 3x3 attitude covariance matrix (states: roll, pitch, yaw; first three entries are the first ROW, next three entries are the second row, etc.). If unknown, assign NaN value to first element in the array.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_attitude_quaternion_cov_send(mavlink_channel_t chan, uint64_t time_usec, const float *q, float rollspeed, float pitchspeed, float yawspeed, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 24, rollspeed);
+    _mav_put_float(buf, 28, pitchspeed);
+    _mav_put_float(buf, 32, yawspeed);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_put_float_array(buf, 36, covariance, 9);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV, buf, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_CRC);
+#else
+    mavlink_attitude_quaternion_cov_t packet;
+    packet.time_usec = time_usec;
+    packet.rollspeed = rollspeed;
+    packet.pitchspeed = pitchspeed;
+    packet.yawspeed = yawspeed;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*9);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV, (const char *)&packet, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_CRC);
+#endif
+}
+
+/**
+ * @brief Send a attitude_quaternion_cov message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_attitude_quaternion_cov_send_struct(mavlink_channel_t chan, const mavlink_attitude_quaternion_cov_t* attitude_quaternion_cov)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_attitude_quaternion_cov_send(chan, attitude_quaternion_cov->time_usec, attitude_quaternion_cov->q, attitude_quaternion_cov->rollspeed, attitude_quaternion_cov->pitchspeed, attitude_quaternion_cov->yawspeed, attitude_quaternion_cov->covariance);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV, (const char *)attitude_quaternion_cov, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_attitude_quaternion_cov_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, const float *q, float rollspeed, float pitchspeed, float yawspeed, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 24, rollspeed);
+    _mav_put_float(buf, 28, pitchspeed);
+    _mav_put_float(buf, 32, yawspeed);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_put_float_array(buf, 36, covariance, 9);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV, buf, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_CRC);
+#else
+    mavlink_attitude_quaternion_cov_t *packet = (mavlink_attitude_quaternion_cov_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->rollspeed = rollspeed;
+    packet->pitchspeed = pitchspeed;
+    packet->yawspeed = yawspeed;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    mav_array_memcpy(packet->covariance, covariance, sizeof(float)*9);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV, (const char *)packet, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ATTITUDE_QUATERNION_COV UNPACKING
+
+
+/**
+ * @brief Get field time_usec from attitude_quaternion_cov message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_attitude_quaternion_cov_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field q from attitude_quaternion_cov message
+ *
+ * @return  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation)
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_cov_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  8);
+}
+
+/**
+ * @brief Get field rollspeed from attitude_quaternion_cov message
+ *
+ * @return [rad/s] Roll angular speed
+ */
+static inline float mavlink_msg_attitude_quaternion_cov_get_rollspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field pitchspeed from attitude_quaternion_cov message
+ *
+ * @return [rad/s] Pitch angular speed
+ */
+static inline float mavlink_msg_attitude_quaternion_cov_get_pitchspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field yawspeed from attitude_quaternion_cov message
+ *
+ * @return [rad/s] Yaw angular speed
+ */
+static inline float mavlink_msg_attitude_quaternion_cov_get_yawspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field covariance from attitude_quaternion_cov message
+ *
+ * @return  Row-major representation of a 3x3 attitude covariance matrix (states: roll, pitch, yaw; first three entries are the first ROW, next three entries are the second row, etc.). If unknown, assign NaN value to first element in the array.
+ */
+static inline uint16_t mavlink_msg_attitude_quaternion_cov_get_covariance(const mavlink_message_t* msg, float *covariance)
+{
+    return _MAV_RETURN_float_array(msg, covariance, 9,  36);
+}
+
+/**
+ * @brief Decode a attitude_quaternion_cov message into a struct
+ *
+ * @param msg The message to decode
+ * @param attitude_quaternion_cov C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_attitude_quaternion_cov_decode(const mavlink_message_t* msg, mavlink_attitude_quaternion_cov_t* attitude_quaternion_cov)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    attitude_quaternion_cov->time_usec = mavlink_msg_attitude_quaternion_cov_get_time_usec(msg);
+    mavlink_msg_attitude_quaternion_cov_get_q(msg, attitude_quaternion_cov->q);
+    attitude_quaternion_cov->rollspeed = mavlink_msg_attitude_quaternion_cov_get_rollspeed(msg);
+    attitude_quaternion_cov->pitchspeed = mavlink_msg_attitude_quaternion_cov_get_pitchspeed(msg);
+    attitude_quaternion_cov->yawspeed = mavlink_msg_attitude_quaternion_cov_get_yawspeed(msg);
+    mavlink_msg_attitude_quaternion_cov_get_covariance(msg, attitude_quaternion_cov->covariance);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN? msg->len : MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN;
+        memset(attitude_quaternion_cov, 0, MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV_LEN);
+    memcpy(attitude_quaternion_cov, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 355 - 0
v2.0/common/mavlink_msg_attitude_target.h

@@ -0,0 +1,355 @@
+#pragma once
+// MESSAGE ATTITUDE_TARGET PACKING
+
+#define MAVLINK_MSG_ID_ATTITUDE_TARGET 83
+
+
+typedef struct __mavlink_attitude_target_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ float q[4]; /*<  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)*/
+ float body_roll_rate; /*< [rad/s] Body roll rate*/
+ float body_pitch_rate; /*< [rad/s] Body pitch rate*/
+ float body_yaw_rate; /*< [rad/s] Body yaw rate*/
+ float thrust; /*<  Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)*/
+ uint8_t type_mask; /*<  Bitmap to indicate which dimensions should be ignored by the vehicle.*/
+} mavlink_attitude_target_t;
+
+#define MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN 37
+#define MAVLINK_MSG_ID_ATTITUDE_TARGET_MIN_LEN 37
+#define MAVLINK_MSG_ID_83_LEN 37
+#define MAVLINK_MSG_ID_83_MIN_LEN 37
+
+#define MAVLINK_MSG_ID_ATTITUDE_TARGET_CRC 22
+#define MAVLINK_MSG_ID_83_CRC 22
+
+#define MAVLINK_MSG_ATTITUDE_TARGET_FIELD_Q_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ATTITUDE_TARGET { \
+    83, \
+    "ATTITUDE_TARGET", \
+    7, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_attitude_target_t, time_boot_ms) }, \
+         { "type_mask", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_attitude_target_t, type_mask) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 4, offsetof(mavlink_attitude_target_t, q) }, \
+         { "body_roll_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_target_t, body_roll_rate) }, \
+         { "body_pitch_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_target_t, body_pitch_rate) }, \
+         { "body_yaw_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_attitude_target_t, body_yaw_rate) }, \
+         { "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_attitude_target_t, thrust) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ATTITUDE_TARGET { \
+    "ATTITUDE_TARGET", \
+    7, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_attitude_target_t, time_boot_ms) }, \
+         { "type_mask", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_attitude_target_t, type_mask) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 4, offsetof(mavlink_attitude_target_t, q) }, \
+         { "body_roll_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_attitude_target_t, body_roll_rate) }, \
+         { "body_pitch_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_attitude_target_t, body_pitch_rate) }, \
+         { "body_yaw_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_attitude_target_t, body_yaw_rate) }, \
+         { "thrust", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_attitude_target_t, thrust) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a attitude_target message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param type_mask  Bitmap to indicate which dimensions should be ignored by the vehicle.
+ * @param q  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param body_roll_rate [rad/s] Body roll rate
+ * @param body_pitch_rate [rad/s] Body pitch rate
+ * @param body_yaw_rate [rad/s] Body yaw rate
+ * @param thrust  Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_attitude_target_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint8_t type_mask, const float *q, float body_roll_rate, float body_pitch_rate, float body_yaw_rate, float thrust)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 20, body_roll_rate);
+    _mav_put_float(buf, 24, body_pitch_rate);
+    _mav_put_float(buf, 28, body_yaw_rate);
+    _mav_put_float(buf, 32, thrust);
+    _mav_put_uint8_t(buf, 36, type_mask);
+    _mav_put_float_array(buf, 4, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN);
+#else
+    mavlink_attitude_target_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.body_roll_rate = body_roll_rate;
+    packet.body_pitch_rate = body_pitch_rate;
+    packet.body_yaw_rate = body_yaw_rate;
+    packet.thrust = thrust;
+    packet.type_mask = type_mask;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATTITUDE_TARGET;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ATTITUDE_TARGET_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_CRC);
+}
+
+/**
+ * @brief Pack a attitude_target message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param type_mask  Bitmap to indicate which dimensions should be ignored by the vehicle.
+ * @param q  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param body_roll_rate [rad/s] Body roll rate
+ * @param body_pitch_rate [rad/s] Body pitch rate
+ * @param body_yaw_rate [rad/s] Body yaw rate
+ * @param thrust  Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_attitude_target_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint8_t type_mask,const float *q,float body_roll_rate,float body_pitch_rate,float body_yaw_rate,float thrust)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 20, body_roll_rate);
+    _mav_put_float(buf, 24, body_pitch_rate);
+    _mav_put_float(buf, 28, body_yaw_rate);
+    _mav_put_float(buf, 32, thrust);
+    _mav_put_uint8_t(buf, 36, type_mask);
+    _mav_put_float_array(buf, 4, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN);
+#else
+    mavlink_attitude_target_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.body_roll_rate = body_roll_rate;
+    packet.body_pitch_rate = body_pitch_rate;
+    packet.body_yaw_rate = body_yaw_rate;
+    packet.thrust = thrust;
+    packet.type_mask = type_mask;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ATTITUDE_TARGET;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ATTITUDE_TARGET_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_CRC);
+}
+
+/**
+ * @brief Encode a attitude_target struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param attitude_target C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_attitude_target_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_attitude_target_t* attitude_target)
+{
+    return mavlink_msg_attitude_target_pack(system_id, component_id, msg, attitude_target->time_boot_ms, attitude_target->type_mask, attitude_target->q, attitude_target->body_roll_rate, attitude_target->body_pitch_rate, attitude_target->body_yaw_rate, attitude_target->thrust);
+}
+
+/**
+ * @brief Encode a attitude_target struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param attitude_target C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_attitude_target_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_attitude_target_t* attitude_target)
+{
+    return mavlink_msg_attitude_target_pack_chan(system_id, component_id, chan, msg, attitude_target->time_boot_ms, attitude_target->type_mask, attitude_target->q, attitude_target->body_roll_rate, attitude_target->body_pitch_rate, attitude_target->body_yaw_rate, attitude_target->thrust);
+}
+
+/**
+ * @brief Send a attitude_target message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param type_mask  Bitmap to indicate which dimensions should be ignored by the vehicle.
+ * @param q  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param body_roll_rate [rad/s] Body roll rate
+ * @param body_pitch_rate [rad/s] Body pitch rate
+ * @param body_yaw_rate [rad/s] Body yaw rate
+ * @param thrust  Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_attitude_target_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t type_mask, const float *q, float body_roll_rate, float body_pitch_rate, float body_yaw_rate, float thrust)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 20, body_roll_rate);
+    _mav_put_float(buf, 24, body_pitch_rate);
+    _mav_put_float(buf, 28, body_yaw_rate);
+    _mav_put_float(buf, 32, thrust);
+    _mav_put_uint8_t(buf, 36, type_mask);
+    _mav_put_float_array(buf, 4, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_TARGET, buf, MAVLINK_MSG_ID_ATTITUDE_TARGET_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_CRC);
+#else
+    mavlink_attitude_target_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.body_roll_rate = body_roll_rate;
+    packet.body_pitch_rate = body_pitch_rate;
+    packet.body_yaw_rate = body_yaw_rate;
+    packet.thrust = thrust;
+    packet.type_mask = type_mask;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_TARGET, (const char *)&packet, MAVLINK_MSG_ID_ATTITUDE_TARGET_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_CRC);
+#endif
+}
+
+/**
+ * @brief Send a attitude_target message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_attitude_target_send_struct(mavlink_channel_t chan, const mavlink_attitude_target_t* attitude_target)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_attitude_target_send(chan, attitude_target->time_boot_ms, attitude_target->type_mask, attitude_target->q, attitude_target->body_roll_rate, attitude_target->body_pitch_rate, attitude_target->body_yaw_rate, attitude_target->thrust);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_TARGET, (const char *)attitude_target, MAVLINK_MSG_ID_ATTITUDE_TARGET_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_attitude_target_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint8_t type_mask, const float *q, float body_roll_rate, float body_pitch_rate, float body_yaw_rate, float thrust)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 20, body_roll_rate);
+    _mav_put_float(buf, 24, body_pitch_rate);
+    _mav_put_float(buf, 28, body_yaw_rate);
+    _mav_put_float(buf, 32, thrust);
+    _mav_put_uint8_t(buf, 36, type_mask);
+    _mav_put_float_array(buf, 4, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_TARGET, buf, MAVLINK_MSG_ID_ATTITUDE_TARGET_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_CRC);
+#else
+    mavlink_attitude_target_t *packet = (mavlink_attitude_target_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->body_roll_rate = body_roll_rate;
+    packet->body_pitch_rate = body_pitch_rate;
+    packet->body_yaw_rate = body_yaw_rate;
+    packet->thrust = thrust;
+    packet->type_mask = type_mask;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ATTITUDE_TARGET, (const char *)packet, MAVLINK_MSG_ID_ATTITUDE_TARGET_MIN_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN, MAVLINK_MSG_ID_ATTITUDE_TARGET_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ATTITUDE_TARGET UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from attitude_target message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_attitude_target_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field type_mask from attitude_target message
+ *
+ * @return  Bitmap to indicate which dimensions should be ignored by the vehicle.
+ */
+static inline uint8_t mavlink_msg_attitude_target_get_type_mask(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  36);
+}
+
+/**
+ * @brief Get field q from attitude_target message
+ *
+ * @return  Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ */
+static inline uint16_t mavlink_msg_attitude_target_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  4);
+}
+
+/**
+ * @brief Get field body_roll_rate from attitude_target message
+ *
+ * @return [rad/s] Body roll rate
+ */
+static inline float mavlink_msg_attitude_target_get_body_roll_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field body_pitch_rate from attitude_target message
+ *
+ * @return [rad/s] Body pitch rate
+ */
+static inline float mavlink_msg_attitude_target_get_body_pitch_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field body_yaw_rate from attitude_target message
+ *
+ * @return [rad/s] Body yaw rate
+ */
+static inline float mavlink_msg_attitude_target_get_body_yaw_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field thrust from attitude_target message
+ *
+ * @return  Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust)
+ */
+static inline float mavlink_msg_attitude_target_get_thrust(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Decode a attitude_target message into a struct
+ *
+ * @param msg The message to decode
+ * @param attitude_target C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_attitude_target_decode(const mavlink_message_t* msg, mavlink_attitude_target_t* attitude_target)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    attitude_target->time_boot_ms = mavlink_msg_attitude_target_get_time_boot_ms(msg);
+    mavlink_msg_attitude_target_get_q(msg, attitude_target->q);
+    attitude_target->body_roll_rate = mavlink_msg_attitude_target_get_body_roll_rate(msg);
+    attitude_target->body_pitch_rate = mavlink_msg_attitude_target_get_body_pitch_rate(msg);
+    attitude_target->body_yaw_rate = mavlink_msg_attitude_target_get_body_yaw_rate(msg);
+    attitude_target->thrust = mavlink_msg_attitude_target_get_thrust(msg);
+    attitude_target->type_mask = mavlink_msg_attitude_target_get_type_mask(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN? msg->len : MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN;
+        memset(attitude_target, 0, MAVLINK_MSG_ID_ATTITUDE_TARGET_LEN);
+    memcpy(attitude_target, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 213 - 0
v2.0/common/mavlink_msg_auth_key.h

@@ -0,0 +1,213 @@
+#pragma once
+// MESSAGE AUTH_KEY PACKING
+
+#define MAVLINK_MSG_ID_AUTH_KEY 7
+
+
+typedef struct __mavlink_auth_key_t {
+ char key[32]; /*<  key*/
+} mavlink_auth_key_t;
+
+#define MAVLINK_MSG_ID_AUTH_KEY_LEN 32
+#define MAVLINK_MSG_ID_AUTH_KEY_MIN_LEN 32
+#define MAVLINK_MSG_ID_7_LEN 32
+#define MAVLINK_MSG_ID_7_MIN_LEN 32
+
+#define MAVLINK_MSG_ID_AUTH_KEY_CRC 119
+#define MAVLINK_MSG_ID_7_CRC 119
+
+#define MAVLINK_MSG_AUTH_KEY_FIELD_KEY_LEN 32
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_AUTH_KEY { \
+    7, \
+    "AUTH_KEY", \
+    1, \
+    {  { "key", NULL, MAVLINK_TYPE_CHAR, 32, 0, offsetof(mavlink_auth_key_t, key) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_AUTH_KEY { \
+    "AUTH_KEY", \
+    1, \
+    {  { "key", NULL, MAVLINK_TYPE_CHAR, 32, 0, offsetof(mavlink_auth_key_t, key) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a auth_key message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param key  key
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_auth_key_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               const char *key)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTH_KEY_LEN];
+
+    _mav_put_char_array(buf, 0, key, 32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_AUTH_KEY_LEN);
+#else
+    mavlink_auth_key_t packet;
+
+    mav_array_memcpy(packet.key, key, sizeof(char)*32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_AUTH_KEY_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_AUTH_KEY;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_AUTH_KEY_MIN_LEN, MAVLINK_MSG_ID_AUTH_KEY_LEN, MAVLINK_MSG_ID_AUTH_KEY_CRC);
+}
+
+/**
+ * @brief Pack a auth_key message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param key  key
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_auth_key_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   const char *key)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTH_KEY_LEN];
+
+    _mav_put_char_array(buf, 0, key, 32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_AUTH_KEY_LEN);
+#else
+    mavlink_auth_key_t packet;
+
+    mav_array_memcpy(packet.key, key, sizeof(char)*32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_AUTH_KEY_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_AUTH_KEY;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_AUTH_KEY_MIN_LEN, MAVLINK_MSG_ID_AUTH_KEY_LEN, MAVLINK_MSG_ID_AUTH_KEY_CRC);
+}
+
+/**
+ * @brief Encode a auth_key struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param auth_key C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_auth_key_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_auth_key_t* auth_key)
+{
+    return mavlink_msg_auth_key_pack(system_id, component_id, msg, auth_key->key);
+}
+
+/**
+ * @brief Encode a auth_key struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param auth_key C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_auth_key_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_auth_key_t* auth_key)
+{
+    return mavlink_msg_auth_key_pack_chan(system_id, component_id, chan, msg, auth_key->key);
+}
+
+/**
+ * @brief Send a auth_key message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param key  key
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_auth_key_send(mavlink_channel_t chan, const char *key)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTH_KEY_LEN];
+
+    _mav_put_char_array(buf, 0, key, 32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, buf, MAVLINK_MSG_ID_AUTH_KEY_MIN_LEN, MAVLINK_MSG_ID_AUTH_KEY_LEN, MAVLINK_MSG_ID_AUTH_KEY_CRC);
+#else
+    mavlink_auth_key_t packet;
+
+    mav_array_memcpy(packet.key, key, sizeof(char)*32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, (const char *)&packet, MAVLINK_MSG_ID_AUTH_KEY_MIN_LEN, MAVLINK_MSG_ID_AUTH_KEY_LEN, MAVLINK_MSG_ID_AUTH_KEY_CRC);
+#endif
+}
+
+/**
+ * @brief Send a auth_key message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_auth_key_send_struct(mavlink_channel_t chan, const mavlink_auth_key_t* auth_key)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_auth_key_send(chan, auth_key->key);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, (const char *)auth_key, MAVLINK_MSG_ID_AUTH_KEY_MIN_LEN, MAVLINK_MSG_ID_AUTH_KEY_LEN, MAVLINK_MSG_ID_AUTH_KEY_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_AUTH_KEY_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_auth_key_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  const char *key)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+
+    _mav_put_char_array(buf, 0, key, 32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, buf, MAVLINK_MSG_ID_AUTH_KEY_MIN_LEN, MAVLINK_MSG_ID_AUTH_KEY_LEN, MAVLINK_MSG_ID_AUTH_KEY_CRC);
+#else
+    mavlink_auth_key_t *packet = (mavlink_auth_key_t *)msgbuf;
+
+    mav_array_memcpy(packet->key, key, sizeof(char)*32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTH_KEY, (const char *)packet, MAVLINK_MSG_ID_AUTH_KEY_MIN_LEN, MAVLINK_MSG_ID_AUTH_KEY_LEN, MAVLINK_MSG_ID_AUTH_KEY_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE AUTH_KEY UNPACKING
+
+
+/**
+ * @brief Get field key from auth_key message
+ *
+ * @return  key
+ */
+static inline uint16_t mavlink_msg_auth_key_get_key(const mavlink_message_t* msg, char *key)
+{
+    return _MAV_RETURN_char_array(msg, key, 32,  0);
+}
+
+/**
+ * @brief Decode a auth_key message into a struct
+ *
+ * @param msg The message to decode
+ * @param auth_key C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_auth_key_decode(const mavlink_message_t* msg, mavlink_auth_key_t* auth_key)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_auth_key_get_key(msg, auth_key->key);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_AUTH_KEY_LEN? msg->len : MAVLINK_MSG_ID_AUTH_KEY_LEN;
+        memset(auth_key, 0, MAVLINK_MSG_ID_AUTH_KEY_LEN);
+    memcpy(auth_key, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 505 - 0
v2.0/common/mavlink_msg_autopilot_state_for_gimbal_device.h

@@ -0,0 +1,505 @@
+#pragma once
+// MESSAGE AUTOPILOT_STATE_FOR_GIMBAL_DEVICE PACKING
+
+#define MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE 286
+
+MAVPACKED(
+typedef struct __mavlink_autopilot_state_for_gimbal_device_t {
+ uint64_t time_boot_us; /*< [us] Timestamp (time since system boot).*/
+ float q[4]; /*<  Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention).*/
+ uint32_t q_estimated_delay_us; /*< [us] Estimated delay of the attitude data. 0 if unknown.*/
+ float vx; /*< [m/s] X Speed in NED (North, East, Down). NAN if unknown.*/
+ float vy; /*< [m/s] Y Speed in NED (North, East, Down). NAN if unknown.*/
+ float vz; /*< [m/s] Z Speed in NED (North, East, Down). NAN if unknown.*/
+ uint32_t v_estimated_delay_us; /*< [us] Estimated delay of the speed data. 0 if unknown.*/
+ float feed_forward_angular_velocity_z; /*< [rad/s] Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing.*/
+ uint16_t estimator_status; /*<  Bitmap indicating which estimator outputs are valid.*/
+ uint8_t target_system; /*<  System ID*/
+ uint8_t target_component; /*<  Component ID*/
+ uint8_t landed_state; /*<  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.*/
+ float angular_velocity_z; /*< [rad/s] Z component of angular velocity in NED (North, East, Down). NaN if unknown.*/
+}) mavlink_autopilot_state_for_gimbal_device_t;
+
+#define MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN 57
+#define MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_MIN_LEN 53
+#define MAVLINK_MSG_ID_286_LEN 57
+#define MAVLINK_MSG_ID_286_MIN_LEN 53
+
+#define MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_CRC 210
+#define MAVLINK_MSG_ID_286_CRC 210
+
+#define MAVLINK_MSG_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_FIELD_Q_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE { \
+    286, \
+    "AUTOPILOT_STATE_FOR_GIMBAL_DEVICE", \
+    13, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 50, offsetof(mavlink_autopilot_state_for_gimbal_device_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 51, offsetof(mavlink_autopilot_state_for_gimbal_device_t, target_component) }, \
+         { "time_boot_us", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_autopilot_state_for_gimbal_device_t, time_boot_us) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 8, offsetof(mavlink_autopilot_state_for_gimbal_device_t, q) }, \
+         { "q_estimated_delay_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 24, offsetof(mavlink_autopilot_state_for_gimbal_device_t, q_estimated_delay_us) }, \
+         { "vx", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_autopilot_state_for_gimbal_device_t, vx) }, \
+         { "vy", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_autopilot_state_for_gimbal_device_t, vy) }, \
+         { "vz", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_autopilot_state_for_gimbal_device_t, vz) }, \
+         { "v_estimated_delay_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 40, offsetof(mavlink_autopilot_state_for_gimbal_device_t, v_estimated_delay_us) }, \
+         { "feed_forward_angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_autopilot_state_for_gimbal_device_t, feed_forward_angular_velocity_z) }, \
+         { "estimator_status", NULL, MAVLINK_TYPE_UINT16_T, 0, 48, offsetof(mavlink_autopilot_state_for_gimbal_device_t, estimator_status) }, \
+         { "landed_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 52, offsetof(mavlink_autopilot_state_for_gimbal_device_t, landed_state) }, \
+         { "angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 53, offsetof(mavlink_autopilot_state_for_gimbal_device_t, angular_velocity_z) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE { \
+    "AUTOPILOT_STATE_FOR_GIMBAL_DEVICE", \
+    13, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 50, offsetof(mavlink_autopilot_state_for_gimbal_device_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 51, offsetof(mavlink_autopilot_state_for_gimbal_device_t, target_component) }, \
+         { "time_boot_us", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_autopilot_state_for_gimbal_device_t, time_boot_us) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 8, offsetof(mavlink_autopilot_state_for_gimbal_device_t, q) }, \
+         { "q_estimated_delay_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 24, offsetof(mavlink_autopilot_state_for_gimbal_device_t, q_estimated_delay_us) }, \
+         { "vx", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_autopilot_state_for_gimbal_device_t, vx) }, \
+         { "vy", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_autopilot_state_for_gimbal_device_t, vy) }, \
+         { "vz", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_autopilot_state_for_gimbal_device_t, vz) }, \
+         { "v_estimated_delay_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 40, offsetof(mavlink_autopilot_state_for_gimbal_device_t, v_estimated_delay_us) }, \
+         { "feed_forward_angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_autopilot_state_for_gimbal_device_t, feed_forward_angular_velocity_z) }, \
+         { "estimator_status", NULL, MAVLINK_TYPE_UINT16_T, 0, 48, offsetof(mavlink_autopilot_state_for_gimbal_device_t, estimator_status) }, \
+         { "landed_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 52, offsetof(mavlink_autopilot_state_for_gimbal_device_t, landed_state) }, \
+         { "angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 53, offsetof(mavlink_autopilot_state_for_gimbal_device_t, angular_velocity_z) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a autopilot_state_for_gimbal_device message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param time_boot_us [us] Timestamp (time since system boot).
+ * @param q  Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention).
+ * @param q_estimated_delay_us [us] Estimated delay of the attitude data. 0 if unknown.
+ * @param vx [m/s] X Speed in NED (North, East, Down). NAN if unknown.
+ * @param vy [m/s] Y Speed in NED (North, East, Down). NAN if unknown.
+ * @param vz [m/s] Z Speed in NED (North, East, Down). NAN if unknown.
+ * @param v_estimated_delay_us [us] Estimated delay of the speed data. 0 if unknown.
+ * @param feed_forward_angular_velocity_z [rad/s] Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing.
+ * @param estimator_status  Bitmap indicating which estimator outputs are valid.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity in NED (North, East, Down). NaN if unknown.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_autopilot_state_for_gimbal_device_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint64_t time_boot_us, const float *q, uint32_t q_estimated_delay_us, float vx, float vy, float vz, uint32_t v_estimated_delay_us, float feed_forward_angular_velocity_z, uint16_t estimator_status, uint8_t landed_state, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN];
+    _mav_put_uint64_t(buf, 0, time_boot_us);
+    _mav_put_uint32_t(buf, 24, q_estimated_delay_us);
+    _mav_put_float(buf, 28, vx);
+    _mav_put_float(buf, 32, vy);
+    _mav_put_float(buf, 36, vz);
+    _mav_put_uint32_t(buf, 40, v_estimated_delay_us);
+    _mav_put_float(buf, 44, feed_forward_angular_velocity_z);
+    _mav_put_uint16_t(buf, 48, estimator_status);
+    _mav_put_uint8_t(buf, 50, target_system);
+    _mav_put_uint8_t(buf, 51, target_component);
+    _mav_put_uint8_t(buf, 52, landed_state);
+    _mav_put_float(buf, 53, angular_velocity_z);
+    _mav_put_float_array(buf, 8, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN);
+#else
+    mavlink_autopilot_state_for_gimbal_device_t packet;
+    packet.time_boot_us = time_boot_us;
+    packet.q_estimated_delay_us = q_estimated_delay_us;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.v_estimated_delay_us = v_estimated_delay_us;
+    packet.feed_forward_angular_velocity_z = feed_forward_angular_velocity_z;
+    packet.estimator_status = estimator_status;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.landed_state = landed_state;
+    packet.angular_velocity_z = angular_velocity_z;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_CRC);
+}
+
+/**
+ * @brief Pack a autopilot_state_for_gimbal_device message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param time_boot_us [us] Timestamp (time since system boot).
+ * @param q  Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention).
+ * @param q_estimated_delay_us [us] Estimated delay of the attitude data. 0 if unknown.
+ * @param vx [m/s] X Speed in NED (North, East, Down). NAN if unknown.
+ * @param vy [m/s] Y Speed in NED (North, East, Down). NAN if unknown.
+ * @param vz [m/s] Z Speed in NED (North, East, Down). NAN if unknown.
+ * @param v_estimated_delay_us [us] Estimated delay of the speed data. 0 if unknown.
+ * @param feed_forward_angular_velocity_z [rad/s] Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing.
+ * @param estimator_status  Bitmap indicating which estimator outputs are valid.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity in NED (North, East, Down). NaN if unknown.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_autopilot_state_for_gimbal_device_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint64_t time_boot_us,const float *q,uint32_t q_estimated_delay_us,float vx,float vy,float vz,uint32_t v_estimated_delay_us,float feed_forward_angular_velocity_z,uint16_t estimator_status,uint8_t landed_state,float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN];
+    _mav_put_uint64_t(buf, 0, time_boot_us);
+    _mav_put_uint32_t(buf, 24, q_estimated_delay_us);
+    _mav_put_float(buf, 28, vx);
+    _mav_put_float(buf, 32, vy);
+    _mav_put_float(buf, 36, vz);
+    _mav_put_uint32_t(buf, 40, v_estimated_delay_us);
+    _mav_put_float(buf, 44, feed_forward_angular_velocity_z);
+    _mav_put_uint16_t(buf, 48, estimator_status);
+    _mav_put_uint8_t(buf, 50, target_system);
+    _mav_put_uint8_t(buf, 51, target_component);
+    _mav_put_uint8_t(buf, 52, landed_state);
+    _mav_put_float(buf, 53, angular_velocity_z);
+    _mav_put_float_array(buf, 8, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN);
+#else
+    mavlink_autopilot_state_for_gimbal_device_t packet;
+    packet.time_boot_us = time_boot_us;
+    packet.q_estimated_delay_us = q_estimated_delay_us;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.v_estimated_delay_us = v_estimated_delay_us;
+    packet.feed_forward_angular_velocity_z = feed_forward_angular_velocity_z;
+    packet.estimator_status = estimator_status;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.landed_state = landed_state;
+    packet.angular_velocity_z = angular_velocity_z;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_CRC);
+}
+
+/**
+ * @brief Encode a autopilot_state_for_gimbal_device struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param autopilot_state_for_gimbal_device C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_autopilot_state_for_gimbal_device_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_autopilot_state_for_gimbal_device_t* autopilot_state_for_gimbal_device)
+{
+    return mavlink_msg_autopilot_state_for_gimbal_device_pack(system_id, component_id, msg, autopilot_state_for_gimbal_device->target_system, autopilot_state_for_gimbal_device->target_component, autopilot_state_for_gimbal_device->time_boot_us, autopilot_state_for_gimbal_device->q, autopilot_state_for_gimbal_device->q_estimated_delay_us, autopilot_state_for_gimbal_device->vx, autopilot_state_for_gimbal_device->vy, autopilot_state_for_gimbal_device->vz, autopilot_state_for_gimbal_device->v_estimated_delay_us, autopilot_state_for_gimbal_device->feed_forward_angular_velocity_z, autopilot_state_for_gimbal_device->estimator_status, autopilot_state_for_gimbal_device->landed_state, autopilot_state_for_gimbal_device->angular_velocity_z);
+}
+
+/**
+ * @brief Encode a autopilot_state_for_gimbal_device struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param autopilot_state_for_gimbal_device C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_autopilot_state_for_gimbal_device_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_autopilot_state_for_gimbal_device_t* autopilot_state_for_gimbal_device)
+{
+    return mavlink_msg_autopilot_state_for_gimbal_device_pack_chan(system_id, component_id, chan, msg, autopilot_state_for_gimbal_device->target_system, autopilot_state_for_gimbal_device->target_component, autopilot_state_for_gimbal_device->time_boot_us, autopilot_state_for_gimbal_device->q, autopilot_state_for_gimbal_device->q_estimated_delay_us, autopilot_state_for_gimbal_device->vx, autopilot_state_for_gimbal_device->vy, autopilot_state_for_gimbal_device->vz, autopilot_state_for_gimbal_device->v_estimated_delay_us, autopilot_state_for_gimbal_device->feed_forward_angular_velocity_z, autopilot_state_for_gimbal_device->estimator_status, autopilot_state_for_gimbal_device->landed_state, autopilot_state_for_gimbal_device->angular_velocity_z);
+}
+
+/**
+ * @brief Send a autopilot_state_for_gimbal_device message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param time_boot_us [us] Timestamp (time since system boot).
+ * @param q  Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention).
+ * @param q_estimated_delay_us [us] Estimated delay of the attitude data. 0 if unknown.
+ * @param vx [m/s] X Speed in NED (North, East, Down). NAN if unknown.
+ * @param vy [m/s] Y Speed in NED (North, East, Down). NAN if unknown.
+ * @param vz [m/s] Z Speed in NED (North, East, Down). NAN if unknown.
+ * @param v_estimated_delay_us [us] Estimated delay of the speed data. 0 if unknown.
+ * @param feed_forward_angular_velocity_z [rad/s] Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing.
+ * @param estimator_status  Bitmap indicating which estimator outputs are valid.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity in NED (North, East, Down). NaN if unknown.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_autopilot_state_for_gimbal_device_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint64_t time_boot_us, const float *q, uint32_t q_estimated_delay_us, float vx, float vy, float vz, uint32_t v_estimated_delay_us, float feed_forward_angular_velocity_z, uint16_t estimator_status, uint8_t landed_state, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN];
+    _mav_put_uint64_t(buf, 0, time_boot_us);
+    _mav_put_uint32_t(buf, 24, q_estimated_delay_us);
+    _mav_put_float(buf, 28, vx);
+    _mav_put_float(buf, 32, vy);
+    _mav_put_float(buf, 36, vz);
+    _mav_put_uint32_t(buf, 40, v_estimated_delay_us);
+    _mav_put_float(buf, 44, feed_forward_angular_velocity_z);
+    _mav_put_uint16_t(buf, 48, estimator_status);
+    _mav_put_uint8_t(buf, 50, target_system);
+    _mav_put_uint8_t(buf, 51, target_component);
+    _mav_put_uint8_t(buf, 52, landed_state);
+    _mav_put_float(buf, 53, angular_velocity_z);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE, buf, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_CRC);
+#else
+    mavlink_autopilot_state_for_gimbal_device_t packet;
+    packet.time_boot_us = time_boot_us;
+    packet.q_estimated_delay_us = q_estimated_delay_us;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.v_estimated_delay_us = v_estimated_delay_us;
+    packet.feed_forward_angular_velocity_z = feed_forward_angular_velocity_z;
+    packet.estimator_status = estimator_status;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.landed_state = landed_state;
+    packet.angular_velocity_z = angular_velocity_z;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE, (const char *)&packet, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a autopilot_state_for_gimbal_device message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_autopilot_state_for_gimbal_device_send_struct(mavlink_channel_t chan, const mavlink_autopilot_state_for_gimbal_device_t* autopilot_state_for_gimbal_device)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_autopilot_state_for_gimbal_device_send(chan, autopilot_state_for_gimbal_device->target_system, autopilot_state_for_gimbal_device->target_component, autopilot_state_for_gimbal_device->time_boot_us, autopilot_state_for_gimbal_device->q, autopilot_state_for_gimbal_device->q_estimated_delay_us, autopilot_state_for_gimbal_device->vx, autopilot_state_for_gimbal_device->vy, autopilot_state_for_gimbal_device->vz, autopilot_state_for_gimbal_device->v_estimated_delay_us, autopilot_state_for_gimbal_device->feed_forward_angular_velocity_z, autopilot_state_for_gimbal_device->estimator_status, autopilot_state_for_gimbal_device->landed_state, autopilot_state_for_gimbal_device->angular_velocity_z);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE, (const char *)autopilot_state_for_gimbal_device, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_autopilot_state_for_gimbal_device_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint64_t time_boot_us, const float *q, uint32_t q_estimated_delay_us, float vx, float vy, float vz, uint32_t v_estimated_delay_us, float feed_forward_angular_velocity_z, uint16_t estimator_status, uint8_t landed_state, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_boot_us);
+    _mav_put_uint32_t(buf, 24, q_estimated_delay_us);
+    _mav_put_float(buf, 28, vx);
+    _mav_put_float(buf, 32, vy);
+    _mav_put_float(buf, 36, vz);
+    _mav_put_uint32_t(buf, 40, v_estimated_delay_us);
+    _mav_put_float(buf, 44, feed_forward_angular_velocity_z);
+    _mav_put_uint16_t(buf, 48, estimator_status);
+    _mav_put_uint8_t(buf, 50, target_system);
+    _mav_put_uint8_t(buf, 51, target_component);
+    _mav_put_uint8_t(buf, 52, landed_state);
+    _mav_put_float(buf, 53, angular_velocity_z);
+    _mav_put_float_array(buf, 8, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE, buf, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_CRC);
+#else
+    mavlink_autopilot_state_for_gimbal_device_t *packet = (mavlink_autopilot_state_for_gimbal_device_t *)msgbuf;
+    packet->time_boot_us = time_boot_us;
+    packet->q_estimated_delay_us = q_estimated_delay_us;
+    packet->vx = vx;
+    packet->vy = vy;
+    packet->vz = vz;
+    packet->v_estimated_delay_us = v_estimated_delay_us;
+    packet->feed_forward_angular_velocity_z = feed_forward_angular_velocity_z;
+    packet->estimator_status = estimator_status;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->landed_state = landed_state;
+    packet->angular_velocity_z = angular_velocity_z;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE, (const char *)packet, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE AUTOPILOT_STATE_FOR_GIMBAL_DEVICE UNPACKING
+
+
+/**
+ * @brief Get field target_system from autopilot_state_for_gimbal_device message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_autopilot_state_for_gimbal_device_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  50);
+}
+
+/**
+ * @brief Get field target_component from autopilot_state_for_gimbal_device message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_autopilot_state_for_gimbal_device_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  51);
+}
+
+/**
+ * @brief Get field time_boot_us from autopilot_state_for_gimbal_device message
+ *
+ * @return [us] Timestamp (time since system boot).
+ */
+static inline uint64_t mavlink_msg_autopilot_state_for_gimbal_device_get_time_boot_us(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field q from autopilot_state_for_gimbal_device message
+ *
+ * @return  Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention).
+ */
+static inline uint16_t mavlink_msg_autopilot_state_for_gimbal_device_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  8);
+}
+
+/**
+ * @brief Get field q_estimated_delay_us from autopilot_state_for_gimbal_device message
+ *
+ * @return [us] Estimated delay of the attitude data. 0 if unknown.
+ */
+static inline uint32_t mavlink_msg_autopilot_state_for_gimbal_device_get_q_estimated_delay_us(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  24);
+}
+
+/**
+ * @brief Get field vx from autopilot_state_for_gimbal_device message
+ *
+ * @return [m/s] X Speed in NED (North, East, Down). NAN if unknown.
+ */
+static inline float mavlink_msg_autopilot_state_for_gimbal_device_get_vx(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field vy from autopilot_state_for_gimbal_device message
+ *
+ * @return [m/s] Y Speed in NED (North, East, Down). NAN if unknown.
+ */
+static inline float mavlink_msg_autopilot_state_for_gimbal_device_get_vy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field vz from autopilot_state_for_gimbal_device message
+ *
+ * @return [m/s] Z Speed in NED (North, East, Down). NAN if unknown.
+ */
+static inline float mavlink_msg_autopilot_state_for_gimbal_device_get_vz(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field v_estimated_delay_us from autopilot_state_for_gimbal_device message
+ *
+ * @return [us] Estimated delay of the speed data. 0 if unknown.
+ */
+static inline uint32_t mavlink_msg_autopilot_state_for_gimbal_device_get_v_estimated_delay_us(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  40);
+}
+
+/**
+ * @brief Get field feed_forward_angular_velocity_z from autopilot_state_for_gimbal_device message
+ *
+ * @return [rad/s] Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing.
+ */
+static inline float mavlink_msg_autopilot_state_for_gimbal_device_get_feed_forward_angular_velocity_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Get field estimator_status from autopilot_state_for_gimbal_device message
+ *
+ * @return  Bitmap indicating which estimator outputs are valid.
+ */
+static inline uint16_t mavlink_msg_autopilot_state_for_gimbal_device_get_estimator_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  48);
+}
+
+/**
+ * @brief Get field landed_state from autopilot_state_for_gimbal_device message
+ *
+ * @return  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ */
+static inline uint8_t mavlink_msg_autopilot_state_for_gimbal_device_get_landed_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  52);
+}
+
+/**
+ * @brief Get field angular_velocity_z from autopilot_state_for_gimbal_device message
+ *
+ * @return [rad/s] Z component of angular velocity in NED (North, East, Down). NaN if unknown.
+ */
+static inline float mavlink_msg_autopilot_state_for_gimbal_device_get_angular_velocity_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  53);
+}
+
+/**
+ * @brief Decode a autopilot_state_for_gimbal_device message into a struct
+ *
+ * @param msg The message to decode
+ * @param autopilot_state_for_gimbal_device C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_autopilot_state_for_gimbal_device_decode(const mavlink_message_t* msg, mavlink_autopilot_state_for_gimbal_device_t* autopilot_state_for_gimbal_device)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    autopilot_state_for_gimbal_device->time_boot_us = mavlink_msg_autopilot_state_for_gimbal_device_get_time_boot_us(msg);
+    mavlink_msg_autopilot_state_for_gimbal_device_get_q(msg, autopilot_state_for_gimbal_device->q);
+    autopilot_state_for_gimbal_device->q_estimated_delay_us = mavlink_msg_autopilot_state_for_gimbal_device_get_q_estimated_delay_us(msg);
+    autopilot_state_for_gimbal_device->vx = mavlink_msg_autopilot_state_for_gimbal_device_get_vx(msg);
+    autopilot_state_for_gimbal_device->vy = mavlink_msg_autopilot_state_for_gimbal_device_get_vy(msg);
+    autopilot_state_for_gimbal_device->vz = mavlink_msg_autopilot_state_for_gimbal_device_get_vz(msg);
+    autopilot_state_for_gimbal_device->v_estimated_delay_us = mavlink_msg_autopilot_state_for_gimbal_device_get_v_estimated_delay_us(msg);
+    autopilot_state_for_gimbal_device->feed_forward_angular_velocity_z = mavlink_msg_autopilot_state_for_gimbal_device_get_feed_forward_angular_velocity_z(msg);
+    autopilot_state_for_gimbal_device->estimator_status = mavlink_msg_autopilot_state_for_gimbal_device_get_estimator_status(msg);
+    autopilot_state_for_gimbal_device->target_system = mavlink_msg_autopilot_state_for_gimbal_device_get_target_system(msg);
+    autopilot_state_for_gimbal_device->target_component = mavlink_msg_autopilot_state_for_gimbal_device_get_target_component(msg);
+    autopilot_state_for_gimbal_device->landed_state = mavlink_msg_autopilot_state_for_gimbal_device_get_landed_state(msg);
+    autopilot_state_for_gimbal_device->angular_velocity_z = mavlink_msg_autopilot_state_for_gimbal_device_get_angular_velocity_z(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN? msg->len : MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN;
+        memset(autopilot_state_for_gimbal_device, 0, MAVLINK_MSG_ID_AUTOPILOT_STATE_FOR_GIMBAL_DEVICE_LEN);
+    memcpy(autopilot_state_for_gimbal_device, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 483 - 0
v2.0/common/mavlink_msg_autopilot_version.h

@@ -0,0 +1,483 @@
+#pragma once
+// MESSAGE AUTOPILOT_VERSION PACKING
+
+#define MAVLINK_MSG_ID_AUTOPILOT_VERSION 148
+
+
+typedef struct __mavlink_autopilot_version_t {
+ uint64_t capabilities; /*<  Bitmap of capabilities*/
+ uint64_t uid; /*<  UID if provided by hardware (see uid2)*/
+ uint32_t flight_sw_version; /*<  Firmware version number*/
+ uint32_t middleware_sw_version; /*<  Middleware version number*/
+ uint32_t os_sw_version; /*<  Operating system version number*/
+ uint32_t board_version; /*<  HW / board version (last 8 bits should be silicon ID, if any). The first 16 bits of this field specify https://github.com/PX4/PX4-Bootloader/blob/master/board_types.txt*/
+ uint16_t vendor_id; /*<  ID of the board vendor*/
+ uint16_t product_id; /*<  ID of the product*/
+ uint8_t flight_custom_version[8]; /*<  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.*/
+ uint8_t middleware_custom_version[8]; /*<  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.*/
+ uint8_t os_custom_version[8]; /*<  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.*/
+ uint8_t uid2[18]; /*<  UID if provided by hardware (supersedes the uid field. If this is non-zero, use this field, otherwise use uid)*/
+} mavlink_autopilot_version_t;
+
+#define MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN 78
+#define MAVLINK_MSG_ID_AUTOPILOT_VERSION_MIN_LEN 60
+#define MAVLINK_MSG_ID_148_LEN 78
+#define MAVLINK_MSG_ID_148_MIN_LEN 60
+
+#define MAVLINK_MSG_ID_AUTOPILOT_VERSION_CRC 178
+#define MAVLINK_MSG_ID_148_CRC 178
+
+#define MAVLINK_MSG_AUTOPILOT_VERSION_FIELD_FLIGHT_CUSTOM_VERSION_LEN 8
+#define MAVLINK_MSG_AUTOPILOT_VERSION_FIELD_MIDDLEWARE_CUSTOM_VERSION_LEN 8
+#define MAVLINK_MSG_AUTOPILOT_VERSION_FIELD_OS_CUSTOM_VERSION_LEN 8
+#define MAVLINK_MSG_AUTOPILOT_VERSION_FIELD_UID2_LEN 18
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_AUTOPILOT_VERSION { \
+    148, \
+    "AUTOPILOT_VERSION", \
+    12, \
+    {  { "capabilities", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_autopilot_version_t, capabilities) }, \
+         { "flight_sw_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 16, offsetof(mavlink_autopilot_version_t, flight_sw_version) }, \
+         { "middleware_sw_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_autopilot_version_t, middleware_sw_version) }, \
+         { "os_sw_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 24, offsetof(mavlink_autopilot_version_t, os_sw_version) }, \
+         { "board_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 28, offsetof(mavlink_autopilot_version_t, board_version) }, \
+         { "flight_custom_version", NULL, MAVLINK_TYPE_UINT8_T, 8, 36, offsetof(mavlink_autopilot_version_t, flight_custom_version) }, \
+         { "middleware_custom_version", NULL, MAVLINK_TYPE_UINT8_T, 8, 44, offsetof(mavlink_autopilot_version_t, middleware_custom_version) }, \
+         { "os_custom_version", NULL, MAVLINK_TYPE_UINT8_T, 8, 52, offsetof(mavlink_autopilot_version_t, os_custom_version) }, \
+         { "vendor_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 32, offsetof(mavlink_autopilot_version_t, vendor_id) }, \
+         { "product_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 34, offsetof(mavlink_autopilot_version_t, product_id) }, \
+         { "uid", NULL, MAVLINK_TYPE_UINT64_T, 0, 8, offsetof(mavlink_autopilot_version_t, uid) }, \
+         { "uid2", NULL, MAVLINK_TYPE_UINT8_T, 18, 60, offsetof(mavlink_autopilot_version_t, uid2) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_AUTOPILOT_VERSION { \
+    "AUTOPILOT_VERSION", \
+    12, \
+    {  { "capabilities", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_autopilot_version_t, capabilities) }, \
+         { "flight_sw_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 16, offsetof(mavlink_autopilot_version_t, flight_sw_version) }, \
+         { "middleware_sw_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_autopilot_version_t, middleware_sw_version) }, \
+         { "os_sw_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 24, offsetof(mavlink_autopilot_version_t, os_sw_version) }, \
+         { "board_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 28, offsetof(mavlink_autopilot_version_t, board_version) }, \
+         { "flight_custom_version", NULL, MAVLINK_TYPE_UINT8_T, 8, 36, offsetof(mavlink_autopilot_version_t, flight_custom_version) }, \
+         { "middleware_custom_version", NULL, MAVLINK_TYPE_UINT8_T, 8, 44, offsetof(mavlink_autopilot_version_t, middleware_custom_version) }, \
+         { "os_custom_version", NULL, MAVLINK_TYPE_UINT8_T, 8, 52, offsetof(mavlink_autopilot_version_t, os_custom_version) }, \
+         { "vendor_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 32, offsetof(mavlink_autopilot_version_t, vendor_id) }, \
+         { "product_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 34, offsetof(mavlink_autopilot_version_t, product_id) }, \
+         { "uid", NULL, MAVLINK_TYPE_UINT64_T, 0, 8, offsetof(mavlink_autopilot_version_t, uid) }, \
+         { "uid2", NULL, MAVLINK_TYPE_UINT8_T, 18, 60, offsetof(mavlink_autopilot_version_t, uid2) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a autopilot_version message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param capabilities  Bitmap of capabilities
+ * @param flight_sw_version  Firmware version number
+ * @param middleware_sw_version  Middleware version number
+ * @param os_sw_version  Operating system version number
+ * @param board_version  HW / board version (last 8 bits should be silicon ID, if any). The first 16 bits of this field specify https://github.com/PX4/PX4-Bootloader/blob/master/board_types.txt
+ * @param flight_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param middleware_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param os_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param vendor_id  ID of the board vendor
+ * @param product_id  ID of the product
+ * @param uid  UID if provided by hardware (see uid2)
+ * @param uid2  UID if provided by hardware (supersedes the uid field. If this is non-zero, use this field, otherwise use uid)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_autopilot_version_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t capabilities, uint32_t flight_sw_version, uint32_t middleware_sw_version, uint32_t os_sw_version, uint32_t board_version, const uint8_t *flight_custom_version, const uint8_t *middleware_custom_version, const uint8_t *os_custom_version, uint16_t vendor_id, uint16_t product_id, uint64_t uid, const uint8_t *uid2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN];
+    _mav_put_uint64_t(buf, 0, capabilities);
+    _mav_put_uint64_t(buf, 8, uid);
+    _mav_put_uint32_t(buf, 16, flight_sw_version);
+    _mav_put_uint32_t(buf, 20, middleware_sw_version);
+    _mav_put_uint32_t(buf, 24, os_sw_version);
+    _mav_put_uint32_t(buf, 28, board_version);
+    _mav_put_uint16_t(buf, 32, vendor_id);
+    _mav_put_uint16_t(buf, 34, product_id);
+    _mav_put_uint8_t_array(buf, 36, flight_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 44, middleware_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 52, os_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 60, uid2, 18);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN);
+#else
+    mavlink_autopilot_version_t packet;
+    packet.capabilities = capabilities;
+    packet.uid = uid;
+    packet.flight_sw_version = flight_sw_version;
+    packet.middleware_sw_version = middleware_sw_version;
+    packet.os_sw_version = os_sw_version;
+    packet.board_version = board_version;
+    packet.vendor_id = vendor_id;
+    packet.product_id = product_id;
+    mav_array_memcpy(packet.flight_custom_version, flight_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.middleware_custom_version, middleware_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.os_custom_version, os_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.uid2, uid2, sizeof(uint8_t)*18);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_AUTOPILOT_VERSION;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_AUTOPILOT_VERSION_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_CRC);
+}
+
+/**
+ * @brief Pack a autopilot_version message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param capabilities  Bitmap of capabilities
+ * @param flight_sw_version  Firmware version number
+ * @param middleware_sw_version  Middleware version number
+ * @param os_sw_version  Operating system version number
+ * @param board_version  HW / board version (last 8 bits should be silicon ID, if any). The first 16 bits of this field specify https://github.com/PX4/PX4-Bootloader/blob/master/board_types.txt
+ * @param flight_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param middleware_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param os_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param vendor_id  ID of the board vendor
+ * @param product_id  ID of the product
+ * @param uid  UID if provided by hardware (see uid2)
+ * @param uid2  UID if provided by hardware (supersedes the uid field. If this is non-zero, use this field, otherwise use uid)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_autopilot_version_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t capabilities,uint32_t flight_sw_version,uint32_t middleware_sw_version,uint32_t os_sw_version,uint32_t board_version,const uint8_t *flight_custom_version,const uint8_t *middleware_custom_version,const uint8_t *os_custom_version,uint16_t vendor_id,uint16_t product_id,uint64_t uid,const uint8_t *uid2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN];
+    _mav_put_uint64_t(buf, 0, capabilities);
+    _mav_put_uint64_t(buf, 8, uid);
+    _mav_put_uint32_t(buf, 16, flight_sw_version);
+    _mav_put_uint32_t(buf, 20, middleware_sw_version);
+    _mav_put_uint32_t(buf, 24, os_sw_version);
+    _mav_put_uint32_t(buf, 28, board_version);
+    _mav_put_uint16_t(buf, 32, vendor_id);
+    _mav_put_uint16_t(buf, 34, product_id);
+    _mav_put_uint8_t_array(buf, 36, flight_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 44, middleware_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 52, os_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 60, uid2, 18);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN);
+#else
+    mavlink_autopilot_version_t packet;
+    packet.capabilities = capabilities;
+    packet.uid = uid;
+    packet.flight_sw_version = flight_sw_version;
+    packet.middleware_sw_version = middleware_sw_version;
+    packet.os_sw_version = os_sw_version;
+    packet.board_version = board_version;
+    packet.vendor_id = vendor_id;
+    packet.product_id = product_id;
+    mav_array_memcpy(packet.flight_custom_version, flight_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.middleware_custom_version, middleware_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.os_custom_version, os_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.uid2, uid2, sizeof(uint8_t)*18);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_AUTOPILOT_VERSION;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_AUTOPILOT_VERSION_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_CRC);
+}
+
+/**
+ * @brief Encode a autopilot_version struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param autopilot_version C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_autopilot_version_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_autopilot_version_t* autopilot_version)
+{
+    return mavlink_msg_autopilot_version_pack(system_id, component_id, msg, autopilot_version->capabilities, autopilot_version->flight_sw_version, autopilot_version->middleware_sw_version, autopilot_version->os_sw_version, autopilot_version->board_version, autopilot_version->flight_custom_version, autopilot_version->middleware_custom_version, autopilot_version->os_custom_version, autopilot_version->vendor_id, autopilot_version->product_id, autopilot_version->uid, autopilot_version->uid2);
+}
+
+/**
+ * @brief Encode a autopilot_version struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param autopilot_version C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_autopilot_version_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_autopilot_version_t* autopilot_version)
+{
+    return mavlink_msg_autopilot_version_pack_chan(system_id, component_id, chan, msg, autopilot_version->capabilities, autopilot_version->flight_sw_version, autopilot_version->middleware_sw_version, autopilot_version->os_sw_version, autopilot_version->board_version, autopilot_version->flight_custom_version, autopilot_version->middleware_custom_version, autopilot_version->os_custom_version, autopilot_version->vendor_id, autopilot_version->product_id, autopilot_version->uid, autopilot_version->uid2);
+}
+
+/**
+ * @brief Send a autopilot_version message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param capabilities  Bitmap of capabilities
+ * @param flight_sw_version  Firmware version number
+ * @param middleware_sw_version  Middleware version number
+ * @param os_sw_version  Operating system version number
+ * @param board_version  HW / board version (last 8 bits should be silicon ID, if any). The first 16 bits of this field specify https://github.com/PX4/PX4-Bootloader/blob/master/board_types.txt
+ * @param flight_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param middleware_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param os_custom_version  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ * @param vendor_id  ID of the board vendor
+ * @param product_id  ID of the product
+ * @param uid  UID if provided by hardware (see uid2)
+ * @param uid2  UID if provided by hardware (supersedes the uid field. If this is non-zero, use this field, otherwise use uid)
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_autopilot_version_send(mavlink_channel_t chan, uint64_t capabilities, uint32_t flight_sw_version, uint32_t middleware_sw_version, uint32_t os_sw_version, uint32_t board_version, const uint8_t *flight_custom_version, const uint8_t *middleware_custom_version, const uint8_t *os_custom_version, uint16_t vendor_id, uint16_t product_id, uint64_t uid, const uint8_t *uid2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN];
+    _mav_put_uint64_t(buf, 0, capabilities);
+    _mav_put_uint64_t(buf, 8, uid);
+    _mav_put_uint32_t(buf, 16, flight_sw_version);
+    _mav_put_uint32_t(buf, 20, middleware_sw_version);
+    _mav_put_uint32_t(buf, 24, os_sw_version);
+    _mav_put_uint32_t(buf, 28, board_version);
+    _mav_put_uint16_t(buf, 32, vendor_id);
+    _mav_put_uint16_t(buf, 34, product_id);
+    _mav_put_uint8_t_array(buf, 36, flight_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 44, middleware_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 52, os_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 60, uid2, 18);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_VERSION, buf, MAVLINK_MSG_ID_AUTOPILOT_VERSION_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_CRC);
+#else
+    mavlink_autopilot_version_t packet;
+    packet.capabilities = capabilities;
+    packet.uid = uid;
+    packet.flight_sw_version = flight_sw_version;
+    packet.middleware_sw_version = middleware_sw_version;
+    packet.os_sw_version = os_sw_version;
+    packet.board_version = board_version;
+    packet.vendor_id = vendor_id;
+    packet.product_id = product_id;
+    mav_array_memcpy(packet.flight_custom_version, flight_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.middleware_custom_version, middleware_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.os_custom_version, os_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet.uid2, uid2, sizeof(uint8_t)*18);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_VERSION, (const char *)&packet, MAVLINK_MSG_ID_AUTOPILOT_VERSION_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_CRC);
+#endif
+}
+
+/**
+ * @brief Send a autopilot_version message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_autopilot_version_send_struct(mavlink_channel_t chan, const mavlink_autopilot_version_t* autopilot_version)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_autopilot_version_send(chan, autopilot_version->capabilities, autopilot_version->flight_sw_version, autopilot_version->middleware_sw_version, autopilot_version->os_sw_version, autopilot_version->board_version, autopilot_version->flight_custom_version, autopilot_version->middleware_custom_version, autopilot_version->os_custom_version, autopilot_version->vendor_id, autopilot_version->product_id, autopilot_version->uid, autopilot_version->uid2);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_VERSION, (const char *)autopilot_version, MAVLINK_MSG_ID_AUTOPILOT_VERSION_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_autopilot_version_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t capabilities, uint32_t flight_sw_version, uint32_t middleware_sw_version, uint32_t os_sw_version, uint32_t board_version, const uint8_t *flight_custom_version, const uint8_t *middleware_custom_version, const uint8_t *os_custom_version, uint16_t vendor_id, uint16_t product_id, uint64_t uid, const uint8_t *uid2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, capabilities);
+    _mav_put_uint64_t(buf, 8, uid);
+    _mav_put_uint32_t(buf, 16, flight_sw_version);
+    _mav_put_uint32_t(buf, 20, middleware_sw_version);
+    _mav_put_uint32_t(buf, 24, os_sw_version);
+    _mav_put_uint32_t(buf, 28, board_version);
+    _mav_put_uint16_t(buf, 32, vendor_id);
+    _mav_put_uint16_t(buf, 34, product_id);
+    _mav_put_uint8_t_array(buf, 36, flight_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 44, middleware_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 52, os_custom_version, 8);
+    _mav_put_uint8_t_array(buf, 60, uid2, 18);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_VERSION, buf, MAVLINK_MSG_ID_AUTOPILOT_VERSION_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_CRC);
+#else
+    mavlink_autopilot_version_t *packet = (mavlink_autopilot_version_t *)msgbuf;
+    packet->capabilities = capabilities;
+    packet->uid = uid;
+    packet->flight_sw_version = flight_sw_version;
+    packet->middleware_sw_version = middleware_sw_version;
+    packet->os_sw_version = os_sw_version;
+    packet->board_version = board_version;
+    packet->vendor_id = vendor_id;
+    packet->product_id = product_id;
+    mav_array_memcpy(packet->flight_custom_version, flight_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet->middleware_custom_version, middleware_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet->os_custom_version, os_custom_version, sizeof(uint8_t)*8);
+    mav_array_memcpy(packet->uid2, uid2, sizeof(uint8_t)*18);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_AUTOPILOT_VERSION, (const char *)packet, MAVLINK_MSG_ID_AUTOPILOT_VERSION_MIN_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN, MAVLINK_MSG_ID_AUTOPILOT_VERSION_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE AUTOPILOT_VERSION UNPACKING
+
+
+/**
+ * @brief Get field capabilities from autopilot_version message
+ *
+ * @return  Bitmap of capabilities
+ */
+static inline uint64_t mavlink_msg_autopilot_version_get_capabilities(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field flight_sw_version from autopilot_version message
+ *
+ * @return  Firmware version number
+ */
+static inline uint32_t mavlink_msg_autopilot_version_get_flight_sw_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  16);
+}
+
+/**
+ * @brief Get field middleware_sw_version from autopilot_version message
+ *
+ * @return  Middleware version number
+ */
+static inline uint32_t mavlink_msg_autopilot_version_get_middleware_sw_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  20);
+}
+
+/**
+ * @brief Get field os_sw_version from autopilot_version message
+ *
+ * @return  Operating system version number
+ */
+static inline uint32_t mavlink_msg_autopilot_version_get_os_sw_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  24);
+}
+
+/**
+ * @brief Get field board_version from autopilot_version message
+ *
+ * @return  HW / board version (last 8 bits should be silicon ID, if any). The first 16 bits of this field specify https://github.com/PX4/PX4-Bootloader/blob/master/board_types.txt
+ */
+static inline uint32_t mavlink_msg_autopilot_version_get_board_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  28);
+}
+
+/**
+ * @brief Get field flight_custom_version from autopilot_version message
+ *
+ * @return  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ */
+static inline uint16_t mavlink_msg_autopilot_version_get_flight_custom_version(const mavlink_message_t* msg, uint8_t *flight_custom_version)
+{
+    return _MAV_RETURN_uint8_t_array(msg, flight_custom_version, 8,  36);
+}
+
+/**
+ * @brief Get field middleware_custom_version from autopilot_version message
+ *
+ * @return  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ */
+static inline uint16_t mavlink_msg_autopilot_version_get_middleware_custom_version(const mavlink_message_t* msg, uint8_t *middleware_custom_version)
+{
+    return _MAV_RETURN_uint8_t_array(msg, middleware_custom_version, 8,  44);
+}
+
+/**
+ * @brief Get field os_custom_version from autopilot_version message
+ *
+ * @return  Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases.
+ */
+static inline uint16_t mavlink_msg_autopilot_version_get_os_custom_version(const mavlink_message_t* msg, uint8_t *os_custom_version)
+{
+    return _MAV_RETURN_uint8_t_array(msg, os_custom_version, 8,  52);
+}
+
+/**
+ * @brief Get field vendor_id from autopilot_version message
+ *
+ * @return  ID of the board vendor
+ */
+static inline uint16_t mavlink_msg_autopilot_version_get_vendor_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  32);
+}
+
+/**
+ * @brief Get field product_id from autopilot_version message
+ *
+ * @return  ID of the product
+ */
+static inline uint16_t mavlink_msg_autopilot_version_get_product_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  34);
+}
+
+/**
+ * @brief Get field uid from autopilot_version message
+ *
+ * @return  UID if provided by hardware (see uid2)
+ */
+static inline uint64_t mavlink_msg_autopilot_version_get_uid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  8);
+}
+
+/**
+ * @brief Get field uid2 from autopilot_version message
+ *
+ * @return  UID if provided by hardware (supersedes the uid field. If this is non-zero, use this field, otherwise use uid)
+ */
+static inline uint16_t mavlink_msg_autopilot_version_get_uid2(const mavlink_message_t* msg, uint8_t *uid2)
+{
+    return _MAV_RETURN_uint8_t_array(msg, uid2, 18,  60);
+}
+
+/**
+ * @brief Decode a autopilot_version message into a struct
+ *
+ * @param msg The message to decode
+ * @param autopilot_version C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_autopilot_version_decode(const mavlink_message_t* msg, mavlink_autopilot_version_t* autopilot_version)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    autopilot_version->capabilities = mavlink_msg_autopilot_version_get_capabilities(msg);
+    autopilot_version->uid = mavlink_msg_autopilot_version_get_uid(msg);
+    autopilot_version->flight_sw_version = mavlink_msg_autopilot_version_get_flight_sw_version(msg);
+    autopilot_version->middleware_sw_version = mavlink_msg_autopilot_version_get_middleware_sw_version(msg);
+    autopilot_version->os_sw_version = mavlink_msg_autopilot_version_get_os_sw_version(msg);
+    autopilot_version->board_version = mavlink_msg_autopilot_version_get_board_version(msg);
+    autopilot_version->vendor_id = mavlink_msg_autopilot_version_get_vendor_id(msg);
+    autopilot_version->product_id = mavlink_msg_autopilot_version_get_product_id(msg);
+    mavlink_msg_autopilot_version_get_flight_custom_version(msg, autopilot_version->flight_custom_version);
+    mavlink_msg_autopilot_version_get_middleware_custom_version(msg, autopilot_version->middleware_custom_version);
+    mavlink_msg_autopilot_version_get_os_custom_version(msg, autopilot_version->os_custom_version);
+    mavlink_msg_autopilot_version_get_uid2(msg, autopilot_version->uid2);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN? msg->len : MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN;
+        memset(autopilot_version, 0, MAVLINK_MSG_ID_AUTOPILOT_VERSION_LEN);
+    memcpy(autopilot_version, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 682 - 0
v2.0/common/mavlink_msg_battery_info.h

@@ -0,0 +1,682 @@
+#pragma once
+// MESSAGE BATTERY_INFO PACKING
+
+#define MAVLINK_MSG_ID_BATTERY_INFO 370
+
+
+typedef struct __mavlink_battery_info_t {
+ float discharge_minimum_voltage; /*< [V] Minimum per-cell voltage when discharging. 0: field not provided.*/
+ float charging_minimum_voltage; /*< [V] Minimum per-cell voltage when charging. 0: field not provided.*/
+ float resting_minimum_voltage; /*< [V] Minimum per-cell voltage when resting. 0: field not provided.*/
+ float charging_maximum_voltage; /*< [V] Maximum per-cell voltage when charged. 0: field not provided.*/
+ float charging_maximum_current; /*< [A] Maximum pack continuous charge current. 0: field not provided.*/
+ float nominal_voltage; /*< [V] Battery nominal voltage. Used for conversion between Wh and Ah. 0: field not provided.*/
+ float discharge_maximum_current; /*< [A] Maximum pack discharge current. 0: field not provided.*/
+ float discharge_maximum_burst_current; /*< [A] Maximum pack discharge burst current. 0: field not provided.*/
+ float design_capacity; /*< [Ah] Fully charged design capacity. 0: field not provided.*/
+ float full_charge_capacity; /*< [Ah] Predicted battery capacity when fully charged (accounting for battery degradation). NAN: field not provided.*/
+ uint16_t cycle_count; /*<  Lifetime count of the number of charge/discharge cycles (https://en.wikipedia.org/wiki/Charge_cycle). UINT16_MAX: field not provided.*/
+ uint16_t weight; /*< [g] Battery weight. 0: field not provided.*/
+ uint8_t id; /*<  Battery ID*/
+ uint8_t battery_function; /*<  Function of the battery.*/
+ uint8_t type; /*<  Type (chemistry) of the battery.*/
+ uint8_t state_of_health; /*< [%] State of Health (SOH) estimate. Typically 100% at the time of manufacture and will decrease over time and use. -1: field not provided.*/
+ uint8_t cells_in_series; /*<  Number of battery cells in series. 0: field not provided.*/
+ char manufacture_date[9]; /*<  Manufacture date (DDMMYYYY) in ASCII characters, 0 terminated. All 0: field not provided.*/
+ char serial_number[32]; /*<  Serial number in ASCII characters, 0 terminated. All 0: field not provided.*/
+ char name[50]; /*<  Battery device name. Formatted as manufacturer name then product name, separated with an underscore (in ASCII characters), 0 terminated. All 0: field not provided.*/
+} mavlink_battery_info_t;
+
+#define MAVLINK_MSG_ID_BATTERY_INFO_LEN 140
+#define MAVLINK_MSG_ID_BATTERY_INFO_MIN_LEN 140
+#define MAVLINK_MSG_ID_370_LEN 140
+#define MAVLINK_MSG_ID_370_MIN_LEN 140
+
+#define MAVLINK_MSG_ID_BATTERY_INFO_CRC 26
+#define MAVLINK_MSG_ID_370_CRC 26
+
+#define MAVLINK_MSG_BATTERY_INFO_FIELD_MANUFACTURE_DATE_LEN 9
+#define MAVLINK_MSG_BATTERY_INFO_FIELD_SERIAL_NUMBER_LEN 32
+#define MAVLINK_MSG_BATTERY_INFO_FIELD_NAME_LEN 50
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_BATTERY_INFO { \
+    370, \
+    "BATTERY_INFO", \
+    20, \
+    {  { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 44, offsetof(mavlink_battery_info_t, id) }, \
+         { "battery_function", NULL, MAVLINK_TYPE_UINT8_T, 0, 45, offsetof(mavlink_battery_info_t, battery_function) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 46, offsetof(mavlink_battery_info_t, type) }, \
+         { "state_of_health", NULL, MAVLINK_TYPE_UINT8_T, 0, 47, offsetof(mavlink_battery_info_t, state_of_health) }, \
+         { "cells_in_series", NULL, MAVLINK_TYPE_UINT8_T, 0, 48, offsetof(mavlink_battery_info_t, cells_in_series) }, \
+         { "cycle_count", NULL, MAVLINK_TYPE_UINT16_T, 0, 40, offsetof(mavlink_battery_info_t, cycle_count) }, \
+         { "weight", NULL, MAVLINK_TYPE_UINT16_T, 0, 42, offsetof(mavlink_battery_info_t, weight) }, \
+         { "discharge_minimum_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_battery_info_t, discharge_minimum_voltage) }, \
+         { "charging_minimum_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_battery_info_t, charging_minimum_voltage) }, \
+         { "resting_minimum_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_battery_info_t, resting_minimum_voltage) }, \
+         { "charging_maximum_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_battery_info_t, charging_maximum_voltage) }, \
+         { "charging_maximum_current", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_battery_info_t, charging_maximum_current) }, \
+         { "nominal_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_battery_info_t, nominal_voltage) }, \
+         { "discharge_maximum_current", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_battery_info_t, discharge_maximum_current) }, \
+         { "discharge_maximum_burst_current", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_battery_info_t, discharge_maximum_burst_current) }, \
+         { "design_capacity", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_battery_info_t, design_capacity) }, \
+         { "full_charge_capacity", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_battery_info_t, full_charge_capacity) }, \
+         { "manufacture_date", NULL, MAVLINK_TYPE_CHAR, 9, 49, offsetof(mavlink_battery_info_t, manufacture_date) }, \
+         { "serial_number", NULL, MAVLINK_TYPE_CHAR, 32, 58, offsetof(mavlink_battery_info_t, serial_number) }, \
+         { "name", NULL, MAVLINK_TYPE_CHAR, 50, 90, offsetof(mavlink_battery_info_t, name) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_BATTERY_INFO { \
+    "BATTERY_INFO", \
+    20, \
+    {  { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 44, offsetof(mavlink_battery_info_t, id) }, \
+         { "battery_function", NULL, MAVLINK_TYPE_UINT8_T, 0, 45, offsetof(mavlink_battery_info_t, battery_function) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 46, offsetof(mavlink_battery_info_t, type) }, \
+         { "state_of_health", NULL, MAVLINK_TYPE_UINT8_T, 0, 47, offsetof(mavlink_battery_info_t, state_of_health) }, \
+         { "cells_in_series", NULL, MAVLINK_TYPE_UINT8_T, 0, 48, offsetof(mavlink_battery_info_t, cells_in_series) }, \
+         { "cycle_count", NULL, MAVLINK_TYPE_UINT16_T, 0, 40, offsetof(mavlink_battery_info_t, cycle_count) }, \
+         { "weight", NULL, MAVLINK_TYPE_UINT16_T, 0, 42, offsetof(mavlink_battery_info_t, weight) }, \
+         { "discharge_minimum_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_battery_info_t, discharge_minimum_voltage) }, \
+         { "charging_minimum_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_battery_info_t, charging_minimum_voltage) }, \
+         { "resting_minimum_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_battery_info_t, resting_minimum_voltage) }, \
+         { "charging_maximum_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_battery_info_t, charging_maximum_voltage) }, \
+         { "charging_maximum_current", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_battery_info_t, charging_maximum_current) }, \
+         { "nominal_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_battery_info_t, nominal_voltage) }, \
+         { "discharge_maximum_current", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_battery_info_t, discharge_maximum_current) }, \
+         { "discharge_maximum_burst_current", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_battery_info_t, discharge_maximum_burst_current) }, \
+         { "design_capacity", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_battery_info_t, design_capacity) }, \
+         { "full_charge_capacity", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_battery_info_t, full_charge_capacity) }, \
+         { "manufacture_date", NULL, MAVLINK_TYPE_CHAR, 9, 49, offsetof(mavlink_battery_info_t, manufacture_date) }, \
+         { "serial_number", NULL, MAVLINK_TYPE_CHAR, 32, 58, offsetof(mavlink_battery_info_t, serial_number) }, \
+         { "name", NULL, MAVLINK_TYPE_CHAR, 50, 90, offsetof(mavlink_battery_info_t, name) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a battery_info message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param id  Battery ID
+ * @param battery_function  Function of the battery.
+ * @param type  Type (chemistry) of the battery.
+ * @param state_of_health [%] State of Health (SOH) estimate. Typically 100% at the time of manufacture and will decrease over time and use. -1: field not provided.
+ * @param cells_in_series  Number of battery cells in series. 0: field not provided.
+ * @param cycle_count  Lifetime count of the number of charge/discharge cycles (https://en.wikipedia.org/wiki/Charge_cycle). UINT16_MAX: field not provided.
+ * @param weight [g] Battery weight. 0: field not provided.
+ * @param discharge_minimum_voltage [V] Minimum per-cell voltage when discharging. 0: field not provided.
+ * @param charging_minimum_voltage [V] Minimum per-cell voltage when charging. 0: field not provided.
+ * @param resting_minimum_voltage [V] Minimum per-cell voltage when resting. 0: field not provided.
+ * @param charging_maximum_voltage [V] Maximum per-cell voltage when charged. 0: field not provided.
+ * @param charging_maximum_current [A] Maximum pack continuous charge current. 0: field not provided.
+ * @param nominal_voltage [V] Battery nominal voltage. Used for conversion between Wh and Ah. 0: field not provided.
+ * @param discharge_maximum_current [A] Maximum pack discharge current. 0: field not provided.
+ * @param discharge_maximum_burst_current [A] Maximum pack discharge burst current. 0: field not provided.
+ * @param design_capacity [Ah] Fully charged design capacity. 0: field not provided.
+ * @param full_charge_capacity [Ah] Predicted battery capacity when fully charged (accounting for battery degradation). NAN: field not provided.
+ * @param manufacture_date  Manufacture date (DDMMYYYY) in ASCII characters, 0 terminated. All 0: field not provided.
+ * @param serial_number  Serial number in ASCII characters, 0 terminated. All 0: field not provided.
+ * @param name  Battery device name. Formatted as manufacturer name then product name, separated with an underscore (in ASCII characters), 0 terminated. All 0: field not provided.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_battery_info_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t id, uint8_t battery_function, uint8_t type, uint8_t state_of_health, uint8_t cells_in_series, uint16_t cycle_count, uint16_t weight, float discharge_minimum_voltage, float charging_minimum_voltage, float resting_minimum_voltage, float charging_maximum_voltage, float charging_maximum_current, float nominal_voltage, float discharge_maximum_current, float discharge_maximum_burst_current, float design_capacity, float full_charge_capacity, const char *manufacture_date, const char *serial_number, const char *name)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BATTERY_INFO_LEN];
+    _mav_put_float(buf, 0, discharge_minimum_voltage);
+    _mav_put_float(buf, 4, charging_minimum_voltage);
+    _mav_put_float(buf, 8, resting_minimum_voltage);
+    _mav_put_float(buf, 12, charging_maximum_voltage);
+    _mav_put_float(buf, 16, charging_maximum_current);
+    _mav_put_float(buf, 20, nominal_voltage);
+    _mav_put_float(buf, 24, discharge_maximum_current);
+    _mav_put_float(buf, 28, discharge_maximum_burst_current);
+    _mav_put_float(buf, 32, design_capacity);
+    _mav_put_float(buf, 36, full_charge_capacity);
+    _mav_put_uint16_t(buf, 40, cycle_count);
+    _mav_put_uint16_t(buf, 42, weight);
+    _mav_put_uint8_t(buf, 44, id);
+    _mav_put_uint8_t(buf, 45, battery_function);
+    _mav_put_uint8_t(buf, 46, type);
+    _mav_put_uint8_t(buf, 47, state_of_health);
+    _mav_put_uint8_t(buf, 48, cells_in_series);
+    _mav_put_char_array(buf, 49, manufacture_date, 9);
+    _mav_put_char_array(buf, 58, serial_number, 32);
+    _mav_put_char_array(buf, 90, name, 50);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_BATTERY_INFO_LEN);
+#else
+    mavlink_battery_info_t packet;
+    packet.discharge_minimum_voltage = discharge_minimum_voltage;
+    packet.charging_minimum_voltage = charging_minimum_voltage;
+    packet.resting_minimum_voltage = resting_minimum_voltage;
+    packet.charging_maximum_voltage = charging_maximum_voltage;
+    packet.charging_maximum_current = charging_maximum_current;
+    packet.nominal_voltage = nominal_voltage;
+    packet.discharge_maximum_current = discharge_maximum_current;
+    packet.discharge_maximum_burst_current = discharge_maximum_burst_current;
+    packet.design_capacity = design_capacity;
+    packet.full_charge_capacity = full_charge_capacity;
+    packet.cycle_count = cycle_count;
+    packet.weight = weight;
+    packet.id = id;
+    packet.battery_function = battery_function;
+    packet.type = type;
+    packet.state_of_health = state_of_health;
+    packet.cells_in_series = cells_in_series;
+    mav_array_memcpy(packet.manufacture_date, manufacture_date, sizeof(char)*9);
+    mav_array_memcpy(packet.serial_number, serial_number, sizeof(char)*32);
+    mav_array_memcpy(packet.name, name, sizeof(char)*50);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_BATTERY_INFO_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_BATTERY_INFO;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_BATTERY_INFO_MIN_LEN, MAVLINK_MSG_ID_BATTERY_INFO_LEN, MAVLINK_MSG_ID_BATTERY_INFO_CRC);
+}
+
+/**
+ * @brief Pack a battery_info message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param id  Battery ID
+ * @param battery_function  Function of the battery.
+ * @param type  Type (chemistry) of the battery.
+ * @param state_of_health [%] State of Health (SOH) estimate. Typically 100% at the time of manufacture and will decrease over time and use. -1: field not provided.
+ * @param cells_in_series  Number of battery cells in series. 0: field not provided.
+ * @param cycle_count  Lifetime count of the number of charge/discharge cycles (https://en.wikipedia.org/wiki/Charge_cycle). UINT16_MAX: field not provided.
+ * @param weight [g] Battery weight. 0: field not provided.
+ * @param discharge_minimum_voltage [V] Minimum per-cell voltage when discharging. 0: field not provided.
+ * @param charging_minimum_voltage [V] Minimum per-cell voltage when charging. 0: field not provided.
+ * @param resting_minimum_voltage [V] Minimum per-cell voltage when resting. 0: field not provided.
+ * @param charging_maximum_voltage [V] Maximum per-cell voltage when charged. 0: field not provided.
+ * @param charging_maximum_current [A] Maximum pack continuous charge current. 0: field not provided.
+ * @param nominal_voltage [V] Battery nominal voltage. Used for conversion between Wh and Ah. 0: field not provided.
+ * @param discharge_maximum_current [A] Maximum pack discharge current. 0: field not provided.
+ * @param discharge_maximum_burst_current [A] Maximum pack discharge burst current. 0: field not provided.
+ * @param design_capacity [Ah] Fully charged design capacity. 0: field not provided.
+ * @param full_charge_capacity [Ah] Predicted battery capacity when fully charged (accounting for battery degradation). NAN: field not provided.
+ * @param manufacture_date  Manufacture date (DDMMYYYY) in ASCII characters, 0 terminated. All 0: field not provided.
+ * @param serial_number  Serial number in ASCII characters, 0 terminated. All 0: field not provided.
+ * @param name  Battery device name. Formatted as manufacturer name then product name, separated with an underscore (in ASCII characters), 0 terminated. All 0: field not provided.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_battery_info_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t id,uint8_t battery_function,uint8_t type,uint8_t state_of_health,uint8_t cells_in_series,uint16_t cycle_count,uint16_t weight,float discharge_minimum_voltage,float charging_minimum_voltage,float resting_minimum_voltage,float charging_maximum_voltage,float charging_maximum_current,float nominal_voltage,float discharge_maximum_current,float discharge_maximum_burst_current,float design_capacity,float full_charge_capacity,const char *manufacture_date,const char *serial_number,const char *name)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BATTERY_INFO_LEN];
+    _mav_put_float(buf, 0, discharge_minimum_voltage);
+    _mav_put_float(buf, 4, charging_minimum_voltage);
+    _mav_put_float(buf, 8, resting_minimum_voltage);
+    _mav_put_float(buf, 12, charging_maximum_voltage);
+    _mav_put_float(buf, 16, charging_maximum_current);
+    _mav_put_float(buf, 20, nominal_voltage);
+    _mav_put_float(buf, 24, discharge_maximum_current);
+    _mav_put_float(buf, 28, discharge_maximum_burst_current);
+    _mav_put_float(buf, 32, design_capacity);
+    _mav_put_float(buf, 36, full_charge_capacity);
+    _mav_put_uint16_t(buf, 40, cycle_count);
+    _mav_put_uint16_t(buf, 42, weight);
+    _mav_put_uint8_t(buf, 44, id);
+    _mav_put_uint8_t(buf, 45, battery_function);
+    _mav_put_uint8_t(buf, 46, type);
+    _mav_put_uint8_t(buf, 47, state_of_health);
+    _mav_put_uint8_t(buf, 48, cells_in_series);
+    _mav_put_char_array(buf, 49, manufacture_date, 9);
+    _mav_put_char_array(buf, 58, serial_number, 32);
+    _mav_put_char_array(buf, 90, name, 50);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_BATTERY_INFO_LEN);
+#else
+    mavlink_battery_info_t packet;
+    packet.discharge_minimum_voltage = discharge_minimum_voltage;
+    packet.charging_minimum_voltage = charging_minimum_voltage;
+    packet.resting_minimum_voltage = resting_minimum_voltage;
+    packet.charging_maximum_voltage = charging_maximum_voltage;
+    packet.charging_maximum_current = charging_maximum_current;
+    packet.nominal_voltage = nominal_voltage;
+    packet.discharge_maximum_current = discharge_maximum_current;
+    packet.discharge_maximum_burst_current = discharge_maximum_burst_current;
+    packet.design_capacity = design_capacity;
+    packet.full_charge_capacity = full_charge_capacity;
+    packet.cycle_count = cycle_count;
+    packet.weight = weight;
+    packet.id = id;
+    packet.battery_function = battery_function;
+    packet.type = type;
+    packet.state_of_health = state_of_health;
+    packet.cells_in_series = cells_in_series;
+    mav_array_memcpy(packet.manufacture_date, manufacture_date, sizeof(char)*9);
+    mav_array_memcpy(packet.serial_number, serial_number, sizeof(char)*32);
+    mav_array_memcpy(packet.name, name, sizeof(char)*50);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_BATTERY_INFO_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_BATTERY_INFO;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_BATTERY_INFO_MIN_LEN, MAVLINK_MSG_ID_BATTERY_INFO_LEN, MAVLINK_MSG_ID_BATTERY_INFO_CRC);
+}
+
+/**
+ * @brief Encode a battery_info struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param battery_info C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_battery_info_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_battery_info_t* battery_info)
+{
+    return mavlink_msg_battery_info_pack(system_id, component_id, msg, battery_info->id, battery_info->battery_function, battery_info->type, battery_info->state_of_health, battery_info->cells_in_series, battery_info->cycle_count, battery_info->weight, battery_info->discharge_minimum_voltage, battery_info->charging_minimum_voltage, battery_info->resting_minimum_voltage, battery_info->charging_maximum_voltage, battery_info->charging_maximum_current, battery_info->nominal_voltage, battery_info->discharge_maximum_current, battery_info->discharge_maximum_burst_current, battery_info->design_capacity, battery_info->full_charge_capacity, battery_info->manufacture_date, battery_info->serial_number, battery_info->name);
+}
+
+/**
+ * @brief Encode a battery_info struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param battery_info C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_battery_info_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_battery_info_t* battery_info)
+{
+    return mavlink_msg_battery_info_pack_chan(system_id, component_id, chan, msg, battery_info->id, battery_info->battery_function, battery_info->type, battery_info->state_of_health, battery_info->cells_in_series, battery_info->cycle_count, battery_info->weight, battery_info->discharge_minimum_voltage, battery_info->charging_minimum_voltage, battery_info->resting_minimum_voltage, battery_info->charging_maximum_voltage, battery_info->charging_maximum_current, battery_info->nominal_voltage, battery_info->discharge_maximum_current, battery_info->discharge_maximum_burst_current, battery_info->design_capacity, battery_info->full_charge_capacity, battery_info->manufacture_date, battery_info->serial_number, battery_info->name);
+}
+
+/**
+ * @brief Send a battery_info message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param id  Battery ID
+ * @param battery_function  Function of the battery.
+ * @param type  Type (chemistry) of the battery.
+ * @param state_of_health [%] State of Health (SOH) estimate. Typically 100% at the time of manufacture and will decrease over time and use. -1: field not provided.
+ * @param cells_in_series  Number of battery cells in series. 0: field not provided.
+ * @param cycle_count  Lifetime count of the number of charge/discharge cycles (https://en.wikipedia.org/wiki/Charge_cycle). UINT16_MAX: field not provided.
+ * @param weight [g] Battery weight. 0: field not provided.
+ * @param discharge_minimum_voltage [V] Minimum per-cell voltage when discharging. 0: field not provided.
+ * @param charging_minimum_voltage [V] Minimum per-cell voltage when charging. 0: field not provided.
+ * @param resting_minimum_voltage [V] Minimum per-cell voltage when resting. 0: field not provided.
+ * @param charging_maximum_voltage [V] Maximum per-cell voltage when charged. 0: field not provided.
+ * @param charging_maximum_current [A] Maximum pack continuous charge current. 0: field not provided.
+ * @param nominal_voltage [V] Battery nominal voltage. Used for conversion between Wh and Ah. 0: field not provided.
+ * @param discharge_maximum_current [A] Maximum pack discharge current. 0: field not provided.
+ * @param discharge_maximum_burst_current [A] Maximum pack discharge burst current. 0: field not provided.
+ * @param design_capacity [Ah] Fully charged design capacity. 0: field not provided.
+ * @param full_charge_capacity [Ah] Predicted battery capacity when fully charged (accounting for battery degradation). NAN: field not provided.
+ * @param manufacture_date  Manufacture date (DDMMYYYY) in ASCII characters, 0 terminated. All 0: field not provided.
+ * @param serial_number  Serial number in ASCII characters, 0 terminated. All 0: field not provided.
+ * @param name  Battery device name. Formatted as manufacturer name then product name, separated with an underscore (in ASCII characters), 0 terminated. All 0: field not provided.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_battery_info_send(mavlink_channel_t chan, uint8_t id, uint8_t battery_function, uint8_t type, uint8_t state_of_health, uint8_t cells_in_series, uint16_t cycle_count, uint16_t weight, float discharge_minimum_voltage, float charging_minimum_voltage, float resting_minimum_voltage, float charging_maximum_voltage, float charging_maximum_current, float nominal_voltage, float discharge_maximum_current, float discharge_maximum_burst_current, float design_capacity, float full_charge_capacity, const char *manufacture_date, const char *serial_number, const char *name)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BATTERY_INFO_LEN];
+    _mav_put_float(buf, 0, discharge_minimum_voltage);
+    _mav_put_float(buf, 4, charging_minimum_voltage);
+    _mav_put_float(buf, 8, resting_minimum_voltage);
+    _mav_put_float(buf, 12, charging_maximum_voltage);
+    _mav_put_float(buf, 16, charging_maximum_current);
+    _mav_put_float(buf, 20, nominal_voltage);
+    _mav_put_float(buf, 24, discharge_maximum_current);
+    _mav_put_float(buf, 28, discharge_maximum_burst_current);
+    _mav_put_float(buf, 32, design_capacity);
+    _mav_put_float(buf, 36, full_charge_capacity);
+    _mav_put_uint16_t(buf, 40, cycle_count);
+    _mav_put_uint16_t(buf, 42, weight);
+    _mav_put_uint8_t(buf, 44, id);
+    _mav_put_uint8_t(buf, 45, battery_function);
+    _mav_put_uint8_t(buf, 46, type);
+    _mav_put_uint8_t(buf, 47, state_of_health);
+    _mav_put_uint8_t(buf, 48, cells_in_series);
+    _mav_put_char_array(buf, 49, manufacture_date, 9);
+    _mav_put_char_array(buf, 58, serial_number, 32);
+    _mav_put_char_array(buf, 90, name, 50);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_INFO, buf, MAVLINK_MSG_ID_BATTERY_INFO_MIN_LEN, MAVLINK_MSG_ID_BATTERY_INFO_LEN, MAVLINK_MSG_ID_BATTERY_INFO_CRC);
+#else
+    mavlink_battery_info_t packet;
+    packet.discharge_minimum_voltage = discharge_minimum_voltage;
+    packet.charging_minimum_voltage = charging_minimum_voltage;
+    packet.resting_minimum_voltage = resting_minimum_voltage;
+    packet.charging_maximum_voltage = charging_maximum_voltage;
+    packet.charging_maximum_current = charging_maximum_current;
+    packet.nominal_voltage = nominal_voltage;
+    packet.discharge_maximum_current = discharge_maximum_current;
+    packet.discharge_maximum_burst_current = discharge_maximum_burst_current;
+    packet.design_capacity = design_capacity;
+    packet.full_charge_capacity = full_charge_capacity;
+    packet.cycle_count = cycle_count;
+    packet.weight = weight;
+    packet.id = id;
+    packet.battery_function = battery_function;
+    packet.type = type;
+    packet.state_of_health = state_of_health;
+    packet.cells_in_series = cells_in_series;
+    mav_array_memcpy(packet.manufacture_date, manufacture_date, sizeof(char)*9);
+    mav_array_memcpy(packet.serial_number, serial_number, sizeof(char)*32);
+    mav_array_memcpy(packet.name, name, sizeof(char)*50);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_INFO, (const char *)&packet, MAVLINK_MSG_ID_BATTERY_INFO_MIN_LEN, MAVLINK_MSG_ID_BATTERY_INFO_LEN, MAVLINK_MSG_ID_BATTERY_INFO_CRC);
+#endif
+}
+
+/**
+ * @brief Send a battery_info message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_battery_info_send_struct(mavlink_channel_t chan, const mavlink_battery_info_t* battery_info)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_battery_info_send(chan, battery_info->id, battery_info->battery_function, battery_info->type, battery_info->state_of_health, battery_info->cells_in_series, battery_info->cycle_count, battery_info->weight, battery_info->discharge_minimum_voltage, battery_info->charging_minimum_voltage, battery_info->resting_minimum_voltage, battery_info->charging_maximum_voltage, battery_info->charging_maximum_current, battery_info->nominal_voltage, battery_info->discharge_maximum_current, battery_info->discharge_maximum_burst_current, battery_info->design_capacity, battery_info->full_charge_capacity, battery_info->manufacture_date, battery_info->serial_number, battery_info->name);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_INFO, (const char *)battery_info, MAVLINK_MSG_ID_BATTERY_INFO_MIN_LEN, MAVLINK_MSG_ID_BATTERY_INFO_LEN, MAVLINK_MSG_ID_BATTERY_INFO_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_BATTERY_INFO_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_battery_info_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t id, uint8_t battery_function, uint8_t type, uint8_t state_of_health, uint8_t cells_in_series, uint16_t cycle_count, uint16_t weight, float discharge_minimum_voltage, float charging_minimum_voltage, float resting_minimum_voltage, float charging_maximum_voltage, float charging_maximum_current, float nominal_voltage, float discharge_maximum_current, float discharge_maximum_burst_current, float design_capacity, float full_charge_capacity, const char *manufacture_date, const char *serial_number, const char *name)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_float(buf, 0, discharge_minimum_voltage);
+    _mav_put_float(buf, 4, charging_minimum_voltage);
+    _mav_put_float(buf, 8, resting_minimum_voltage);
+    _mav_put_float(buf, 12, charging_maximum_voltage);
+    _mav_put_float(buf, 16, charging_maximum_current);
+    _mav_put_float(buf, 20, nominal_voltage);
+    _mav_put_float(buf, 24, discharge_maximum_current);
+    _mav_put_float(buf, 28, discharge_maximum_burst_current);
+    _mav_put_float(buf, 32, design_capacity);
+    _mav_put_float(buf, 36, full_charge_capacity);
+    _mav_put_uint16_t(buf, 40, cycle_count);
+    _mav_put_uint16_t(buf, 42, weight);
+    _mav_put_uint8_t(buf, 44, id);
+    _mav_put_uint8_t(buf, 45, battery_function);
+    _mav_put_uint8_t(buf, 46, type);
+    _mav_put_uint8_t(buf, 47, state_of_health);
+    _mav_put_uint8_t(buf, 48, cells_in_series);
+    _mav_put_char_array(buf, 49, manufacture_date, 9);
+    _mav_put_char_array(buf, 58, serial_number, 32);
+    _mav_put_char_array(buf, 90, name, 50);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_INFO, buf, MAVLINK_MSG_ID_BATTERY_INFO_MIN_LEN, MAVLINK_MSG_ID_BATTERY_INFO_LEN, MAVLINK_MSG_ID_BATTERY_INFO_CRC);
+#else
+    mavlink_battery_info_t *packet = (mavlink_battery_info_t *)msgbuf;
+    packet->discharge_minimum_voltage = discharge_minimum_voltage;
+    packet->charging_minimum_voltage = charging_minimum_voltage;
+    packet->resting_minimum_voltage = resting_minimum_voltage;
+    packet->charging_maximum_voltage = charging_maximum_voltage;
+    packet->charging_maximum_current = charging_maximum_current;
+    packet->nominal_voltage = nominal_voltage;
+    packet->discharge_maximum_current = discharge_maximum_current;
+    packet->discharge_maximum_burst_current = discharge_maximum_burst_current;
+    packet->design_capacity = design_capacity;
+    packet->full_charge_capacity = full_charge_capacity;
+    packet->cycle_count = cycle_count;
+    packet->weight = weight;
+    packet->id = id;
+    packet->battery_function = battery_function;
+    packet->type = type;
+    packet->state_of_health = state_of_health;
+    packet->cells_in_series = cells_in_series;
+    mav_array_memcpy(packet->manufacture_date, manufacture_date, sizeof(char)*9);
+    mav_array_memcpy(packet->serial_number, serial_number, sizeof(char)*32);
+    mav_array_memcpy(packet->name, name, sizeof(char)*50);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_INFO, (const char *)packet, MAVLINK_MSG_ID_BATTERY_INFO_MIN_LEN, MAVLINK_MSG_ID_BATTERY_INFO_LEN, MAVLINK_MSG_ID_BATTERY_INFO_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE BATTERY_INFO UNPACKING
+
+
+/**
+ * @brief Get field id from battery_info message
+ *
+ * @return  Battery ID
+ */
+static inline uint8_t mavlink_msg_battery_info_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  44);
+}
+
+/**
+ * @brief Get field battery_function from battery_info message
+ *
+ * @return  Function of the battery.
+ */
+static inline uint8_t mavlink_msg_battery_info_get_battery_function(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  45);
+}
+
+/**
+ * @brief Get field type from battery_info message
+ *
+ * @return  Type (chemistry) of the battery.
+ */
+static inline uint8_t mavlink_msg_battery_info_get_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  46);
+}
+
+/**
+ * @brief Get field state_of_health from battery_info message
+ *
+ * @return [%] State of Health (SOH) estimate. Typically 100% at the time of manufacture and will decrease over time and use. -1: field not provided.
+ */
+static inline uint8_t mavlink_msg_battery_info_get_state_of_health(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  47);
+}
+
+/**
+ * @brief Get field cells_in_series from battery_info message
+ *
+ * @return  Number of battery cells in series. 0: field not provided.
+ */
+static inline uint8_t mavlink_msg_battery_info_get_cells_in_series(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  48);
+}
+
+/**
+ * @brief Get field cycle_count from battery_info message
+ *
+ * @return  Lifetime count of the number of charge/discharge cycles (https://en.wikipedia.org/wiki/Charge_cycle). UINT16_MAX: field not provided.
+ */
+static inline uint16_t mavlink_msg_battery_info_get_cycle_count(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  40);
+}
+
+/**
+ * @brief Get field weight from battery_info message
+ *
+ * @return [g] Battery weight. 0: field not provided.
+ */
+static inline uint16_t mavlink_msg_battery_info_get_weight(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  42);
+}
+
+/**
+ * @brief Get field discharge_minimum_voltage from battery_info message
+ *
+ * @return [V] Minimum per-cell voltage when discharging. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_discharge_minimum_voltage(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  0);
+}
+
+/**
+ * @brief Get field charging_minimum_voltage from battery_info message
+ *
+ * @return [V] Minimum per-cell voltage when charging. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_charging_minimum_voltage(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field resting_minimum_voltage from battery_info message
+ *
+ * @return [V] Minimum per-cell voltage when resting. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_resting_minimum_voltage(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field charging_maximum_voltage from battery_info message
+ *
+ * @return [V] Maximum per-cell voltage when charged. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_charging_maximum_voltage(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field charging_maximum_current from battery_info message
+ *
+ * @return [A] Maximum pack continuous charge current. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_charging_maximum_current(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field nominal_voltage from battery_info message
+ *
+ * @return [V] Battery nominal voltage. Used for conversion between Wh and Ah. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_nominal_voltage(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field discharge_maximum_current from battery_info message
+ *
+ * @return [A] Maximum pack discharge current. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_discharge_maximum_current(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field discharge_maximum_burst_current from battery_info message
+ *
+ * @return [A] Maximum pack discharge burst current. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_discharge_maximum_burst_current(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field design_capacity from battery_info message
+ *
+ * @return [Ah] Fully charged design capacity. 0: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_design_capacity(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field full_charge_capacity from battery_info message
+ *
+ * @return [Ah] Predicted battery capacity when fully charged (accounting for battery degradation). NAN: field not provided.
+ */
+static inline float mavlink_msg_battery_info_get_full_charge_capacity(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field manufacture_date from battery_info message
+ *
+ * @return  Manufacture date (DDMMYYYY) in ASCII characters, 0 terminated. All 0: field not provided.
+ */
+static inline uint16_t mavlink_msg_battery_info_get_manufacture_date(const mavlink_message_t* msg, char *manufacture_date)
+{
+    return _MAV_RETURN_char_array(msg, manufacture_date, 9,  49);
+}
+
+/**
+ * @brief Get field serial_number from battery_info message
+ *
+ * @return  Serial number in ASCII characters, 0 terminated. All 0: field not provided.
+ */
+static inline uint16_t mavlink_msg_battery_info_get_serial_number(const mavlink_message_t* msg, char *serial_number)
+{
+    return _MAV_RETURN_char_array(msg, serial_number, 32,  58);
+}
+
+/**
+ * @brief Get field name from battery_info message
+ *
+ * @return  Battery device name. Formatted as manufacturer name then product name, separated with an underscore (in ASCII characters), 0 terminated. All 0: field not provided.
+ */
+static inline uint16_t mavlink_msg_battery_info_get_name(const mavlink_message_t* msg, char *name)
+{
+    return _MAV_RETURN_char_array(msg, name, 50,  90);
+}
+
+/**
+ * @brief Decode a battery_info message into a struct
+ *
+ * @param msg The message to decode
+ * @param battery_info C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_battery_info_decode(const mavlink_message_t* msg, mavlink_battery_info_t* battery_info)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    battery_info->discharge_minimum_voltage = mavlink_msg_battery_info_get_discharge_minimum_voltage(msg);
+    battery_info->charging_minimum_voltage = mavlink_msg_battery_info_get_charging_minimum_voltage(msg);
+    battery_info->resting_minimum_voltage = mavlink_msg_battery_info_get_resting_minimum_voltage(msg);
+    battery_info->charging_maximum_voltage = mavlink_msg_battery_info_get_charging_maximum_voltage(msg);
+    battery_info->charging_maximum_current = mavlink_msg_battery_info_get_charging_maximum_current(msg);
+    battery_info->nominal_voltage = mavlink_msg_battery_info_get_nominal_voltage(msg);
+    battery_info->discharge_maximum_current = mavlink_msg_battery_info_get_discharge_maximum_current(msg);
+    battery_info->discharge_maximum_burst_current = mavlink_msg_battery_info_get_discharge_maximum_burst_current(msg);
+    battery_info->design_capacity = mavlink_msg_battery_info_get_design_capacity(msg);
+    battery_info->full_charge_capacity = mavlink_msg_battery_info_get_full_charge_capacity(msg);
+    battery_info->cycle_count = mavlink_msg_battery_info_get_cycle_count(msg);
+    battery_info->weight = mavlink_msg_battery_info_get_weight(msg);
+    battery_info->id = mavlink_msg_battery_info_get_id(msg);
+    battery_info->battery_function = mavlink_msg_battery_info_get_battery_function(msg);
+    battery_info->type = mavlink_msg_battery_info_get_type(msg);
+    battery_info->state_of_health = mavlink_msg_battery_info_get_state_of_health(msg);
+    battery_info->cells_in_series = mavlink_msg_battery_info_get_cells_in_series(msg);
+    mavlink_msg_battery_info_get_manufacture_date(msg, battery_info->manufacture_date);
+    mavlink_msg_battery_info_get_serial_number(msg, battery_info->serial_number);
+    mavlink_msg_battery_info_get_name(msg, battery_info->name);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_BATTERY_INFO_LEN? msg->len : MAVLINK_MSG_ID_BATTERY_INFO_LEN;
+        memset(battery_info, 0, MAVLINK_MSG_ID_BATTERY_INFO_LEN);
+    memcpy(battery_info, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 531 - 0
v2.0/common/mavlink_msg_battery_status.h

@@ -0,0 +1,531 @@
+#pragma once
+// MESSAGE BATTERY_STATUS PACKING
+
+#define MAVLINK_MSG_ID_BATTERY_STATUS 147
+
+MAVPACKED(
+typedef struct __mavlink_battery_status_t {
+ int32_t current_consumed; /*< [mAh] Consumed charge, -1: autopilot does not provide consumption estimate*/
+ int32_t energy_consumed; /*< [hJ] Consumed energy, -1: autopilot does not provide energy consumption estimate*/
+ int16_t temperature; /*< [cdegC] Temperature of the battery. INT16_MAX for unknown temperature.*/
+ uint16_t voltages[10]; /*< [mV] Battery voltage of cells 1 to 10 (see voltages_ext for cells 11-14). Cells in this field above the valid cell count for this battery should have the UINT16_MAX value. If individual cell voltages are unknown or not measured for this battery, then the overall battery voltage should be filled in cell 0, with all others set to UINT16_MAX. If the voltage of the battery is greater than (UINT16_MAX - 1), then cell 0 should be set to (UINT16_MAX - 1), and cell 1 to the remaining voltage. This can be extended to multiple cells if the total voltage is greater than 2 * (UINT16_MAX - 1).*/
+ int16_t current_battery; /*< [cA] Battery current, -1: autopilot does not measure the current*/
+ uint8_t id; /*<  Battery ID*/
+ uint8_t battery_function; /*<  Function of the battery*/
+ uint8_t type; /*<  Type (chemistry) of the battery*/
+ int8_t battery_remaining; /*< [%] Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery.*/
+ int32_t time_remaining; /*< [s] Remaining battery time, 0: autopilot does not provide remaining battery time estimate*/
+ uint8_t charge_state; /*<  State for extent of discharge, provided by autopilot for warning or external reactions*/
+ uint16_t voltages_ext[4]; /*< [mV] Battery voltages for cells 11 to 14. Cells above the valid cell count for this battery should have a value of 0, where zero indicates not supported (note, this is different than for the voltages field and allows empty byte truncation). If the measured value is 0 then 1 should be sent instead.*/
+ uint8_t mode; /*<  Battery mode. Default (0) is that battery mode reporting is not supported or battery is in normal-use mode.*/
+ uint32_t fault_bitmask; /*<  Fault/health indications. These should be set when charge_state is MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY (if not, fault reporting is not supported).*/
+}) mavlink_battery_status_t;
+
+#define MAVLINK_MSG_ID_BATTERY_STATUS_LEN 54
+#define MAVLINK_MSG_ID_BATTERY_STATUS_MIN_LEN 36
+#define MAVLINK_MSG_ID_147_LEN 54
+#define MAVLINK_MSG_ID_147_MIN_LEN 36
+
+#define MAVLINK_MSG_ID_BATTERY_STATUS_CRC 154
+#define MAVLINK_MSG_ID_147_CRC 154
+
+#define MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN 10
+#define MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_EXT_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_BATTERY_STATUS { \
+    147, \
+    "BATTERY_STATUS", \
+    14, \
+    {  { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_battery_status_t, id) }, \
+         { "battery_function", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_battery_status_t, battery_function) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_battery_status_t, type) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_battery_status_t, temperature) }, \
+         { "voltages", NULL, MAVLINK_TYPE_UINT16_T, 10, 10, offsetof(mavlink_battery_status_t, voltages) }, \
+         { "current_battery", NULL, MAVLINK_TYPE_INT16_T, 0, 30, offsetof(mavlink_battery_status_t, current_battery) }, \
+         { "current_consumed", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_battery_status_t, current_consumed) }, \
+         { "energy_consumed", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_battery_status_t, energy_consumed) }, \
+         { "battery_remaining", NULL, MAVLINK_TYPE_INT8_T, 0, 35, offsetof(mavlink_battery_status_t, battery_remaining) }, \
+         { "time_remaining", NULL, MAVLINK_TYPE_INT32_T, 0, 36, offsetof(mavlink_battery_status_t, time_remaining) }, \
+         { "charge_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_battery_status_t, charge_state) }, \
+         { "voltages_ext", NULL, MAVLINK_TYPE_UINT16_T, 4, 41, offsetof(mavlink_battery_status_t, voltages_ext) }, \
+         { "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 49, offsetof(mavlink_battery_status_t, mode) }, \
+         { "fault_bitmask", NULL, MAVLINK_TYPE_UINT32_T, 0, 50, offsetof(mavlink_battery_status_t, fault_bitmask) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_BATTERY_STATUS { \
+    "BATTERY_STATUS", \
+    14, \
+    {  { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_battery_status_t, id) }, \
+         { "battery_function", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_battery_status_t, battery_function) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_battery_status_t, type) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 8, offsetof(mavlink_battery_status_t, temperature) }, \
+         { "voltages", NULL, MAVLINK_TYPE_UINT16_T, 10, 10, offsetof(mavlink_battery_status_t, voltages) }, \
+         { "current_battery", NULL, MAVLINK_TYPE_INT16_T, 0, 30, offsetof(mavlink_battery_status_t, current_battery) }, \
+         { "current_consumed", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_battery_status_t, current_consumed) }, \
+         { "energy_consumed", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_battery_status_t, energy_consumed) }, \
+         { "battery_remaining", NULL, MAVLINK_TYPE_INT8_T, 0, 35, offsetof(mavlink_battery_status_t, battery_remaining) }, \
+         { "time_remaining", NULL, MAVLINK_TYPE_INT32_T, 0, 36, offsetof(mavlink_battery_status_t, time_remaining) }, \
+         { "charge_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_battery_status_t, charge_state) }, \
+         { "voltages_ext", NULL, MAVLINK_TYPE_UINT16_T, 4, 41, offsetof(mavlink_battery_status_t, voltages_ext) }, \
+         { "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 49, offsetof(mavlink_battery_status_t, mode) }, \
+         { "fault_bitmask", NULL, MAVLINK_TYPE_UINT32_T, 0, 50, offsetof(mavlink_battery_status_t, fault_bitmask) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a battery_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param id  Battery ID
+ * @param battery_function  Function of the battery
+ * @param type  Type (chemistry) of the battery
+ * @param temperature [cdegC] Temperature of the battery. INT16_MAX for unknown temperature.
+ * @param voltages [mV] Battery voltage of cells 1 to 10 (see voltages_ext for cells 11-14). Cells in this field above the valid cell count for this battery should have the UINT16_MAX value. If individual cell voltages are unknown or not measured for this battery, then the overall battery voltage should be filled in cell 0, with all others set to UINT16_MAX. If the voltage of the battery is greater than (UINT16_MAX - 1), then cell 0 should be set to (UINT16_MAX - 1), and cell 1 to the remaining voltage. This can be extended to multiple cells if the total voltage is greater than 2 * (UINT16_MAX - 1).
+ * @param current_battery [cA] Battery current, -1: autopilot does not measure the current
+ * @param current_consumed [mAh] Consumed charge, -1: autopilot does not provide consumption estimate
+ * @param energy_consumed [hJ] Consumed energy, -1: autopilot does not provide energy consumption estimate
+ * @param battery_remaining [%] Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery.
+ * @param time_remaining [s] Remaining battery time, 0: autopilot does not provide remaining battery time estimate
+ * @param charge_state  State for extent of discharge, provided by autopilot for warning or external reactions
+ * @param voltages_ext [mV] Battery voltages for cells 11 to 14. Cells above the valid cell count for this battery should have a value of 0, where zero indicates not supported (note, this is different than for the voltages field and allows empty byte truncation). If the measured value is 0 then 1 should be sent instead.
+ * @param mode  Battery mode. Default (0) is that battery mode reporting is not supported or battery is in normal-use mode.
+ * @param fault_bitmask  Fault/health indications. These should be set when charge_state is MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY (if not, fault reporting is not supported).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_battery_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t id, uint8_t battery_function, uint8_t type, int16_t temperature, const uint16_t *voltages, int16_t current_battery, int32_t current_consumed, int32_t energy_consumed, int8_t battery_remaining, int32_t time_remaining, uint8_t charge_state, const uint16_t *voltages_ext, uint8_t mode, uint32_t fault_bitmask)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BATTERY_STATUS_LEN];
+    _mav_put_int32_t(buf, 0, current_consumed);
+    _mav_put_int32_t(buf, 4, energy_consumed);
+    _mav_put_int16_t(buf, 8, temperature);
+    _mav_put_int16_t(buf, 30, current_battery);
+    _mav_put_uint8_t(buf, 32, id);
+    _mav_put_uint8_t(buf, 33, battery_function);
+    _mav_put_uint8_t(buf, 34, type);
+    _mav_put_int8_t(buf, 35, battery_remaining);
+    _mav_put_int32_t(buf, 36, time_remaining);
+    _mav_put_uint8_t(buf, 40, charge_state);
+    _mav_put_uint8_t(buf, 49, mode);
+    _mav_put_uint32_t(buf, 50, fault_bitmask);
+    _mav_put_uint16_t_array(buf, 10, voltages, 10);
+    _mav_put_uint16_t_array(buf, 41, voltages_ext, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_BATTERY_STATUS_LEN);
+#else
+    mavlink_battery_status_t packet;
+    packet.current_consumed = current_consumed;
+    packet.energy_consumed = energy_consumed;
+    packet.temperature = temperature;
+    packet.current_battery = current_battery;
+    packet.id = id;
+    packet.battery_function = battery_function;
+    packet.type = type;
+    packet.battery_remaining = battery_remaining;
+    packet.time_remaining = time_remaining;
+    packet.charge_state = charge_state;
+    packet.mode = mode;
+    packet.fault_bitmask = fault_bitmask;
+    mav_array_memcpy(packet.voltages, voltages, sizeof(uint16_t)*10);
+    mav_array_memcpy(packet.voltages_ext, voltages_ext, sizeof(uint16_t)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_BATTERY_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_BATTERY_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_BATTERY_STATUS_MIN_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a battery_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param id  Battery ID
+ * @param battery_function  Function of the battery
+ * @param type  Type (chemistry) of the battery
+ * @param temperature [cdegC] Temperature of the battery. INT16_MAX for unknown temperature.
+ * @param voltages [mV] Battery voltage of cells 1 to 10 (see voltages_ext for cells 11-14). Cells in this field above the valid cell count for this battery should have the UINT16_MAX value. If individual cell voltages are unknown or not measured for this battery, then the overall battery voltage should be filled in cell 0, with all others set to UINT16_MAX. If the voltage of the battery is greater than (UINT16_MAX - 1), then cell 0 should be set to (UINT16_MAX - 1), and cell 1 to the remaining voltage. This can be extended to multiple cells if the total voltage is greater than 2 * (UINT16_MAX - 1).
+ * @param current_battery [cA] Battery current, -1: autopilot does not measure the current
+ * @param current_consumed [mAh] Consumed charge, -1: autopilot does not provide consumption estimate
+ * @param energy_consumed [hJ] Consumed energy, -1: autopilot does not provide energy consumption estimate
+ * @param battery_remaining [%] Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery.
+ * @param time_remaining [s] Remaining battery time, 0: autopilot does not provide remaining battery time estimate
+ * @param charge_state  State for extent of discharge, provided by autopilot for warning or external reactions
+ * @param voltages_ext [mV] Battery voltages for cells 11 to 14. Cells above the valid cell count for this battery should have a value of 0, where zero indicates not supported (note, this is different than for the voltages field and allows empty byte truncation). If the measured value is 0 then 1 should be sent instead.
+ * @param mode  Battery mode. Default (0) is that battery mode reporting is not supported or battery is in normal-use mode.
+ * @param fault_bitmask  Fault/health indications. These should be set when charge_state is MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY (if not, fault reporting is not supported).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_battery_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t id,uint8_t battery_function,uint8_t type,int16_t temperature,const uint16_t *voltages,int16_t current_battery,int32_t current_consumed,int32_t energy_consumed,int8_t battery_remaining,int32_t time_remaining,uint8_t charge_state,const uint16_t *voltages_ext,uint8_t mode,uint32_t fault_bitmask)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BATTERY_STATUS_LEN];
+    _mav_put_int32_t(buf, 0, current_consumed);
+    _mav_put_int32_t(buf, 4, energy_consumed);
+    _mav_put_int16_t(buf, 8, temperature);
+    _mav_put_int16_t(buf, 30, current_battery);
+    _mav_put_uint8_t(buf, 32, id);
+    _mav_put_uint8_t(buf, 33, battery_function);
+    _mav_put_uint8_t(buf, 34, type);
+    _mav_put_int8_t(buf, 35, battery_remaining);
+    _mav_put_int32_t(buf, 36, time_remaining);
+    _mav_put_uint8_t(buf, 40, charge_state);
+    _mav_put_uint8_t(buf, 49, mode);
+    _mav_put_uint32_t(buf, 50, fault_bitmask);
+    _mav_put_uint16_t_array(buf, 10, voltages, 10);
+    _mav_put_uint16_t_array(buf, 41, voltages_ext, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_BATTERY_STATUS_LEN);
+#else
+    mavlink_battery_status_t packet;
+    packet.current_consumed = current_consumed;
+    packet.energy_consumed = energy_consumed;
+    packet.temperature = temperature;
+    packet.current_battery = current_battery;
+    packet.id = id;
+    packet.battery_function = battery_function;
+    packet.type = type;
+    packet.battery_remaining = battery_remaining;
+    packet.time_remaining = time_remaining;
+    packet.charge_state = charge_state;
+    packet.mode = mode;
+    packet.fault_bitmask = fault_bitmask;
+    mav_array_memcpy(packet.voltages, voltages, sizeof(uint16_t)*10);
+    mav_array_memcpy(packet.voltages_ext, voltages_ext, sizeof(uint16_t)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_BATTERY_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_BATTERY_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_BATTERY_STATUS_MIN_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a battery_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param battery_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_battery_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_battery_status_t* battery_status)
+{
+    return mavlink_msg_battery_status_pack(system_id, component_id, msg, battery_status->id, battery_status->battery_function, battery_status->type, battery_status->temperature, battery_status->voltages, battery_status->current_battery, battery_status->current_consumed, battery_status->energy_consumed, battery_status->battery_remaining, battery_status->time_remaining, battery_status->charge_state, battery_status->voltages_ext, battery_status->mode, battery_status->fault_bitmask);
+}
+
+/**
+ * @brief Encode a battery_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param battery_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_battery_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_battery_status_t* battery_status)
+{
+    return mavlink_msg_battery_status_pack_chan(system_id, component_id, chan, msg, battery_status->id, battery_status->battery_function, battery_status->type, battery_status->temperature, battery_status->voltages, battery_status->current_battery, battery_status->current_consumed, battery_status->energy_consumed, battery_status->battery_remaining, battery_status->time_remaining, battery_status->charge_state, battery_status->voltages_ext, battery_status->mode, battery_status->fault_bitmask);
+}
+
+/**
+ * @brief Send a battery_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param id  Battery ID
+ * @param battery_function  Function of the battery
+ * @param type  Type (chemistry) of the battery
+ * @param temperature [cdegC] Temperature of the battery. INT16_MAX for unknown temperature.
+ * @param voltages [mV] Battery voltage of cells 1 to 10 (see voltages_ext for cells 11-14). Cells in this field above the valid cell count for this battery should have the UINT16_MAX value. If individual cell voltages are unknown or not measured for this battery, then the overall battery voltage should be filled in cell 0, with all others set to UINT16_MAX. If the voltage of the battery is greater than (UINT16_MAX - 1), then cell 0 should be set to (UINT16_MAX - 1), and cell 1 to the remaining voltage. This can be extended to multiple cells if the total voltage is greater than 2 * (UINT16_MAX - 1).
+ * @param current_battery [cA] Battery current, -1: autopilot does not measure the current
+ * @param current_consumed [mAh] Consumed charge, -1: autopilot does not provide consumption estimate
+ * @param energy_consumed [hJ] Consumed energy, -1: autopilot does not provide energy consumption estimate
+ * @param battery_remaining [%] Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery.
+ * @param time_remaining [s] Remaining battery time, 0: autopilot does not provide remaining battery time estimate
+ * @param charge_state  State for extent of discharge, provided by autopilot for warning or external reactions
+ * @param voltages_ext [mV] Battery voltages for cells 11 to 14. Cells above the valid cell count for this battery should have a value of 0, where zero indicates not supported (note, this is different than for the voltages field and allows empty byte truncation). If the measured value is 0 then 1 should be sent instead.
+ * @param mode  Battery mode. Default (0) is that battery mode reporting is not supported or battery is in normal-use mode.
+ * @param fault_bitmask  Fault/health indications. These should be set when charge_state is MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY (if not, fault reporting is not supported).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_battery_status_send(mavlink_channel_t chan, uint8_t id, uint8_t battery_function, uint8_t type, int16_t temperature, const uint16_t *voltages, int16_t current_battery, int32_t current_consumed, int32_t energy_consumed, int8_t battery_remaining, int32_t time_remaining, uint8_t charge_state, const uint16_t *voltages_ext, uint8_t mode, uint32_t fault_bitmask)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BATTERY_STATUS_LEN];
+    _mav_put_int32_t(buf, 0, current_consumed);
+    _mav_put_int32_t(buf, 4, energy_consumed);
+    _mav_put_int16_t(buf, 8, temperature);
+    _mav_put_int16_t(buf, 30, current_battery);
+    _mav_put_uint8_t(buf, 32, id);
+    _mav_put_uint8_t(buf, 33, battery_function);
+    _mav_put_uint8_t(buf, 34, type);
+    _mav_put_int8_t(buf, 35, battery_remaining);
+    _mav_put_int32_t(buf, 36, time_remaining);
+    _mav_put_uint8_t(buf, 40, charge_state);
+    _mav_put_uint8_t(buf, 49, mode);
+    _mav_put_uint32_t(buf, 50, fault_bitmask);
+    _mav_put_uint16_t_array(buf, 10, voltages, 10);
+    _mav_put_uint16_t_array(buf, 41, voltages_ext, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_STATUS, buf, MAVLINK_MSG_ID_BATTERY_STATUS_MIN_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_CRC);
+#else
+    mavlink_battery_status_t packet;
+    packet.current_consumed = current_consumed;
+    packet.energy_consumed = energy_consumed;
+    packet.temperature = temperature;
+    packet.current_battery = current_battery;
+    packet.id = id;
+    packet.battery_function = battery_function;
+    packet.type = type;
+    packet.battery_remaining = battery_remaining;
+    packet.time_remaining = time_remaining;
+    packet.charge_state = charge_state;
+    packet.mode = mode;
+    packet.fault_bitmask = fault_bitmask;
+    mav_array_memcpy(packet.voltages, voltages, sizeof(uint16_t)*10);
+    mav_array_memcpy(packet.voltages_ext, voltages_ext, sizeof(uint16_t)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_STATUS, (const char *)&packet, MAVLINK_MSG_ID_BATTERY_STATUS_MIN_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a battery_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_battery_status_send_struct(mavlink_channel_t chan, const mavlink_battery_status_t* battery_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_battery_status_send(chan, battery_status->id, battery_status->battery_function, battery_status->type, battery_status->temperature, battery_status->voltages, battery_status->current_battery, battery_status->current_consumed, battery_status->energy_consumed, battery_status->battery_remaining, battery_status->time_remaining, battery_status->charge_state, battery_status->voltages_ext, battery_status->mode, battery_status->fault_bitmask);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_STATUS, (const char *)battery_status, MAVLINK_MSG_ID_BATTERY_STATUS_MIN_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_BATTERY_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_battery_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t id, uint8_t battery_function, uint8_t type, int16_t temperature, const uint16_t *voltages, int16_t current_battery, int32_t current_consumed, int32_t energy_consumed, int8_t battery_remaining, int32_t time_remaining, uint8_t charge_state, const uint16_t *voltages_ext, uint8_t mode, uint32_t fault_bitmask)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_int32_t(buf, 0, current_consumed);
+    _mav_put_int32_t(buf, 4, energy_consumed);
+    _mav_put_int16_t(buf, 8, temperature);
+    _mav_put_int16_t(buf, 30, current_battery);
+    _mav_put_uint8_t(buf, 32, id);
+    _mav_put_uint8_t(buf, 33, battery_function);
+    _mav_put_uint8_t(buf, 34, type);
+    _mav_put_int8_t(buf, 35, battery_remaining);
+    _mav_put_int32_t(buf, 36, time_remaining);
+    _mav_put_uint8_t(buf, 40, charge_state);
+    _mav_put_uint8_t(buf, 49, mode);
+    _mav_put_uint32_t(buf, 50, fault_bitmask);
+    _mav_put_uint16_t_array(buf, 10, voltages, 10);
+    _mav_put_uint16_t_array(buf, 41, voltages_ext, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_STATUS, buf, MAVLINK_MSG_ID_BATTERY_STATUS_MIN_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_CRC);
+#else
+    mavlink_battery_status_t *packet = (mavlink_battery_status_t *)msgbuf;
+    packet->current_consumed = current_consumed;
+    packet->energy_consumed = energy_consumed;
+    packet->temperature = temperature;
+    packet->current_battery = current_battery;
+    packet->id = id;
+    packet->battery_function = battery_function;
+    packet->type = type;
+    packet->battery_remaining = battery_remaining;
+    packet->time_remaining = time_remaining;
+    packet->charge_state = charge_state;
+    packet->mode = mode;
+    packet->fault_bitmask = fault_bitmask;
+    mav_array_memcpy(packet->voltages, voltages, sizeof(uint16_t)*10);
+    mav_array_memcpy(packet->voltages_ext, voltages_ext, sizeof(uint16_t)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BATTERY_STATUS, (const char *)packet, MAVLINK_MSG_ID_BATTERY_STATUS_MIN_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_LEN, MAVLINK_MSG_ID_BATTERY_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE BATTERY_STATUS UNPACKING
+
+
+/**
+ * @brief Get field id from battery_status message
+ *
+ * @return  Battery ID
+ */
+static inline uint8_t mavlink_msg_battery_status_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field battery_function from battery_status message
+ *
+ * @return  Function of the battery
+ */
+static inline uint8_t mavlink_msg_battery_status_get_battery_function(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field type from battery_status message
+ *
+ * @return  Type (chemistry) of the battery
+ */
+static inline uint8_t mavlink_msg_battery_status_get_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field temperature from battery_status message
+ *
+ * @return [cdegC] Temperature of the battery. INT16_MAX for unknown temperature.
+ */
+static inline int16_t mavlink_msg_battery_status_get_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  8);
+}
+
+/**
+ * @brief Get field voltages from battery_status message
+ *
+ * @return [mV] Battery voltage of cells 1 to 10 (see voltages_ext for cells 11-14). Cells in this field above the valid cell count for this battery should have the UINT16_MAX value. If individual cell voltages are unknown or not measured for this battery, then the overall battery voltage should be filled in cell 0, with all others set to UINT16_MAX. If the voltage of the battery is greater than (UINT16_MAX - 1), then cell 0 should be set to (UINT16_MAX - 1), and cell 1 to the remaining voltage. This can be extended to multiple cells if the total voltage is greater than 2 * (UINT16_MAX - 1).
+ */
+static inline uint16_t mavlink_msg_battery_status_get_voltages(const mavlink_message_t* msg, uint16_t *voltages)
+{
+    return _MAV_RETURN_uint16_t_array(msg, voltages, 10,  10);
+}
+
+/**
+ * @brief Get field current_battery from battery_status message
+ *
+ * @return [cA] Battery current, -1: autopilot does not measure the current
+ */
+static inline int16_t mavlink_msg_battery_status_get_current_battery(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  30);
+}
+
+/**
+ * @brief Get field current_consumed from battery_status message
+ *
+ * @return [mAh] Consumed charge, -1: autopilot does not provide consumption estimate
+ */
+static inline int32_t mavlink_msg_battery_status_get_current_consumed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  0);
+}
+
+/**
+ * @brief Get field energy_consumed from battery_status message
+ *
+ * @return [hJ] Consumed energy, -1: autopilot does not provide energy consumption estimate
+ */
+static inline int32_t mavlink_msg_battery_status_get_energy_consumed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field battery_remaining from battery_status message
+ *
+ * @return [%] Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery.
+ */
+static inline int8_t mavlink_msg_battery_status_get_battery_remaining(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  35);
+}
+
+/**
+ * @brief Get field time_remaining from battery_status message
+ *
+ * @return [s] Remaining battery time, 0: autopilot does not provide remaining battery time estimate
+ */
+static inline int32_t mavlink_msg_battery_status_get_time_remaining(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  36);
+}
+
+/**
+ * @brief Get field charge_state from battery_status message
+ *
+ * @return  State for extent of discharge, provided by autopilot for warning or external reactions
+ */
+static inline uint8_t mavlink_msg_battery_status_get_charge_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  40);
+}
+
+/**
+ * @brief Get field voltages_ext from battery_status message
+ *
+ * @return [mV] Battery voltages for cells 11 to 14. Cells above the valid cell count for this battery should have a value of 0, where zero indicates not supported (note, this is different than for the voltages field and allows empty byte truncation). If the measured value is 0 then 1 should be sent instead.
+ */
+static inline uint16_t mavlink_msg_battery_status_get_voltages_ext(const mavlink_message_t* msg, uint16_t *voltages_ext)
+{
+    return _MAV_RETURN_uint16_t_array(msg, voltages_ext, 4,  41);
+}
+
+/**
+ * @brief Get field mode from battery_status message
+ *
+ * @return  Battery mode. Default (0) is that battery mode reporting is not supported or battery is in normal-use mode.
+ */
+static inline uint8_t mavlink_msg_battery_status_get_mode(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  49);
+}
+
+/**
+ * @brief Get field fault_bitmask from battery_status message
+ *
+ * @return  Fault/health indications. These should be set when charge_state is MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY (if not, fault reporting is not supported).
+ */
+static inline uint32_t mavlink_msg_battery_status_get_fault_bitmask(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  50);
+}
+
+/**
+ * @brief Decode a battery_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param battery_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_battery_status_decode(const mavlink_message_t* msg, mavlink_battery_status_t* battery_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    battery_status->current_consumed = mavlink_msg_battery_status_get_current_consumed(msg);
+    battery_status->energy_consumed = mavlink_msg_battery_status_get_energy_consumed(msg);
+    battery_status->temperature = mavlink_msg_battery_status_get_temperature(msg);
+    mavlink_msg_battery_status_get_voltages(msg, battery_status->voltages);
+    battery_status->current_battery = mavlink_msg_battery_status_get_current_battery(msg);
+    battery_status->id = mavlink_msg_battery_status_get_id(msg);
+    battery_status->battery_function = mavlink_msg_battery_status_get_battery_function(msg);
+    battery_status->type = mavlink_msg_battery_status_get_type(msg);
+    battery_status->battery_remaining = mavlink_msg_battery_status_get_battery_remaining(msg);
+    battery_status->time_remaining = mavlink_msg_battery_status_get_time_remaining(msg);
+    battery_status->charge_state = mavlink_msg_battery_status_get_charge_state(msg);
+    mavlink_msg_battery_status_get_voltages_ext(msg, battery_status->voltages_ext);
+    battery_status->mode = mavlink_msg_battery_status_get_mode(msg);
+    battery_status->fault_bitmask = mavlink_msg_battery_status_get_fault_bitmask(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_BATTERY_STATUS_LEN? msg->len : MAVLINK_MSG_ID_BATTERY_STATUS_LEN;
+        memset(battery_status, 0, MAVLINK_MSG_ID_BATTERY_STATUS_LEN);
+    memcpy(battery_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 263 - 0
v2.0/common/mavlink_msg_button_change.h

@@ -0,0 +1,263 @@
+#pragma once
+// MESSAGE BUTTON_CHANGE PACKING
+
+#define MAVLINK_MSG_ID_BUTTON_CHANGE 257
+
+
+typedef struct __mavlink_button_change_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint32_t last_change_ms; /*< [ms] Time of last change of button state.*/
+ uint8_t state; /*<  Bitmap for state of buttons.*/
+} mavlink_button_change_t;
+
+#define MAVLINK_MSG_ID_BUTTON_CHANGE_LEN 9
+#define MAVLINK_MSG_ID_BUTTON_CHANGE_MIN_LEN 9
+#define MAVLINK_MSG_ID_257_LEN 9
+#define MAVLINK_MSG_ID_257_MIN_LEN 9
+
+#define MAVLINK_MSG_ID_BUTTON_CHANGE_CRC 131
+#define MAVLINK_MSG_ID_257_CRC 131
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_BUTTON_CHANGE { \
+    257, \
+    "BUTTON_CHANGE", \
+    3, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_button_change_t, time_boot_ms) }, \
+         { "last_change_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_button_change_t, last_change_ms) }, \
+         { "state", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_button_change_t, state) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_BUTTON_CHANGE { \
+    "BUTTON_CHANGE", \
+    3, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_button_change_t, time_boot_ms) }, \
+         { "last_change_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_button_change_t, last_change_ms) }, \
+         { "state", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_button_change_t, state) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a button_change message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param last_change_ms [ms] Time of last change of button state.
+ * @param state  Bitmap for state of buttons.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_button_change_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint32_t last_change_ms, uint8_t state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BUTTON_CHANGE_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, last_change_ms);
+    _mav_put_uint8_t(buf, 8, state);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN);
+#else
+    mavlink_button_change_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.last_change_ms = last_change_ms;
+    packet.state = state;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_BUTTON_CHANGE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_BUTTON_CHANGE_MIN_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_CRC);
+}
+
+/**
+ * @brief Pack a button_change message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param last_change_ms [ms] Time of last change of button state.
+ * @param state  Bitmap for state of buttons.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_button_change_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint32_t last_change_ms,uint8_t state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BUTTON_CHANGE_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, last_change_ms);
+    _mav_put_uint8_t(buf, 8, state);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN);
+#else
+    mavlink_button_change_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.last_change_ms = last_change_ms;
+    packet.state = state;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_BUTTON_CHANGE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_BUTTON_CHANGE_MIN_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_CRC);
+}
+
+/**
+ * @brief Encode a button_change struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param button_change C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_button_change_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_button_change_t* button_change)
+{
+    return mavlink_msg_button_change_pack(system_id, component_id, msg, button_change->time_boot_ms, button_change->last_change_ms, button_change->state);
+}
+
+/**
+ * @brief Encode a button_change struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param button_change C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_button_change_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_button_change_t* button_change)
+{
+    return mavlink_msg_button_change_pack_chan(system_id, component_id, chan, msg, button_change->time_boot_ms, button_change->last_change_ms, button_change->state);
+}
+
+/**
+ * @brief Send a button_change message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param last_change_ms [ms] Time of last change of button state.
+ * @param state  Bitmap for state of buttons.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_button_change_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint32_t last_change_ms, uint8_t state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_BUTTON_CHANGE_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, last_change_ms);
+    _mav_put_uint8_t(buf, 8, state);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BUTTON_CHANGE, buf, MAVLINK_MSG_ID_BUTTON_CHANGE_MIN_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_CRC);
+#else
+    mavlink_button_change_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.last_change_ms = last_change_ms;
+    packet.state = state;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BUTTON_CHANGE, (const char *)&packet, MAVLINK_MSG_ID_BUTTON_CHANGE_MIN_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a button_change message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_button_change_send_struct(mavlink_channel_t chan, const mavlink_button_change_t* button_change)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_button_change_send(chan, button_change->time_boot_ms, button_change->last_change_ms, button_change->state);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BUTTON_CHANGE, (const char *)button_change, MAVLINK_MSG_ID_BUTTON_CHANGE_MIN_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_BUTTON_CHANGE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_button_change_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint32_t last_change_ms, uint8_t state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, last_change_ms);
+    _mav_put_uint8_t(buf, 8, state);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BUTTON_CHANGE, buf, MAVLINK_MSG_ID_BUTTON_CHANGE_MIN_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_CRC);
+#else
+    mavlink_button_change_t *packet = (mavlink_button_change_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->last_change_ms = last_change_ms;
+    packet->state = state;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_BUTTON_CHANGE, (const char *)packet, MAVLINK_MSG_ID_BUTTON_CHANGE_MIN_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN, MAVLINK_MSG_ID_BUTTON_CHANGE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE BUTTON_CHANGE UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from button_change message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_button_change_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field last_change_ms from button_change message
+ *
+ * @return [ms] Time of last change of button state.
+ */
+static inline uint32_t mavlink_msg_button_change_get_last_change_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field state from button_change message
+ *
+ * @return  Bitmap for state of buttons.
+ */
+static inline uint8_t mavlink_msg_button_change_get_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  8);
+}
+
+/**
+ * @brief Decode a button_change message into a struct
+ *
+ * @param msg The message to decode
+ * @param button_change C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_button_change_decode(const mavlink_message_t* msg, mavlink_button_change_t* button_change)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    button_change->time_boot_ms = mavlink_msg_button_change_get_time_boot_ms(msg);
+    button_change->last_change_ms = mavlink_msg_button_change_get_last_change_ms(msg);
+    button_change->state = mavlink_msg_button_change_get_state(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_BUTTON_CHANGE_LEN? msg->len : MAVLINK_MSG_ID_BUTTON_CHANGE_LEN;
+        memset(button_change, 0, MAVLINK_MSG_ID_BUTTON_CHANGE_LEN);
+    memcpy(button_change, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 363 - 0
v2.0/common/mavlink_msg_camera_capture_status.h

@@ -0,0 +1,363 @@
+#pragma once
+// MESSAGE CAMERA_CAPTURE_STATUS PACKING
+
+#define MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS 262
+
+MAVPACKED(
+typedef struct __mavlink_camera_capture_status_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ float image_interval; /*< [s] Image capture interval*/
+ uint32_t recording_time_ms; /*< [ms] Elapsed time since recording started (0: Not supported/available). A GCS should compute recording time and use non-zero values of this field to correct any discrepancy.*/
+ float available_capacity; /*< [MiB] Available storage capacity.*/
+ uint8_t image_status; /*<  Current status of image capturing (0: idle, 1: capture in progress, 2: interval set but idle, 3: interval set and capture in progress)*/
+ uint8_t video_status; /*<  Current status of video capturing (0: idle, 1: capture in progress)*/
+ int32_t image_count; /*<  Total number of images captured ('forever', or until reset using MAV_CMD_STORAGE_FORMAT).*/
+}) mavlink_camera_capture_status_t;
+
+#define MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN 22
+#define MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_MIN_LEN 18
+#define MAVLINK_MSG_ID_262_LEN 22
+#define MAVLINK_MSG_ID_262_MIN_LEN 18
+
+#define MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_CRC 12
+#define MAVLINK_MSG_ID_262_CRC 12
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAMERA_CAPTURE_STATUS { \
+    262, \
+    "CAMERA_CAPTURE_STATUS", \
+    7, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_camera_capture_status_t, time_boot_ms) }, \
+         { "image_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_camera_capture_status_t, image_status) }, \
+         { "video_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_camera_capture_status_t, video_status) }, \
+         { "image_interval", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_camera_capture_status_t, image_interval) }, \
+         { "recording_time_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_camera_capture_status_t, recording_time_ms) }, \
+         { "available_capacity", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_camera_capture_status_t, available_capacity) }, \
+         { "image_count", NULL, MAVLINK_TYPE_INT32_T, 0, 18, offsetof(mavlink_camera_capture_status_t, image_count) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAMERA_CAPTURE_STATUS { \
+    "CAMERA_CAPTURE_STATUS", \
+    7, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_camera_capture_status_t, time_boot_ms) }, \
+         { "image_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_camera_capture_status_t, image_status) }, \
+         { "video_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_camera_capture_status_t, video_status) }, \
+         { "image_interval", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_camera_capture_status_t, image_interval) }, \
+         { "recording_time_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_camera_capture_status_t, recording_time_ms) }, \
+         { "available_capacity", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_camera_capture_status_t, available_capacity) }, \
+         { "image_count", NULL, MAVLINK_TYPE_INT32_T, 0, 18, offsetof(mavlink_camera_capture_status_t, image_count) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a camera_capture_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param image_status  Current status of image capturing (0: idle, 1: capture in progress, 2: interval set but idle, 3: interval set and capture in progress)
+ * @param video_status  Current status of video capturing (0: idle, 1: capture in progress)
+ * @param image_interval [s] Image capture interval
+ * @param recording_time_ms [ms] Elapsed time since recording started (0: Not supported/available). A GCS should compute recording time and use non-zero values of this field to correct any discrepancy.
+ * @param available_capacity [MiB] Available storage capacity.
+ * @param image_count  Total number of images captured ('forever', or until reset using MAV_CMD_STORAGE_FORMAT).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_capture_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint8_t image_status, uint8_t video_status, float image_interval, uint32_t recording_time_ms, float available_capacity, int32_t image_count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, image_interval);
+    _mav_put_uint32_t(buf, 8, recording_time_ms);
+    _mav_put_float(buf, 12, available_capacity);
+    _mav_put_uint8_t(buf, 16, image_status);
+    _mav_put_uint8_t(buf, 17, video_status);
+    _mav_put_int32_t(buf, 18, image_count);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN);
+#else
+    mavlink_camera_capture_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.image_interval = image_interval;
+    packet.recording_time_ms = recording_time_ms;
+    packet.available_capacity = available_capacity;
+    packet.image_status = image_status;
+    packet.video_status = video_status;
+    packet.image_count = image_count;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a camera_capture_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param image_status  Current status of image capturing (0: idle, 1: capture in progress, 2: interval set but idle, 3: interval set and capture in progress)
+ * @param video_status  Current status of video capturing (0: idle, 1: capture in progress)
+ * @param image_interval [s] Image capture interval
+ * @param recording_time_ms [ms] Elapsed time since recording started (0: Not supported/available). A GCS should compute recording time and use non-zero values of this field to correct any discrepancy.
+ * @param available_capacity [MiB] Available storage capacity.
+ * @param image_count  Total number of images captured ('forever', or until reset using MAV_CMD_STORAGE_FORMAT).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_capture_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint8_t image_status,uint8_t video_status,float image_interval,uint32_t recording_time_ms,float available_capacity,int32_t image_count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, image_interval);
+    _mav_put_uint32_t(buf, 8, recording_time_ms);
+    _mav_put_float(buf, 12, available_capacity);
+    _mav_put_uint8_t(buf, 16, image_status);
+    _mav_put_uint8_t(buf, 17, video_status);
+    _mav_put_int32_t(buf, 18, image_count);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN);
+#else
+    mavlink_camera_capture_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.image_interval = image_interval;
+    packet.recording_time_ms = recording_time_ms;
+    packet.available_capacity = available_capacity;
+    packet.image_status = image_status;
+    packet.video_status = video_status;
+    packet.image_count = image_count;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a camera_capture_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_capture_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_capture_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_camera_capture_status_t* camera_capture_status)
+{
+    return mavlink_msg_camera_capture_status_pack(system_id, component_id, msg, camera_capture_status->time_boot_ms, camera_capture_status->image_status, camera_capture_status->video_status, camera_capture_status->image_interval, camera_capture_status->recording_time_ms, camera_capture_status->available_capacity, camera_capture_status->image_count);
+}
+
+/**
+ * @brief Encode a camera_capture_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_capture_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_capture_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_camera_capture_status_t* camera_capture_status)
+{
+    return mavlink_msg_camera_capture_status_pack_chan(system_id, component_id, chan, msg, camera_capture_status->time_boot_ms, camera_capture_status->image_status, camera_capture_status->video_status, camera_capture_status->image_interval, camera_capture_status->recording_time_ms, camera_capture_status->available_capacity, camera_capture_status->image_count);
+}
+
+/**
+ * @brief Send a camera_capture_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param image_status  Current status of image capturing (0: idle, 1: capture in progress, 2: interval set but idle, 3: interval set and capture in progress)
+ * @param video_status  Current status of video capturing (0: idle, 1: capture in progress)
+ * @param image_interval [s] Image capture interval
+ * @param recording_time_ms [ms] Elapsed time since recording started (0: Not supported/available). A GCS should compute recording time and use non-zero values of this field to correct any discrepancy.
+ * @param available_capacity [MiB] Available storage capacity.
+ * @param image_count  Total number of images captured ('forever', or until reset using MAV_CMD_STORAGE_FORMAT).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_camera_capture_status_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t image_status, uint8_t video_status, float image_interval, uint32_t recording_time_ms, float available_capacity, int32_t image_count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, image_interval);
+    _mav_put_uint32_t(buf, 8, recording_time_ms);
+    _mav_put_float(buf, 12, available_capacity);
+    _mav_put_uint8_t(buf, 16, image_status);
+    _mav_put_uint8_t(buf, 17, video_status);
+    _mav_put_int32_t(buf, 18, image_count);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS, buf, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_CRC);
+#else
+    mavlink_camera_capture_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.image_interval = image_interval;
+    packet.recording_time_ms = recording_time_ms;
+    packet.available_capacity = available_capacity;
+    packet.image_status = image_status;
+    packet.video_status = video_status;
+    packet.image_count = image_count;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS, (const char *)&packet, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a camera_capture_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_camera_capture_status_send_struct(mavlink_channel_t chan, const mavlink_camera_capture_status_t* camera_capture_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_camera_capture_status_send(chan, camera_capture_status->time_boot_ms, camera_capture_status->image_status, camera_capture_status->video_status, camera_capture_status->image_interval, camera_capture_status->recording_time_ms, camera_capture_status->available_capacity, camera_capture_status->image_count);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS, (const char *)camera_capture_status, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_camera_capture_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint8_t image_status, uint8_t video_status, float image_interval, uint32_t recording_time_ms, float available_capacity, int32_t image_count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, image_interval);
+    _mav_put_uint32_t(buf, 8, recording_time_ms);
+    _mav_put_float(buf, 12, available_capacity);
+    _mav_put_uint8_t(buf, 16, image_status);
+    _mav_put_uint8_t(buf, 17, video_status);
+    _mav_put_int32_t(buf, 18, image_count);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS, buf, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_CRC);
+#else
+    mavlink_camera_capture_status_t *packet = (mavlink_camera_capture_status_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->image_interval = image_interval;
+    packet->recording_time_ms = recording_time_ms;
+    packet->available_capacity = available_capacity;
+    packet->image_status = image_status;
+    packet->video_status = video_status;
+    packet->image_count = image_count;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS, (const char *)packet, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAMERA_CAPTURE_STATUS UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from camera_capture_status message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_camera_capture_status_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field image_status from camera_capture_status message
+ *
+ * @return  Current status of image capturing (0: idle, 1: capture in progress, 2: interval set but idle, 3: interval set and capture in progress)
+ */
+static inline uint8_t mavlink_msg_camera_capture_status_get_image_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  16);
+}
+
+/**
+ * @brief Get field video_status from camera_capture_status message
+ *
+ * @return  Current status of video capturing (0: idle, 1: capture in progress)
+ */
+static inline uint8_t mavlink_msg_camera_capture_status_get_video_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  17);
+}
+
+/**
+ * @brief Get field image_interval from camera_capture_status message
+ *
+ * @return [s] Image capture interval
+ */
+static inline float mavlink_msg_camera_capture_status_get_image_interval(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field recording_time_ms from camera_capture_status message
+ *
+ * @return [ms] Elapsed time since recording started (0: Not supported/available). A GCS should compute recording time and use non-zero values of this field to correct any discrepancy.
+ */
+static inline uint32_t mavlink_msg_camera_capture_status_get_recording_time_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  8);
+}
+
+/**
+ * @brief Get field available_capacity from camera_capture_status message
+ *
+ * @return [MiB] Available storage capacity.
+ */
+static inline float mavlink_msg_camera_capture_status_get_available_capacity(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field image_count from camera_capture_status message
+ *
+ * @return  Total number of images captured ('forever', or until reset using MAV_CMD_STORAGE_FORMAT).
+ */
+static inline int32_t mavlink_msg_camera_capture_status_get_image_count(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  18);
+}
+
+/**
+ * @brief Decode a camera_capture_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param camera_capture_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_camera_capture_status_decode(const mavlink_message_t* msg, mavlink_camera_capture_status_t* camera_capture_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    camera_capture_status->time_boot_ms = mavlink_msg_camera_capture_status_get_time_boot_ms(msg);
+    camera_capture_status->image_interval = mavlink_msg_camera_capture_status_get_image_interval(msg);
+    camera_capture_status->recording_time_ms = mavlink_msg_camera_capture_status_get_recording_time_ms(msg);
+    camera_capture_status->available_capacity = mavlink_msg_camera_capture_status_get_available_capacity(msg);
+    camera_capture_status->image_status = mavlink_msg_camera_capture_status_get_image_status(msg);
+    camera_capture_status->video_status = mavlink_msg_camera_capture_status_get_video_status(msg);
+    camera_capture_status->image_count = mavlink_msg_camera_capture_status_get_image_count(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN? msg->len : MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN;
+        memset(camera_capture_status, 0, MAVLINK_MSG_ID_CAMERA_CAPTURE_STATUS_LEN);
+    memcpy(camera_capture_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 430 - 0
v2.0/common/mavlink_msg_camera_fov_status.h

@@ -0,0 +1,430 @@
+#pragma once
+// MESSAGE CAMERA_FOV_STATUS PACKING
+
+#define MAVLINK_MSG_ID_CAMERA_FOV_STATUS 271
+
+
+typedef struct __mavlink_camera_fov_status_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ int32_t lat_camera; /*< [degE7] Latitude of camera (INT32_MAX if unknown).*/
+ int32_t lon_camera; /*< [degE7] Longitude of camera (INT32_MAX if unknown).*/
+ int32_t alt_camera; /*< [mm] Altitude (MSL) of camera (INT32_MAX if unknown).*/
+ int32_t lat_image; /*< [degE7] Latitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).*/
+ int32_t lon_image; /*< [degE7] Longitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).*/
+ int32_t alt_image; /*< [mm] Altitude (MSL) of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).*/
+ float q[4]; /*<  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)*/
+ float hfov; /*< [deg] Horizontal field of view (NaN if unknown).*/
+ float vfov; /*< [deg] Vertical field of view (NaN if unknown).*/
+} mavlink_camera_fov_status_t;
+
+#define MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN 52
+#define MAVLINK_MSG_ID_CAMERA_FOV_STATUS_MIN_LEN 52
+#define MAVLINK_MSG_ID_271_LEN 52
+#define MAVLINK_MSG_ID_271_MIN_LEN 52
+
+#define MAVLINK_MSG_ID_CAMERA_FOV_STATUS_CRC 22
+#define MAVLINK_MSG_ID_271_CRC 22
+
+#define MAVLINK_MSG_CAMERA_FOV_STATUS_FIELD_Q_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAMERA_FOV_STATUS { \
+    271, \
+    "CAMERA_FOV_STATUS", \
+    10, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_camera_fov_status_t, time_boot_ms) }, \
+         { "lat_camera", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_camera_fov_status_t, lat_camera) }, \
+         { "lon_camera", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_camera_fov_status_t, lon_camera) }, \
+         { "alt_camera", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_camera_fov_status_t, alt_camera) }, \
+         { "lat_image", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_camera_fov_status_t, lat_image) }, \
+         { "lon_image", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_camera_fov_status_t, lon_image) }, \
+         { "alt_image", NULL, MAVLINK_TYPE_INT32_T, 0, 24, offsetof(mavlink_camera_fov_status_t, alt_image) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 28, offsetof(mavlink_camera_fov_status_t, q) }, \
+         { "hfov", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_camera_fov_status_t, hfov) }, \
+         { "vfov", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_camera_fov_status_t, vfov) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAMERA_FOV_STATUS { \
+    "CAMERA_FOV_STATUS", \
+    10, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_camera_fov_status_t, time_boot_ms) }, \
+         { "lat_camera", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_camera_fov_status_t, lat_camera) }, \
+         { "lon_camera", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_camera_fov_status_t, lon_camera) }, \
+         { "alt_camera", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_camera_fov_status_t, alt_camera) }, \
+         { "lat_image", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_camera_fov_status_t, lat_image) }, \
+         { "lon_image", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_camera_fov_status_t, lon_image) }, \
+         { "alt_image", NULL, MAVLINK_TYPE_INT32_T, 0, 24, offsetof(mavlink_camera_fov_status_t, alt_image) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 28, offsetof(mavlink_camera_fov_status_t, q) }, \
+         { "hfov", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_camera_fov_status_t, hfov) }, \
+         { "vfov", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_camera_fov_status_t, vfov) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a camera_fov_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param lat_camera [degE7] Latitude of camera (INT32_MAX if unknown).
+ * @param lon_camera [degE7] Longitude of camera (INT32_MAX if unknown).
+ * @param alt_camera [mm] Altitude (MSL) of camera (INT32_MAX if unknown).
+ * @param lat_image [degE7] Latitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param lon_image [degE7] Longitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param alt_image [mm] Altitude (MSL) of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param q  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param hfov [deg] Horizontal field of view (NaN if unknown).
+ * @param vfov [deg] Vertical field of view (NaN if unknown).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_fov_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, int32_t lat_camera, int32_t lon_camera, int32_t alt_camera, int32_t lat_image, int32_t lon_image, int32_t alt_image, const float *q, float hfov, float vfov)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_int32_t(buf, 4, lat_camera);
+    _mav_put_int32_t(buf, 8, lon_camera);
+    _mav_put_int32_t(buf, 12, alt_camera);
+    _mav_put_int32_t(buf, 16, lat_image);
+    _mav_put_int32_t(buf, 20, lon_image);
+    _mav_put_int32_t(buf, 24, alt_image);
+    _mav_put_float(buf, 44, hfov);
+    _mav_put_float(buf, 48, vfov);
+    _mav_put_float_array(buf, 28, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN);
+#else
+    mavlink_camera_fov_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat_camera = lat_camera;
+    packet.lon_camera = lon_camera;
+    packet.alt_camera = alt_camera;
+    packet.lat_image = lat_image;
+    packet.lon_image = lon_image;
+    packet.alt_image = alt_image;
+    packet.hfov = hfov;
+    packet.vfov = vfov;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_FOV_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a camera_fov_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param lat_camera [degE7] Latitude of camera (INT32_MAX if unknown).
+ * @param lon_camera [degE7] Longitude of camera (INT32_MAX if unknown).
+ * @param alt_camera [mm] Altitude (MSL) of camera (INT32_MAX if unknown).
+ * @param lat_image [degE7] Latitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param lon_image [degE7] Longitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param alt_image [mm] Altitude (MSL) of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param q  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param hfov [deg] Horizontal field of view (NaN if unknown).
+ * @param vfov [deg] Vertical field of view (NaN if unknown).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_fov_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,int32_t lat_camera,int32_t lon_camera,int32_t alt_camera,int32_t lat_image,int32_t lon_image,int32_t alt_image,const float *q,float hfov,float vfov)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_int32_t(buf, 4, lat_camera);
+    _mav_put_int32_t(buf, 8, lon_camera);
+    _mav_put_int32_t(buf, 12, alt_camera);
+    _mav_put_int32_t(buf, 16, lat_image);
+    _mav_put_int32_t(buf, 20, lon_image);
+    _mav_put_int32_t(buf, 24, alt_image);
+    _mav_put_float(buf, 44, hfov);
+    _mav_put_float(buf, 48, vfov);
+    _mav_put_float_array(buf, 28, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN);
+#else
+    mavlink_camera_fov_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat_camera = lat_camera;
+    packet.lon_camera = lon_camera;
+    packet.alt_camera = alt_camera;
+    packet.lat_image = lat_image;
+    packet.lon_image = lon_image;
+    packet.alt_image = alt_image;
+    packet.hfov = hfov;
+    packet.vfov = vfov;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_FOV_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a camera_fov_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_fov_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_fov_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_camera_fov_status_t* camera_fov_status)
+{
+    return mavlink_msg_camera_fov_status_pack(system_id, component_id, msg, camera_fov_status->time_boot_ms, camera_fov_status->lat_camera, camera_fov_status->lon_camera, camera_fov_status->alt_camera, camera_fov_status->lat_image, camera_fov_status->lon_image, camera_fov_status->alt_image, camera_fov_status->q, camera_fov_status->hfov, camera_fov_status->vfov);
+}
+
+/**
+ * @brief Encode a camera_fov_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_fov_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_fov_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_camera_fov_status_t* camera_fov_status)
+{
+    return mavlink_msg_camera_fov_status_pack_chan(system_id, component_id, chan, msg, camera_fov_status->time_boot_ms, camera_fov_status->lat_camera, camera_fov_status->lon_camera, camera_fov_status->alt_camera, camera_fov_status->lat_image, camera_fov_status->lon_image, camera_fov_status->alt_image, camera_fov_status->q, camera_fov_status->hfov, camera_fov_status->vfov);
+}
+
+/**
+ * @brief Send a camera_fov_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param lat_camera [degE7] Latitude of camera (INT32_MAX if unknown).
+ * @param lon_camera [degE7] Longitude of camera (INT32_MAX if unknown).
+ * @param alt_camera [mm] Altitude (MSL) of camera (INT32_MAX if unknown).
+ * @param lat_image [degE7] Latitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param lon_image [degE7] Longitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param alt_image [mm] Altitude (MSL) of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ * @param q  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param hfov [deg] Horizontal field of view (NaN if unknown).
+ * @param vfov [deg] Vertical field of view (NaN if unknown).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_camera_fov_status_send(mavlink_channel_t chan, uint32_t time_boot_ms, int32_t lat_camera, int32_t lon_camera, int32_t alt_camera, int32_t lat_image, int32_t lon_image, int32_t alt_image, const float *q, float hfov, float vfov)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_int32_t(buf, 4, lat_camera);
+    _mav_put_int32_t(buf, 8, lon_camera);
+    _mav_put_int32_t(buf, 12, alt_camera);
+    _mav_put_int32_t(buf, 16, lat_image);
+    _mav_put_int32_t(buf, 20, lon_image);
+    _mav_put_int32_t(buf, 24, alt_image);
+    _mav_put_float(buf, 44, hfov);
+    _mav_put_float(buf, 48, vfov);
+    _mav_put_float_array(buf, 28, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_FOV_STATUS, buf, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_CRC);
+#else
+    mavlink_camera_fov_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat_camera = lat_camera;
+    packet.lon_camera = lon_camera;
+    packet.alt_camera = alt_camera;
+    packet.lat_image = lat_image;
+    packet.lon_image = lon_image;
+    packet.alt_image = alt_image;
+    packet.hfov = hfov;
+    packet.vfov = vfov;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_FOV_STATUS, (const char *)&packet, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a camera_fov_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_camera_fov_status_send_struct(mavlink_channel_t chan, const mavlink_camera_fov_status_t* camera_fov_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_camera_fov_status_send(chan, camera_fov_status->time_boot_ms, camera_fov_status->lat_camera, camera_fov_status->lon_camera, camera_fov_status->alt_camera, camera_fov_status->lat_image, camera_fov_status->lon_image, camera_fov_status->alt_image, camera_fov_status->q, camera_fov_status->hfov, camera_fov_status->vfov);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_FOV_STATUS, (const char *)camera_fov_status, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_camera_fov_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, int32_t lat_camera, int32_t lon_camera, int32_t alt_camera, int32_t lat_image, int32_t lon_image, int32_t alt_image, const float *q, float hfov, float vfov)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_int32_t(buf, 4, lat_camera);
+    _mav_put_int32_t(buf, 8, lon_camera);
+    _mav_put_int32_t(buf, 12, alt_camera);
+    _mav_put_int32_t(buf, 16, lat_image);
+    _mav_put_int32_t(buf, 20, lon_image);
+    _mav_put_int32_t(buf, 24, alt_image);
+    _mav_put_float(buf, 44, hfov);
+    _mav_put_float(buf, 48, vfov);
+    _mav_put_float_array(buf, 28, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_FOV_STATUS, buf, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_CRC);
+#else
+    mavlink_camera_fov_status_t *packet = (mavlink_camera_fov_status_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->lat_camera = lat_camera;
+    packet->lon_camera = lon_camera;
+    packet->alt_camera = alt_camera;
+    packet->lat_image = lat_image;
+    packet->lon_image = lon_image;
+    packet->alt_image = alt_image;
+    packet->hfov = hfov;
+    packet->vfov = vfov;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_FOV_STATUS, (const char *)packet, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAMERA_FOV_STATUS UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from camera_fov_status message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_camera_fov_status_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field lat_camera from camera_fov_status message
+ *
+ * @return [degE7] Latitude of camera (INT32_MAX if unknown).
+ */
+static inline int32_t mavlink_msg_camera_fov_status_get_lat_camera(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field lon_camera from camera_fov_status message
+ *
+ * @return [degE7] Longitude of camera (INT32_MAX if unknown).
+ */
+static inline int32_t mavlink_msg_camera_fov_status_get_lon_camera(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field alt_camera from camera_fov_status message
+ *
+ * @return [mm] Altitude (MSL) of camera (INT32_MAX if unknown).
+ */
+static inline int32_t mavlink_msg_camera_fov_status_get_alt_camera(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field lat_image from camera_fov_status message
+ *
+ * @return [degE7] Latitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ */
+static inline int32_t mavlink_msg_camera_fov_status_get_lat_image(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field lon_image from camera_fov_status message
+ *
+ * @return [degE7] Longitude of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ */
+static inline int32_t mavlink_msg_camera_fov_status_get_lon_image(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  20);
+}
+
+/**
+ * @brief Get field alt_image from camera_fov_status message
+ *
+ * @return [mm] Altitude (MSL) of center of image (INT32_MAX if unknown, INT32_MIN if at infinity, not intersecting with horizon).
+ */
+static inline int32_t mavlink_msg_camera_fov_status_get_alt_image(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  24);
+}
+
+/**
+ * @brief Get field q from camera_fov_status message
+ *
+ * @return  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ */
+static inline uint16_t mavlink_msg_camera_fov_status_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  28);
+}
+
+/**
+ * @brief Get field hfov from camera_fov_status message
+ *
+ * @return [deg] Horizontal field of view (NaN if unknown).
+ */
+static inline float mavlink_msg_camera_fov_status_get_hfov(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Get field vfov from camera_fov_status message
+ *
+ * @return [deg] Vertical field of view (NaN if unknown).
+ */
+static inline float mavlink_msg_camera_fov_status_get_vfov(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  48);
+}
+
+/**
+ * @brief Decode a camera_fov_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param camera_fov_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_camera_fov_status_decode(const mavlink_message_t* msg, mavlink_camera_fov_status_t* camera_fov_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    camera_fov_status->time_boot_ms = mavlink_msg_camera_fov_status_get_time_boot_ms(msg);
+    camera_fov_status->lat_camera = mavlink_msg_camera_fov_status_get_lat_camera(msg);
+    camera_fov_status->lon_camera = mavlink_msg_camera_fov_status_get_lon_camera(msg);
+    camera_fov_status->alt_camera = mavlink_msg_camera_fov_status_get_alt_camera(msg);
+    camera_fov_status->lat_image = mavlink_msg_camera_fov_status_get_lat_image(msg);
+    camera_fov_status->lon_image = mavlink_msg_camera_fov_status_get_lon_image(msg);
+    camera_fov_status->alt_image = mavlink_msg_camera_fov_status_get_alt_image(msg);
+    mavlink_msg_camera_fov_status_get_q(msg, camera_fov_status->q);
+    camera_fov_status->hfov = mavlink_msg_camera_fov_status_get_hfov(msg);
+    camera_fov_status->vfov = mavlink_msg_camera_fov_status_get_vfov(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN? msg->len : MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN;
+        memset(camera_fov_status, 0, MAVLINK_MSG_ID_CAMERA_FOV_STATUS_LEN);
+    memcpy(camera_fov_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 456 - 0
v2.0/common/mavlink_msg_camera_image_captured.h

@@ -0,0 +1,456 @@
+#pragma once
+// MESSAGE CAMERA_IMAGE_CAPTURED PACKING
+
+#define MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED 263
+
+
+typedef struct __mavlink_camera_image_captured_t {
+ uint64_t time_utc; /*< [us] Timestamp (time since UNIX epoch) in UTC. 0 for unknown.*/
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ int32_t lat; /*< [degE7] Latitude where image was taken*/
+ int32_t lon; /*< [degE7] Longitude where capture was taken*/
+ int32_t alt; /*< [mm] Altitude (MSL) where image was taken*/
+ int32_t relative_alt; /*< [mm] Altitude above ground*/
+ float q[4]; /*<  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)*/
+ int32_t image_index; /*<  Zero based index of this image (i.e. a new image will have index CAMERA_CAPTURE_STATUS.image count -1)*/
+ uint8_t camera_id; /*<  Deprecated/unused. Component IDs are used to differentiate multiple cameras.*/
+ int8_t capture_result; /*<  Boolean indicating success (1) or failure (0) while capturing this image.*/
+ char file_url[205]; /*<  URL of image taken. Either local storage or http://foo.jpg if camera provides an HTTP interface.*/
+} mavlink_camera_image_captured_t;
+
+#define MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN 255
+#define MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_MIN_LEN 255
+#define MAVLINK_MSG_ID_263_LEN 255
+#define MAVLINK_MSG_ID_263_MIN_LEN 255
+
+#define MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_CRC 133
+#define MAVLINK_MSG_ID_263_CRC 133
+
+#define MAVLINK_MSG_CAMERA_IMAGE_CAPTURED_FIELD_Q_LEN 4
+#define MAVLINK_MSG_CAMERA_IMAGE_CAPTURED_FIELD_FILE_URL_LEN 205
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAMERA_IMAGE_CAPTURED { \
+    263, \
+    "CAMERA_IMAGE_CAPTURED", \
+    11, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_camera_image_captured_t, time_boot_ms) }, \
+         { "time_utc", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_camera_image_captured_t, time_utc) }, \
+         { "camera_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 48, offsetof(mavlink_camera_image_captured_t, camera_id) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_camera_image_captured_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_camera_image_captured_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_camera_image_captured_t, alt) }, \
+         { "relative_alt", NULL, MAVLINK_TYPE_INT32_T, 0, 24, offsetof(mavlink_camera_image_captured_t, relative_alt) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 28, offsetof(mavlink_camera_image_captured_t, q) }, \
+         { "image_index", NULL, MAVLINK_TYPE_INT32_T, 0, 44, offsetof(mavlink_camera_image_captured_t, image_index) }, \
+         { "capture_result", NULL, MAVLINK_TYPE_INT8_T, 0, 49, offsetof(mavlink_camera_image_captured_t, capture_result) }, \
+         { "file_url", NULL, MAVLINK_TYPE_CHAR, 205, 50, offsetof(mavlink_camera_image_captured_t, file_url) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAMERA_IMAGE_CAPTURED { \
+    "CAMERA_IMAGE_CAPTURED", \
+    11, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_camera_image_captured_t, time_boot_ms) }, \
+         { "time_utc", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_camera_image_captured_t, time_utc) }, \
+         { "camera_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 48, offsetof(mavlink_camera_image_captured_t, camera_id) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_camera_image_captured_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_camera_image_captured_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_camera_image_captured_t, alt) }, \
+         { "relative_alt", NULL, MAVLINK_TYPE_INT32_T, 0, 24, offsetof(mavlink_camera_image_captured_t, relative_alt) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 28, offsetof(mavlink_camera_image_captured_t, q) }, \
+         { "image_index", NULL, MAVLINK_TYPE_INT32_T, 0, 44, offsetof(mavlink_camera_image_captured_t, image_index) }, \
+         { "capture_result", NULL, MAVLINK_TYPE_INT8_T, 0, 49, offsetof(mavlink_camera_image_captured_t, capture_result) }, \
+         { "file_url", NULL, MAVLINK_TYPE_CHAR, 205, 50, offsetof(mavlink_camera_image_captured_t, file_url) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a camera_image_captured message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param time_utc [us] Timestamp (time since UNIX epoch) in UTC. 0 for unknown.
+ * @param camera_id  Deprecated/unused. Component IDs are used to differentiate multiple cameras.
+ * @param lat [degE7] Latitude where image was taken
+ * @param lon [degE7] Longitude where capture was taken
+ * @param alt [mm] Altitude (MSL) where image was taken
+ * @param relative_alt [mm] Altitude above ground
+ * @param q  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param image_index  Zero based index of this image (i.e. a new image will have index CAMERA_CAPTURE_STATUS.image count -1)
+ * @param capture_result  Boolean indicating success (1) or failure (0) while capturing this image.
+ * @param file_url  URL of image taken. Either local storage or http://foo.jpg if camera provides an HTTP interface.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_image_captured_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint64_t time_utc, uint8_t camera_id, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, const float *q, int32_t image_index, int8_t capture_result, const char *file_url)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN];
+    _mav_put_uint64_t(buf, 0, time_utc);
+    _mav_put_uint32_t(buf, 8, time_boot_ms);
+    _mav_put_int32_t(buf, 12, lat);
+    _mav_put_int32_t(buf, 16, lon);
+    _mav_put_int32_t(buf, 20, alt);
+    _mav_put_int32_t(buf, 24, relative_alt);
+    _mav_put_int32_t(buf, 44, image_index);
+    _mav_put_uint8_t(buf, 48, camera_id);
+    _mav_put_int8_t(buf, 49, capture_result);
+    _mav_put_float_array(buf, 28, q, 4);
+    _mav_put_char_array(buf, 50, file_url, 205);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN);
+#else
+    mavlink_camera_image_captured_t packet;
+    packet.time_utc = time_utc;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.image_index = image_index;
+    packet.camera_id = camera_id;
+    packet.capture_result = capture_result;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.file_url, file_url, sizeof(char)*205);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_MIN_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_CRC);
+}
+
+/**
+ * @brief Pack a camera_image_captured message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param time_utc [us] Timestamp (time since UNIX epoch) in UTC. 0 for unknown.
+ * @param camera_id  Deprecated/unused. Component IDs are used to differentiate multiple cameras.
+ * @param lat [degE7] Latitude where image was taken
+ * @param lon [degE7] Longitude where capture was taken
+ * @param alt [mm] Altitude (MSL) where image was taken
+ * @param relative_alt [mm] Altitude above ground
+ * @param q  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param image_index  Zero based index of this image (i.e. a new image will have index CAMERA_CAPTURE_STATUS.image count -1)
+ * @param capture_result  Boolean indicating success (1) or failure (0) while capturing this image.
+ * @param file_url  URL of image taken. Either local storage or http://foo.jpg if camera provides an HTTP interface.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_image_captured_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint64_t time_utc,uint8_t camera_id,int32_t lat,int32_t lon,int32_t alt,int32_t relative_alt,const float *q,int32_t image_index,int8_t capture_result,const char *file_url)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN];
+    _mav_put_uint64_t(buf, 0, time_utc);
+    _mav_put_uint32_t(buf, 8, time_boot_ms);
+    _mav_put_int32_t(buf, 12, lat);
+    _mav_put_int32_t(buf, 16, lon);
+    _mav_put_int32_t(buf, 20, alt);
+    _mav_put_int32_t(buf, 24, relative_alt);
+    _mav_put_int32_t(buf, 44, image_index);
+    _mav_put_uint8_t(buf, 48, camera_id);
+    _mav_put_int8_t(buf, 49, capture_result);
+    _mav_put_float_array(buf, 28, q, 4);
+    _mav_put_char_array(buf, 50, file_url, 205);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN);
+#else
+    mavlink_camera_image_captured_t packet;
+    packet.time_utc = time_utc;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.image_index = image_index;
+    packet.camera_id = camera_id;
+    packet.capture_result = capture_result;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.file_url, file_url, sizeof(char)*205);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_MIN_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_CRC);
+}
+
+/**
+ * @brief Encode a camera_image_captured struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_image_captured C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_image_captured_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_camera_image_captured_t* camera_image_captured)
+{
+    return mavlink_msg_camera_image_captured_pack(system_id, component_id, msg, camera_image_captured->time_boot_ms, camera_image_captured->time_utc, camera_image_captured->camera_id, camera_image_captured->lat, camera_image_captured->lon, camera_image_captured->alt, camera_image_captured->relative_alt, camera_image_captured->q, camera_image_captured->image_index, camera_image_captured->capture_result, camera_image_captured->file_url);
+}
+
+/**
+ * @brief Encode a camera_image_captured struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_image_captured C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_image_captured_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_camera_image_captured_t* camera_image_captured)
+{
+    return mavlink_msg_camera_image_captured_pack_chan(system_id, component_id, chan, msg, camera_image_captured->time_boot_ms, camera_image_captured->time_utc, camera_image_captured->camera_id, camera_image_captured->lat, camera_image_captured->lon, camera_image_captured->alt, camera_image_captured->relative_alt, camera_image_captured->q, camera_image_captured->image_index, camera_image_captured->capture_result, camera_image_captured->file_url);
+}
+
+/**
+ * @brief Send a camera_image_captured message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param time_utc [us] Timestamp (time since UNIX epoch) in UTC. 0 for unknown.
+ * @param camera_id  Deprecated/unused. Component IDs are used to differentiate multiple cameras.
+ * @param lat [degE7] Latitude where image was taken
+ * @param lon [degE7] Longitude where capture was taken
+ * @param alt [mm] Altitude (MSL) where image was taken
+ * @param relative_alt [mm] Altitude above ground
+ * @param q  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ * @param image_index  Zero based index of this image (i.e. a new image will have index CAMERA_CAPTURE_STATUS.image count -1)
+ * @param capture_result  Boolean indicating success (1) or failure (0) while capturing this image.
+ * @param file_url  URL of image taken. Either local storage or http://foo.jpg if camera provides an HTTP interface.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_camera_image_captured_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint64_t time_utc, uint8_t camera_id, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, const float *q, int32_t image_index, int8_t capture_result, const char *file_url)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN];
+    _mav_put_uint64_t(buf, 0, time_utc);
+    _mav_put_uint32_t(buf, 8, time_boot_ms);
+    _mav_put_int32_t(buf, 12, lat);
+    _mav_put_int32_t(buf, 16, lon);
+    _mav_put_int32_t(buf, 20, alt);
+    _mav_put_int32_t(buf, 24, relative_alt);
+    _mav_put_int32_t(buf, 44, image_index);
+    _mav_put_uint8_t(buf, 48, camera_id);
+    _mav_put_int8_t(buf, 49, capture_result);
+    _mav_put_float_array(buf, 28, q, 4);
+    _mav_put_char_array(buf, 50, file_url, 205);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED, buf, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_MIN_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_CRC);
+#else
+    mavlink_camera_image_captured_t packet;
+    packet.time_utc = time_utc;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.image_index = image_index;
+    packet.camera_id = camera_id;
+    packet.capture_result = capture_result;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    mav_array_memcpy(packet.file_url, file_url, sizeof(char)*205);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED, (const char *)&packet, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_MIN_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_CRC);
+#endif
+}
+
+/**
+ * @brief Send a camera_image_captured message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_camera_image_captured_send_struct(mavlink_channel_t chan, const mavlink_camera_image_captured_t* camera_image_captured)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_camera_image_captured_send(chan, camera_image_captured->time_boot_ms, camera_image_captured->time_utc, camera_image_captured->camera_id, camera_image_captured->lat, camera_image_captured->lon, camera_image_captured->alt, camera_image_captured->relative_alt, camera_image_captured->q, camera_image_captured->image_index, camera_image_captured->capture_result, camera_image_captured->file_url);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED, (const char *)camera_image_captured, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_MIN_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_camera_image_captured_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint64_t time_utc, uint8_t camera_id, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, const float *q, int32_t image_index, int8_t capture_result, const char *file_url)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_utc);
+    _mav_put_uint32_t(buf, 8, time_boot_ms);
+    _mav_put_int32_t(buf, 12, lat);
+    _mav_put_int32_t(buf, 16, lon);
+    _mav_put_int32_t(buf, 20, alt);
+    _mav_put_int32_t(buf, 24, relative_alt);
+    _mav_put_int32_t(buf, 44, image_index);
+    _mav_put_uint8_t(buf, 48, camera_id);
+    _mav_put_int8_t(buf, 49, capture_result);
+    _mav_put_float_array(buf, 28, q, 4);
+    _mav_put_char_array(buf, 50, file_url, 205);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED, buf, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_MIN_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_CRC);
+#else
+    mavlink_camera_image_captured_t *packet = (mavlink_camera_image_captured_t *)msgbuf;
+    packet->time_utc = time_utc;
+    packet->time_boot_ms = time_boot_ms;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->relative_alt = relative_alt;
+    packet->image_index = image_index;
+    packet->camera_id = camera_id;
+    packet->capture_result = capture_result;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    mav_array_memcpy(packet->file_url, file_url, sizeof(char)*205);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED, (const char *)packet, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_MIN_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAMERA_IMAGE_CAPTURED UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from camera_image_captured message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_camera_image_captured_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  8);
+}
+
+/**
+ * @brief Get field time_utc from camera_image_captured message
+ *
+ * @return [us] Timestamp (time since UNIX epoch) in UTC. 0 for unknown.
+ */
+static inline uint64_t mavlink_msg_camera_image_captured_get_time_utc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field camera_id from camera_image_captured message
+ *
+ * @return  Deprecated/unused. Component IDs are used to differentiate multiple cameras.
+ */
+static inline uint8_t mavlink_msg_camera_image_captured_get_camera_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  48);
+}
+
+/**
+ * @brief Get field lat from camera_image_captured message
+ *
+ * @return [degE7] Latitude where image was taken
+ */
+static inline int32_t mavlink_msg_camera_image_captured_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field lon from camera_image_captured message
+ *
+ * @return [degE7] Longitude where capture was taken
+ */
+static inline int32_t mavlink_msg_camera_image_captured_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field alt from camera_image_captured message
+ *
+ * @return [mm] Altitude (MSL) where image was taken
+ */
+static inline int32_t mavlink_msg_camera_image_captured_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  20);
+}
+
+/**
+ * @brief Get field relative_alt from camera_image_captured message
+ *
+ * @return [mm] Altitude above ground
+ */
+static inline int32_t mavlink_msg_camera_image_captured_get_relative_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  24);
+}
+
+/**
+ * @brief Get field q from camera_image_captured message
+ *
+ * @return  Quaternion of camera orientation (w, x, y, z order, zero-rotation is 1, 0, 0, 0)
+ */
+static inline uint16_t mavlink_msg_camera_image_captured_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  28);
+}
+
+/**
+ * @brief Get field image_index from camera_image_captured message
+ *
+ * @return  Zero based index of this image (i.e. a new image will have index CAMERA_CAPTURE_STATUS.image count -1)
+ */
+static inline int32_t mavlink_msg_camera_image_captured_get_image_index(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  44);
+}
+
+/**
+ * @brief Get field capture_result from camera_image_captured message
+ *
+ * @return  Boolean indicating success (1) or failure (0) while capturing this image.
+ */
+static inline int8_t mavlink_msg_camera_image_captured_get_capture_result(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  49);
+}
+
+/**
+ * @brief Get field file_url from camera_image_captured message
+ *
+ * @return  URL of image taken. Either local storage or http://foo.jpg if camera provides an HTTP interface.
+ */
+static inline uint16_t mavlink_msg_camera_image_captured_get_file_url(const mavlink_message_t* msg, char *file_url)
+{
+    return _MAV_RETURN_char_array(msg, file_url, 205,  50);
+}
+
+/**
+ * @brief Decode a camera_image_captured message into a struct
+ *
+ * @param msg The message to decode
+ * @param camera_image_captured C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_camera_image_captured_decode(const mavlink_message_t* msg, mavlink_camera_image_captured_t* camera_image_captured)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    camera_image_captured->time_utc = mavlink_msg_camera_image_captured_get_time_utc(msg);
+    camera_image_captured->time_boot_ms = mavlink_msg_camera_image_captured_get_time_boot_ms(msg);
+    camera_image_captured->lat = mavlink_msg_camera_image_captured_get_lat(msg);
+    camera_image_captured->lon = mavlink_msg_camera_image_captured_get_lon(msg);
+    camera_image_captured->alt = mavlink_msg_camera_image_captured_get_alt(msg);
+    camera_image_captured->relative_alt = mavlink_msg_camera_image_captured_get_relative_alt(msg);
+    mavlink_msg_camera_image_captured_get_q(msg, camera_image_captured->q);
+    camera_image_captured->image_index = mavlink_msg_camera_image_captured_get_image_index(msg);
+    camera_image_captured->camera_id = mavlink_msg_camera_image_captured_get_camera_id(msg);
+    camera_image_captured->capture_result = mavlink_msg_camera_image_captured_get_capture_result(msg);
+    mavlink_msg_camera_image_captured_get_file_url(msg, camera_image_captured->file_url);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN? msg->len : MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN;
+        memset(camera_image_captured, 0, MAVLINK_MSG_ID_CAMERA_IMAGE_CAPTURED_LEN);
+    memcpy(camera_image_captured, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 532 - 0
v2.0/common/mavlink_msg_camera_information.h

@@ -0,0 +1,532 @@
+#pragma once
+// MESSAGE CAMERA_INFORMATION PACKING
+
+#define MAVLINK_MSG_ID_CAMERA_INFORMATION 259
+
+
+typedef struct __mavlink_camera_information_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint32_t firmware_version; /*<  Version of the camera firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff). Use 0 if not known.*/
+ float focal_length; /*< [mm] Focal length. Use NaN if not known.*/
+ float sensor_size_h; /*< [mm] Image sensor size horizontal. Use NaN if not known.*/
+ float sensor_size_v; /*< [mm] Image sensor size vertical. Use NaN if not known.*/
+ uint32_t flags; /*<  Bitmap of camera capability flags.*/
+ uint16_t resolution_h; /*< [pix] Horizontal image resolution. Use 0 if not known.*/
+ uint16_t resolution_v; /*< [pix] Vertical image resolution. Use 0 if not known.*/
+ uint16_t cam_definition_version; /*<  Camera definition version (iteration).  Use 0 if not known.*/
+ uint8_t vendor_name[32]; /*<  Name of the camera vendor*/
+ uint8_t model_name[32]; /*<  Name of the camera model*/
+ uint8_t lens_id; /*<  Reserved for a lens ID.  Use 0 if not known.*/
+ char cam_definition_uri[140]; /*<  Camera definition URI (if any, otherwise only basic functions will be available). HTTP- (http://) and MAVLink FTP- (mavlinkftp://) formatted URIs are allowed (and both must be supported by any GCS that implements the Camera Protocol). The definition file may be xz compressed, which will be indicated by the file extension .xml.xz (a GCS that implements the protocol must support decompressing the file). The string needs to be zero terminated.  Use a zero-length string if not known.*/
+ uint8_t gimbal_device_id; /*<  Gimbal id of a gimbal associated with this camera. This is the component id of the gimbal device, or 1-6 for non mavlink gimbals. Use 0 if no gimbal is associated with the camera.*/
+} mavlink_camera_information_t;
+
+#define MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN 236
+#define MAVLINK_MSG_ID_CAMERA_INFORMATION_MIN_LEN 235
+#define MAVLINK_MSG_ID_259_LEN 236
+#define MAVLINK_MSG_ID_259_MIN_LEN 235
+
+#define MAVLINK_MSG_ID_CAMERA_INFORMATION_CRC 92
+#define MAVLINK_MSG_ID_259_CRC 92
+
+#define MAVLINK_MSG_CAMERA_INFORMATION_FIELD_VENDOR_NAME_LEN 32
+#define MAVLINK_MSG_CAMERA_INFORMATION_FIELD_MODEL_NAME_LEN 32
+#define MAVLINK_MSG_CAMERA_INFORMATION_FIELD_CAM_DEFINITION_URI_LEN 140
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAMERA_INFORMATION { \
+    259, \
+    "CAMERA_INFORMATION", \
+    14, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_camera_information_t, time_boot_ms) }, \
+         { "vendor_name", NULL, MAVLINK_TYPE_UINT8_T, 32, 30, offsetof(mavlink_camera_information_t, vendor_name) }, \
+         { "model_name", NULL, MAVLINK_TYPE_UINT8_T, 32, 62, offsetof(mavlink_camera_information_t, model_name) }, \
+         { "firmware_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_camera_information_t, firmware_version) }, \
+         { "focal_length", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_camera_information_t, focal_length) }, \
+         { "sensor_size_h", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_camera_information_t, sensor_size_h) }, \
+         { "sensor_size_v", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_camera_information_t, sensor_size_v) }, \
+         { "resolution_h", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_camera_information_t, resolution_h) }, \
+         { "resolution_v", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_camera_information_t, resolution_v) }, \
+         { "lens_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 94, offsetof(mavlink_camera_information_t, lens_id) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_camera_information_t, flags) }, \
+         { "cam_definition_version", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_camera_information_t, cam_definition_version) }, \
+         { "cam_definition_uri", NULL, MAVLINK_TYPE_CHAR, 140, 95, offsetof(mavlink_camera_information_t, cam_definition_uri) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 235, offsetof(mavlink_camera_information_t, gimbal_device_id) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAMERA_INFORMATION { \
+    "CAMERA_INFORMATION", \
+    14, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_camera_information_t, time_boot_ms) }, \
+         { "vendor_name", NULL, MAVLINK_TYPE_UINT8_T, 32, 30, offsetof(mavlink_camera_information_t, vendor_name) }, \
+         { "model_name", NULL, MAVLINK_TYPE_UINT8_T, 32, 62, offsetof(mavlink_camera_information_t, model_name) }, \
+         { "firmware_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_camera_information_t, firmware_version) }, \
+         { "focal_length", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_camera_information_t, focal_length) }, \
+         { "sensor_size_h", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_camera_information_t, sensor_size_h) }, \
+         { "sensor_size_v", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_camera_information_t, sensor_size_v) }, \
+         { "resolution_h", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_camera_information_t, resolution_h) }, \
+         { "resolution_v", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_camera_information_t, resolution_v) }, \
+         { "lens_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 94, offsetof(mavlink_camera_information_t, lens_id) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_camera_information_t, flags) }, \
+         { "cam_definition_version", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_camera_information_t, cam_definition_version) }, \
+         { "cam_definition_uri", NULL, MAVLINK_TYPE_CHAR, 140, 95, offsetof(mavlink_camera_information_t, cam_definition_uri) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 235, offsetof(mavlink_camera_information_t, gimbal_device_id) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a camera_information message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param vendor_name  Name of the camera vendor
+ * @param model_name  Name of the camera model
+ * @param firmware_version  Version of the camera firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff). Use 0 if not known.
+ * @param focal_length [mm] Focal length. Use NaN if not known.
+ * @param sensor_size_h [mm] Image sensor size horizontal. Use NaN if not known.
+ * @param sensor_size_v [mm] Image sensor size vertical. Use NaN if not known.
+ * @param resolution_h [pix] Horizontal image resolution. Use 0 if not known.
+ * @param resolution_v [pix] Vertical image resolution. Use 0 if not known.
+ * @param lens_id  Reserved for a lens ID.  Use 0 if not known.
+ * @param flags  Bitmap of camera capability flags.
+ * @param cam_definition_version  Camera definition version (iteration).  Use 0 if not known.
+ * @param cam_definition_uri  Camera definition URI (if any, otherwise only basic functions will be available). HTTP- (http://) and MAVLink FTP- (mavlinkftp://) formatted URIs are allowed (and both must be supported by any GCS that implements the Camera Protocol). The definition file may be xz compressed, which will be indicated by the file extension .xml.xz (a GCS that implements the protocol must support decompressing the file). The string needs to be zero terminated.  Use a zero-length string if not known.
+ * @param gimbal_device_id  Gimbal id of a gimbal associated with this camera. This is the component id of the gimbal device, or 1-6 for non mavlink gimbals. Use 0 if no gimbal is associated with the camera.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_information_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, const uint8_t *vendor_name, const uint8_t *model_name, uint32_t firmware_version, float focal_length, float sensor_size_h, float sensor_size_v, uint16_t resolution_h, uint16_t resolution_v, uint8_t lens_id, uint32_t flags, uint16_t cam_definition_version, const char *cam_definition_uri, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, firmware_version);
+    _mav_put_float(buf, 8, focal_length);
+    _mav_put_float(buf, 12, sensor_size_h);
+    _mav_put_float(buf, 16, sensor_size_v);
+    _mav_put_uint32_t(buf, 20, flags);
+    _mav_put_uint16_t(buf, 24, resolution_h);
+    _mav_put_uint16_t(buf, 26, resolution_v);
+    _mav_put_uint16_t(buf, 28, cam_definition_version);
+    _mav_put_uint8_t(buf, 94, lens_id);
+    _mav_put_uint8_t(buf, 235, gimbal_device_id);
+    _mav_put_uint8_t_array(buf, 30, vendor_name, 32);
+    _mav_put_uint8_t_array(buf, 62, model_name, 32);
+    _mav_put_char_array(buf, 95, cam_definition_uri, 140);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN);
+#else
+    mavlink_camera_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.firmware_version = firmware_version;
+    packet.focal_length = focal_length;
+    packet.sensor_size_h = sensor_size_h;
+    packet.sensor_size_v = sensor_size_v;
+    packet.flags = flags;
+    packet.resolution_h = resolution_h;
+    packet.resolution_v = resolution_v;
+    packet.cam_definition_version = cam_definition_version;
+    packet.lens_id = lens_id;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.vendor_name, vendor_name, sizeof(uint8_t)*32);
+    mav_array_memcpy(packet.model_name, model_name, sizeof(uint8_t)*32);
+    mav_array_memcpy(packet.cam_definition_uri, cam_definition_uri, sizeof(char)*140);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_INFORMATION;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAMERA_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_CRC);
+}
+
+/**
+ * @brief Pack a camera_information message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param vendor_name  Name of the camera vendor
+ * @param model_name  Name of the camera model
+ * @param firmware_version  Version of the camera firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff). Use 0 if not known.
+ * @param focal_length [mm] Focal length. Use NaN if not known.
+ * @param sensor_size_h [mm] Image sensor size horizontal. Use NaN if not known.
+ * @param sensor_size_v [mm] Image sensor size vertical. Use NaN if not known.
+ * @param resolution_h [pix] Horizontal image resolution. Use 0 if not known.
+ * @param resolution_v [pix] Vertical image resolution. Use 0 if not known.
+ * @param lens_id  Reserved for a lens ID.  Use 0 if not known.
+ * @param flags  Bitmap of camera capability flags.
+ * @param cam_definition_version  Camera definition version (iteration).  Use 0 if not known.
+ * @param cam_definition_uri  Camera definition URI (if any, otherwise only basic functions will be available). HTTP- (http://) and MAVLink FTP- (mavlinkftp://) formatted URIs are allowed (and both must be supported by any GCS that implements the Camera Protocol). The definition file may be xz compressed, which will be indicated by the file extension .xml.xz (a GCS that implements the protocol must support decompressing the file). The string needs to be zero terminated.  Use a zero-length string if not known.
+ * @param gimbal_device_id  Gimbal id of a gimbal associated with this camera. This is the component id of the gimbal device, or 1-6 for non mavlink gimbals. Use 0 if no gimbal is associated with the camera.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_information_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,const uint8_t *vendor_name,const uint8_t *model_name,uint32_t firmware_version,float focal_length,float sensor_size_h,float sensor_size_v,uint16_t resolution_h,uint16_t resolution_v,uint8_t lens_id,uint32_t flags,uint16_t cam_definition_version,const char *cam_definition_uri,uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, firmware_version);
+    _mav_put_float(buf, 8, focal_length);
+    _mav_put_float(buf, 12, sensor_size_h);
+    _mav_put_float(buf, 16, sensor_size_v);
+    _mav_put_uint32_t(buf, 20, flags);
+    _mav_put_uint16_t(buf, 24, resolution_h);
+    _mav_put_uint16_t(buf, 26, resolution_v);
+    _mav_put_uint16_t(buf, 28, cam_definition_version);
+    _mav_put_uint8_t(buf, 94, lens_id);
+    _mav_put_uint8_t(buf, 235, gimbal_device_id);
+    _mav_put_uint8_t_array(buf, 30, vendor_name, 32);
+    _mav_put_uint8_t_array(buf, 62, model_name, 32);
+    _mav_put_char_array(buf, 95, cam_definition_uri, 140);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN);
+#else
+    mavlink_camera_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.firmware_version = firmware_version;
+    packet.focal_length = focal_length;
+    packet.sensor_size_h = sensor_size_h;
+    packet.sensor_size_v = sensor_size_v;
+    packet.flags = flags;
+    packet.resolution_h = resolution_h;
+    packet.resolution_v = resolution_v;
+    packet.cam_definition_version = cam_definition_version;
+    packet.lens_id = lens_id;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.vendor_name, vendor_name, sizeof(uint8_t)*32);
+    mav_array_memcpy(packet.model_name, model_name, sizeof(uint8_t)*32);
+    mav_array_memcpy(packet.cam_definition_uri, cam_definition_uri, sizeof(char)*140);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_INFORMATION;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAMERA_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_CRC);
+}
+
+/**
+ * @brief Encode a camera_information struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_information_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_camera_information_t* camera_information)
+{
+    return mavlink_msg_camera_information_pack(system_id, component_id, msg, camera_information->time_boot_ms, camera_information->vendor_name, camera_information->model_name, camera_information->firmware_version, camera_information->focal_length, camera_information->sensor_size_h, camera_information->sensor_size_v, camera_information->resolution_h, camera_information->resolution_v, camera_information->lens_id, camera_information->flags, camera_information->cam_definition_version, camera_information->cam_definition_uri, camera_information->gimbal_device_id);
+}
+
+/**
+ * @brief Encode a camera_information struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_information_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_camera_information_t* camera_information)
+{
+    return mavlink_msg_camera_information_pack_chan(system_id, component_id, chan, msg, camera_information->time_boot_ms, camera_information->vendor_name, camera_information->model_name, camera_information->firmware_version, camera_information->focal_length, camera_information->sensor_size_h, camera_information->sensor_size_v, camera_information->resolution_h, camera_information->resolution_v, camera_information->lens_id, camera_information->flags, camera_information->cam_definition_version, camera_information->cam_definition_uri, camera_information->gimbal_device_id);
+}
+
+/**
+ * @brief Send a camera_information message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param vendor_name  Name of the camera vendor
+ * @param model_name  Name of the camera model
+ * @param firmware_version  Version of the camera firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff). Use 0 if not known.
+ * @param focal_length [mm] Focal length. Use NaN if not known.
+ * @param sensor_size_h [mm] Image sensor size horizontal. Use NaN if not known.
+ * @param sensor_size_v [mm] Image sensor size vertical. Use NaN if not known.
+ * @param resolution_h [pix] Horizontal image resolution. Use 0 if not known.
+ * @param resolution_v [pix] Vertical image resolution. Use 0 if not known.
+ * @param lens_id  Reserved for a lens ID.  Use 0 if not known.
+ * @param flags  Bitmap of camera capability flags.
+ * @param cam_definition_version  Camera definition version (iteration).  Use 0 if not known.
+ * @param cam_definition_uri  Camera definition URI (if any, otherwise only basic functions will be available). HTTP- (http://) and MAVLink FTP- (mavlinkftp://) formatted URIs are allowed (and both must be supported by any GCS that implements the Camera Protocol). The definition file may be xz compressed, which will be indicated by the file extension .xml.xz (a GCS that implements the protocol must support decompressing the file). The string needs to be zero terminated.  Use a zero-length string if not known.
+ * @param gimbal_device_id  Gimbal id of a gimbal associated with this camera. This is the component id of the gimbal device, or 1-6 for non mavlink gimbals. Use 0 if no gimbal is associated with the camera.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_camera_information_send(mavlink_channel_t chan, uint32_t time_boot_ms, const uint8_t *vendor_name, const uint8_t *model_name, uint32_t firmware_version, float focal_length, float sensor_size_h, float sensor_size_v, uint16_t resolution_h, uint16_t resolution_v, uint8_t lens_id, uint32_t flags, uint16_t cam_definition_version, const char *cam_definition_uri, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, firmware_version);
+    _mav_put_float(buf, 8, focal_length);
+    _mav_put_float(buf, 12, sensor_size_h);
+    _mav_put_float(buf, 16, sensor_size_v);
+    _mav_put_uint32_t(buf, 20, flags);
+    _mav_put_uint16_t(buf, 24, resolution_h);
+    _mav_put_uint16_t(buf, 26, resolution_v);
+    _mav_put_uint16_t(buf, 28, cam_definition_version);
+    _mav_put_uint8_t(buf, 94, lens_id);
+    _mav_put_uint8_t(buf, 235, gimbal_device_id);
+    _mav_put_uint8_t_array(buf, 30, vendor_name, 32);
+    _mav_put_uint8_t_array(buf, 62, model_name, 32);
+    _mav_put_char_array(buf, 95, cam_definition_uri, 140);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_INFORMATION, buf, MAVLINK_MSG_ID_CAMERA_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_CRC);
+#else
+    mavlink_camera_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.firmware_version = firmware_version;
+    packet.focal_length = focal_length;
+    packet.sensor_size_h = sensor_size_h;
+    packet.sensor_size_v = sensor_size_v;
+    packet.flags = flags;
+    packet.resolution_h = resolution_h;
+    packet.resolution_v = resolution_v;
+    packet.cam_definition_version = cam_definition_version;
+    packet.lens_id = lens_id;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.vendor_name, vendor_name, sizeof(uint8_t)*32);
+    mav_array_memcpy(packet.model_name, model_name, sizeof(uint8_t)*32);
+    mav_array_memcpy(packet.cam_definition_uri, cam_definition_uri, sizeof(char)*140);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_INFORMATION, (const char *)&packet, MAVLINK_MSG_ID_CAMERA_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_CRC);
+#endif
+}
+
+/**
+ * @brief Send a camera_information message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_camera_information_send_struct(mavlink_channel_t chan, const mavlink_camera_information_t* camera_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_camera_information_send(chan, camera_information->time_boot_ms, camera_information->vendor_name, camera_information->model_name, camera_information->firmware_version, camera_information->focal_length, camera_information->sensor_size_h, camera_information->sensor_size_v, camera_information->resolution_h, camera_information->resolution_v, camera_information->lens_id, camera_information->flags, camera_information->cam_definition_version, camera_information->cam_definition_uri, camera_information->gimbal_device_id);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_INFORMATION, (const char *)camera_information, MAVLINK_MSG_ID_CAMERA_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_camera_information_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, const uint8_t *vendor_name, const uint8_t *model_name, uint32_t firmware_version, float focal_length, float sensor_size_h, float sensor_size_v, uint16_t resolution_h, uint16_t resolution_v, uint8_t lens_id, uint32_t flags, uint16_t cam_definition_version, const char *cam_definition_uri, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, firmware_version);
+    _mav_put_float(buf, 8, focal_length);
+    _mav_put_float(buf, 12, sensor_size_h);
+    _mav_put_float(buf, 16, sensor_size_v);
+    _mav_put_uint32_t(buf, 20, flags);
+    _mav_put_uint16_t(buf, 24, resolution_h);
+    _mav_put_uint16_t(buf, 26, resolution_v);
+    _mav_put_uint16_t(buf, 28, cam_definition_version);
+    _mav_put_uint8_t(buf, 94, lens_id);
+    _mav_put_uint8_t(buf, 235, gimbal_device_id);
+    _mav_put_uint8_t_array(buf, 30, vendor_name, 32);
+    _mav_put_uint8_t_array(buf, 62, model_name, 32);
+    _mav_put_char_array(buf, 95, cam_definition_uri, 140);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_INFORMATION, buf, MAVLINK_MSG_ID_CAMERA_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_CRC);
+#else
+    mavlink_camera_information_t *packet = (mavlink_camera_information_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->firmware_version = firmware_version;
+    packet->focal_length = focal_length;
+    packet->sensor_size_h = sensor_size_h;
+    packet->sensor_size_v = sensor_size_v;
+    packet->flags = flags;
+    packet->resolution_h = resolution_h;
+    packet->resolution_v = resolution_v;
+    packet->cam_definition_version = cam_definition_version;
+    packet->lens_id = lens_id;
+    packet->gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet->vendor_name, vendor_name, sizeof(uint8_t)*32);
+    mav_array_memcpy(packet->model_name, model_name, sizeof(uint8_t)*32);
+    mav_array_memcpy(packet->cam_definition_uri, cam_definition_uri, sizeof(char)*140);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_INFORMATION, (const char *)packet, MAVLINK_MSG_ID_CAMERA_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN, MAVLINK_MSG_ID_CAMERA_INFORMATION_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAMERA_INFORMATION UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from camera_information message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_camera_information_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field vendor_name from camera_information message
+ *
+ * @return  Name of the camera vendor
+ */
+static inline uint16_t mavlink_msg_camera_information_get_vendor_name(const mavlink_message_t* msg, uint8_t *vendor_name)
+{
+    return _MAV_RETURN_uint8_t_array(msg, vendor_name, 32,  30);
+}
+
+/**
+ * @brief Get field model_name from camera_information message
+ *
+ * @return  Name of the camera model
+ */
+static inline uint16_t mavlink_msg_camera_information_get_model_name(const mavlink_message_t* msg, uint8_t *model_name)
+{
+    return _MAV_RETURN_uint8_t_array(msg, model_name, 32,  62);
+}
+
+/**
+ * @brief Get field firmware_version from camera_information message
+ *
+ * @return  Version of the camera firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff). Use 0 if not known.
+ */
+static inline uint32_t mavlink_msg_camera_information_get_firmware_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field focal_length from camera_information message
+ *
+ * @return [mm] Focal length. Use NaN if not known.
+ */
+static inline float mavlink_msg_camera_information_get_focal_length(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field sensor_size_h from camera_information message
+ *
+ * @return [mm] Image sensor size horizontal. Use NaN if not known.
+ */
+static inline float mavlink_msg_camera_information_get_sensor_size_h(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field sensor_size_v from camera_information message
+ *
+ * @return [mm] Image sensor size vertical. Use NaN if not known.
+ */
+static inline float mavlink_msg_camera_information_get_sensor_size_v(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field resolution_h from camera_information message
+ *
+ * @return [pix] Horizontal image resolution. Use 0 if not known.
+ */
+static inline uint16_t mavlink_msg_camera_information_get_resolution_h(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Get field resolution_v from camera_information message
+ *
+ * @return [pix] Vertical image resolution. Use 0 if not known.
+ */
+static inline uint16_t mavlink_msg_camera_information_get_resolution_v(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  26);
+}
+
+/**
+ * @brief Get field lens_id from camera_information message
+ *
+ * @return  Reserved for a lens ID.  Use 0 if not known.
+ */
+static inline uint8_t mavlink_msg_camera_information_get_lens_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  94);
+}
+
+/**
+ * @brief Get field flags from camera_information message
+ *
+ * @return  Bitmap of camera capability flags.
+ */
+static inline uint32_t mavlink_msg_camera_information_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  20);
+}
+
+/**
+ * @brief Get field cam_definition_version from camera_information message
+ *
+ * @return  Camera definition version (iteration).  Use 0 if not known.
+ */
+static inline uint16_t mavlink_msg_camera_information_get_cam_definition_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  28);
+}
+
+/**
+ * @brief Get field cam_definition_uri from camera_information message
+ *
+ * @return  Camera definition URI (if any, otherwise only basic functions will be available). HTTP- (http://) and MAVLink FTP- (mavlinkftp://) formatted URIs are allowed (and both must be supported by any GCS that implements the Camera Protocol). The definition file may be xz compressed, which will be indicated by the file extension .xml.xz (a GCS that implements the protocol must support decompressing the file). The string needs to be zero terminated.  Use a zero-length string if not known.
+ */
+static inline uint16_t mavlink_msg_camera_information_get_cam_definition_uri(const mavlink_message_t* msg, char *cam_definition_uri)
+{
+    return _MAV_RETURN_char_array(msg, cam_definition_uri, 140,  95);
+}
+
+/**
+ * @brief Get field gimbal_device_id from camera_information message
+ *
+ * @return  Gimbal id of a gimbal associated with this camera. This is the component id of the gimbal device, or 1-6 for non mavlink gimbals. Use 0 if no gimbal is associated with the camera.
+ */
+static inline uint8_t mavlink_msg_camera_information_get_gimbal_device_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  235);
+}
+
+/**
+ * @brief Decode a camera_information message into a struct
+ *
+ * @param msg The message to decode
+ * @param camera_information C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_camera_information_decode(const mavlink_message_t* msg, mavlink_camera_information_t* camera_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    camera_information->time_boot_ms = mavlink_msg_camera_information_get_time_boot_ms(msg);
+    camera_information->firmware_version = mavlink_msg_camera_information_get_firmware_version(msg);
+    camera_information->focal_length = mavlink_msg_camera_information_get_focal_length(msg);
+    camera_information->sensor_size_h = mavlink_msg_camera_information_get_sensor_size_h(msg);
+    camera_information->sensor_size_v = mavlink_msg_camera_information_get_sensor_size_v(msg);
+    camera_information->flags = mavlink_msg_camera_information_get_flags(msg);
+    camera_information->resolution_h = mavlink_msg_camera_information_get_resolution_h(msg);
+    camera_information->resolution_v = mavlink_msg_camera_information_get_resolution_v(msg);
+    camera_information->cam_definition_version = mavlink_msg_camera_information_get_cam_definition_version(msg);
+    mavlink_msg_camera_information_get_vendor_name(msg, camera_information->vendor_name);
+    mavlink_msg_camera_information_get_model_name(msg, camera_information->model_name);
+    camera_information->lens_id = mavlink_msg_camera_information_get_lens_id(msg);
+    mavlink_msg_camera_information_get_cam_definition_uri(msg, camera_information->cam_definition_uri);
+    camera_information->gimbal_device_id = mavlink_msg_camera_information_get_gimbal_device_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN? msg->len : MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN;
+        memset(camera_information, 0, MAVLINK_MSG_ID_CAMERA_INFORMATION_LEN);
+    memcpy(camera_information, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 288 - 0
v2.0/common/mavlink_msg_camera_settings.h

@@ -0,0 +1,288 @@
+#pragma once
+// MESSAGE CAMERA_SETTINGS PACKING
+
+#define MAVLINK_MSG_ID_CAMERA_SETTINGS 260
+
+MAVPACKED(
+typedef struct __mavlink_camera_settings_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint8_t mode_id; /*<  Camera mode*/
+ float zoomLevel; /*<  Current zoom level as a percentage of the full range (0.0 to 100.0, NaN if not known)*/
+ float focusLevel; /*<  Current focus level as a percentage of the full range (0.0 to 100.0, NaN if not known)*/
+}) mavlink_camera_settings_t;
+
+#define MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN 13
+#define MAVLINK_MSG_ID_CAMERA_SETTINGS_MIN_LEN 5
+#define MAVLINK_MSG_ID_260_LEN 13
+#define MAVLINK_MSG_ID_260_MIN_LEN 5
+
+#define MAVLINK_MSG_ID_CAMERA_SETTINGS_CRC 146
+#define MAVLINK_MSG_ID_260_CRC 146
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAMERA_SETTINGS { \
+    260, \
+    "CAMERA_SETTINGS", \
+    4, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_camera_settings_t, time_boot_ms) }, \
+         { "mode_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_camera_settings_t, mode_id) }, \
+         { "zoomLevel", NULL, MAVLINK_TYPE_FLOAT, 0, 5, offsetof(mavlink_camera_settings_t, zoomLevel) }, \
+         { "focusLevel", NULL, MAVLINK_TYPE_FLOAT, 0, 9, offsetof(mavlink_camera_settings_t, focusLevel) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAMERA_SETTINGS { \
+    "CAMERA_SETTINGS", \
+    4, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_camera_settings_t, time_boot_ms) }, \
+         { "mode_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_camera_settings_t, mode_id) }, \
+         { "zoomLevel", NULL, MAVLINK_TYPE_FLOAT, 0, 5, offsetof(mavlink_camera_settings_t, zoomLevel) }, \
+         { "focusLevel", NULL, MAVLINK_TYPE_FLOAT, 0, 9, offsetof(mavlink_camera_settings_t, focusLevel) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a camera_settings message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param mode_id  Camera mode
+ * @param zoomLevel  Current zoom level as a percentage of the full range (0.0 to 100.0, NaN if not known)
+ * @param focusLevel  Current focus level as a percentage of the full range (0.0 to 100.0, NaN if not known)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_settings_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint8_t mode_id, float zoomLevel, float focusLevel)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint8_t(buf, 4, mode_id);
+    _mav_put_float(buf, 5, zoomLevel);
+    _mav_put_float(buf, 9, focusLevel);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN);
+#else
+    mavlink_camera_settings_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.mode_id = mode_id;
+    packet.zoomLevel = zoomLevel;
+    packet.focusLevel = focusLevel;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_SETTINGS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAMERA_SETTINGS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_CRC);
+}
+
+/**
+ * @brief Pack a camera_settings message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param mode_id  Camera mode
+ * @param zoomLevel  Current zoom level as a percentage of the full range (0.0 to 100.0, NaN if not known)
+ * @param focusLevel  Current focus level as a percentage of the full range (0.0 to 100.0, NaN if not known)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_settings_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint8_t mode_id,float zoomLevel,float focusLevel)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint8_t(buf, 4, mode_id);
+    _mav_put_float(buf, 5, zoomLevel);
+    _mav_put_float(buf, 9, focusLevel);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN);
+#else
+    mavlink_camera_settings_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.mode_id = mode_id;
+    packet.zoomLevel = zoomLevel;
+    packet.focusLevel = focusLevel;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_SETTINGS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAMERA_SETTINGS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_CRC);
+}
+
+/**
+ * @brief Encode a camera_settings struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_settings C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_settings_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_camera_settings_t* camera_settings)
+{
+    return mavlink_msg_camera_settings_pack(system_id, component_id, msg, camera_settings->time_boot_ms, camera_settings->mode_id, camera_settings->zoomLevel, camera_settings->focusLevel);
+}
+
+/**
+ * @brief Encode a camera_settings struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_settings C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_settings_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_camera_settings_t* camera_settings)
+{
+    return mavlink_msg_camera_settings_pack_chan(system_id, component_id, chan, msg, camera_settings->time_boot_ms, camera_settings->mode_id, camera_settings->zoomLevel, camera_settings->focusLevel);
+}
+
+/**
+ * @brief Send a camera_settings message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param mode_id  Camera mode
+ * @param zoomLevel  Current zoom level as a percentage of the full range (0.0 to 100.0, NaN if not known)
+ * @param focusLevel  Current focus level as a percentage of the full range (0.0 to 100.0, NaN if not known)
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_camera_settings_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t mode_id, float zoomLevel, float focusLevel)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint8_t(buf, 4, mode_id);
+    _mav_put_float(buf, 5, zoomLevel);
+    _mav_put_float(buf, 9, focusLevel);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_SETTINGS, buf, MAVLINK_MSG_ID_CAMERA_SETTINGS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_CRC);
+#else
+    mavlink_camera_settings_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.mode_id = mode_id;
+    packet.zoomLevel = zoomLevel;
+    packet.focusLevel = focusLevel;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_SETTINGS, (const char *)&packet, MAVLINK_MSG_ID_CAMERA_SETTINGS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a camera_settings message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_camera_settings_send_struct(mavlink_channel_t chan, const mavlink_camera_settings_t* camera_settings)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_camera_settings_send(chan, camera_settings->time_boot_ms, camera_settings->mode_id, camera_settings->zoomLevel, camera_settings->focusLevel);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_SETTINGS, (const char *)camera_settings, MAVLINK_MSG_ID_CAMERA_SETTINGS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_camera_settings_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint8_t mode_id, float zoomLevel, float focusLevel)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint8_t(buf, 4, mode_id);
+    _mav_put_float(buf, 5, zoomLevel);
+    _mav_put_float(buf, 9, focusLevel);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_SETTINGS, buf, MAVLINK_MSG_ID_CAMERA_SETTINGS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_CRC);
+#else
+    mavlink_camera_settings_t *packet = (mavlink_camera_settings_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->mode_id = mode_id;
+    packet->zoomLevel = zoomLevel;
+    packet->focusLevel = focusLevel;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_SETTINGS, (const char *)packet, MAVLINK_MSG_ID_CAMERA_SETTINGS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN, MAVLINK_MSG_ID_CAMERA_SETTINGS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAMERA_SETTINGS UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from camera_settings message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_camera_settings_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field mode_id from camera_settings message
+ *
+ * @return  Camera mode
+ */
+static inline uint8_t mavlink_msg_camera_settings_get_mode_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  4);
+}
+
+/**
+ * @brief Get field zoomLevel from camera_settings message
+ *
+ * @return  Current zoom level as a percentage of the full range (0.0 to 100.0, NaN if not known)
+ */
+static inline float mavlink_msg_camera_settings_get_zoomLevel(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  5);
+}
+
+/**
+ * @brief Get field focusLevel from camera_settings message
+ *
+ * @return  Current focus level as a percentage of the full range (0.0 to 100.0, NaN if not known)
+ */
+static inline float mavlink_msg_camera_settings_get_focusLevel(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  9);
+}
+
+/**
+ * @brief Decode a camera_settings message into a struct
+ *
+ * @param msg The message to decode
+ * @param camera_settings C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_camera_settings_decode(const mavlink_message_t* msg, mavlink_camera_settings_t* camera_settings)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    camera_settings->time_boot_ms = mavlink_msg_camera_settings_get_time_boot_ms(msg);
+    camera_settings->mode_id = mavlink_msg_camera_settings_get_mode_id(msg);
+    camera_settings->zoomLevel = mavlink_msg_camera_settings_get_zoomLevel(msg);
+    camera_settings->focusLevel = mavlink_msg_camera_settings_get_focusLevel(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN? msg->len : MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN;
+        memset(camera_settings, 0, MAVLINK_MSG_ID_CAMERA_SETTINGS_LEN);
+    memcpy(camera_settings, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 513 - 0
v2.0/common/mavlink_msg_camera_tracking_geo_status.h

@@ -0,0 +1,513 @@
+#pragma once
+// MESSAGE CAMERA_TRACKING_GEO_STATUS PACKING
+
+#define MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS 276
+
+
+typedef struct __mavlink_camera_tracking_geo_status_t {
+ int32_t lat; /*< [degE7] Latitude of tracked object*/
+ int32_t lon; /*< [degE7] Longitude of tracked object*/
+ float alt; /*< [m] Altitude of tracked object(AMSL, WGS84)*/
+ float h_acc; /*< [m] Horizontal accuracy. NAN if unknown*/
+ float v_acc; /*< [m] Vertical accuracy. NAN if unknown*/
+ float vel_n; /*< [m/s] North velocity of tracked object. NAN if unknown*/
+ float vel_e; /*< [m/s] East velocity of tracked object. NAN if unknown*/
+ float vel_d; /*< [m/s] Down velocity of tracked object. NAN if unknown*/
+ float vel_acc; /*< [m/s] Velocity accuracy. NAN if unknown*/
+ float dist; /*< [m] Distance between camera and tracked object. NAN if unknown*/
+ float hdg; /*< [rad] Heading in radians, in NED. NAN if unknown*/
+ float hdg_acc; /*< [rad] Accuracy of heading, in NED. NAN if unknown*/
+ uint8_t tracking_status; /*<  Current tracking status*/
+} mavlink_camera_tracking_geo_status_t;
+
+#define MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN 49
+#define MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_MIN_LEN 49
+#define MAVLINK_MSG_ID_276_LEN 49
+#define MAVLINK_MSG_ID_276_MIN_LEN 49
+
+#define MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_CRC 18
+#define MAVLINK_MSG_ID_276_CRC 18
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAMERA_TRACKING_GEO_STATUS { \
+    276, \
+    "CAMERA_TRACKING_GEO_STATUS", \
+    13, \
+    {  { "tracking_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 48, offsetof(mavlink_camera_tracking_geo_status_t, tracking_status) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_camera_tracking_geo_status_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_camera_tracking_geo_status_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_camera_tracking_geo_status_t, alt) }, \
+         { "h_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_camera_tracking_geo_status_t, h_acc) }, \
+         { "v_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_camera_tracking_geo_status_t, v_acc) }, \
+         { "vel_n", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_camera_tracking_geo_status_t, vel_n) }, \
+         { "vel_e", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_camera_tracking_geo_status_t, vel_e) }, \
+         { "vel_d", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_camera_tracking_geo_status_t, vel_d) }, \
+         { "vel_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_camera_tracking_geo_status_t, vel_acc) }, \
+         { "dist", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_camera_tracking_geo_status_t, dist) }, \
+         { "hdg", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_camera_tracking_geo_status_t, hdg) }, \
+         { "hdg_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_camera_tracking_geo_status_t, hdg_acc) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAMERA_TRACKING_GEO_STATUS { \
+    "CAMERA_TRACKING_GEO_STATUS", \
+    13, \
+    {  { "tracking_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 48, offsetof(mavlink_camera_tracking_geo_status_t, tracking_status) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_camera_tracking_geo_status_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_camera_tracking_geo_status_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_camera_tracking_geo_status_t, alt) }, \
+         { "h_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_camera_tracking_geo_status_t, h_acc) }, \
+         { "v_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_camera_tracking_geo_status_t, v_acc) }, \
+         { "vel_n", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_camera_tracking_geo_status_t, vel_n) }, \
+         { "vel_e", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_camera_tracking_geo_status_t, vel_e) }, \
+         { "vel_d", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_camera_tracking_geo_status_t, vel_d) }, \
+         { "vel_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_camera_tracking_geo_status_t, vel_acc) }, \
+         { "dist", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_camera_tracking_geo_status_t, dist) }, \
+         { "hdg", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_camera_tracking_geo_status_t, hdg) }, \
+         { "hdg_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_camera_tracking_geo_status_t, hdg_acc) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a camera_tracking_geo_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param tracking_status  Current tracking status
+ * @param lat [degE7] Latitude of tracked object
+ * @param lon [degE7] Longitude of tracked object
+ * @param alt [m] Altitude of tracked object(AMSL, WGS84)
+ * @param h_acc [m] Horizontal accuracy. NAN if unknown
+ * @param v_acc [m] Vertical accuracy. NAN if unknown
+ * @param vel_n [m/s] North velocity of tracked object. NAN if unknown
+ * @param vel_e [m/s] East velocity of tracked object. NAN if unknown
+ * @param vel_d [m/s] Down velocity of tracked object. NAN if unknown
+ * @param vel_acc [m/s] Velocity accuracy. NAN if unknown
+ * @param dist [m] Distance between camera and tracked object. NAN if unknown
+ * @param hdg [rad] Heading in radians, in NED. NAN if unknown
+ * @param hdg_acc [rad] Accuracy of heading, in NED. NAN if unknown
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_tracking_geo_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t tracking_status, int32_t lat, int32_t lon, float alt, float h_acc, float v_acc, float vel_n, float vel_e, float vel_d, float vel_acc, float dist, float hdg, float hdg_acc)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN];
+    _mav_put_int32_t(buf, 0, lat);
+    _mav_put_int32_t(buf, 4, lon);
+    _mav_put_float(buf, 8, alt);
+    _mav_put_float(buf, 12, h_acc);
+    _mav_put_float(buf, 16, v_acc);
+    _mav_put_float(buf, 20, vel_n);
+    _mav_put_float(buf, 24, vel_e);
+    _mav_put_float(buf, 28, vel_d);
+    _mav_put_float(buf, 32, vel_acc);
+    _mav_put_float(buf, 36, dist);
+    _mav_put_float(buf, 40, hdg);
+    _mav_put_float(buf, 44, hdg_acc);
+    _mav_put_uint8_t(buf, 48, tracking_status);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN);
+#else
+    mavlink_camera_tracking_geo_status_t packet;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_n = vel_n;
+    packet.vel_e = vel_e;
+    packet.vel_d = vel_d;
+    packet.vel_acc = vel_acc;
+    packet.dist = dist;
+    packet.hdg = hdg;
+    packet.hdg_acc = hdg_acc;
+    packet.tracking_status = tracking_status;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a camera_tracking_geo_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param tracking_status  Current tracking status
+ * @param lat [degE7] Latitude of tracked object
+ * @param lon [degE7] Longitude of tracked object
+ * @param alt [m] Altitude of tracked object(AMSL, WGS84)
+ * @param h_acc [m] Horizontal accuracy. NAN if unknown
+ * @param v_acc [m] Vertical accuracy. NAN if unknown
+ * @param vel_n [m/s] North velocity of tracked object. NAN if unknown
+ * @param vel_e [m/s] East velocity of tracked object. NAN if unknown
+ * @param vel_d [m/s] Down velocity of tracked object. NAN if unknown
+ * @param vel_acc [m/s] Velocity accuracy. NAN if unknown
+ * @param dist [m] Distance between camera and tracked object. NAN if unknown
+ * @param hdg [rad] Heading in radians, in NED. NAN if unknown
+ * @param hdg_acc [rad] Accuracy of heading, in NED. NAN if unknown
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_tracking_geo_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t tracking_status,int32_t lat,int32_t lon,float alt,float h_acc,float v_acc,float vel_n,float vel_e,float vel_d,float vel_acc,float dist,float hdg,float hdg_acc)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN];
+    _mav_put_int32_t(buf, 0, lat);
+    _mav_put_int32_t(buf, 4, lon);
+    _mav_put_float(buf, 8, alt);
+    _mav_put_float(buf, 12, h_acc);
+    _mav_put_float(buf, 16, v_acc);
+    _mav_put_float(buf, 20, vel_n);
+    _mav_put_float(buf, 24, vel_e);
+    _mav_put_float(buf, 28, vel_d);
+    _mav_put_float(buf, 32, vel_acc);
+    _mav_put_float(buf, 36, dist);
+    _mav_put_float(buf, 40, hdg);
+    _mav_put_float(buf, 44, hdg_acc);
+    _mav_put_uint8_t(buf, 48, tracking_status);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN);
+#else
+    mavlink_camera_tracking_geo_status_t packet;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_n = vel_n;
+    packet.vel_e = vel_e;
+    packet.vel_d = vel_d;
+    packet.vel_acc = vel_acc;
+    packet.dist = dist;
+    packet.hdg = hdg;
+    packet.hdg_acc = hdg_acc;
+    packet.tracking_status = tracking_status;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a camera_tracking_geo_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_tracking_geo_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_tracking_geo_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_camera_tracking_geo_status_t* camera_tracking_geo_status)
+{
+    return mavlink_msg_camera_tracking_geo_status_pack(system_id, component_id, msg, camera_tracking_geo_status->tracking_status, camera_tracking_geo_status->lat, camera_tracking_geo_status->lon, camera_tracking_geo_status->alt, camera_tracking_geo_status->h_acc, camera_tracking_geo_status->v_acc, camera_tracking_geo_status->vel_n, camera_tracking_geo_status->vel_e, camera_tracking_geo_status->vel_d, camera_tracking_geo_status->vel_acc, camera_tracking_geo_status->dist, camera_tracking_geo_status->hdg, camera_tracking_geo_status->hdg_acc);
+}
+
+/**
+ * @brief Encode a camera_tracking_geo_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_tracking_geo_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_tracking_geo_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_camera_tracking_geo_status_t* camera_tracking_geo_status)
+{
+    return mavlink_msg_camera_tracking_geo_status_pack_chan(system_id, component_id, chan, msg, camera_tracking_geo_status->tracking_status, camera_tracking_geo_status->lat, camera_tracking_geo_status->lon, camera_tracking_geo_status->alt, camera_tracking_geo_status->h_acc, camera_tracking_geo_status->v_acc, camera_tracking_geo_status->vel_n, camera_tracking_geo_status->vel_e, camera_tracking_geo_status->vel_d, camera_tracking_geo_status->vel_acc, camera_tracking_geo_status->dist, camera_tracking_geo_status->hdg, camera_tracking_geo_status->hdg_acc);
+}
+
+/**
+ * @brief Send a camera_tracking_geo_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param tracking_status  Current tracking status
+ * @param lat [degE7] Latitude of tracked object
+ * @param lon [degE7] Longitude of tracked object
+ * @param alt [m] Altitude of tracked object(AMSL, WGS84)
+ * @param h_acc [m] Horizontal accuracy. NAN if unknown
+ * @param v_acc [m] Vertical accuracy. NAN if unknown
+ * @param vel_n [m/s] North velocity of tracked object. NAN if unknown
+ * @param vel_e [m/s] East velocity of tracked object. NAN if unknown
+ * @param vel_d [m/s] Down velocity of tracked object. NAN if unknown
+ * @param vel_acc [m/s] Velocity accuracy. NAN if unknown
+ * @param dist [m] Distance between camera and tracked object. NAN if unknown
+ * @param hdg [rad] Heading in radians, in NED. NAN if unknown
+ * @param hdg_acc [rad] Accuracy of heading, in NED. NAN if unknown
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_camera_tracking_geo_status_send(mavlink_channel_t chan, uint8_t tracking_status, int32_t lat, int32_t lon, float alt, float h_acc, float v_acc, float vel_n, float vel_e, float vel_d, float vel_acc, float dist, float hdg, float hdg_acc)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN];
+    _mav_put_int32_t(buf, 0, lat);
+    _mav_put_int32_t(buf, 4, lon);
+    _mav_put_float(buf, 8, alt);
+    _mav_put_float(buf, 12, h_acc);
+    _mav_put_float(buf, 16, v_acc);
+    _mav_put_float(buf, 20, vel_n);
+    _mav_put_float(buf, 24, vel_e);
+    _mav_put_float(buf, 28, vel_d);
+    _mav_put_float(buf, 32, vel_acc);
+    _mav_put_float(buf, 36, dist);
+    _mav_put_float(buf, 40, hdg);
+    _mav_put_float(buf, 44, hdg_acc);
+    _mav_put_uint8_t(buf, 48, tracking_status);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS, buf, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_CRC);
+#else
+    mavlink_camera_tracking_geo_status_t packet;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_n = vel_n;
+    packet.vel_e = vel_e;
+    packet.vel_d = vel_d;
+    packet.vel_acc = vel_acc;
+    packet.dist = dist;
+    packet.hdg = hdg;
+    packet.hdg_acc = hdg_acc;
+    packet.tracking_status = tracking_status;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS, (const char *)&packet, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a camera_tracking_geo_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_camera_tracking_geo_status_send_struct(mavlink_channel_t chan, const mavlink_camera_tracking_geo_status_t* camera_tracking_geo_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_camera_tracking_geo_status_send(chan, camera_tracking_geo_status->tracking_status, camera_tracking_geo_status->lat, camera_tracking_geo_status->lon, camera_tracking_geo_status->alt, camera_tracking_geo_status->h_acc, camera_tracking_geo_status->v_acc, camera_tracking_geo_status->vel_n, camera_tracking_geo_status->vel_e, camera_tracking_geo_status->vel_d, camera_tracking_geo_status->vel_acc, camera_tracking_geo_status->dist, camera_tracking_geo_status->hdg, camera_tracking_geo_status->hdg_acc);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS, (const char *)camera_tracking_geo_status, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_camera_tracking_geo_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t tracking_status, int32_t lat, int32_t lon, float alt, float h_acc, float v_acc, float vel_n, float vel_e, float vel_d, float vel_acc, float dist, float hdg, float hdg_acc)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_int32_t(buf, 0, lat);
+    _mav_put_int32_t(buf, 4, lon);
+    _mav_put_float(buf, 8, alt);
+    _mav_put_float(buf, 12, h_acc);
+    _mav_put_float(buf, 16, v_acc);
+    _mav_put_float(buf, 20, vel_n);
+    _mav_put_float(buf, 24, vel_e);
+    _mav_put_float(buf, 28, vel_d);
+    _mav_put_float(buf, 32, vel_acc);
+    _mav_put_float(buf, 36, dist);
+    _mav_put_float(buf, 40, hdg);
+    _mav_put_float(buf, 44, hdg_acc);
+    _mav_put_uint8_t(buf, 48, tracking_status);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS, buf, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_CRC);
+#else
+    mavlink_camera_tracking_geo_status_t *packet = (mavlink_camera_tracking_geo_status_t *)msgbuf;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->h_acc = h_acc;
+    packet->v_acc = v_acc;
+    packet->vel_n = vel_n;
+    packet->vel_e = vel_e;
+    packet->vel_d = vel_d;
+    packet->vel_acc = vel_acc;
+    packet->dist = dist;
+    packet->hdg = hdg;
+    packet->hdg_acc = hdg_acc;
+    packet->tracking_status = tracking_status;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS, (const char *)packet, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAMERA_TRACKING_GEO_STATUS UNPACKING
+
+
+/**
+ * @brief Get field tracking_status from camera_tracking_geo_status message
+ *
+ * @return  Current tracking status
+ */
+static inline uint8_t mavlink_msg_camera_tracking_geo_status_get_tracking_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  48);
+}
+
+/**
+ * @brief Get field lat from camera_tracking_geo_status message
+ *
+ * @return [degE7] Latitude of tracked object
+ */
+static inline int32_t mavlink_msg_camera_tracking_geo_status_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  0);
+}
+
+/**
+ * @brief Get field lon from camera_tracking_geo_status message
+ *
+ * @return [degE7] Longitude of tracked object
+ */
+static inline int32_t mavlink_msg_camera_tracking_geo_status_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field alt from camera_tracking_geo_status message
+ *
+ * @return [m] Altitude of tracked object(AMSL, WGS84)
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field h_acc from camera_tracking_geo_status message
+ *
+ * @return [m] Horizontal accuracy. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_h_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field v_acc from camera_tracking_geo_status message
+ *
+ * @return [m] Vertical accuracy. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_v_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field vel_n from camera_tracking_geo_status message
+ *
+ * @return [m/s] North velocity of tracked object. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_vel_n(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field vel_e from camera_tracking_geo_status message
+ *
+ * @return [m/s] East velocity of tracked object. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_vel_e(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field vel_d from camera_tracking_geo_status message
+ *
+ * @return [m/s] Down velocity of tracked object. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_vel_d(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field vel_acc from camera_tracking_geo_status message
+ *
+ * @return [m/s] Velocity accuracy. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_vel_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field dist from camera_tracking_geo_status message
+ *
+ * @return [m] Distance between camera and tracked object. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_dist(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field hdg from camera_tracking_geo_status message
+ *
+ * @return [rad] Heading in radians, in NED. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_hdg(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  40);
+}
+
+/**
+ * @brief Get field hdg_acc from camera_tracking_geo_status message
+ *
+ * @return [rad] Accuracy of heading, in NED. NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_geo_status_get_hdg_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Decode a camera_tracking_geo_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param camera_tracking_geo_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_camera_tracking_geo_status_decode(const mavlink_message_t* msg, mavlink_camera_tracking_geo_status_t* camera_tracking_geo_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    camera_tracking_geo_status->lat = mavlink_msg_camera_tracking_geo_status_get_lat(msg);
+    camera_tracking_geo_status->lon = mavlink_msg_camera_tracking_geo_status_get_lon(msg);
+    camera_tracking_geo_status->alt = mavlink_msg_camera_tracking_geo_status_get_alt(msg);
+    camera_tracking_geo_status->h_acc = mavlink_msg_camera_tracking_geo_status_get_h_acc(msg);
+    camera_tracking_geo_status->v_acc = mavlink_msg_camera_tracking_geo_status_get_v_acc(msg);
+    camera_tracking_geo_status->vel_n = mavlink_msg_camera_tracking_geo_status_get_vel_n(msg);
+    camera_tracking_geo_status->vel_e = mavlink_msg_camera_tracking_geo_status_get_vel_e(msg);
+    camera_tracking_geo_status->vel_d = mavlink_msg_camera_tracking_geo_status_get_vel_d(msg);
+    camera_tracking_geo_status->vel_acc = mavlink_msg_camera_tracking_geo_status_get_vel_acc(msg);
+    camera_tracking_geo_status->dist = mavlink_msg_camera_tracking_geo_status_get_dist(msg);
+    camera_tracking_geo_status->hdg = mavlink_msg_camera_tracking_geo_status_get_hdg(msg);
+    camera_tracking_geo_status->hdg_acc = mavlink_msg_camera_tracking_geo_status_get_hdg_acc(msg);
+    camera_tracking_geo_status->tracking_status = mavlink_msg_camera_tracking_geo_status_get_tracking_status(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN? msg->len : MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN;
+        memset(camera_tracking_geo_status, 0, MAVLINK_MSG_ID_CAMERA_TRACKING_GEO_STATUS_LEN);
+    memcpy(camera_tracking_geo_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 438 - 0
v2.0/common/mavlink_msg_camera_tracking_image_status.h

@@ -0,0 +1,438 @@
+#pragma once
+// MESSAGE CAMERA_TRACKING_IMAGE_STATUS PACKING
+
+#define MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS 275
+
+
+typedef struct __mavlink_camera_tracking_image_status_t {
+ float point_x; /*<  Current tracked point x value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is left, 1 is right), NAN if unknown*/
+ float point_y; /*<  Current tracked point y value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown*/
+ float radius; /*<  Current tracked radius if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is image left, 1 is image right), NAN if unknown*/
+ float rec_top_x; /*<  Current tracked rectangle top x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown*/
+ float rec_top_y; /*<  Current tracked rectangle top y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown*/
+ float rec_bottom_x; /*<  Current tracked rectangle bottom x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown*/
+ float rec_bottom_y; /*<  Current tracked rectangle bottom y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown*/
+ uint8_t tracking_status; /*<  Current tracking status*/
+ uint8_t tracking_mode; /*<  Current tracking mode*/
+ uint8_t target_data; /*<  Defines location of target data*/
+} mavlink_camera_tracking_image_status_t;
+
+#define MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN 31
+#define MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_MIN_LEN 31
+#define MAVLINK_MSG_ID_275_LEN 31
+#define MAVLINK_MSG_ID_275_MIN_LEN 31
+
+#define MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_CRC 126
+#define MAVLINK_MSG_ID_275_CRC 126
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAMERA_TRACKING_IMAGE_STATUS { \
+    275, \
+    "CAMERA_TRACKING_IMAGE_STATUS", \
+    10, \
+    {  { "tracking_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_camera_tracking_image_status_t, tracking_status) }, \
+         { "tracking_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_camera_tracking_image_status_t, tracking_mode) }, \
+         { "target_data", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_camera_tracking_image_status_t, target_data) }, \
+         { "point_x", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_camera_tracking_image_status_t, point_x) }, \
+         { "point_y", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_camera_tracking_image_status_t, point_y) }, \
+         { "radius", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_camera_tracking_image_status_t, radius) }, \
+         { "rec_top_x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_camera_tracking_image_status_t, rec_top_x) }, \
+         { "rec_top_y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_camera_tracking_image_status_t, rec_top_y) }, \
+         { "rec_bottom_x", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_camera_tracking_image_status_t, rec_bottom_x) }, \
+         { "rec_bottom_y", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_camera_tracking_image_status_t, rec_bottom_y) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAMERA_TRACKING_IMAGE_STATUS { \
+    "CAMERA_TRACKING_IMAGE_STATUS", \
+    10, \
+    {  { "tracking_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_camera_tracking_image_status_t, tracking_status) }, \
+         { "tracking_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_camera_tracking_image_status_t, tracking_mode) }, \
+         { "target_data", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_camera_tracking_image_status_t, target_data) }, \
+         { "point_x", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_camera_tracking_image_status_t, point_x) }, \
+         { "point_y", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_camera_tracking_image_status_t, point_y) }, \
+         { "radius", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_camera_tracking_image_status_t, radius) }, \
+         { "rec_top_x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_camera_tracking_image_status_t, rec_top_x) }, \
+         { "rec_top_y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_camera_tracking_image_status_t, rec_top_y) }, \
+         { "rec_bottom_x", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_camera_tracking_image_status_t, rec_bottom_x) }, \
+         { "rec_bottom_y", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_camera_tracking_image_status_t, rec_bottom_y) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a camera_tracking_image_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param tracking_status  Current tracking status
+ * @param tracking_mode  Current tracking mode
+ * @param target_data  Defines location of target data
+ * @param point_x  Current tracked point x value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param point_y  Current tracked point y value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ * @param radius  Current tracked radius if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is image left, 1 is image right), NAN if unknown
+ * @param rec_top_x  Current tracked rectangle top x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param rec_top_y  Current tracked rectangle top y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ * @param rec_bottom_x  Current tracked rectangle bottom x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param rec_bottom_y  Current tracked rectangle bottom y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_tracking_image_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t tracking_status, uint8_t tracking_mode, uint8_t target_data, float point_x, float point_y, float radius, float rec_top_x, float rec_top_y, float rec_bottom_x, float rec_bottom_y)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN];
+    _mav_put_float(buf, 0, point_x);
+    _mav_put_float(buf, 4, point_y);
+    _mav_put_float(buf, 8, radius);
+    _mav_put_float(buf, 12, rec_top_x);
+    _mav_put_float(buf, 16, rec_top_y);
+    _mav_put_float(buf, 20, rec_bottom_x);
+    _mav_put_float(buf, 24, rec_bottom_y);
+    _mav_put_uint8_t(buf, 28, tracking_status);
+    _mav_put_uint8_t(buf, 29, tracking_mode);
+    _mav_put_uint8_t(buf, 30, target_data);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN);
+#else
+    mavlink_camera_tracking_image_status_t packet;
+    packet.point_x = point_x;
+    packet.point_y = point_y;
+    packet.radius = radius;
+    packet.rec_top_x = rec_top_x;
+    packet.rec_top_y = rec_top_y;
+    packet.rec_bottom_x = rec_bottom_x;
+    packet.rec_bottom_y = rec_bottom_y;
+    packet.tracking_status = tracking_status;
+    packet.tracking_mode = tracking_mode;
+    packet.target_data = target_data;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a camera_tracking_image_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param tracking_status  Current tracking status
+ * @param tracking_mode  Current tracking mode
+ * @param target_data  Defines location of target data
+ * @param point_x  Current tracked point x value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param point_y  Current tracked point y value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ * @param radius  Current tracked radius if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is image left, 1 is image right), NAN if unknown
+ * @param rec_top_x  Current tracked rectangle top x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param rec_top_y  Current tracked rectangle top y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ * @param rec_bottom_x  Current tracked rectangle bottom x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param rec_bottom_y  Current tracked rectangle bottom y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_tracking_image_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t tracking_status,uint8_t tracking_mode,uint8_t target_data,float point_x,float point_y,float radius,float rec_top_x,float rec_top_y,float rec_bottom_x,float rec_bottom_y)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN];
+    _mav_put_float(buf, 0, point_x);
+    _mav_put_float(buf, 4, point_y);
+    _mav_put_float(buf, 8, radius);
+    _mav_put_float(buf, 12, rec_top_x);
+    _mav_put_float(buf, 16, rec_top_y);
+    _mav_put_float(buf, 20, rec_bottom_x);
+    _mav_put_float(buf, 24, rec_bottom_y);
+    _mav_put_uint8_t(buf, 28, tracking_status);
+    _mav_put_uint8_t(buf, 29, tracking_mode);
+    _mav_put_uint8_t(buf, 30, target_data);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN);
+#else
+    mavlink_camera_tracking_image_status_t packet;
+    packet.point_x = point_x;
+    packet.point_y = point_y;
+    packet.radius = radius;
+    packet.rec_top_x = rec_top_x;
+    packet.rec_top_y = rec_top_y;
+    packet.rec_bottom_x = rec_bottom_x;
+    packet.rec_bottom_y = rec_bottom_y;
+    packet.tracking_status = tracking_status;
+    packet.tracking_mode = tracking_mode;
+    packet.target_data = target_data;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a camera_tracking_image_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_tracking_image_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_tracking_image_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_camera_tracking_image_status_t* camera_tracking_image_status)
+{
+    return mavlink_msg_camera_tracking_image_status_pack(system_id, component_id, msg, camera_tracking_image_status->tracking_status, camera_tracking_image_status->tracking_mode, camera_tracking_image_status->target_data, camera_tracking_image_status->point_x, camera_tracking_image_status->point_y, camera_tracking_image_status->radius, camera_tracking_image_status->rec_top_x, camera_tracking_image_status->rec_top_y, camera_tracking_image_status->rec_bottom_x, camera_tracking_image_status->rec_bottom_y);
+}
+
+/**
+ * @brief Encode a camera_tracking_image_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_tracking_image_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_tracking_image_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_camera_tracking_image_status_t* camera_tracking_image_status)
+{
+    return mavlink_msg_camera_tracking_image_status_pack_chan(system_id, component_id, chan, msg, camera_tracking_image_status->tracking_status, camera_tracking_image_status->tracking_mode, camera_tracking_image_status->target_data, camera_tracking_image_status->point_x, camera_tracking_image_status->point_y, camera_tracking_image_status->radius, camera_tracking_image_status->rec_top_x, camera_tracking_image_status->rec_top_y, camera_tracking_image_status->rec_bottom_x, camera_tracking_image_status->rec_bottom_y);
+}
+
+/**
+ * @brief Send a camera_tracking_image_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param tracking_status  Current tracking status
+ * @param tracking_mode  Current tracking mode
+ * @param target_data  Defines location of target data
+ * @param point_x  Current tracked point x value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param point_y  Current tracked point y value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ * @param radius  Current tracked radius if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is image left, 1 is image right), NAN if unknown
+ * @param rec_top_x  Current tracked rectangle top x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param rec_top_y  Current tracked rectangle top y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ * @param rec_bottom_x  Current tracked rectangle bottom x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ * @param rec_bottom_y  Current tracked rectangle bottom y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_camera_tracking_image_status_send(mavlink_channel_t chan, uint8_t tracking_status, uint8_t tracking_mode, uint8_t target_data, float point_x, float point_y, float radius, float rec_top_x, float rec_top_y, float rec_bottom_x, float rec_bottom_y)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN];
+    _mav_put_float(buf, 0, point_x);
+    _mav_put_float(buf, 4, point_y);
+    _mav_put_float(buf, 8, radius);
+    _mav_put_float(buf, 12, rec_top_x);
+    _mav_put_float(buf, 16, rec_top_y);
+    _mav_put_float(buf, 20, rec_bottom_x);
+    _mav_put_float(buf, 24, rec_bottom_y);
+    _mav_put_uint8_t(buf, 28, tracking_status);
+    _mav_put_uint8_t(buf, 29, tracking_mode);
+    _mav_put_uint8_t(buf, 30, target_data);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS, buf, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_CRC);
+#else
+    mavlink_camera_tracking_image_status_t packet;
+    packet.point_x = point_x;
+    packet.point_y = point_y;
+    packet.radius = radius;
+    packet.rec_top_x = rec_top_x;
+    packet.rec_top_y = rec_top_y;
+    packet.rec_bottom_x = rec_bottom_x;
+    packet.rec_bottom_y = rec_bottom_y;
+    packet.tracking_status = tracking_status;
+    packet.tracking_mode = tracking_mode;
+    packet.target_data = target_data;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS, (const char *)&packet, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a camera_tracking_image_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_camera_tracking_image_status_send_struct(mavlink_channel_t chan, const mavlink_camera_tracking_image_status_t* camera_tracking_image_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_camera_tracking_image_status_send(chan, camera_tracking_image_status->tracking_status, camera_tracking_image_status->tracking_mode, camera_tracking_image_status->target_data, camera_tracking_image_status->point_x, camera_tracking_image_status->point_y, camera_tracking_image_status->radius, camera_tracking_image_status->rec_top_x, camera_tracking_image_status->rec_top_y, camera_tracking_image_status->rec_bottom_x, camera_tracking_image_status->rec_bottom_y);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS, (const char *)camera_tracking_image_status, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_camera_tracking_image_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t tracking_status, uint8_t tracking_mode, uint8_t target_data, float point_x, float point_y, float radius, float rec_top_x, float rec_top_y, float rec_bottom_x, float rec_bottom_y)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_float(buf, 0, point_x);
+    _mav_put_float(buf, 4, point_y);
+    _mav_put_float(buf, 8, radius);
+    _mav_put_float(buf, 12, rec_top_x);
+    _mav_put_float(buf, 16, rec_top_y);
+    _mav_put_float(buf, 20, rec_bottom_x);
+    _mav_put_float(buf, 24, rec_bottom_y);
+    _mav_put_uint8_t(buf, 28, tracking_status);
+    _mav_put_uint8_t(buf, 29, tracking_mode);
+    _mav_put_uint8_t(buf, 30, target_data);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS, buf, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_CRC);
+#else
+    mavlink_camera_tracking_image_status_t *packet = (mavlink_camera_tracking_image_status_t *)msgbuf;
+    packet->point_x = point_x;
+    packet->point_y = point_y;
+    packet->radius = radius;
+    packet->rec_top_x = rec_top_x;
+    packet->rec_top_y = rec_top_y;
+    packet->rec_bottom_x = rec_bottom_x;
+    packet->rec_bottom_y = rec_bottom_y;
+    packet->tracking_status = tracking_status;
+    packet->tracking_mode = tracking_mode;
+    packet->target_data = target_data;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS, (const char *)packet, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAMERA_TRACKING_IMAGE_STATUS UNPACKING
+
+
+/**
+ * @brief Get field tracking_status from camera_tracking_image_status message
+ *
+ * @return  Current tracking status
+ */
+static inline uint8_t mavlink_msg_camera_tracking_image_status_get_tracking_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  28);
+}
+
+/**
+ * @brief Get field tracking_mode from camera_tracking_image_status message
+ *
+ * @return  Current tracking mode
+ */
+static inline uint8_t mavlink_msg_camera_tracking_image_status_get_tracking_mode(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  29);
+}
+
+/**
+ * @brief Get field target_data from camera_tracking_image_status message
+ *
+ * @return  Defines location of target data
+ */
+static inline uint8_t mavlink_msg_camera_tracking_image_status_get_target_data(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field point_x from camera_tracking_image_status message
+ *
+ * @return  Current tracked point x value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_image_status_get_point_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  0);
+}
+
+/**
+ * @brief Get field point_y from camera_tracking_image_status message
+ *
+ * @return  Current tracked point y value if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_image_status_get_point_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field radius from camera_tracking_image_status message
+ *
+ * @return  Current tracked radius if CAMERA_TRACKING_MODE_POINT (normalized 0..1, 0 is image left, 1 is image right), NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_image_status_get_radius(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field rec_top_x from camera_tracking_image_status message
+ *
+ * @return  Current tracked rectangle top x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_image_status_get_rec_top_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field rec_top_y from camera_tracking_image_status message
+ *
+ * @return  Current tracked rectangle top y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_image_status_get_rec_top_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field rec_bottom_x from camera_tracking_image_status message
+ *
+ * @return  Current tracked rectangle bottom x value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is left, 1 is right), NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_image_status_get_rec_bottom_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field rec_bottom_y from camera_tracking_image_status message
+ *
+ * @return  Current tracked rectangle bottom y value if CAMERA_TRACKING_MODE_RECTANGLE (normalized 0..1, 0 is top, 1 is bottom), NAN if unknown
+ */
+static inline float mavlink_msg_camera_tracking_image_status_get_rec_bottom_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Decode a camera_tracking_image_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param camera_tracking_image_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_camera_tracking_image_status_decode(const mavlink_message_t* msg, mavlink_camera_tracking_image_status_t* camera_tracking_image_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    camera_tracking_image_status->point_x = mavlink_msg_camera_tracking_image_status_get_point_x(msg);
+    camera_tracking_image_status->point_y = mavlink_msg_camera_tracking_image_status_get_point_y(msg);
+    camera_tracking_image_status->radius = mavlink_msg_camera_tracking_image_status_get_radius(msg);
+    camera_tracking_image_status->rec_top_x = mavlink_msg_camera_tracking_image_status_get_rec_top_x(msg);
+    camera_tracking_image_status->rec_top_y = mavlink_msg_camera_tracking_image_status_get_rec_top_y(msg);
+    camera_tracking_image_status->rec_bottom_x = mavlink_msg_camera_tracking_image_status_get_rec_bottom_x(msg);
+    camera_tracking_image_status->rec_bottom_y = mavlink_msg_camera_tracking_image_status_get_rec_bottom_y(msg);
+    camera_tracking_image_status->tracking_status = mavlink_msg_camera_tracking_image_status_get_tracking_status(msg);
+    camera_tracking_image_status->tracking_mode = mavlink_msg_camera_tracking_image_status_get_tracking_mode(msg);
+    camera_tracking_image_status->target_data = mavlink_msg_camera_tracking_image_status_get_target_data(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN? msg->len : MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN;
+        memset(camera_tracking_image_status, 0, MAVLINK_MSG_ID_CAMERA_TRACKING_IMAGE_STATUS_LEN);
+    memcpy(camera_tracking_image_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 238 - 0
v2.0/common/mavlink_msg_camera_trigger.h

@@ -0,0 +1,238 @@
+#pragma once
+// MESSAGE CAMERA_TRIGGER PACKING
+
+#define MAVLINK_MSG_ID_CAMERA_TRIGGER 112
+
+
+typedef struct __mavlink_camera_trigger_t {
+ uint64_t time_usec; /*< [us] Timestamp for image frame (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ uint32_t seq; /*<  Image frame sequence*/
+} mavlink_camera_trigger_t;
+
+#define MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN 12
+#define MAVLINK_MSG_ID_CAMERA_TRIGGER_MIN_LEN 12
+#define MAVLINK_MSG_ID_112_LEN 12
+#define MAVLINK_MSG_ID_112_MIN_LEN 12
+
+#define MAVLINK_MSG_ID_CAMERA_TRIGGER_CRC 174
+#define MAVLINK_MSG_ID_112_CRC 174
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAMERA_TRIGGER { \
+    112, \
+    "CAMERA_TRIGGER", \
+    2, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_camera_trigger_t, time_usec) }, \
+         { "seq", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_camera_trigger_t, seq) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAMERA_TRIGGER { \
+    "CAMERA_TRIGGER", \
+    2, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_camera_trigger_t, time_usec) }, \
+         { "seq", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_camera_trigger_t, seq) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a camera_trigger message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp for image frame (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param seq  Image frame sequence
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_trigger_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint32_t seq)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, seq);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN);
+#else
+    mavlink_camera_trigger_t packet;
+    packet.time_usec = time_usec;
+    packet.seq = seq;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_TRIGGER;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAMERA_TRIGGER_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_CRC);
+}
+
+/**
+ * @brief Pack a camera_trigger message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp for image frame (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param seq  Image frame sequence
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_camera_trigger_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint32_t seq)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, seq);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN);
+#else
+    mavlink_camera_trigger_t packet;
+    packet.time_usec = time_usec;
+    packet.seq = seq;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAMERA_TRIGGER;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAMERA_TRIGGER_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_CRC);
+}
+
+/**
+ * @brief Encode a camera_trigger struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_trigger C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_trigger_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_camera_trigger_t* camera_trigger)
+{
+    return mavlink_msg_camera_trigger_pack(system_id, component_id, msg, camera_trigger->time_usec, camera_trigger->seq);
+}
+
+/**
+ * @brief Encode a camera_trigger struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param camera_trigger C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_camera_trigger_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_camera_trigger_t* camera_trigger)
+{
+    return mavlink_msg_camera_trigger_pack_chan(system_id, component_id, chan, msg, camera_trigger->time_usec, camera_trigger->seq);
+}
+
+/**
+ * @brief Send a camera_trigger message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp for image frame (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param seq  Image frame sequence
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_camera_trigger_send(mavlink_channel_t chan, uint64_t time_usec, uint32_t seq)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, seq);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRIGGER, buf, MAVLINK_MSG_ID_CAMERA_TRIGGER_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_CRC);
+#else
+    mavlink_camera_trigger_t packet;
+    packet.time_usec = time_usec;
+    packet.seq = seq;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRIGGER, (const char *)&packet, MAVLINK_MSG_ID_CAMERA_TRIGGER_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_CRC);
+#endif
+}
+
+/**
+ * @brief Send a camera_trigger message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_camera_trigger_send_struct(mavlink_channel_t chan, const mavlink_camera_trigger_t* camera_trigger)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_camera_trigger_send(chan, camera_trigger->time_usec, camera_trigger->seq);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRIGGER, (const char *)camera_trigger, MAVLINK_MSG_ID_CAMERA_TRIGGER_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_camera_trigger_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint32_t seq)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, seq);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRIGGER, buf, MAVLINK_MSG_ID_CAMERA_TRIGGER_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_CRC);
+#else
+    mavlink_camera_trigger_t *packet = (mavlink_camera_trigger_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->seq = seq;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAMERA_TRIGGER, (const char *)packet, MAVLINK_MSG_ID_CAMERA_TRIGGER_MIN_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN, MAVLINK_MSG_ID_CAMERA_TRIGGER_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAMERA_TRIGGER UNPACKING
+
+
+/**
+ * @brief Get field time_usec from camera_trigger message
+ *
+ * @return [us] Timestamp for image frame (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_camera_trigger_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field seq from camera_trigger message
+ *
+ * @return  Image frame sequence
+ */
+static inline uint32_t mavlink_msg_camera_trigger_get_seq(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  8);
+}
+
+/**
+ * @brief Decode a camera_trigger message into a struct
+ *
+ * @param msg The message to decode
+ * @param camera_trigger C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_camera_trigger_decode(const mavlink_message_t* msg, mavlink_camera_trigger_t* camera_trigger)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    camera_trigger->time_usec = mavlink_msg_camera_trigger_get_time_usec(msg);
+    camera_trigger->seq = mavlink_msg_camera_trigger_get_seq(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN? msg->len : MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN;
+        memset(camera_trigger, 0, MAVLINK_MSG_ID_CAMERA_TRIGGER_LEN);
+    memcpy(camera_trigger, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 330 - 0
v2.0/common/mavlink_msg_can_filter_modify.h

@@ -0,0 +1,330 @@
+#pragma once
+// MESSAGE CAN_FILTER_MODIFY PACKING
+
+#define MAVLINK_MSG_ID_CAN_FILTER_MODIFY 388
+
+
+typedef struct __mavlink_can_filter_modify_t {
+ uint16_t ids[16]; /*<  filter IDs, length num_ids*/
+ uint8_t target_system; /*<  System ID.*/
+ uint8_t target_component; /*<  Component ID.*/
+ uint8_t bus; /*<  bus number*/
+ uint8_t operation; /*<  what operation to perform on the filter list. See CAN_FILTER_OP enum.*/
+ uint8_t num_ids; /*<  number of IDs in filter list*/
+} mavlink_can_filter_modify_t;
+
+#define MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN 37
+#define MAVLINK_MSG_ID_CAN_FILTER_MODIFY_MIN_LEN 37
+#define MAVLINK_MSG_ID_388_LEN 37
+#define MAVLINK_MSG_ID_388_MIN_LEN 37
+
+#define MAVLINK_MSG_ID_CAN_FILTER_MODIFY_CRC 8
+#define MAVLINK_MSG_ID_388_CRC 8
+
+#define MAVLINK_MSG_CAN_FILTER_MODIFY_FIELD_IDS_LEN 16
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAN_FILTER_MODIFY { \
+    388, \
+    "CAN_FILTER_MODIFY", \
+    6, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_can_filter_modify_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_can_filter_modify_t, target_component) }, \
+         { "bus", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_can_filter_modify_t, bus) }, \
+         { "operation", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_can_filter_modify_t, operation) }, \
+         { "num_ids", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_can_filter_modify_t, num_ids) }, \
+         { "ids", NULL, MAVLINK_TYPE_UINT16_T, 16, 0, offsetof(mavlink_can_filter_modify_t, ids) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAN_FILTER_MODIFY { \
+    "CAN_FILTER_MODIFY", \
+    6, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_can_filter_modify_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_can_filter_modify_t, target_component) }, \
+         { "bus", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_can_filter_modify_t, bus) }, \
+         { "operation", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_can_filter_modify_t, operation) }, \
+         { "num_ids", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_can_filter_modify_t, num_ids) }, \
+         { "ids", NULL, MAVLINK_TYPE_UINT16_T, 16, 0, offsetof(mavlink_can_filter_modify_t, ids) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a can_filter_modify message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  bus number
+ * @param operation  what operation to perform on the filter list. See CAN_FILTER_OP enum.
+ * @param num_ids  number of IDs in filter list
+ * @param ids  filter IDs, length num_ids
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_can_filter_modify_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t operation, uint8_t num_ids, const uint16_t *ids)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN];
+    _mav_put_uint8_t(buf, 32, target_system);
+    _mav_put_uint8_t(buf, 33, target_component);
+    _mav_put_uint8_t(buf, 34, bus);
+    _mav_put_uint8_t(buf, 35, operation);
+    _mav_put_uint8_t(buf, 36, num_ids);
+    _mav_put_uint16_t_array(buf, 0, ids, 16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN);
+#else
+    mavlink_can_filter_modify_t packet;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.operation = operation;
+    packet.num_ids = num_ids;
+    mav_array_memcpy(packet.ids, ids, sizeof(uint16_t)*16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAN_FILTER_MODIFY;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_MIN_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_CRC);
+}
+
+/**
+ * @brief Pack a can_filter_modify message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  bus number
+ * @param operation  what operation to perform on the filter list. See CAN_FILTER_OP enum.
+ * @param num_ids  number of IDs in filter list
+ * @param ids  filter IDs, length num_ids
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_can_filter_modify_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint8_t bus,uint8_t operation,uint8_t num_ids,const uint16_t *ids)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN];
+    _mav_put_uint8_t(buf, 32, target_system);
+    _mav_put_uint8_t(buf, 33, target_component);
+    _mav_put_uint8_t(buf, 34, bus);
+    _mav_put_uint8_t(buf, 35, operation);
+    _mav_put_uint8_t(buf, 36, num_ids);
+    _mav_put_uint16_t_array(buf, 0, ids, 16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN);
+#else
+    mavlink_can_filter_modify_t packet;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.operation = operation;
+    packet.num_ids = num_ids;
+    mav_array_memcpy(packet.ids, ids, sizeof(uint16_t)*16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAN_FILTER_MODIFY;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_MIN_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_CRC);
+}
+
+/**
+ * @brief Encode a can_filter_modify struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param can_filter_modify C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_can_filter_modify_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_can_filter_modify_t* can_filter_modify)
+{
+    return mavlink_msg_can_filter_modify_pack(system_id, component_id, msg, can_filter_modify->target_system, can_filter_modify->target_component, can_filter_modify->bus, can_filter_modify->operation, can_filter_modify->num_ids, can_filter_modify->ids);
+}
+
+/**
+ * @brief Encode a can_filter_modify struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param can_filter_modify C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_can_filter_modify_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_can_filter_modify_t* can_filter_modify)
+{
+    return mavlink_msg_can_filter_modify_pack_chan(system_id, component_id, chan, msg, can_filter_modify->target_system, can_filter_modify->target_component, can_filter_modify->bus, can_filter_modify->operation, can_filter_modify->num_ids, can_filter_modify->ids);
+}
+
+/**
+ * @brief Send a can_filter_modify message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  bus number
+ * @param operation  what operation to perform on the filter list. See CAN_FILTER_OP enum.
+ * @param num_ids  number of IDs in filter list
+ * @param ids  filter IDs, length num_ids
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_can_filter_modify_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t operation, uint8_t num_ids, const uint16_t *ids)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN];
+    _mav_put_uint8_t(buf, 32, target_system);
+    _mav_put_uint8_t(buf, 33, target_component);
+    _mav_put_uint8_t(buf, 34, bus);
+    _mav_put_uint8_t(buf, 35, operation);
+    _mav_put_uint8_t(buf, 36, num_ids);
+    _mav_put_uint16_t_array(buf, 0, ids, 16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FILTER_MODIFY, buf, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_MIN_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_CRC);
+#else
+    mavlink_can_filter_modify_t packet;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.operation = operation;
+    packet.num_ids = num_ids;
+    mav_array_memcpy(packet.ids, ids, sizeof(uint16_t)*16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FILTER_MODIFY, (const char *)&packet, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_MIN_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_CRC);
+#endif
+}
+
+/**
+ * @brief Send a can_filter_modify message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_can_filter_modify_send_struct(mavlink_channel_t chan, const mavlink_can_filter_modify_t* can_filter_modify)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_can_filter_modify_send(chan, can_filter_modify->target_system, can_filter_modify->target_component, can_filter_modify->bus, can_filter_modify->operation, can_filter_modify->num_ids, can_filter_modify->ids);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FILTER_MODIFY, (const char *)can_filter_modify, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_MIN_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_can_filter_modify_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t operation, uint8_t num_ids, const uint16_t *ids)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 32, target_system);
+    _mav_put_uint8_t(buf, 33, target_component);
+    _mav_put_uint8_t(buf, 34, bus);
+    _mav_put_uint8_t(buf, 35, operation);
+    _mav_put_uint8_t(buf, 36, num_ids);
+    _mav_put_uint16_t_array(buf, 0, ids, 16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FILTER_MODIFY, buf, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_MIN_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_CRC);
+#else
+    mavlink_can_filter_modify_t *packet = (mavlink_can_filter_modify_t *)msgbuf;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->bus = bus;
+    packet->operation = operation;
+    packet->num_ids = num_ids;
+    mav_array_memcpy(packet->ids, ids, sizeof(uint16_t)*16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FILTER_MODIFY, (const char *)packet, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_MIN_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAN_FILTER_MODIFY UNPACKING
+
+
+/**
+ * @brief Get field target_system from can_filter_modify message
+ *
+ * @return  System ID.
+ */
+static inline uint8_t mavlink_msg_can_filter_modify_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field target_component from can_filter_modify message
+ *
+ * @return  Component ID.
+ */
+static inline uint8_t mavlink_msg_can_filter_modify_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field bus from can_filter_modify message
+ *
+ * @return  bus number
+ */
+static inline uint8_t mavlink_msg_can_filter_modify_get_bus(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field operation from can_filter_modify message
+ *
+ * @return  what operation to perform on the filter list. See CAN_FILTER_OP enum.
+ */
+static inline uint8_t mavlink_msg_can_filter_modify_get_operation(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  35);
+}
+
+/**
+ * @brief Get field num_ids from can_filter_modify message
+ *
+ * @return  number of IDs in filter list
+ */
+static inline uint8_t mavlink_msg_can_filter_modify_get_num_ids(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  36);
+}
+
+/**
+ * @brief Get field ids from can_filter_modify message
+ *
+ * @return  filter IDs, length num_ids
+ */
+static inline uint16_t mavlink_msg_can_filter_modify_get_ids(const mavlink_message_t* msg, uint16_t *ids)
+{
+    return _MAV_RETURN_uint16_t_array(msg, ids, 16,  0);
+}
+
+/**
+ * @brief Decode a can_filter_modify message into a struct
+ *
+ * @param msg The message to decode
+ * @param can_filter_modify C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_can_filter_modify_decode(const mavlink_message_t* msg, mavlink_can_filter_modify_t* can_filter_modify)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_can_filter_modify_get_ids(msg, can_filter_modify->ids);
+    can_filter_modify->target_system = mavlink_msg_can_filter_modify_get_target_system(msg);
+    can_filter_modify->target_component = mavlink_msg_can_filter_modify_get_target_component(msg);
+    can_filter_modify->bus = mavlink_msg_can_filter_modify_get_bus(msg);
+    can_filter_modify->operation = mavlink_msg_can_filter_modify_get_operation(msg);
+    can_filter_modify->num_ids = mavlink_msg_can_filter_modify_get_num_ids(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN? msg->len : MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN;
+        memset(can_filter_modify, 0, MAVLINK_MSG_ID_CAN_FILTER_MODIFY_LEN);
+    memcpy(can_filter_modify, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 330 - 0
v2.0/common/mavlink_msg_can_frame.h

@@ -0,0 +1,330 @@
+#pragma once
+// MESSAGE CAN_FRAME PACKING
+
+#define MAVLINK_MSG_ID_CAN_FRAME 386
+
+
+typedef struct __mavlink_can_frame_t {
+ uint32_t id; /*<  Frame ID*/
+ uint8_t target_system; /*<  System ID.*/
+ uint8_t target_component; /*<  Component ID.*/
+ uint8_t bus; /*<  Bus number*/
+ uint8_t len; /*<  Frame length*/
+ uint8_t data[8]; /*<  Frame data*/
+} mavlink_can_frame_t;
+
+#define MAVLINK_MSG_ID_CAN_FRAME_LEN 16
+#define MAVLINK_MSG_ID_CAN_FRAME_MIN_LEN 16
+#define MAVLINK_MSG_ID_386_LEN 16
+#define MAVLINK_MSG_ID_386_MIN_LEN 16
+
+#define MAVLINK_MSG_ID_CAN_FRAME_CRC 132
+#define MAVLINK_MSG_ID_386_CRC 132
+
+#define MAVLINK_MSG_CAN_FRAME_FIELD_DATA_LEN 8
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CAN_FRAME { \
+    386, \
+    "CAN_FRAME", \
+    6, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_can_frame_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_can_frame_t, target_component) }, \
+         { "bus", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_can_frame_t, bus) }, \
+         { "len", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_can_frame_t, len) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_can_frame_t, id) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 8, 8, offsetof(mavlink_can_frame_t, data) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CAN_FRAME { \
+    "CAN_FRAME", \
+    6, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_can_frame_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_can_frame_t, target_component) }, \
+         { "bus", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_can_frame_t, bus) }, \
+         { "len", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_can_frame_t, len) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_can_frame_t, id) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 8, 8, offsetof(mavlink_can_frame_t, data) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a can_frame message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  Bus number
+ * @param len  Frame length
+ * @param id  Frame ID
+ * @param data  Frame data
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_can_frame_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t len, uint32_t id, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAN_FRAME_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_component);
+    _mav_put_uint8_t(buf, 6, bus);
+    _mav_put_uint8_t(buf, 7, len);
+    _mav_put_uint8_t_array(buf, 8, data, 8);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAN_FRAME_LEN);
+#else
+    mavlink_can_frame_t packet;
+    packet.id = id;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*8);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAN_FRAME_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAN_FRAME;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CAN_FRAME_MIN_LEN, MAVLINK_MSG_ID_CAN_FRAME_LEN, MAVLINK_MSG_ID_CAN_FRAME_CRC);
+}
+
+/**
+ * @brief Pack a can_frame message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  Bus number
+ * @param len  Frame length
+ * @param id  Frame ID
+ * @param data  Frame data
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_can_frame_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint8_t bus,uint8_t len,uint32_t id,const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAN_FRAME_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_component);
+    _mav_put_uint8_t(buf, 6, bus);
+    _mav_put_uint8_t(buf, 7, len);
+    _mav_put_uint8_t_array(buf, 8, data, 8);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CAN_FRAME_LEN);
+#else
+    mavlink_can_frame_t packet;
+    packet.id = id;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*8);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CAN_FRAME_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CAN_FRAME;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CAN_FRAME_MIN_LEN, MAVLINK_MSG_ID_CAN_FRAME_LEN, MAVLINK_MSG_ID_CAN_FRAME_CRC);
+}
+
+/**
+ * @brief Encode a can_frame struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param can_frame C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_can_frame_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_can_frame_t* can_frame)
+{
+    return mavlink_msg_can_frame_pack(system_id, component_id, msg, can_frame->target_system, can_frame->target_component, can_frame->bus, can_frame->len, can_frame->id, can_frame->data);
+}
+
+/**
+ * @brief Encode a can_frame struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param can_frame C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_can_frame_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_can_frame_t* can_frame)
+{
+    return mavlink_msg_can_frame_pack_chan(system_id, component_id, chan, msg, can_frame->target_system, can_frame->target_component, can_frame->bus, can_frame->len, can_frame->id, can_frame->data);
+}
+
+/**
+ * @brief Send a can_frame message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  Bus number
+ * @param len  Frame length
+ * @param id  Frame ID
+ * @param data  Frame data
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_can_frame_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t len, uint32_t id, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CAN_FRAME_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_component);
+    _mav_put_uint8_t(buf, 6, bus);
+    _mav_put_uint8_t(buf, 7, len);
+    _mav_put_uint8_t_array(buf, 8, data, 8);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FRAME, buf, MAVLINK_MSG_ID_CAN_FRAME_MIN_LEN, MAVLINK_MSG_ID_CAN_FRAME_LEN, MAVLINK_MSG_ID_CAN_FRAME_CRC);
+#else
+    mavlink_can_frame_t packet;
+    packet.id = id;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*8);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FRAME, (const char *)&packet, MAVLINK_MSG_ID_CAN_FRAME_MIN_LEN, MAVLINK_MSG_ID_CAN_FRAME_LEN, MAVLINK_MSG_ID_CAN_FRAME_CRC);
+#endif
+}
+
+/**
+ * @brief Send a can_frame message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_can_frame_send_struct(mavlink_channel_t chan, const mavlink_can_frame_t* can_frame)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_can_frame_send(chan, can_frame->target_system, can_frame->target_component, can_frame->bus, can_frame->len, can_frame->id, can_frame->data);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FRAME, (const char *)can_frame, MAVLINK_MSG_ID_CAN_FRAME_MIN_LEN, MAVLINK_MSG_ID_CAN_FRAME_LEN, MAVLINK_MSG_ID_CAN_FRAME_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CAN_FRAME_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_can_frame_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t len, uint32_t id, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_component);
+    _mav_put_uint8_t(buf, 6, bus);
+    _mav_put_uint8_t(buf, 7, len);
+    _mav_put_uint8_t_array(buf, 8, data, 8);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FRAME, buf, MAVLINK_MSG_ID_CAN_FRAME_MIN_LEN, MAVLINK_MSG_ID_CAN_FRAME_LEN, MAVLINK_MSG_ID_CAN_FRAME_CRC);
+#else
+    mavlink_can_frame_t *packet = (mavlink_can_frame_t *)msgbuf;
+    packet->id = id;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->bus = bus;
+    packet->len = len;
+    mav_array_memcpy(packet->data, data, sizeof(uint8_t)*8);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CAN_FRAME, (const char *)packet, MAVLINK_MSG_ID_CAN_FRAME_MIN_LEN, MAVLINK_MSG_ID_CAN_FRAME_LEN, MAVLINK_MSG_ID_CAN_FRAME_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CAN_FRAME UNPACKING
+
+
+/**
+ * @brief Get field target_system from can_frame message
+ *
+ * @return  System ID.
+ */
+static inline uint8_t mavlink_msg_can_frame_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  4);
+}
+
+/**
+ * @brief Get field target_component from can_frame message
+ *
+ * @return  Component ID.
+ */
+static inline uint8_t mavlink_msg_can_frame_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  5);
+}
+
+/**
+ * @brief Get field bus from can_frame message
+ *
+ * @return  Bus number
+ */
+static inline uint8_t mavlink_msg_can_frame_get_bus(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  6);
+}
+
+/**
+ * @brief Get field len from can_frame message
+ *
+ * @return  Frame length
+ */
+static inline uint8_t mavlink_msg_can_frame_get_len(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  7);
+}
+
+/**
+ * @brief Get field id from can_frame message
+ *
+ * @return  Frame ID
+ */
+static inline uint32_t mavlink_msg_can_frame_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field data from can_frame message
+ *
+ * @return  Frame data
+ */
+static inline uint16_t mavlink_msg_can_frame_get_data(const mavlink_message_t* msg, uint8_t *data)
+{
+    return _MAV_RETURN_uint8_t_array(msg, data, 8,  8);
+}
+
+/**
+ * @brief Decode a can_frame message into a struct
+ *
+ * @param msg The message to decode
+ * @param can_frame C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_can_frame_decode(const mavlink_message_t* msg, mavlink_can_frame_t* can_frame)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    can_frame->id = mavlink_msg_can_frame_get_id(msg);
+    can_frame->target_system = mavlink_msg_can_frame_get_target_system(msg);
+    can_frame->target_component = mavlink_msg_can_frame_get_target_component(msg);
+    can_frame->bus = mavlink_msg_can_frame_get_bus(msg);
+    can_frame->len = mavlink_msg_can_frame_get_len(msg);
+    mavlink_msg_can_frame_get_data(msg, can_frame->data);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CAN_FRAME_LEN? msg->len : MAVLINK_MSG_ID_CAN_FRAME_LEN;
+        memset(can_frame, 0, MAVLINK_MSG_ID_CAN_FRAME_LEN);
+    memcpy(can_frame, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 330 - 0
v2.0/common/mavlink_msg_canfd_frame.h

@@ -0,0 +1,330 @@
+#pragma once
+// MESSAGE CANFD_FRAME PACKING
+
+#define MAVLINK_MSG_ID_CANFD_FRAME 387
+
+
+typedef struct __mavlink_canfd_frame_t {
+ uint32_t id; /*<  Frame ID*/
+ uint8_t target_system; /*<  System ID.*/
+ uint8_t target_component; /*<  Component ID.*/
+ uint8_t bus; /*<  bus number*/
+ uint8_t len; /*<  Frame length*/
+ uint8_t data[64]; /*<  Frame data*/
+} mavlink_canfd_frame_t;
+
+#define MAVLINK_MSG_ID_CANFD_FRAME_LEN 72
+#define MAVLINK_MSG_ID_CANFD_FRAME_MIN_LEN 72
+#define MAVLINK_MSG_ID_387_LEN 72
+#define MAVLINK_MSG_ID_387_MIN_LEN 72
+
+#define MAVLINK_MSG_ID_CANFD_FRAME_CRC 4
+#define MAVLINK_MSG_ID_387_CRC 4
+
+#define MAVLINK_MSG_CANFD_FRAME_FIELD_DATA_LEN 64
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CANFD_FRAME { \
+    387, \
+    "CANFD_FRAME", \
+    6, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_canfd_frame_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_canfd_frame_t, target_component) }, \
+         { "bus", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_canfd_frame_t, bus) }, \
+         { "len", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_canfd_frame_t, len) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_canfd_frame_t, id) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 64, 8, offsetof(mavlink_canfd_frame_t, data) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CANFD_FRAME { \
+    "CANFD_FRAME", \
+    6, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_canfd_frame_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_canfd_frame_t, target_component) }, \
+         { "bus", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_canfd_frame_t, bus) }, \
+         { "len", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_canfd_frame_t, len) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_canfd_frame_t, id) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 64, 8, offsetof(mavlink_canfd_frame_t, data) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a canfd_frame message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  bus number
+ * @param len  Frame length
+ * @param id  Frame ID
+ * @param data  Frame data
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_canfd_frame_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t len, uint32_t id, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CANFD_FRAME_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_component);
+    _mav_put_uint8_t(buf, 6, bus);
+    _mav_put_uint8_t(buf, 7, len);
+    _mav_put_uint8_t_array(buf, 8, data, 64);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CANFD_FRAME_LEN);
+#else
+    mavlink_canfd_frame_t packet;
+    packet.id = id;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*64);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CANFD_FRAME_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CANFD_FRAME;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CANFD_FRAME_MIN_LEN, MAVLINK_MSG_ID_CANFD_FRAME_LEN, MAVLINK_MSG_ID_CANFD_FRAME_CRC);
+}
+
+/**
+ * @brief Pack a canfd_frame message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  bus number
+ * @param len  Frame length
+ * @param id  Frame ID
+ * @param data  Frame data
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_canfd_frame_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint8_t bus,uint8_t len,uint32_t id,const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CANFD_FRAME_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_component);
+    _mav_put_uint8_t(buf, 6, bus);
+    _mav_put_uint8_t(buf, 7, len);
+    _mav_put_uint8_t_array(buf, 8, data, 64);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CANFD_FRAME_LEN);
+#else
+    mavlink_canfd_frame_t packet;
+    packet.id = id;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*64);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CANFD_FRAME_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CANFD_FRAME;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CANFD_FRAME_MIN_LEN, MAVLINK_MSG_ID_CANFD_FRAME_LEN, MAVLINK_MSG_ID_CANFD_FRAME_CRC);
+}
+
+/**
+ * @brief Encode a canfd_frame struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param canfd_frame C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_canfd_frame_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_canfd_frame_t* canfd_frame)
+{
+    return mavlink_msg_canfd_frame_pack(system_id, component_id, msg, canfd_frame->target_system, canfd_frame->target_component, canfd_frame->bus, canfd_frame->len, canfd_frame->id, canfd_frame->data);
+}
+
+/**
+ * @brief Encode a canfd_frame struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param canfd_frame C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_canfd_frame_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_canfd_frame_t* canfd_frame)
+{
+    return mavlink_msg_canfd_frame_pack_chan(system_id, component_id, chan, msg, canfd_frame->target_system, canfd_frame->target_component, canfd_frame->bus, canfd_frame->len, canfd_frame->id, canfd_frame->data);
+}
+
+/**
+ * @brief Send a canfd_frame message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID.
+ * @param target_component  Component ID.
+ * @param bus  bus number
+ * @param len  Frame length
+ * @param id  Frame ID
+ * @param data  Frame data
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_canfd_frame_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t len, uint32_t id, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CANFD_FRAME_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_component);
+    _mav_put_uint8_t(buf, 6, bus);
+    _mav_put_uint8_t(buf, 7, len);
+    _mav_put_uint8_t_array(buf, 8, data, 64);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CANFD_FRAME, buf, MAVLINK_MSG_ID_CANFD_FRAME_MIN_LEN, MAVLINK_MSG_ID_CANFD_FRAME_LEN, MAVLINK_MSG_ID_CANFD_FRAME_CRC);
+#else
+    mavlink_canfd_frame_t packet;
+    packet.id = id;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.bus = bus;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*64);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CANFD_FRAME, (const char *)&packet, MAVLINK_MSG_ID_CANFD_FRAME_MIN_LEN, MAVLINK_MSG_ID_CANFD_FRAME_LEN, MAVLINK_MSG_ID_CANFD_FRAME_CRC);
+#endif
+}
+
+/**
+ * @brief Send a canfd_frame message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_canfd_frame_send_struct(mavlink_channel_t chan, const mavlink_canfd_frame_t* canfd_frame)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_canfd_frame_send(chan, canfd_frame->target_system, canfd_frame->target_component, canfd_frame->bus, canfd_frame->len, canfd_frame->id, canfd_frame->data);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CANFD_FRAME, (const char *)canfd_frame, MAVLINK_MSG_ID_CANFD_FRAME_MIN_LEN, MAVLINK_MSG_ID_CANFD_FRAME_LEN, MAVLINK_MSG_ID_CANFD_FRAME_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CANFD_FRAME_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_canfd_frame_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint8_t bus, uint8_t len, uint32_t id, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_component);
+    _mav_put_uint8_t(buf, 6, bus);
+    _mav_put_uint8_t(buf, 7, len);
+    _mav_put_uint8_t_array(buf, 8, data, 64);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CANFD_FRAME, buf, MAVLINK_MSG_ID_CANFD_FRAME_MIN_LEN, MAVLINK_MSG_ID_CANFD_FRAME_LEN, MAVLINK_MSG_ID_CANFD_FRAME_CRC);
+#else
+    mavlink_canfd_frame_t *packet = (mavlink_canfd_frame_t *)msgbuf;
+    packet->id = id;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->bus = bus;
+    packet->len = len;
+    mav_array_memcpy(packet->data, data, sizeof(uint8_t)*64);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CANFD_FRAME, (const char *)packet, MAVLINK_MSG_ID_CANFD_FRAME_MIN_LEN, MAVLINK_MSG_ID_CANFD_FRAME_LEN, MAVLINK_MSG_ID_CANFD_FRAME_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CANFD_FRAME UNPACKING
+
+
+/**
+ * @brief Get field target_system from canfd_frame message
+ *
+ * @return  System ID.
+ */
+static inline uint8_t mavlink_msg_canfd_frame_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  4);
+}
+
+/**
+ * @brief Get field target_component from canfd_frame message
+ *
+ * @return  Component ID.
+ */
+static inline uint8_t mavlink_msg_canfd_frame_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  5);
+}
+
+/**
+ * @brief Get field bus from canfd_frame message
+ *
+ * @return  bus number
+ */
+static inline uint8_t mavlink_msg_canfd_frame_get_bus(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  6);
+}
+
+/**
+ * @brief Get field len from canfd_frame message
+ *
+ * @return  Frame length
+ */
+static inline uint8_t mavlink_msg_canfd_frame_get_len(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  7);
+}
+
+/**
+ * @brief Get field id from canfd_frame message
+ *
+ * @return  Frame ID
+ */
+static inline uint32_t mavlink_msg_canfd_frame_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field data from canfd_frame message
+ *
+ * @return  Frame data
+ */
+static inline uint16_t mavlink_msg_canfd_frame_get_data(const mavlink_message_t* msg, uint8_t *data)
+{
+    return _MAV_RETURN_uint8_t_array(msg, data, 64,  8);
+}
+
+/**
+ * @brief Decode a canfd_frame message into a struct
+ *
+ * @param msg The message to decode
+ * @param canfd_frame C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_canfd_frame_decode(const mavlink_message_t* msg, mavlink_canfd_frame_t* canfd_frame)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    canfd_frame->id = mavlink_msg_canfd_frame_get_id(msg);
+    canfd_frame->target_system = mavlink_msg_canfd_frame_get_target_system(msg);
+    canfd_frame->target_component = mavlink_msg_canfd_frame_get_target_component(msg);
+    canfd_frame->bus = mavlink_msg_canfd_frame_get_bus(msg);
+    canfd_frame->len = mavlink_msg_canfd_frame_get_len(msg);
+    mavlink_msg_canfd_frame_get_data(msg, canfd_frame->data);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CANFD_FRAME_LEN? msg->len : MAVLINK_MSG_ID_CANFD_FRAME_LEN;
+        memset(canfd_frame, 0, MAVLINK_MSG_ID_CANFD_FRAME_LEN);
+    memcpy(canfd_frame, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 383 - 0
v2.0/common/mavlink_msg_cellular_config.h

@@ -0,0 +1,383 @@
+#pragma once
+// MESSAGE CELLULAR_CONFIG PACKING
+
+#define MAVLINK_MSG_ID_CELLULAR_CONFIG 336
+
+
+typedef struct __mavlink_cellular_config_t {
+ uint8_t enable_lte; /*<  Enable/disable LTE. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.*/
+ uint8_t enable_pin; /*<  Enable/disable PIN on the SIM card. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.*/
+ char pin[16]; /*<  PIN sent to the SIM card. Blank when PIN is disabled. Empty when message is sent back as a response.*/
+ char new_pin[16]; /*<  New PIN when changing the PIN. Blank to leave it unchanged. Empty when message is sent back as a response.*/
+ char apn[32]; /*<  Name of the cellular APN. Blank to leave it unchanged. Current APN when sent back as a response.*/
+ char puk[16]; /*<  Required PUK code in case the user failed to authenticate 3 times with the PIN. Empty when message is sent back as a response.*/
+ uint8_t roaming; /*<  Enable/disable roaming. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.*/
+ uint8_t response; /*<  Message acceptance response (sent back to GS).*/
+} mavlink_cellular_config_t;
+
+#define MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN 84
+#define MAVLINK_MSG_ID_CELLULAR_CONFIG_MIN_LEN 84
+#define MAVLINK_MSG_ID_336_LEN 84
+#define MAVLINK_MSG_ID_336_MIN_LEN 84
+
+#define MAVLINK_MSG_ID_CELLULAR_CONFIG_CRC 245
+#define MAVLINK_MSG_ID_336_CRC 245
+
+#define MAVLINK_MSG_CELLULAR_CONFIG_FIELD_PIN_LEN 16
+#define MAVLINK_MSG_CELLULAR_CONFIG_FIELD_NEW_PIN_LEN 16
+#define MAVLINK_MSG_CELLULAR_CONFIG_FIELD_APN_LEN 32
+#define MAVLINK_MSG_CELLULAR_CONFIG_FIELD_PUK_LEN 16
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CELLULAR_CONFIG { \
+    336, \
+    "CELLULAR_CONFIG", \
+    8, \
+    {  { "enable_lte", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_cellular_config_t, enable_lte) }, \
+         { "enable_pin", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_cellular_config_t, enable_pin) }, \
+         { "pin", NULL, MAVLINK_TYPE_CHAR, 16, 2, offsetof(mavlink_cellular_config_t, pin) }, \
+         { "new_pin", NULL, MAVLINK_TYPE_CHAR, 16, 18, offsetof(mavlink_cellular_config_t, new_pin) }, \
+         { "apn", NULL, MAVLINK_TYPE_CHAR, 32, 34, offsetof(mavlink_cellular_config_t, apn) }, \
+         { "puk", NULL, MAVLINK_TYPE_CHAR, 16, 66, offsetof(mavlink_cellular_config_t, puk) }, \
+         { "roaming", NULL, MAVLINK_TYPE_UINT8_T, 0, 82, offsetof(mavlink_cellular_config_t, roaming) }, \
+         { "response", NULL, MAVLINK_TYPE_UINT8_T, 0, 83, offsetof(mavlink_cellular_config_t, response) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CELLULAR_CONFIG { \
+    "CELLULAR_CONFIG", \
+    8, \
+    {  { "enable_lte", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_cellular_config_t, enable_lte) }, \
+         { "enable_pin", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_cellular_config_t, enable_pin) }, \
+         { "pin", NULL, MAVLINK_TYPE_CHAR, 16, 2, offsetof(mavlink_cellular_config_t, pin) }, \
+         { "new_pin", NULL, MAVLINK_TYPE_CHAR, 16, 18, offsetof(mavlink_cellular_config_t, new_pin) }, \
+         { "apn", NULL, MAVLINK_TYPE_CHAR, 32, 34, offsetof(mavlink_cellular_config_t, apn) }, \
+         { "puk", NULL, MAVLINK_TYPE_CHAR, 16, 66, offsetof(mavlink_cellular_config_t, puk) }, \
+         { "roaming", NULL, MAVLINK_TYPE_UINT8_T, 0, 82, offsetof(mavlink_cellular_config_t, roaming) }, \
+         { "response", NULL, MAVLINK_TYPE_UINT8_T, 0, 83, offsetof(mavlink_cellular_config_t, response) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a cellular_config message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param enable_lte  Enable/disable LTE. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param enable_pin  Enable/disable PIN on the SIM card. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param pin  PIN sent to the SIM card. Blank when PIN is disabled. Empty when message is sent back as a response.
+ * @param new_pin  New PIN when changing the PIN. Blank to leave it unchanged. Empty when message is sent back as a response.
+ * @param apn  Name of the cellular APN. Blank to leave it unchanged. Current APN when sent back as a response.
+ * @param puk  Required PUK code in case the user failed to authenticate 3 times with the PIN. Empty when message is sent back as a response.
+ * @param roaming  Enable/disable roaming. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param response  Message acceptance response (sent back to GS).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_cellular_config_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t enable_lte, uint8_t enable_pin, const char *pin, const char *new_pin, const char *apn, const char *puk, uint8_t roaming, uint8_t response)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN];
+    _mav_put_uint8_t(buf, 0, enable_lte);
+    _mav_put_uint8_t(buf, 1, enable_pin);
+    _mav_put_uint8_t(buf, 82, roaming);
+    _mav_put_uint8_t(buf, 83, response);
+    _mav_put_char_array(buf, 2, pin, 16);
+    _mav_put_char_array(buf, 18, new_pin, 16);
+    _mav_put_char_array(buf, 34, apn, 32);
+    _mav_put_char_array(buf, 66, puk, 16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN);
+#else
+    mavlink_cellular_config_t packet;
+    packet.enable_lte = enable_lte;
+    packet.enable_pin = enable_pin;
+    packet.roaming = roaming;
+    packet.response = response;
+    mav_array_memcpy(packet.pin, pin, sizeof(char)*16);
+    mav_array_memcpy(packet.new_pin, new_pin, sizeof(char)*16);
+    mav_array_memcpy(packet.apn, apn, sizeof(char)*32);
+    mav_array_memcpy(packet.puk, puk, sizeof(char)*16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CELLULAR_CONFIG;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CELLULAR_CONFIG_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_CRC);
+}
+
+/**
+ * @brief Pack a cellular_config message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param enable_lte  Enable/disable LTE. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param enable_pin  Enable/disable PIN on the SIM card. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param pin  PIN sent to the SIM card. Blank when PIN is disabled. Empty when message is sent back as a response.
+ * @param new_pin  New PIN when changing the PIN. Blank to leave it unchanged. Empty when message is sent back as a response.
+ * @param apn  Name of the cellular APN. Blank to leave it unchanged. Current APN when sent back as a response.
+ * @param puk  Required PUK code in case the user failed to authenticate 3 times with the PIN. Empty when message is sent back as a response.
+ * @param roaming  Enable/disable roaming. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param response  Message acceptance response (sent back to GS).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_cellular_config_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t enable_lte,uint8_t enable_pin,const char *pin,const char *new_pin,const char *apn,const char *puk,uint8_t roaming,uint8_t response)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN];
+    _mav_put_uint8_t(buf, 0, enable_lte);
+    _mav_put_uint8_t(buf, 1, enable_pin);
+    _mav_put_uint8_t(buf, 82, roaming);
+    _mav_put_uint8_t(buf, 83, response);
+    _mav_put_char_array(buf, 2, pin, 16);
+    _mav_put_char_array(buf, 18, new_pin, 16);
+    _mav_put_char_array(buf, 34, apn, 32);
+    _mav_put_char_array(buf, 66, puk, 16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN);
+#else
+    mavlink_cellular_config_t packet;
+    packet.enable_lte = enable_lte;
+    packet.enable_pin = enable_pin;
+    packet.roaming = roaming;
+    packet.response = response;
+    mav_array_memcpy(packet.pin, pin, sizeof(char)*16);
+    mav_array_memcpy(packet.new_pin, new_pin, sizeof(char)*16);
+    mav_array_memcpy(packet.apn, apn, sizeof(char)*32);
+    mav_array_memcpy(packet.puk, puk, sizeof(char)*16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CELLULAR_CONFIG;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CELLULAR_CONFIG_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_CRC);
+}
+
+/**
+ * @brief Encode a cellular_config struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param cellular_config C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_cellular_config_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_cellular_config_t* cellular_config)
+{
+    return mavlink_msg_cellular_config_pack(system_id, component_id, msg, cellular_config->enable_lte, cellular_config->enable_pin, cellular_config->pin, cellular_config->new_pin, cellular_config->apn, cellular_config->puk, cellular_config->roaming, cellular_config->response);
+}
+
+/**
+ * @brief Encode a cellular_config struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param cellular_config C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_cellular_config_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_cellular_config_t* cellular_config)
+{
+    return mavlink_msg_cellular_config_pack_chan(system_id, component_id, chan, msg, cellular_config->enable_lte, cellular_config->enable_pin, cellular_config->pin, cellular_config->new_pin, cellular_config->apn, cellular_config->puk, cellular_config->roaming, cellular_config->response);
+}
+
+/**
+ * @brief Send a cellular_config message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param enable_lte  Enable/disable LTE. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param enable_pin  Enable/disable PIN on the SIM card. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param pin  PIN sent to the SIM card. Blank when PIN is disabled. Empty when message is sent back as a response.
+ * @param new_pin  New PIN when changing the PIN. Blank to leave it unchanged. Empty when message is sent back as a response.
+ * @param apn  Name of the cellular APN. Blank to leave it unchanged. Current APN when sent back as a response.
+ * @param puk  Required PUK code in case the user failed to authenticate 3 times with the PIN. Empty when message is sent back as a response.
+ * @param roaming  Enable/disable roaming. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ * @param response  Message acceptance response (sent back to GS).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_cellular_config_send(mavlink_channel_t chan, uint8_t enable_lte, uint8_t enable_pin, const char *pin, const char *new_pin, const char *apn, const char *puk, uint8_t roaming, uint8_t response)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN];
+    _mav_put_uint8_t(buf, 0, enable_lte);
+    _mav_put_uint8_t(buf, 1, enable_pin);
+    _mav_put_uint8_t(buf, 82, roaming);
+    _mav_put_uint8_t(buf, 83, response);
+    _mav_put_char_array(buf, 2, pin, 16);
+    _mav_put_char_array(buf, 18, new_pin, 16);
+    _mav_put_char_array(buf, 34, apn, 32);
+    _mav_put_char_array(buf, 66, puk, 16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_CONFIG, buf, MAVLINK_MSG_ID_CELLULAR_CONFIG_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_CRC);
+#else
+    mavlink_cellular_config_t packet;
+    packet.enable_lte = enable_lte;
+    packet.enable_pin = enable_pin;
+    packet.roaming = roaming;
+    packet.response = response;
+    mav_array_memcpy(packet.pin, pin, sizeof(char)*16);
+    mav_array_memcpy(packet.new_pin, new_pin, sizeof(char)*16);
+    mav_array_memcpy(packet.apn, apn, sizeof(char)*32);
+    mav_array_memcpy(packet.puk, puk, sizeof(char)*16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_CONFIG, (const char *)&packet, MAVLINK_MSG_ID_CELLULAR_CONFIG_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_CRC);
+#endif
+}
+
+/**
+ * @brief Send a cellular_config message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_cellular_config_send_struct(mavlink_channel_t chan, const mavlink_cellular_config_t* cellular_config)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_cellular_config_send(chan, cellular_config->enable_lte, cellular_config->enable_pin, cellular_config->pin, cellular_config->new_pin, cellular_config->apn, cellular_config->puk, cellular_config->roaming, cellular_config->response);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_CONFIG, (const char *)cellular_config, MAVLINK_MSG_ID_CELLULAR_CONFIG_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_cellular_config_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t enable_lte, uint8_t enable_pin, const char *pin, const char *new_pin, const char *apn, const char *puk, uint8_t roaming, uint8_t response)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, enable_lte);
+    _mav_put_uint8_t(buf, 1, enable_pin);
+    _mav_put_uint8_t(buf, 82, roaming);
+    _mav_put_uint8_t(buf, 83, response);
+    _mav_put_char_array(buf, 2, pin, 16);
+    _mav_put_char_array(buf, 18, new_pin, 16);
+    _mav_put_char_array(buf, 34, apn, 32);
+    _mav_put_char_array(buf, 66, puk, 16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_CONFIG, buf, MAVLINK_MSG_ID_CELLULAR_CONFIG_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_CRC);
+#else
+    mavlink_cellular_config_t *packet = (mavlink_cellular_config_t *)msgbuf;
+    packet->enable_lte = enable_lte;
+    packet->enable_pin = enable_pin;
+    packet->roaming = roaming;
+    packet->response = response;
+    mav_array_memcpy(packet->pin, pin, sizeof(char)*16);
+    mav_array_memcpy(packet->new_pin, new_pin, sizeof(char)*16);
+    mav_array_memcpy(packet->apn, apn, sizeof(char)*32);
+    mav_array_memcpy(packet->puk, puk, sizeof(char)*16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_CONFIG, (const char *)packet, MAVLINK_MSG_ID_CELLULAR_CONFIG_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN, MAVLINK_MSG_ID_CELLULAR_CONFIG_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CELLULAR_CONFIG UNPACKING
+
+
+/**
+ * @brief Get field enable_lte from cellular_config message
+ *
+ * @return  Enable/disable LTE. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ */
+static inline uint8_t mavlink_msg_cellular_config_get_enable_lte(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field enable_pin from cellular_config message
+ *
+ * @return  Enable/disable PIN on the SIM card. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ */
+static inline uint8_t mavlink_msg_cellular_config_get_enable_pin(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  1);
+}
+
+/**
+ * @brief Get field pin from cellular_config message
+ *
+ * @return  PIN sent to the SIM card. Blank when PIN is disabled. Empty when message is sent back as a response.
+ */
+static inline uint16_t mavlink_msg_cellular_config_get_pin(const mavlink_message_t* msg, char *pin)
+{
+    return _MAV_RETURN_char_array(msg, pin, 16,  2);
+}
+
+/**
+ * @brief Get field new_pin from cellular_config message
+ *
+ * @return  New PIN when changing the PIN. Blank to leave it unchanged. Empty when message is sent back as a response.
+ */
+static inline uint16_t mavlink_msg_cellular_config_get_new_pin(const mavlink_message_t* msg, char *new_pin)
+{
+    return _MAV_RETURN_char_array(msg, new_pin, 16,  18);
+}
+
+/**
+ * @brief Get field apn from cellular_config message
+ *
+ * @return  Name of the cellular APN. Blank to leave it unchanged. Current APN when sent back as a response.
+ */
+static inline uint16_t mavlink_msg_cellular_config_get_apn(const mavlink_message_t* msg, char *apn)
+{
+    return _MAV_RETURN_char_array(msg, apn, 32,  34);
+}
+
+/**
+ * @brief Get field puk from cellular_config message
+ *
+ * @return  Required PUK code in case the user failed to authenticate 3 times with the PIN. Empty when message is sent back as a response.
+ */
+static inline uint16_t mavlink_msg_cellular_config_get_puk(const mavlink_message_t* msg, char *puk)
+{
+    return _MAV_RETURN_char_array(msg, puk, 16,  66);
+}
+
+/**
+ * @brief Get field roaming from cellular_config message
+ *
+ * @return  Enable/disable roaming. 0: setting unchanged, 1: disabled, 2: enabled. Current setting when sent back as a response.
+ */
+static inline uint8_t mavlink_msg_cellular_config_get_roaming(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  82);
+}
+
+/**
+ * @brief Get field response from cellular_config message
+ *
+ * @return  Message acceptance response (sent back to GS).
+ */
+static inline uint8_t mavlink_msg_cellular_config_get_response(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  83);
+}
+
+/**
+ * @brief Decode a cellular_config message into a struct
+ *
+ * @param msg The message to decode
+ * @param cellular_config C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_cellular_config_decode(const mavlink_message_t* msg, mavlink_cellular_config_t* cellular_config)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    cellular_config->enable_lte = mavlink_msg_cellular_config_get_enable_lte(msg);
+    cellular_config->enable_pin = mavlink_msg_cellular_config_get_enable_pin(msg);
+    mavlink_msg_cellular_config_get_pin(msg, cellular_config->pin);
+    mavlink_msg_cellular_config_get_new_pin(msg, cellular_config->new_pin);
+    mavlink_msg_cellular_config_get_apn(msg, cellular_config->apn);
+    mavlink_msg_cellular_config_get_puk(msg, cellular_config->puk);
+    cellular_config->roaming = mavlink_msg_cellular_config_get_roaming(msg);
+    cellular_config->response = mavlink_msg_cellular_config_get_response(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN? msg->len : MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN;
+        memset(cellular_config, 0, MAVLINK_MSG_ID_CELLULAR_CONFIG_LEN);
+    memcpy(cellular_config, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 363 - 0
v2.0/common/mavlink_msg_cellular_status.h

@@ -0,0 +1,363 @@
+#pragma once
+// MESSAGE CELLULAR_STATUS PACKING
+
+#define MAVLINK_MSG_ID_CELLULAR_STATUS 334
+
+
+typedef struct __mavlink_cellular_status_t {
+ uint16_t mcc; /*<  Mobile country code. If unknown, set to UINT16_MAX*/
+ uint16_t mnc; /*<  Mobile network code. If unknown, set to UINT16_MAX*/
+ uint16_t lac; /*<  Location area code. If unknown, set to 0*/
+ uint8_t status; /*<  Cellular modem status*/
+ uint8_t failure_reason; /*<  Failure reason when status in in CELLULAR_STATUS_FLAG_FAILED*/
+ uint8_t type; /*<  Cellular network radio type: gsm, cdma, lte...*/
+ uint8_t quality; /*<  Signal quality in percent. If unknown, set to UINT8_MAX*/
+} mavlink_cellular_status_t;
+
+#define MAVLINK_MSG_ID_CELLULAR_STATUS_LEN 10
+#define MAVLINK_MSG_ID_CELLULAR_STATUS_MIN_LEN 10
+#define MAVLINK_MSG_ID_334_LEN 10
+#define MAVLINK_MSG_ID_334_MIN_LEN 10
+
+#define MAVLINK_MSG_ID_CELLULAR_STATUS_CRC 72
+#define MAVLINK_MSG_ID_334_CRC 72
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CELLULAR_STATUS { \
+    334, \
+    "CELLULAR_STATUS", \
+    7, \
+    {  { "status", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_cellular_status_t, status) }, \
+         { "failure_reason", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_cellular_status_t, failure_reason) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_cellular_status_t, type) }, \
+         { "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_cellular_status_t, quality) }, \
+         { "mcc", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_cellular_status_t, mcc) }, \
+         { "mnc", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_cellular_status_t, mnc) }, \
+         { "lac", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_cellular_status_t, lac) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CELLULAR_STATUS { \
+    "CELLULAR_STATUS", \
+    7, \
+    {  { "status", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_cellular_status_t, status) }, \
+         { "failure_reason", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_cellular_status_t, failure_reason) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_cellular_status_t, type) }, \
+         { "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_cellular_status_t, quality) }, \
+         { "mcc", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_cellular_status_t, mcc) }, \
+         { "mnc", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_cellular_status_t, mnc) }, \
+         { "lac", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_cellular_status_t, lac) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a cellular_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param status  Cellular modem status
+ * @param failure_reason  Failure reason when status in in CELLULAR_STATUS_FLAG_FAILED
+ * @param type  Cellular network radio type: gsm, cdma, lte...
+ * @param quality  Signal quality in percent. If unknown, set to UINT8_MAX
+ * @param mcc  Mobile country code. If unknown, set to UINT16_MAX
+ * @param mnc  Mobile network code. If unknown, set to UINT16_MAX
+ * @param lac  Location area code. If unknown, set to 0
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_cellular_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t status, uint8_t failure_reason, uint8_t type, uint8_t quality, uint16_t mcc, uint16_t mnc, uint16_t lac)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CELLULAR_STATUS_LEN];
+    _mav_put_uint16_t(buf, 0, mcc);
+    _mav_put_uint16_t(buf, 2, mnc);
+    _mav_put_uint16_t(buf, 4, lac);
+    _mav_put_uint8_t(buf, 6, status);
+    _mav_put_uint8_t(buf, 7, failure_reason);
+    _mav_put_uint8_t(buf, 8, type);
+    _mav_put_uint8_t(buf, 9, quality);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN);
+#else
+    mavlink_cellular_status_t packet;
+    packet.mcc = mcc;
+    packet.mnc = mnc;
+    packet.lac = lac;
+    packet.status = status;
+    packet.failure_reason = failure_reason;
+    packet.type = type;
+    packet.quality = quality;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CELLULAR_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CELLULAR_STATUS_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a cellular_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param status  Cellular modem status
+ * @param failure_reason  Failure reason when status in in CELLULAR_STATUS_FLAG_FAILED
+ * @param type  Cellular network radio type: gsm, cdma, lte...
+ * @param quality  Signal quality in percent. If unknown, set to UINT8_MAX
+ * @param mcc  Mobile country code. If unknown, set to UINT16_MAX
+ * @param mnc  Mobile network code. If unknown, set to UINT16_MAX
+ * @param lac  Location area code. If unknown, set to 0
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_cellular_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t status,uint8_t failure_reason,uint8_t type,uint8_t quality,uint16_t mcc,uint16_t mnc,uint16_t lac)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CELLULAR_STATUS_LEN];
+    _mav_put_uint16_t(buf, 0, mcc);
+    _mav_put_uint16_t(buf, 2, mnc);
+    _mav_put_uint16_t(buf, 4, lac);
+    _mav_put_uint8_t(buf, 6, status);
+    _mav_put_uint8_t(buf, 7, failure_reason);
+    _mav_put_uint8_t(buf, 8, type);
+    _mav_put_uint8_t(buf, 9, quality);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN);
+#else
+    mavlink_cellular_status_t packet;
+    packet.mcc = mcc;
+    packet.mnc = mnc;
+    packet.lac = lac;
+    packet.status = status;
+    packet.failure_reason = failure_reason;
+    packet.type = type;
+    packet.quality = quality;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CELLULAR_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CELLULAR_STATUS_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a cellular_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param cellular_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_cellular_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_cellular_status_t* cellular_status)
+{
+    return mavlink_msg_cellular_status_pack(system_id, component_id, msg, cellular_status->status, cellular_status->failure_reason, cellular_status->type, cellular_status->quality, cellular_status->mcc, cellular_status->mnc, cellular_status->lac);
+}
+
+/**
+ * @brief Encode a cellular_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param cellular_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_cellular_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_cellular_status_t* cellular_status)
+{
+    return mavlink_msg_cellular_status_pack_chan(system_id, component_id, chan, msg, cellular_status->status, cellular_status->failure_reason, cellular_status->type, cellular_status->quality, cellular_status->mcc, cellular_status->mnc, cellular_status->lac);
+}
+
+/**
+ * @brief Send a cellular_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param status  Cellular modem status
+ * @param failure_reason  Failure reason when status in in CELLULAR_STATUS_FLAG_FAILED
+ * @param type  Cellular network radio type: gsm, cdma, lte...
+ * @param quality  Signal quality in percent. If unknown, set to UINT8_MAX
+ * @param mcc  Mobile country code. If unknown, set to UINT16_MAX
+ * @param mnc  Mobile network code. If unknown, set to UINT16_MAX
+ * @param lac  Location area code. If unknown, set to 0
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_cellular_status_send(mavlink_channel_t chan, uint8_t status, uint8_t failure_reason, uint8_t type, uint8_t quality, uint16_t mcc, uint16_t mnc, uint16_t lac)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CELLULAR_STATUS_LEN];
+    _mav_put_uint16_t(buf, 0, mcc);
+    _mav_put_uint16_t(buf, 2, mnc);
+    _mav_put_uint16_t(buf, 4, lac);
+    _mav_put_uint8_t(buf, 6, status);
+    _mav_put_uint8_t(buf, 7, failure_reason);
+    _mav_put_uint8_t(buf, 8, type);
+    _mav_put_uint8_t(buf, 9, quality);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_STATUS, buf, MAVLINK_MSG_ID_CELLULAR_STATUS_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_CRC);
+#else
+    mavlink_cellular_status_t packet;
+    packet.mcc = mcc;
+    packet.mnc = mnc;
+    packet.lac = lac;
+    packet.status = status;
+    packet.failure_reason = failure_reason;
+    packet.type = type;
+    packet.quality = quality;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_STATUS, (const char *)&packet, MAVLINK_MSG_ID_CELLULAR_STATUS_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a cellular_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_cellular_status_send_struct(mavlink_channel_t chan, const mavlink_cellular_status_t* cellular_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_cellular_status_send(chan, cellular_status->status, cellular_status->failure_reason, cellular_status->type, cellular_status->quality, cellular_status->mcc, cellular_status->mnc, cellular_status->lac);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_STATUS, (const char *)cellular_status, MAVLINK_MSG_ID_CELLULAR_STATUS_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CELLULAR_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_cellular_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t status, uint8_t failure_reason, uint8_t type, uint8_t quality, uint16_t mcc, uint16_t mnc, uint16_t lac)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint16_t(buf, 0, mcc);
+    _mav_put_uint16_t(buf, 2, mnc);
+    _mav_put_uint16_t(buf, 4, lac);
+    _mav_put_uint8_t(buf, 6, status);
+    _mav_put_uint8_t(buf, 7, failure_reason);
+    _mav_put_uint8_t(buf, 8, type);
+    _mav_put_uint8_t(buf, 9, quality);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_STATUS, buf, MAVLINK_MSG_ID_CELLULAR_STATUS_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_CRC);
+#else
+    mavlink_cellular_status_t *packet = (mavlink_cellular_status_t *)msgbuf;
+    packet->mcc = mcc;
+    packet->mnc = mnc;
+    packet->lac = lac;
+    packet->status = status;
+    packet->failure_reason = failure_reason;
+    packet->type = type;
+    packet->quality = quality;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CELLULAR_STATUS, (const char *)packet, MAVLINK_MSG_ID_CELLULAR_STATUS_MIN_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN, MAVLINK_MSG_ID_CELLULAR_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CELLULAR_STATUS UNPACKING
+
+
+/**
+ * @brief Get field status from cellular_status message
+ *
+ * @return  Cellular modem status
+ */
+static inline uint8_t mavlink_msg_cellular_status_get_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  6);
+}
+
+/**
+ * @brief Get field failure_reason from cellular_status message
+ *
+ * @return  Failure reason when status in in CELLULAR_STATUS_FLAG_FAILED
+ */
+static inline uint8_t mavlink_msg_cellular_status_get_failure_reason(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  7);
+}
+
+/**
+ * @brief Get field type from cellular_status message
+ *
+ * @return  Cellular network radio type: gsm, cdma, lte...
+ */
+static inline uint8_t mavlink_msg_cellular_status_get_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  8);
+}
+
+/**
+ * @brief Get field quality from cellular_status message
+ *
+ * @return  Signal quality in percent. If unknown, set to UINT8_MAX
+ */
+static inline uint8_t mavlink_msg_cellular_status_get_quality(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  9);
+}
+
+/**
+ * @brief Get field mcc from cellular_status message
+ *
+ * @return  Mobile country code. If unknown, set to UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_cellular_status_get_mcc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  0);
+}
+
+/**
+ * @brief Get field mnc from cellular_status message
+ *
+ * @return  Mobile network code. If unknown, set to UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_cellular_status_get_mnc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  2);
+}
+
+/**
+ * @brief Get field lac from cellular_status message
+ *
+ * @return  Location area code. If unknown, set to 0
+ */
+static inline uint16_t mavlink_msg_cellular_status_get_lac(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  4);
+}
+
+/**
+ * @brief Decode a cellular_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param cellular_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_cellular_status_decode(const mavlink_message_t* msg, mavlink_cellular_status_t* cellular_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    cellular_status->mcc = mavlink_msg_cellular_status_get_mcc(msg);
+    cellular_status->mnc = mavlink_msg_cellular_status_get_mnc(msg);
+    cellular_status->lac = mavlink_msg_cellular_status_get_lac(msg);
+    cellular_status->status = mavlink_msg_cellular_status_get_status(msg);
+    cellular_status->failure_reason = mavlink_msg_cellular_status_get_failure_reason(msg);
+    cellular_status->type = mavlink_msg_cellular_status_get_type(msg);
+    cellular_status->quality = mavlink_msg_cellular_status_get_quality(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CELLULAR_STATUS_LEN? msg->len : MAVLINK_MSG_ID_CELLULAR_STATUS_LEN;
+        memset(cellular_status, 0, MAVLINK_MSG_ID_CELLULAR_STATUS_LEN);
+    memcpy(cellular_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 280 - 0
v2.0/common/mavlink_msg_change_operator_control.h

@@ -0,0 +1,280 @@
+#pragma once
+// MESSAGE CHANGE_OPERATOR_CONTROL PACKING
+
+#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL 5
+
+
+typedef struct __mavlink_change_operator_control_t {
+ uint8_t target_system; /*<  System the GCS requests control for*/
+ uint8_t control_request; /*<  0: request control of this MAV, 1: Release control of this MAV*/
+ uint8_t version; /*< [rad] 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.*/
+ char passkey[25]; /*<  Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"*/
+} mavlink_change_operator_control_t;
+
+#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN 28
+#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_MIN_LEN 28
+#define MAVLINK_MSG_ID_5_LEN 28
+#define MAVLINK_MSG_ID_5_MIN_LEN 28
+
+#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_CRC 217
+#define MAVLINK_MSG_ID_5_CRC 217
+
+#define MAVLINK_MSG_CHANGE_OPERATOR_CONTROL_FIELD_PASSKEY_LEN 25
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL { \
+    5, \
+    "CHANGE_OPERATOR_CONTROL", \
+    4, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_change_operator_control_t, target_system) }, \
+         { "control_request", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_change_operator_control_t, control_request) }, \
+         { "version", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_change_operator_control_t, version) }, \
+         { "passkey", NULL, MAVLINK_TYPE_CHAR, 25, 3, offsetof(mavlink_change_operator_control_t, passkey) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL { \
+    "CHANGE_OPERATOR_CONTROL", \
+    4, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_change_operator_control_t, target_system) }, \
+         { "control_request", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_change_operator_control_t, control_request) }, \
+         { "version", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_change_operator_control_t, version) }, \
+         { "passkey", NULL, MAVLINK_TYPE_CHAR, 25, 3, offsetof(mavlink_change_operator_control_t, passkey) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a change_operator_control message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System the GCS requests control for
+ * @param control_request  0: request control of this MAV, 1: Release control of this MAV
+ * @param version [rad] 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
+ * @param passkey  Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_change_operator_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t control_request, uint8_t version, const char *passkey)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, control_request);
+    _mav_put_uint8_t(buf, 2, version);
+    _mav_put_char_array(buf, 3, passkey, 25);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN);
+#else
+    mavlink_change_operator_control_t packet;
+    packet.target_system = target_system;
+    packet.control_request = control_request;
+    packet.version = version;
+    mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_CRC);
+}
+
+/**
+ * @brief Pack a change_operator_control message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System the GCS requests control for
+ * @param control_request  0: request control of this MAV, 1: Release control of this MAV
+ * @param version [rad] 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
+ * @param passkey  Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_change_operator_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t control_request,uint8_t version,const char *passkey)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, control_request);
+    _mav_put_uint8_t(buf, 2, version);
+    _mav_put_char_array(buf, 3, passkey, 25);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN);
+#else
+    mavlink_change_operator_control_t packet;
+    packet.target_system = target_system;
+    packet.control_request = control_request;
+    packet.version = version;
+    mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_CRC);
+}
+
+/**
+ * @brief Encode a change_operator_control struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param change_operator_control C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_change_operator_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_change_operator_control_t* change_operator_control)
+{
+    return mavlink_msg_change_operator_control_pack(system_id, component_id, msg, change_operator_control->target_system, change_operator_control->control_request, change_operator_control->version, change_operator_control->passkey);
+}
+
+/**
+ * @brief Encode a change_operator_control struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param change_operator_control C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_change_operator_control_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_change_operator_control_t* change_operator_control)
+{
+    return mavlink_msg_change_operator_control_pack_chan(system_id, component_id, chan, msg, change_operator_control->target_system, change_operator_control->control_request, change_operator_control->version, change_operator_control->passkey);
+}
+
+/**
+ * @brief Send a change_operator_control message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System the GCS requests control for
+ * @param control_request  0: request control of this MAV, 1: Release control of this MAV
+ * @param version [rad] 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
+ * @param passkey  Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_change_operator_control_send(mavlink_channel_t chan, uint8_t target_system, uint8_t control_request, uint8_t version, const char *passkey)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, control_request);
+    _mav_put_uint8_t(buf, 2, version);
+    _mav_put_char_array(buf, 3, passkey, 25);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, buf, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_CRC);
+#else
+    mavlink_change_operator_control_t packet;
+    packet.target_system = target_system;
+    packet.control_request = control_request;
+    packet.version = version;
+    mav_array_memcpy(packet.passkey, passkey, sizeof(char)*25);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, (const char *)&packet, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_CRC);
+#endif
+}
+
+/**
+ * @brief Send a change_operator_control message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_change_operator_control_send_struct(mavlink_channel_t chan, const mavlink_change_operator_control_t* change_operator_control)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_change_operator_control_send(chan, change_operator_control->target_system, change_operator_control->control_request, change_operator_control->version, change_operator_control->passkey);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, (const char *)change_operator_control, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_change_operator_control_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t control_request, uint8_t version, const char *passkey)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, control_request);
+    _mav_put_uint8_t(buf, 2, version);
+    _mav_put_char_array(buf, 3, passkey, 25);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, buf, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_CRC);
+#else
+    mavlink_change_operator_control_t *packet = (mavlink_change_operator_control_t *)msgbuf;
+    packet->target_system = target_system;
+    packet->control_request = control_request;
+    packet->version = version;
+    mav_array_memcpy(packet->passkey, passkey, sizeof(char)*25);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL, (const char *)packet, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CHANGE_OPERATOR_CONTROL UNPACKING
+
+
+/**
+ * @brief Get field target_system from change_operator_control message
+ *
+ * @return  System the GCS requests control for
+ */
+static inline uint8_t mavlink_msg_change_operator_control_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field control_request from change_operator_control message
+ *
+ * @return  0: request control of this MAV, 1: Release control of this MAV
+ */
+static inline uint8_t mavlink_msg_change_operator_control_get_control_request(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  1);
+}
+
+/**
+ * @brief Get field version from change_operator_control message
+ *
+ * @return [rad] 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch.
+ */
+static inline uint8_t mavlink_msg_change_operator_control_get_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  2);
+}
+
+/**
+ * @brief Get field passkey from change_operator_control message
+ *
+ * @return  Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-"
+ */
+static inline uint16_t mavlink_msg_change_operator_control_get_passkey(const mavlink_message_t* msg, char *passkey)
+{
+    return _MAV_RETURN_char_array(msg, passkey, 25,  3);
+}
+
+/**
+ * @brief Decode a change_operator_control message into a struct
+ *
+ * @param msg The message to decode
+ * @param change_operator_control C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_change_operator_control_decode(const mavlink_message_t* msg, mavlink_change_operator_control_t* change_operator_control)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    change_operator_control->target_system = mavlink_msg_change_operator_control_get_target_system(msg);
+    change_operator_control->control_request = mavlink_msg_change_operator_control_get_control_request(msg);
+    change_operator_control->version = mavlink_msg_change_operator_control_get_version(msg);
+    mavlink_msg_change_operator_control_get_passkey(msg, change_operator_control->passkey);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN? msg->len : MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN;
+        memset(change_operator_control, 0, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN);
+    memcpy(change_operator_control, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 263 - 0
v2.0/common/mavlink_msg_change_operator_control_ack.h

@@ -0,0 +1,263 @@
+#pragma once
+// MESSAGE CHANGE_OPERATOR_CONTROL_ACK PACKING
+
+#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK 6
+
+
+typedef struct __mavlink_change_operator_control_ack_t {
+ uint8_t gcs_system_id; /*<  ID of the GCS this message */
+ uint8_t control_request; /*<  0: request control of this MAV, 1: Release control of this MAV*/
+ uint8_t ack; /*<  0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control*/
+} mavlink_change_operator_control_ack_t;
+
+#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN 3
+#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_MIN_LEN 3
+#define MAVLINK_MSG_ID_6_LEN 3
+#define MAVLINK_MSG_ID_6_MIN_LEN 3
+
+#define MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_CRC 104
+#define MAVLINK_MSG_ID_6_CRC 104
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK { \
+    6, \
+    "CHANGE_OPERATOR_CONTROL_ACK", \
+    3, \
+    {  { "gcs_system_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_change_operator_control_ack_t, gcs_system_id) }, \
+         { "control_request", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_change_operator_control_ack_t, control_request) }, \
+         { "ack", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_change_operator_control_ack_t, ack) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CHANGE_OPERATOR_CONTROL_ACK { \
+    "CHANGE_OPERATOR_CONTROL_ACK", \
+    3, \
+    {  { "gcs_system_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_change_operator_control_ack_t, gcs_system_id) }, \
+         { "control_request", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_change_operator_control_ack_t, control_request) }, \
+         { "ack", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_change_operator_control_ack_t, ack) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a change_operator_control_ack message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param gcs_system_id  ID of the GCS this message 
+ * @param control_request  0: request control of this MAV, 1: Release control of this MAV
+ * @param ack  0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_change_operator_control_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t gcs_system_id, uint8_t control_request, uint8_t ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN];
+    _mav_put_uint8_t(buf, 0, gcs_system_id);
+    _mav_put_uint8_t(buf, 1, control_request);
+    _mav_put_uint8_t(buf, 2, ack);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN);
+#else
+    mavlink_change_operator_control_ack_t packet;
+    packet.gcs_system_id = gcs_system_id;
+    packet.control_request = control_request;
+    packet.ack = ack;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_CRC);
+}
+
+/**
+ * @brief Pack a change_operator_control_ack message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gcs_system_id  ID of the GCS this message 
+ * @param control_request  0: request control of this MAV, 1: Release control of this MAV
+ * @param ack  0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_change_operator_control_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t gcs_system_id,uint8_t control_request,uint8_t ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN];
+    _mav_put_uint8_t(buf, 0, gcs_system_id);
+    _mav_put_uint8_t(buf, 1, control_request);
+    _mav_put_uint8_t(buf, 2, ack);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN);
+#else
+    mavlink_change_operator_control_ack_t packet;
+    packet.gcs_system_id = gcs_system_id;
+    packet.control_request = control_request;
+    packet.ack = ack;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_CRC);
+}
+
+/**
+ * @brief Encode a change_operator_control_ack struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param change_operator_control_ack C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_change_operator_control_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_change_operator_control_ack_t* change_operator_control_ack)
+{
+    return mavlink_msg_change_operator_control_ack_pack(system_id, component_id, msg, change_operator_control_ack->gcs_system_id, change_operator_control_ack->control_request, change_operator_control_ack->ack);
+}
+
+/**
+ * @brief Encode a change_operator_control_ack struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param change_operator_control_ack C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_change_operator_control_ack_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_change_operator_control_ack_t* change_operator_control_ack)
+{
+    return mavlink_msg_change_operator_control_ack_pack_chan(system_id, component_id, chan, msg, change_operator_control_ack->gcs_system_id, change_operator_control_ack->control_request, change_operator_control_ack->ack);
+}
+
+/**
+ * @brief Send a change_operator_control_ack message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param gcs_system_id  ID of the GCS this message 
+ * @param control_request  0: request control of this MAV, 1: Release control of this MAV
+ * @param ack  0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_change_operator_control_ack_send(mavlink_channel_t chan, uint8_t gcs_system_id, uint8_t control_request, uint8_t ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN];
+    _mav_put_uint8_t(buf, 0, gcs_system_id);
+    _mav_put_uint8_t(buf, 1, control_request);
+    _mav_put_uint8_t(buf, 2, ack);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, buf, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_CRC);
+#else
+    mavlink_change_operator_control_ack_t packet;
+    packet.gcs_system_id = gcs_system_id;
+    packet.control_request = control_request;
+    packet.ack = ack;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, (const char *)&packet, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_CRC);
+#endif
+}
+
+/**
+ * @brief Send a change_operator_control_ack message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_change_operator_control_ack_send_struct(mavlink_channel_t chan, const mavlink_change_operator_control_ack_t* change_operator_control_ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_change_operator_control_ack_send(chan, change_operator_control_ack->gcs_system_id, change_operator_control_ack->control_request, change_operator_control_ack->ack);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, (const char *)change_operator_control_ack, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_change_operator_control_ack_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t gcs_system_id, uint8_t control_request, uint8_t ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, gcs_system_id);
+    _mav_put_uint8_t(buf, 1, control_request);
+    _mav_put_uint8_t(buf, 2, ack);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, buf, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_CRC);
+#else
+    mavlink_change_operator_control_ack_t *packet = (mavlink_change_operator_control_ack_t *)msgbuf;
+    packet->gcs_system_id = gcs_system_id;
+    packet->control_request = control_request;
+    packet->ack = ack;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK, (const char *)packet, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_MIN_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CHANGE_OPERATOR_CONTROL_ACK UNPACKING
+
+
+/**
+ * @brief Get field gcs_system_id from change_operator_control_ack message
+ *
+ * @return  ID of the GCS this message 
+ */
+static inline uint8_t mavlink_msg_change_operator_control_ack_get_gcs_system_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field control_request from change_operator_control_ack message
+ *
+ * @return  0: request control of this MAV, 1: Release control of this MAV
+ */
+static inline uint8_t mavlink_msg_change_operator_control_ack_get_control_request(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  1);
+}
+
+/**
+ * @brief Get field ack from change_operator_control_ack message
+ *
+ * @return  0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control
+ */
+static inline uint8_t mavlink_msg_change_operator_control_ack_get_ack(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  2);
+}
+
+/**
+ * @brief Decode a change_operator_control_ack message into a struct
+ *
+ * @param msg The message to decode
+ * @param change_operator_control_ack C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_change_operator_control_ack_decode(const mavlink_message_t* msg, mavlink_change_operator_control_ack_t* change_operator_control_ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    change_operator_control_ack->gcs_system_id = mavlink_msg_change_operator_control_ack_get_gcs_system_id(msg);
+    change_operator_control_ack->control_request = mavlink_msg_change_operator_control_ack_get_control_request(msg);
+    change_operator_control_ack->ack = mavlink_msg_change_operator_control_ack_get_ack(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN? msg->len : MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN;
+        memset(change_operator_control_ack, 0, MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN);
+    memcpy(change_operator_control_ack, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 363 - 0
v2.0/common/mavlink_msg_collision.h

@@ -0,0 +1,363 @@
+#pragma once
+// MESSAGE COLLISION PACKING
+
+#define MAVLINK_MSG_ID_COLLISION 247
+
+
+typedef struct __mavlink_collision_t {
+ uint32_t id; /*<  Unique identifier, domain based on src field*/
+ float time_to_minimum_delta; /*< [s] Estimated time until collision occurs*/
+ float altitude_minimum_delta; /*< [m] Closest vertical distance between vehicle and object*/
+ float horizontal_minimum_delta; /*< [m] Closest horizontal distance between vehicle and object*/
+ uint8_t src; /*<  Collision data source*/
+ uint8_t action; /*<  Action that is being taken to avoid this collision*/
+ uint8_t threat_level; /*<  How concerned the aircraft is about this collision*/
+} mavlink_collision_t;
+
+#define MAVLINK_MSG_ID_COLLISION_LEN 19
+#define MAVLINK_MSG_ID_COLLISION_MIN_LEN 19
+#define MAVLINK_MSG_ID_247_LEN 19
+#define MAVLINK_MSG_ID_247_MIN_LEN 19
+
+#define MAVLINK_MSG_ID_COLLISION_CRC 81
+#define MAVLINK_MSG_ID_247_CRC 81
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_COLLISION { \
+    247, \
+    "COLLISION", \
+    7, \
+    {  { "src", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_collision_t, src) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_collision_t, id) }, \
+         { "action", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_collision_t, action) }, \
+         { "threat_level", NULL, MAVLINK_TYPE_UINT8_T, 0, 18, offsetof(mavlink_collision_t, threat_level) }, \
+         { "time_to_minimum_delta", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_collision_t, time_to_minimum_delta) }, \
+         { "altitude_minimum_delta", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_collision_t, altitude_minimum_delta) }, \
+         { "horizontal_minimum_delta", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_collision_t, horizontal_minimum_delta) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_COLLISION { \
+    "COLLISION", \
+    7, \
+    {  { "src", NULL, MAVLINK_TYPE_UINT8_T, 0, 16, offsetof(mavlink_collision_t, src) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_collision_t, id) }, \
+         { "action", NULL, MAVLINK_TYPE_UINT8_T, 0, 17, offsetof(mavlink_collision_t, action) }, \
+         { "threat_level", NULL, MAVLINK_TYPE_UINT8_T, 0, 18, offsetof(mavlink_collision_t, threat_level) }, \
+         { "time_to_minimum_delta", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_collision_t, time_to_minimum_delta) }, \
+         { "altitude_minimum_delta", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_collision_t, altitude_minimum_delta) }, \
+         { "horizontal_minimum_delta", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_collision_t, horizontal_minimum_delta) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a collision message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param src  Collision data source
+ * @param id  Unique identifier, domain based on src field
+ * @param action  Action that is being taken to avoid this collision
+ * @param threat_level  How concerned the aircraft is about this collision
+ * @param time_to_minimum_delta [s] Estimated time until collision occurs
+ * @param altitude_minimum_delta [m] Closest vertical distance between vehicle and object
+ * @param horizontal_minimum_delta [m] Closest horizontal distance between vehicle and object
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_collision_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t src, uint32_t id, uint8_t action, uint8_t threat_level, float time_to_minimum_delta, float altitude_minimum_delta, float horizontal_minimum_delta)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COLLISION_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_float(buf, 4, time_to_minimum_delta);
+    _mav_put_float(buf, 8, altitude_minimum_delta);
+    _mav_put_float(buf, 12, horizontal_minimum_delta);
+    _mav_put_uint8_t(buf, 16, src);
+    _mav_put_uint8_t(buf, 17, action);
+    _mav_put_uint8_t(buf, 18, threat_level);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COLLISION_LEN);
+#else
+    mavlink_collision_t packet;
+    packet.id = id;
+    packet.time_to_minimum_delta = time_to_minimum_delta;
+    packet.altitude_minimum_delta = altitude_minimum_delta;
+    packet.horizontal_minimum_delta = horizontal_minimum_delta;
+    packet.src = src;
+    packet.action = action;
+    packet.threat_level = threat_level;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COLLISION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COLLISION;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_COLLISION_MIN_LEN, MAVLINK_MSG_ID_COLLISION_LEN, MAVLINK_MSG_ID_COLLISION_CRC);
+}
+
+/**
+ * @brief Pack a collision message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param src  Collision data source
+ * @param id  Unique identifier, domain based on src field
+ * @param action  Action that is being taken to avoid this collision
+ * @param threat_level  How concerned the aircraft is about this collision
+ * @param time_to_minimum_delta [s] Estimated time until collision occurs
+ * @param altitude_minimum_delta [m] Closest vertical distance between vehicle and object
+ * @param horizontal_minimum_delta [m] Closest horizontal distance between vehicle and object
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_collision_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t src,uint32_t id,uint8_t action,uint8_t threat_level,float time_to_minimum_delta,float altitude_minimum_delta,float horizontal_minimum_delta)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COLLISION_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_float(buf, 4, time_to_minimum_delta);
+    _mav_put_float(buf, 8, altitude_minimum_delta);
+    _mav_put_float(buf, 12, horizontal_minimum_delta);
+    _mav_put_uint8_t(buf, 16, src);
+    _mav_put_uint8_t(buf, 17, action);
+    _mav_put_uint8_t(buf, 18, threat_level);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COLLISION_LEN);
+#else
+    mavlink_collision_t packet;
+    packet.id = id;
+    packet.time_to_minimum_delta = time_to_minimum_delta;
+    packet.altitude_minimum_delta = altitude_minimum_delta;
+    packet.horizontal_minimum_delta = horizontal_minimum_delta;
+    packet.src = src;
+    packet.action = action;
+    packet.threat_level = threat_level;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COLLISION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COLLISION;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_COLLISION_MIN_LEN, MAVLINK_MSG_ID_COLLISION_LEN, MAVLINK_MSG_ID_COLLISION_CRC);
+}
+
+/**
+ * @brief Encode a collision struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param collision C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_collision_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_collision_t* collision)
+{
+    return mavlink_msg_collision_pack(system_id, component_id, msg, collision->src, collision->id, collision->action, collision->threat_level, collision->time_to_minimum_delta, collision->altitude_minimum_delta, collision->horizontal_minimum_delta);
+}
+
+/**
+ * @brief Encode a collision struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param collision C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_collision_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_collision_t* collision)
+{
+    return mavlink_msg_collision_pack_chan(system_id, component_id, chan, msg, collision->src, collision->id, collision->action, collision->threat_level, collision->time_to_minimum_delta, collision->altitude_minimum_delta, collision->horizontal_minimum_delta);
+}
+
+/**
+ * @brief Send a collision message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param src  Collision data source
+ * @param id  Unique identifier, domain based on src field
+ * @param action  Action that is being taken to avoid this collision
+ * @param threat_level  How concerned the aircraft is about this collision
+ * @param time_to_minimum_delta [s] Estimated time until collision occurs
+ * @param altitude_minimum_delta [m] Closest vertical distance between vehicle and object
+ * @param horizontal_minimum_delta [m] Closest horizontal distance between vehicle and object
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_collision_send(mavlink_channel_t chan, uint8_t src, uint32_t id, uint8_t action, uint8_t threat_level, float time_to_minimum_delta, float altitude_minimum_delta, float horizontal_minimum_delta)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COLLISION_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_float(buf, 4, time_to_minimum_delta);
+    _mav_put_float(buf, 8, altitude_minimum_delta);
+    _mav_put_float(buf, 12, horizontal_minimum_delta);
+    _mav_put_uint8_t(buf, 16, src);
+    _mav_put_uint8_t(buf, 17, action);
+    _mav_put_uint8_t(buf, 18, threat_level);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COLLISION, buf, MAVLINK_MSG_ID_COLLISION_MIN_LEN, MAVLINK_MSG_ID_COLLISION_LEN, MAVLINK_MSG_ID_COLLISION_CRC);
+#else
+    mavlink_collision_t packet;
+    packet.id = id;
+    packet.time_to_minimum_delta = time_to_minimum_delta;
+    packet.altitude_minimum_delta = altitude_minimum_delta;
+    packet.horizontal_minimum_delta = horizontal_minimum_delta;
+    packet.src = src;
+    packet.action = action;
+    packet.threat_level = threat_level;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COLLISION, (const char *)&packet, MAVLINK_MSG_ID_COLLISION_MIN_LEN, MAVLINK_MSG_ID_COLLISION_LEN, MAVLINK_MSG_ID_COLLISION_CRC);
+#endif
+}
+
+/**
+ * @brief Send a collision message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_collision_send_struct(mavlink_channel_t chan, const mavlink_collision_t* collision)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_collision_send(chan, collision->src, collision->id, collision->action, collision->threat_level, collision->time_to_minimum_delta, collision->altitude_minimum_delta, collision->horizontal_minimum_delta);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COLLISION, (const char *)collision, MAVLINK_MSG_ID_COLLISION_MIN_LEN, MAVLINK_MSG_ID_COLLISION_LEN, MAVLINK_MSG_ID_COLLISION_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_COLLISION_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_collision_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t src, uint32_t id, uint8_t action, uint8_t threat_level, float time_to_minimum_delta, float altitude_minimum_delta, float horizontal_minimum_delta)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_float(buf, 4, time_to_minimum_delta);
+    _mav_put_float(buf, 8, altitude_minimum_delta);
+    _mav_put_float(buf, 12, horizontal_minimum_delta);
+    _mav_put_uint8_t(buf, 16, src);
+    _mav_put_uint8_t(buf, 17, action);
+    _mav_put_uint8_t(buf, 18, threat_level);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COLLISION, buf, MAVLINK_MSG_ID_COLLISION_MIN_LEN, MAVLINK_MSG_ID_COLLISION_LEN, MAVLINK_MSG_ID_COLLISION_CRC);
+#else
+    mavlink_collision_t *packet = (mavlink_collision_t *)msgbuf;
+    packet->id = id;
+    packet->time_to_minimum_delta = time_to_minimum_delta;
+    packet->altitude_minimum_delta = altitude_minimum_delta;
+    packet->horizontal_minimum_delta = horizontal_minimum_delta;
+    packet->src = src;
+    packet->action = action;
+    packet->threat_level = threat_level;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COLLISION, (const char *)packet, MAVLINK_MSG_ID_COLLISION_MIN_LEN, MAVLINK_MSG_ID_COLLISION_LEN, MAVLINK_MSG_ID_COLLISION_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE COLLISION UNPACKING
+
+
+/**
+ * @brief Get field src from collision message
+ *
+ * @return  Collision data source
+ */
+static inline uint8_t mavlink_msg_collision_get_src(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  16);
+}
+
+/**
+ * @brief Get field id from collision message
+ *
+ * @return  Unique identifier, domain based on src field
+ */
+static inline uint32_t mavlink_msg_collision_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field action from collision message
+ *
+ * @return  Action that is being taken to avoid this collision
+ */
+static inline uint8_t mavlink_msg_collision_get_action(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  17);
+}
+
+/**
+ * @brief Get field threat_level from collision message
+ *
+ * @return  How concerned the aircraft is about this collision
+ */
+static inline uint8_t mavlink_msg_collision_get_threat_level(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  18);
+}
+
+/**
+ * @brief Get field time_to_minimum_delta from collision message
+ *
+ * @return [s] Estimated time until collision occurs
+ */
+static inline float mavlink_msg_collision_get_time_to_minimum_delta(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field altitude_minimum_delta from collision message
+ *
+ * @return [m] Closest vertical distance between vehicle and object
+ */
+static inline float mavlink_msg_collision_get_altitude_minimum_delta(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field horizontal_minimum_delta from collision message
+ *
+ * @return [m] Closest horizontal distance between vehicle and object
+ */
+static inline float mavlink_msg_collision_get_horizontal_minimum_delta(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Decode a collision message into a struct
+ *
+ * @param msg The message to decode
+ * @param collision C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_collision_decode(const mavlink_message_t* msg, mavlink_collision_t* collision)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    collision->id = mavlink_msg_collision_get_id(msg);
+    collision->time_to_minimum_delta = mavlink_msg_collision_get_time_to_minimum_delta(msg);
+    collision->altitude_minimum_delta = mavlink_msg_collision_get_altitude_minimum_delta(msg);
+    collision->horizontal_minimum_delta = mavlink_msg_collision_get_horizontal_minimum_delta(msg);
+    collision->src = mavlink_msg_collision_get_src(msg);
+    collision->action = mavlink_msg_collision_get_action(msg);
+    collision->threat_level = mavlink_msg_collision_get_threat_level(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_COLLISION_LEN? msg->len : MAVLINK_MSG_ID_COLLISION_LEN;
+        memset(collision, 0, MAVLINK_MSG_ID_COLLISION_LEN);
+    memcpy(collision, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 338 - 0
v2.0/common/mavlink_msg_command_ack.h

@@ -0,0 +1,338 @@
+#pragma once
+// MESSAGE COMMAND_ACK PACKING
+
+#define MAVLINK_MSG_ID_COMMAND_ACK 77
+
+
+typedef struct __mavlink_command_ack_t {
+ uint16_t command; /*<  Command ID (of acknowledged command).*/
+ uint8_t result; /*<  Result of command.*/
+ uint8_t progress; /*< [%] The progress percentage when result is MAV_RESULT_IN_PROGRESS. Values: [0-100], or UINT8_MAX if the progress is unknown.*/
+ int32_t result_param2; /*<  Additional result information. Can be set with a command-specific enum containing command-specific error reasons for why the command might be denied. If used, the associated enum must be documented in the corresponding MAV_CMD (this enum should have a 0 value to indicate "unused" or "unknown").*/
+ uint8_t target_system; /*<  System ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.*/
+ uint8_t target_component; /*<  Component ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.*/
+} mavlink_command_ack_t;
+
+#define MAVLINK_MSG_ID_COMMAND_ACK_LEN 10
+#define MAVLINK_MSG_ID_COMMAND_ACK_MIN_LEN 3
+#define MAVLINK_MSG_ID_77_LEN 10
+#define MAVLINK_MSG_ID_77_MIN_LEN 3
+
+#define MAVLINK_MSG_ID_COMMAND_ACK_CRC 143
+#define MAVLINK_MSG_ID_77_CRC 143
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_COMMAND_ACK { \
+    77, \
+    "COMMAND_ACK", \
+    6, \
+    {  { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_command_ack_t, command) }, \
+         { "result", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_command_ack_t, result) }, \
+         { "progress", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_command_ack_t, progress) }, \
+         { "result_param2", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_command_ack_t, result_param2) }, \
+         { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_command_ack_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_command_ack_t, target_component) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_COMMAND_ACK { \
+    "COMMAND_ACK", \
+    6, \
+    {  { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_command_ack_t, command) }, \
+         { "result", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_command_ack_t, result) }, \
+         { "progress", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_command_ack_t, progress) }, \
+         { "result_param2", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_command_ack_t, result_param2) }, \
+         { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_command_ack_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_command_ack_t, target_component) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a command_ack message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param command  Command ID (of acknowledged command).
+ * @param result  Result of command.
+ * @param progress [%] The progress percentage when result is MAV_RESULT_IN_PROGRESS. Values: [0-100], or UINT8_MAX if the progress is unknown.
+ * @param result_param2  Additional result information. Can be set with a command-specific enum containing command-specific error reasons for why the command might be denied. If used, the associated enum must be documented in the corresponding MAV_CMD (this enum should have a 0 value to indicate "unused" or "unknown").
+ * @param target_system  System ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.
+ * @param target_component  Component ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_command_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint16_t command, uint8_t result, uint8_t progress, int32_t result_param2, uint8_t target_system, uint8_t target_component)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_ACK_LEN];
+    _mav_put_uint16_t(buf, 0, command);
+    _mav_put_uint8_t(buf, 2, result);
+    _mav_put_uint8_t(buf, 3, progress);
+    _mav_put_int32_t(buf, 4, result_param2);
+    _mav_put_uint8_t(buf, 8, target_system);
+    _mav_put_uint8_t(buf, 9, target_component);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMMAND_ACK_LEN);
+#else
+    mavlink_command_ack_t packet;
+    packet.command = command;
+    packet.result = result;
+    packet.progress = progress;
+    packet.result_param2 = result_param2;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMMAND_ACK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMMAND_ACK;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_COMMAND_ACK_MIN_LEN, MAVLINK_MSG_ID_COMMAND_ACK_LEN, MAVLINK_MSG_ID_COMMAND_ACK_CRC);
+}
+
+/**
+ * @brief Pack a command_ack message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param command  Command ID (of acknowledged command).
+ * @param result  Result of command.
+ * @param progress [%] The progress percentage when result is MAV_RESULT_IN_PROGRESS. Values: [0-100], or UINT8_MAX if the progress is unknown.
+ * @param result_param2  Additional result information. Can be set with a command-specific enum containing command-specific error reasons for why the command might be denied. If used, the associated enum must be documented in the corresponding MAV_CMD (this enum should have a 0 value to indicate "unused" or "unknown").
+ * @param target_system  System ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.
+ * @param target_component  Component ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_command_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint16_t command,uint8_t result,uint8_t progress,int32_t result_param2,uint8_t target_system,uint8_t target_component)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_ACK_LEN];
+    _mav_put_uint16_t(buf, 0, command);
+    _mav_put_uint8_t(buf, 2, result);
+    _mav_put_uint8_t(buf, 3, progress);
+    _mav_put_int32_t(buf, 4, result_param2);
+    _mav_put_uint8_t(buf, 8, target_system);
+    _mav_put_uint8_t(buf, 9, target_component);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMMAND_ACK_LEN);
+#else
+    mavlink_command_ack_t packet;
+    packet.command = command;
+    packet.result = result;
+    packet.progress = progress;
+    packet.result_param2 = result_param2;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMMAND_ACK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMMAND_ACK;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_COMMAND_ACK_MIN_LEN, MAVLINK_MSG_ID_COMMAND_ACK_LEN, MAVLINK_MSG_ID_COMMAND_ACK_CRC);
+}
+
+/**
+ * @brief Encode a command_ack struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param command_ack C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_command_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_command_ack_t* command_ack)
+{
+    return mavlink_msg_command_ack_pack(system_id, component_id, msg, command_ack->command, command_ack->result, command_ack->progress, command_ack->result_param2, command_ack->target_system, command_ack->target_component);
+}
+
+/**
+ * @brief Encode a command_ack struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param command_ack C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_command_ack_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_command_ack_t* command_ack)
+{
+    return mavlink_msg_command_ack_pack_chan(system_id, component_id, chan, msg, command_ack->command, command_ack->result, command_ack->progress, command_ack->result_param2, command_ack->target_system, command_ack->target_component);
+}
+
+/**
+ * @brief Send a command_ack message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param command  Command ID (of acknowledged command).
+ * @param result  Result of command.
+ * @param progress [%] The progress percentage when result is MAV_RESULT_IN_PROGRESS. Values: [0-100], or UINT8_MAX if the progress is unknown.
+ * @param result_param2  Additional result information. Can be set with a command-specific enum containing command-specific error reasons for why the command might be denied. If used, the associated enum must be documented in the corresponding MAV_CMD (this enum should have a 0 value to indicate "unused" or "unknown").
+ * @param target_system  System ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.
+ * @param target_component  Component ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_command_ack_send(mavlink_channel_t chan, uint16_t command, uint8_t result, uint8_t progress, int32_t result_param2, uint8_t target_system, uint8_t target_component)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_ACK_LEN];
+    _mav_put_uint16_t(buf, 0, command);
+    _mav_put_uint8_t(buf, 2, result);
+    _mav_put_uint8_t(buf, 3, progress);
+    _mav_put_int32_t(buf, 4, result_param2);
+    _mav_put_uint8_t(buf, 8, target_system);
+    _mav_put_uint8_t(buf, 9, target_component);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, buf, MAVLINK_MSG_ID_COMMAND_ACK_MIN_LEN, MAVLINK_MSG_ID_COMMAND_ACK_LEN, MAVLINK_MSG_ID_COMMAND_ACK_CRC);
+#else
+    mavlink_command_ack_t packet;
+    packet.command = command;
+    packet.result = result;
+    packet.progress = progress;
+    packet.result_param2 = result_param2;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, (const char *)&packet, MAVLINK_MSG_ID_COMMAND_ACK_MIN_LEN, MAVLINK_MSG_ID_COMMAND_ACK_LEN, MAVLINK_MSG_ID_COMMAND_ACK_CRC);
+#endif
+}
+
+/**
+ * @brief Send a command_ack message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_command_ack_send_struct(mavlink_channel_t chan, const mavlink_command_ack_t* command_ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_command_ack_send(chan, command_ack->command, command_ack->result, command_ack->progress, command_ack->result_param2, command_ack->target_system, command_ack->target_component);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, (const char *)command_ack, MAVLINK_MSG_ID_COMMAND_ACK_MIN_LEN, MAVLINK_MSG_ID_COMMAND_ACK_LEN, MAVLINK_MSG_ID_COMMAND_ACK_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_COMMAND_ACK_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_command_ack_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint16_t command, uint8_t result, uint8_t progress, int32_t result_param2, uint8_t target_system, uint8_t target_component)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint16_t(buf, 0, command);
+    _mav_put_uint8_t(buf, 2, result);
+    _mav_put_uint8_t(buf, 3, progress);
+    _mav_put_int32_t(buf, 4, result_param2);
+    _mav_put_uint8_t(buf, 8, target_system);
+    _mav_put_uint8_t(buf, 9, target_component);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, buf, MAVLINK_MSG_ID_COMMAND_ACK_MIN_LEN, MAVLINK_MSG_ID_COMMAND_ACK_LEN, MAVLINK_MSG_ID_COMMAND_ACK_CRC);
+#else
+    mavlink_command_ack_t *packet = (mavlink_command_ack_t *)msgbuf;
+    packet->command = command;
+    packet->result = result;
+    packet->progress = progress;
+    packet->result_param2 = result_param2;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_ACK, (const char *)packet, MAVLINK_MSG_ID_COMMAND_ACK_MIN_LEN, MAVLINK_MSG_ID_COMMAND_ACK_LEN, MAVLINK_MSG_ID_COMMAND_ACK_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE COMMAND_ACK UNPACKING
+
+
+/**
+ * @brief Get field command from command_ack message
+ *
+ * @return  Command ID (of acknowledged command).
+ */
+static inline uint16_t mavlink_msg_command_ack_get_command(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  0);
+}
+
+/**
+ * @brief Get field result from command_ack message
+ *
+ * @return  Result of command.
+ */
+static inline uint8_t mavlink_msg_command_ack_get_result(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  2);
+}
+
+/**
+ * @brief Get field progress from command_ack message
+ *
+ * @return [%] The progress percentage when result is MAV_RESULT_IN_PROGRESS. Values: [0-100], or UINT8_MAX if the progress is unknown.
+ */
+static inline uint8_t mavlink_msg_command_ack_get_progress(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  3);
+}
+
+/**
+ * @brief Get field result_param2 from command_ack message
+ *
+ * @return  Additional result information. Can be set with a command-specific enum containing command-specific error reasons for why the command might be denied. If used, the associated enum must be documented in the corresponding MAV_CMD (this enum should have a 0 value to indicate "unused" or "unknown").
+ */
+static inline int32_t mavlink_msg_command_ack_get_result_param2(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field target_system from command_ack message
+ *
+ * @return  System ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.
+ */
+static inline uint8_t mavlink_msg_command_ack_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  8);
+}
+
+/**
+ * @brief Get field target_component from command_ack message
+ *
+ * @return  Component ID of the target recipient. This is the ID of the system that sent the command for which this COMMAND_ACK is an acknowledgement.
+ */
+static inline uint8_t mavlink_msg_command_ack_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  9);
+}
+
+/**
+ * @brief Decode a command_ack message into a struct
+ *
+ * @param msg The message to decode
+ * @param command_ack C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_command_ack_decode(const mavlink_message_t* msg, mavlink_command_ack_t* command_ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    command_ack->command = mavlink_msg_command_ack_get_command(msg);
+    command_ack->result = mavlink_msg_command_ack_get_result(msg);
+    command_ack->progress = mavlink_msg_command_ack_get_progress(msg);
+    command_ack->result_param2 = mavlink_msg_command_ack_get_result_param2(msg);
+    command_ack->target_system = mavlink_msg_command_ack_get_target_system(msg);
+    command_ack->target_component = mavlink_msg_command_ack_get_target_component(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_COMMAND_ACK_LEN? msg->len : MAVLINK_MSG_ID_COMMAND_ACK_LEN;
+        memset(command_ack, 0, MAVLINK_MSG_ID_COMMAND_ACK_LEN);
+    memcpy(command_ack, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 263 - 0
v2.0/common/mavlink_msg_command_cancel.h

@@ -0,0 +1,263 @@
+#pragma once
+// MESSAGE COMMAND_CANCEL PACKING
+
+#define MAVLINK_MSG_ID_COMMAND_CANCEL 80
+
+
+typedef struct __mavlink_command_cancel_t {
+ uint16_t command; /*<  Command ID (of command to cancel).*/
+ uint8_t target_system; /*<  System executing long running command. Should not be broadcast (0).*/
+ uint8_t target_component; /*<  Component executing long running command.*/
+} mavlink_command_cancel_t;
+
+#define MAVLINK_MSG_ID_COMMAND_CANCEL_LEN 4
+#define MAVLINK_MSG_ID_COMMAND_CANCEL_MIN_LEN 4
+#define MAVLINK_MSG_ID_80_LEN 4
+#define MAVLINK_MSG_ID_80_MIN_LEN 4
+
+#define MAVLINK_MSG_ID_COMMAND_CANCEL_CRC 14
+#define MAVLINK_MSG_ID_80_CRC 14
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_COMMAND_CANCEL { \
+    80, \
+    "COMMAND_CANCEL", \
+    3, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_command_cancel_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_command_cancel_t, target_component) }, \
+         { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_command_cancel_t, command) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_COMMAND_CANCEL { \
+    "COMMAND_CANCEL", \
+    3, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_command_cancel_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_command_cancel_t, target_component) }, \
+         { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_command_cancel_t, command) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a command_cancel message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System executing long running command. Should not be broadcast (0).
+ * @param target_component  Component executing long running command.
+ * @param command  Command ID (of command to cancel).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_command_cancel_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint16_t command)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_CANCEL_LEN];
+    _mav_put_uint16_t(buf, 0, command);
+    _mav_put_uint8_t(buf, 2, target_system);
+    _mav_put_uint8_t(buf, 3, target_component);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN);
+#else
+    mavlink_command_cancel_t packet;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMMAND_CANCEL;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_COMMAND_CANCEL_MIN_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_CRC);
+}
+
+/**
+ * @brief Pack a command_cancel message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System executing long running command. Should not be broadcast (0).
+ * @param target_component  Component executing long running command.
+ * @param command  Command ID (of command to cancel).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_command_cancel_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint16_t command)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_CANCEL_LEN];
+    _mav_put_uint16_t(buf, 0, command);
+    _mav_put_uint8_t(buf, 2, target_system);
+    _mav_put_uint8_t(buf, 3, target_component);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN);
+#else
+    mavlink_command_cancel_t packet;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMMAND_CANCEL;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_COMMAND_CANCEL_MIN_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_CRC);
+}
+
+/**
+ * @brief Encode a command_cancel struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param command_cancel C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_command_cancel_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_command_cancel_t* command_cancel)
+{
+    return mavlink_msg_command_cancel_pack(system_id, component_id, msg, command_cancel->target_system, command_cancel->target_component, command_cancel->command);
+}
+
+/**
+ * @brief Encode a command_cancel struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param command_cancel C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_command_cancel_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_command_cancel_t* command_cancel)
+{
+    return mavlink_msg_command_cancel_pack_chan(system_id, component_id, chan, msg, command_cancel->target_system, command_cancel->target_component, command_cancel->command);
+}
+
+/**
+ * @brief Send a command_cancel message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System executing long running command. Should not be broadcast (0).
+ * @param target_component  Component executing long running command.
+ * @param command  Command ID (of command to cancel).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_command_cancel_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t command)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_CANCEL_LEN];
+    _mav_put_uint16_t(buf, 0, command);
+    _mav_put_uint8_t(buf, 2, target_system);
+    _mav_put_uint8_t(buf, 3, target_component);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_CANCEL, buf, MAVLINK_MSG_ID_COMMAND_CANCEL_MIN_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_CRC);
+#else
+    mavlink_command_cancel_t packet;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_CANCEL, (const char *)&packet, MAVLINK_MSG_ID_COMMAND_CANCEL_MIN_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_CRC);
+#endif
+}
+
+/**
+ * @brief Send a command_cancel message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_command_cancel_send_struct(mavlink_channel_t chan, const mavlink_command_cancel_t* command_cancel)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_command_cancel_send(chan, command_cancel->target_system, command_cancel->target_component, command_cancel->command);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_CANCEL, (const char *)command_cancel, MAVLINK_MSG_ID_COMMAND_CANCEL_MIN_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_COMMAND_CANCEL_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_command_cancel_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint16_t command)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint16_t(buf, 0, command);
+    _mav_put_uint8_t(buf, 2, target_system);
+    _mav_put_uint8_t(buf, 3, target_component);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_CANCEL, buf, MAVLINK_MSG_ID_COMMAND_CANCEL_MIN_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_CRC);
+#else
+    mavlink_command_cancel_t *packet = (mavlink_command_cancel_t *)msgbuf;
+    packet->command = command;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_CANCEL, (const char *)packet, MAVLINK_MSG_ID_COMMAND_CANCEL_MIN_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN, MAVLINK_MSG_ID_COMMAND_CANCEL_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE COMMAND_CANCEL UNPACKING
+
+
+/**
+ * @brief Get field target_system from command_cancel message
+ *
+ * @return  System executing long running command. Should not be broadcast (0).
+ */
+static inline uint8_t mavlink_msg_command_cancel_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  2);
+}
+
+/**
+ * @brief Get field target_component from command_cancel message
+ *
+ * @return  Component executing long running command.
+ */
+static inline uint8_t mavlink_msg_command_cancel_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  3);
+}
+
+/**
+ * @brief Get field command from command_cancel message
+ *
+ * @return  Command ID (of command to cancel).
+ */
+static inline uint16_t mavlink_msg_command_cancel_get_command(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  0);
+}
+
+/**
+ * @brief Decode a command_cancel message into a struct
+ *
+ * @param msg The message to decode
+ * @param command_cancel C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_command_cancel_decode(const mavlink_message_t* msg, mavlink_command_cancel_t* command_cancel)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    command_cancel->command = mavlink_msg_command_cancel_get_command(msg);
+    command_cancel->target_system = mavlink_msg_command_cancel_get_target_system(msg);
+    command_cancel->target_component = mavlink_msg_command_cancel_get_target_component(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_COMMAND_CANCEL_LEN? msg->len : MAVLINK_MSG_ID_COMMAND_CANCEL_LEN;
+        memset(command_cancel, 0, MAVLINK_MSG_ID_COMMAND_CANCEL_LEN);
+    memcpy(command_cancel, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 513 - 0
v2.0/common/mavlink_msg_command_int.h

@@ -0,0 +1,513 @@
+#pragma once
+// MESSAGE COMMAND_INT PACKING
+
+#define MAVLINK_MSG_ID_COMMAND_INT 75
+
+
+typedef struct __mavlink_command_int_t {
+ float param1; /*<  PARAM1, see MAV_CMD enum*/
+ float param2; /*<  PARAM2, see MAV_CMD enum*/
+ float param3; /*<  PARAM3, see MAV_CMD enum*/
+ float param4; /*<  PARAM4, see MAV_CMD enum*/
+ int32_t x; /*<  PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7*/
+ int32_t y; /*<  PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7*/
+ float z; /*<  PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame).*/
+ uint16_t command; /*<  The scheduled action for the mission item.*/
+ uint8_t target_system; /*<  System ID*/
+ uint8_t target_component; /*<  Component ID*/
+ uint8_t frame; /*<  The coordinate system of the COMMAND.*/
+ uint8_t current; /*<  Not used.*/
+ uint8_t autocontinue; /*<  Not used (set 0).*/
+} mavlink_command_int_t;
+
+#define MAVLINK_MSG_ID_COMMAND_INT_LEN 35
+#define MAVLINK_MSG_ID_COMMAND_INT_MIN_LEN 35
+#define MAVLINK_MSG_ID_75_LEN 35
+#define MAVLINK_MSG_ID_75_MIN_LEN 35
+
+#define MAVLINK_MSG_ID_COMMAND_INT_CRC 158
+#define MAVLINK_MSG_ID_75_CRC 158
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_COMMAND_INT { \
+    75, \
+    "COMMAND_INT", \
+    13, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_command_int_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_command_int_t, target_component) }, \
+         { "frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_command_int_t, frame) }, \
+         { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_command_int_t, command) }, \
+         { "current", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_command_int_t, current) }, \
+         { "autocontinue", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_command_int_t, autocontinue) }, \
+         { "param1", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_command_int_t, param1) }, \
+         { "param2", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_command_int_t, param2) }, \
+         { "param3", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_command_int_t, param3) }, \
+         { "param4", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_command_int_t, param4) }, \
+         { "x", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_command_int_t, x) }, \
+         { "y", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_command_int_t, y) }, \
+         { "z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_command_int_t, z) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_COMMAND_INT { \
+    "COMMAND_INT", \
+    13, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_command_int_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_command_int_t, target_component) }, \
+         { "frame", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_command_int_t, frame) }, \
+         { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_command_int_t, command) }, \
+         { "current", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_command_int_t, current) }, \
+         { "autocontinue", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_command_int_t, autocontinue) }, \
+         { "param1", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_command_int_t, param1) }, \
+         { "param2", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_command_int_t, param2) }, \
+         { "param3", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_command_int_t, param3) }, \
+         { "param4", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_command_int_t, param4) }, \
+         { "x", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_command_int_t, x) }, \
+         { "y", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_command_int_t, y) }, \
+         { "z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_command_int_t, z) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a command_int message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param frame  The coordinate system of the COMMAND.
+ * @param command  The scheduled action for the mission item.
+ * @param current  Not used.
+ * @param autocontinue  Not used (set 0).
+ * @param param1  PARAM1, see MAV_CMD enum
+ * @param param2  PARAM2, see MAV_CMD enum
+ * @param param3  PARAM3, see MAV_CMD enum
+ * @param param4  PARAM4, see MAV_CMD enum
+ * @param x  PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7
+ * @param y  PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7
+ * @param z  PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_command_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint8_t frame, uint16_t command, uint8_t current, uint8_t autocontinue, float param1, float param2, float param3, float param4, int32_t x, int32_t y, float z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_INT_LEN];
+    _mav_put_float(buf, 0, param1);
+    _mav_put_float(buf, 4, param2);
+    _mav_put_float(buf, 8, param3);
+    _mav_put_float(buf, 12, param4);
+    _mav_put_int32_t(buf, 16, x);
+    _mav_put_int32_t(buf, 20, y);
+    _mav_put_float(buf, 24, z);
+    _mav_put_uint16_t(buf, 28, command);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_uint8_t(buf, 32, frame);
+    _mav_put_uint8_t(buf, 33, current);
+    _mav_put_uint8_t(buf, 34, autocontinue);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMMAND_INT_LEN);
+#else
+    mavlink_command_int_t packet;
+    packet.param1 = param1;
+    packet.param2 = param2;
+    packet.param3 = param3;
+    packet.param4 = param4;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.frame = frame;
+    packet.current = current;
+    packet.autocontinue = autocontinue;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMMAND_INT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMMAND_INT;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_COMMAND_INT_MIN_LEN, MAVLINK_MSG_ID_COMMAND_INT_LEN, MAVLINK_MSG_ID_COMMAND_INT_CRC);
+}
+
+/**
+ * @brief Pack a command_int message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param frame  The coordinate system of the COMMAND.
+ * @param command  The scheduled action for the mission item.
+ * @param current  Not used.
+ * @param autocontinue  Not used (set 0).
+ * @param param1  PARAM1, see MAV_CMD enum
+ * @param param2  PARAM2, see MAV_CMD enum
+ * @param param3  PARAM3, see MAV_CMD enum
+ * @param param4  PARAM4, see MAV_CMD enum
+ * @param x  PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7
+ * @param y  PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7
+ * @param z  PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_command_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint8_t frame,uint16_t command,uint8_t current,uint8_t autocontinue,float param1,float param2,float param3,float param4,int32_t x,int32_t y,float z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_INT_LEN];
+    _mav_put_float(buf, 0, param1);
+    _mav_put_float(buf, 4, param2);
+    _mav_put_float(buf, 8, param3);
+    _mav_put_float(buf, 12, param4);
+    _mav_put_int32_t(buf, 16, x);
+    _mav_put_int32_t(buf, 20, y);
+    _mav_put_float(buf, 24, z);
+    _mav_put_uint16_t(buf, 28, command);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_uint8_t(buf, 32, frame);
+    _mav_put_uint8_t(buf, 33, current);
+    _mav_put_uint8_t(buf, 34, autocontinue);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMMAND_INT_LEN);
+#else
+    mavlink_command_int_t packet;
+    packet.param1 = param1;
+    packet.param2 = param2;
+    packet.param3 = param3;
+    packet.param4 = param4;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.frame = frame;
+    packet.current = current;
+    packet.autocontinue = autocontinue;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMMAND_INT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMMAND_INT;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_COMMAND_INT_MIN_LEN, MAVLINK_MSG_ID_COMMAND_INT_LEN, MAVLINK_MSG_ID_COMMAND_INT_CRC);
+}
+
+/**
+ * @brief Encode a command_int struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param command_int C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_command_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_command_int_t* command_int)
+{
+    return mavlink_msg_command_int_pack(system_id, component_id, msg, command_int->target_system, command_int->target_component, command_int->frame, command_int->command, command_int->current, command_int->autocontinue, command_int->param1, command_int->param2, command_int->param3, command_int->param4, command_int->x, command_int->y, command_int->z);
+}
+
+/**
+ * @brief Encode a command_int struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param command_int C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_command_int_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_command_int_t* command_int)
+{
+    return mavlink_msg_command_int_pack_chan(system_id, component_id, chan, msg, command_int->target_system, command_int->target_component, command_int->frame, command_int->command, command_int->current, command_int->autocontinue, command_int->param1, command_int->param2, command_int->param3, command_int->param4, command_int->x, command_int->y, command_int->z);
+}
+
+/**
+ * @brief Send a command_int message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param frame  The coordinate system of the COMMAND.
+ * @param command  The scheduled action for the mission item.
+ * @param current  Not used.
+ * @param autocontinue  Not used (set 0).
+ * @param param1  PARAM1, see MAV_CMD enum
+ * @param param2  PARAM2, see MAV_CMD enum
+ * @param param3  PARAM3, see MAV_CMD enum
+ * @param param4  PARAM4, see MAV_CMD enum
+ * @param x  PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7
+ * @param y  PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7
+ * @param z  PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_command_int_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t frame, uint16_t command, uint8_t current, uint8_t autocontinue, float param1, float param2, float param3, float param4, int32_t x, int32_t y, float z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_INT_LEN];
+    _mav_put_float(buf, 0, param1);
+    _mav_put_float(buf, 4, param2);
+    _mav_put_float(buf, 8, param3);
+    _mav_put_float(buf, 12, param4);
+    _mav_put_int32_t(buf, 16, x);
+    _mav_put_int32_t(buf, 20, y);
+    _mav_put_float(buf, 24, z);
+    _mav_put_uint16_t(buf, 28, command);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_uint8_t(buf, 32, frame);
+    _mav_put_uint8_t(buf, 33, current);
+    _mav_put_uint8_t(buf, 34, autocontinue);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_INT, buf, MAVLINK_MSG_ID_COMMAND_INT_MIN_LEN, MAVLINK_MSG_ID_COMMAND_INT_LEN, MAVLINK_MSG_ID_COMMAND_INT_CRC);
+#else
+    mavlink_command_int_t packet;
+    packet.param1 = param1;
+    packet.param2 = param2;
+    packet.param3 = param3;
+    packet.param4 = param4;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.frame = frame;
+    packet.current = current;
+    packet.autocontinue = autocontinue;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_INT, (const char *)&packet, MAVLINK_MSG_ID_COMMAND_INT_MIN_LEN, MAVLINK_MSG_ID_COMMAND_INT_LEN, MAVLINK_MSG_ID_COMMAND_INT_CRC);
+#endif
+}
+
+/**
+ * @brief Send a command_int message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_command_int_send_struct(mavlink_channel_t chan, const mavlink_command_int_t* command_int)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_command_int_send(chan, command_int->target_system, command_int->target_component, command_int->frame, command_int->command, command_int->current, command_int->autocontinue, command_int->param1, command_int->param2, command_int->param3, command_int->param4, command_int->x, command_int->y, command_int->z);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_INT, (const char *)command_int, MAVLINK_MSG_ID_COMMAND_INT_MIN_LEN, MAVLINK_MSG_ID_COMMAND_INT_LEN, MAVLINK_MSG_ID_COMMAND_INT_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_COMMAND_INT_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_command_int_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint8_t frame, uint16_t command, uint8_t current, uint8_t autocontinue, float param1, float param2, float param3, float param4, int32_t x, int32_t y, float z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_float(buf, 0, param1);
+    _mav_put_float(buf, 4, param2);
+    _mav_put_float(buf, 8, param3);
+    _mav_put_float(buf, 12, param4);
+    _mav_put_int32_t(buf, 16, x);
+    _mav_put_int32_t(buf, 20, y);
+    _mav_put_float(buf, 24, z);
+    _mav_put_uint16_t(buf, 28, command);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_uint8_t(buf, 32, frame);
+    _mav_put_uint8_t(buf, 33, current);
+    _mav_put_uint8_t(buf, 34, autocontinue);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_INT, buf, MAVLINK_MSG_ID_COMMAND_INT_MIN_LEN, MAVLINK_MSG_ID_COMMAND_INT_LEN, MAVLINK_MSG_ID_COMMAND_INT_CRC);
+#else
+    mavlink_command_int_t *packet = (mavlink_command_int_t *)msgbuf;
+    packet->param1 = param1;
+    packet->param2 = param2;
+    packet->param3 = param3;
+    packet->param4 = param4;
+    packet->x = x;
+    packet->y = y;
+    packet->z = z;
+    packet->command = command;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->frame = frame;
+    packet->current = current;
+    packet->autocontinue = autocontinue;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_INT, (const char *)packet, MAVLINK_MSG_ID_COMMAND_INT_MIN_LEN, MAVLINK_MSG_ID_COMMAND_INT_LEN, MAVLINK_MSG_ID_COMMAND_INT_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE COMMAND_INT UNPACKING
+
+
+/**
+ * @brief Get field target_system from command_int message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_command_int_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field target_component from command_int message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_command_int_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  31);
+}
+
+/**
+ * @brief Get field frame from command_int message
+ *
+ * @return  The coordinate system of the COMMAND.
+ */
+static inline uint8_t mavlink_msg_command_int_get_frame(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field command from command_int message
+ *
+ * @return  The scheduled action for the mission item.
+ */
+static inline uint16_t mavlink_msg_command_int_get_command(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  28);
+}
+
+/**
+ * @brief Get field current from command_int message
+ *
+ * @return  Not used.
+ */
+static inline uint8_t mavlink_msg_command_int_get_current(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field autocontinue from command_int message
+ *
+ * @return  Not used (set 0).
+ */
+static inline uint8_t mavlink_msg_command_int_get_autocontinue(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field param1 from command_int message
+ *
+ * @return  PARAM1, see MAV_CMD enum
+ */
+static inline float mavlink_msg_command_int_get_param1(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  0);
+}
+
+/**
+ * @brief Get field param2 from command_int message
+ *
+ * @return  PARAM2, see MAV_CMD enum
+ */
+static inline float mavlink_msg_command_int_get_param2(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field param3 from command_int message
+ *
+ * @return  PARAM3, see MAV_CMD enum
+ */
+static inline float mavlink_msg_command_int_get_param3(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field param4 from command_int message
+ *
+ * @return  PARAM4, see MAV_CMD enum
+ */
+static inline float mavlink_msg_command_int_get_param4(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field x from command_int message
+ *
+ * @return  PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7
+ */
+static inline int32_t mavlink_msg_command_int_get_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field y from command_int message
+ *
+ * @return  PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7
+ */
+static inline int32_t mavlink_msg_command_int_get_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  20);
+}
+
+/**
+ * @brief Get field z from command_int message
+ *
+ * @return  PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame).
+ */
+static inline float mavlink_msg_command_int_get_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Decode a command_int message into a struct
+ *
+ * @param msg The message to decode
+ * @param command_int C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_command_int_decode(const mavlink_message_t* msg, mavlink_command_int_t* command_int)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    command_int->param1 = mavlink_msg_command_int_get_param1(msg);
+    command_int->param2 = mavlink_msg_command_int_get_param2(msg);
+    command_int->param3 = mavlink_msg_command_int_get_param3(msg);
+    command_int->param4 = mavlink_msg_command_int_get_param4(msg);
+    command_int->x = mavlink_msg_command_int_get_x(msg);
+    command_int->y = mavlink_msg_command_int_get_y(msg);
+    command_int->z = mavlink_msg_command_int_get_z(msg);
+    command_int->command = mavlink_msg_command_int_get_command(msg);
+    command_int->target_system = mavlink_msg_command_int_get_target_system(msg);
+    command_int->target_component = mavlink_msg_command_int_get_target_component(msg);
+    command_int->frame = mavlink_msg_command_int_get_frame(msg);
+    command_int->current = mavlink_msg_command_int_get_current(msg);
+    command_int->autocontinue = mavlink_msg_command_int_get_autocontinue(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_COMMAND_INT_LEN? msg->len : MAVLINK_MSG_ID_COMMAND_INT_LEN;
+        memset(command_int, 0, MAVLINK_MSG_ID_COMMAND_INT_LEN);
+    memcpy(command_int, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 463 - 0
v2.0/common/mavlink_msg_command_long.h

@@ -0,0 +1,463 @@
+#pragma once
+// MESSAGE COMMAND_LONG PACKING
+
+#define MAVLINK_MSG_ID_COMMAND_LONG 76
+
+
+typedef struct __mavlink_command_long_t {
+ float param1; /*<  Parameter 1 (for the specific command).*/
+ float param2; /*<  Parameter 2 (for the specific command).*/
+ float param3; /*<  Parameter 3 (for the specific command).*/
+ float param4; /*<  Parameter 4 (for the specific command).*/
+ float param5; /*<  Parameter 5 (for the specific command).*/
+ float param6; /*<  Parameter 6 (for the specific command).*/
+ float param7; /*<  Parameter 7 (for the specific command).*/
+ uint16_t command; /*<  Command ID (of command to send).*/
+ uint8_t target_system; /*<  System which should execute the command*/
+ uint8_t target_component; /*<  Component which should execute the command, 0 for all components*/
+ uint8_t confirmation; /*<  0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)*/
+} mavlink_command_long_t;
+
+#define MAVLINK_MSG_ID_COMMAND_LONG_LEN 33
+#define MAVLINK_MSG_ID_COMMAND_LONG_MIN_LEN 33
+#define MAVLINK_MSG_ID_76_LEN 33
+#define MAVLINK_MSG_ID_76_MIN_LEN 33
+
+#define MAVLINK_MSG_ID_COMMAND_LONG_CRC 152
+#define MAVLINK_MSG_ID_76_CRC 152
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_COMMAND_LONG { \
+    76, \
+    "COMMAND_LONG", \
+    11, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_command_long_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_command_long_t, target_component) }, \
+         { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_command_long_t, command) }, \
+         { "confirmation", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_command_long_t, confirmation) }, \
+         { "param1", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_command_long_t, param1) }, \
+         { "param2", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_command_long_t, param2) }, \
+         { "param3", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_command_long_t, param3) }, \
+         { "param4", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_command_long_t, param4) }, \
+         { "param5", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_command_long_t, param5) }, \
+         { "param6", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_command_long_t, param6) }, \
+         { "param7", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_command_long_t, param7) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_COMMAND_LONG { \
+    "COMMAND_LONG", \
+    11, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_command_long_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_command_long_t, target_component) }, \
+         { "command", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_command_long_t, command) }, \
+         { "confirmation", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_command_long_t, confirmation) }, \
+         { "param1", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_command_long_t, param1) }, \
+         { "param2", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_command_long_t, param2) }, \
+         { "param3", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_command_long_t, param3) }, \
+         { "param4", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_command_long_t, param4) }, \
+         { "param5", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_command_long_t, param5) }, \
+         { "param6", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_command_long_t, param6) }, \
+         { "param7", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_command_long_t, param7) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a command_long message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System which should execute the command
+ * @param target_component  Component which should execute the command, 0 for all components
+ * @param command  Command ID (of command to send).
+ * @param confirmation  0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
+ * @param param1  Parameter 1 (for the specific command).
+ * @param param2  Parameter 2 (for the specific command).
+ * @param param3  Parameter 3 (for the specific command).
+ * @param param4  Parameter 4 (for the specific command).
+ * @param param5  Parameter 5 (for the specific command).
+ * @param param6  Parameter 6 (for the specific command).
+ * @param param7  Parameter 7 (for the specific command).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_command_long_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint16_t command, uint8_t confirmation, float param1, float param2, float param3, float param4, float param5, float param6, float param7)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_LONG_LEN];
+    _mav_put_float(buf, 0, param1);
+    _mav_put_float(buf, 4, param2);
+    _mav_put_float(buf, 8, param3);
+    _mav_put_float(buf, 12, param4);
+    _mav_put_float(buf, 16, param5);
+    _mav_put_float(buf, 20, param6);
+    _mav_put_float(buf, 24, param7);
+    _mav_put_uint16_t(buf, 28, command);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_uint8_t(buf, 32, confirmation);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMMAND_LONG_LEN);
+#else
+    mavlink_command_long_t packet;
+    packet.param1 = param1;
+    packet.param2 = param2;
+    packet.param3 = param3;
+    packet.param4 = param4;
+    packet.param5 = param5;
+    packet.param6 = param6;
+    packet.param7 = param7;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.confirmation = confirmation;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMMAND_LONG_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMMAND_LONG;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_COMMAND_LONG_MIN_LEN, MAVLINK_MSG_ID_COMMAND_LONG_LEN, MAVLINK_MSG_ID_COMMAND_LONG_CRC);
+}
+
+/**
+ * @brief Pack a command_long message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System which should execute the command
+ * @param target_component  Component which should execute the command, 0 for all components
+ * @param command  Command ID (of command to send).
+ * @param confirmation  0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
+ * @param param1  Parameter 1 (for the specific command).
+ * @param param2  Parameter 2 (for the specific command).
+ * @param param3  Parameter 3 (for the specific command).
+ * @param param4  Parameter 4 (for the specific command).
+ * @param param5  Parameter 5 (for the specific command).
+ * @param param6  Parameter 6 (for the specific command).
+ * @param param7  Parameter 7 (for the specific command).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_command_long_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint16_t command,uint8_t confirmation,float param1,float param2,float param3,float param4,float param5,float param6,float param7)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_LONG_LEN];
+    _mav_put_float(buf, 0, param1);
+    _mav_put_float(buf, 4, param2);
+    _mav_put_float(buf, 8, param3);
+    _mav_put_float(buf, 12, param4);
+    _mav_put_float(buf, 16, param5);
+    _mav_put_float(buf, 20, param6);
+    _mav_put_float(buf, 24, param7);
+    _mav_put_uint16_t(buf, 28, command);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_uint8_t(buf, 32, confirmation);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMMAND_LONG_LEN);
+#else
+    mavlink_command_long_t packet;
+    packet.param1 = param1;
+    packet.param2 = param2;
+    packet.param3 = param3;
+    packet.param4 = param4;
+    packet.param5 = param5;
+    packet.param6 = param6;
+    packet.param7 = param7;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.confirmation = confirmation;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMMAND_LONG_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMMAND_LONG;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_COMMAND_LONG_MIN_LEN, MAVLINK_MSG_ID_COMMAND_LONG_LEN, MAVLINK_MSG_ID_COMMAND_LONG_CRC);
+}
+
+/**
+ * @brief Encode a command_long struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param command_long C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_command_long_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_command_long_t* command_long)
+{
+    return mavlink_msg_command_long_pack(system_id, component_id, msg, command_long->target_system, command_long->target_component, command_long->command, command_long->confirmation, command_long->param1, command_long->param2, command_long->param3, command_long->param4, command_long->param5, command_long->param6, command_long->param7);
+}
+
+/**
+ * @brief Encode a command_long struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param command_long C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_command_long_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_command_long_t* command_long)
+{
+    return mavlink_msg_command_long_pack_chan(system_id, component_id, chan, msg, command_long->target_system, command_long->target_component, command_long->command, command_long->confirmation, command_long->param1, command_long->param2, command_long->param3, command_long->param4, command_long->param5, command_long->param6, command_long->param7);
+}
+
+/**
+ * @brief Send a command_long message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System which should execute the command
+ * @param target_component  Component which should execute the command, 0 for all components
+ * @param command  Command ID (of command to send).
+ * @param confirmation  0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
+ * @param param1  Parameter 1 (for the specific command).
+ * @param param2  Parameter 2 (for the specific command).
+ * @param param3  Parameter 3 (for the specific command).
+ * @param param4  Parameter 4 (for the specific command).
+ * @param param5  Parameter 5 (for the specific command).
+ * @param param6  Parameter 6 (for the specific command).
+ * @param param7  Parameter 7 (for the specific command).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_command_long_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t command, uint8_t confirmation, float param1, float param2, float param3, float param4, float param5, float param6, float param7)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMMAND_LONG_LEN];
+    _mav_put_float(buf, 0, param1);
+    _mav_put_float(buf, 4, param2);
+    _mav_put_float(buf, 8, param3);
+    _mav_put_float(buf, 12, param4);
+    _mav_put_float(buf, 16, param5);
+    _mav_put_float(buf, 20, param6);
+    _mav_put_float(buf, 24, param7);
+    _mav_put_uint16_t(buf, 28, command);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_uint8_t(buf, 32, confirmation);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_LONG, buf, MAVLINK_MSG_ID_COMMAND_LONG_MIN_LEN, MAVLINK_MSG_ID_COMMAND_LONG_LEN, MAVLINK_MSG_ID_COMMAND_LONG_CRC);
+#else
+    mavlink_command_long_t packet;
+    packet.param1 = param1;
+    packet.param2 = param2;
+    packet.param3 = param3;
+    packet.param4 = param4;
+    packet.param5 = param5;
+    packet.param6 = param6;
+    packet.param7 = param7;
+    packet.command = command;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.confirmation = confirmation;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_LONG, (const char *)&packet, MAVLINK_MSG_ID_COMMAND_LONG_MIN_LEN, MAVLINK_MSG_ID_COMMAND_LONG_LEN, MAVLINK_MSG_ID_COMMAND_LONG_CRC);
+#endif
+}
+
+/**
+ * @brief Send a command_long message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_command_long_send_struct(mavlink_channel_t chan, const mavlink_command_long_t* command_long)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_command_long_send(chan, command_long->target_system, command_long->target_component, command_long->command, command_long->confirmation, command_long->param1, command_long->param2, command_long->param3, command_long->param4, command_long->param5, command_long->param6, command_long->param7);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_LONG, (const char *)command_long, MAVLINK_MSG_ID_COMMAND_LONG_MIN_LEN, MAVLINK_MSG_ID_COMMAND_LONG_LEN, MAVLINK_MSG_ID_COMMAND_LONG_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_COMMAND_LONG_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_command_long_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint16_t command, uint8_t confirmation, float param1, float param2, float param3, float param4, float param5, float param6, float param7)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_float(buf, 0, param1);
+    _mav_put_float(buf, 4, param2);
+    _mav_put_float(buf, 8, param3);
+    _mav_put_float(buf, 12, param4);
+    _mav_put_float(buf, 16, param5);
+    _mav_put_float(buf, 20, param6);
+    _mav_put_float(buf, 24, param7);
+    _mav_put_uint16_t(buf, 28, command);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_uint8_t(buf, 32, confirmation);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_LONG, buf, MAVLINK_MSG_ID_COMMAND_LONG_MIN_LEN, MAVLINK_MSG_ID_COMMAND_LONG_LEN, MAVLINK_MSG_ID_COMMAND_LONG_CRC);
+#else
+    mavlink_command_long_t *packet = (mavlink_command_long_t *)msgbuf;
+    packet->param1 = param1;
+    packet->param2 = param2;
+    packet->param3 = param3;
+    packet->param4 = param4;
+    packet->param5 = param5;
+    packet->param6 = param6;
+    packet->param7 = param7;
+    packet->command = command;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->confirmation = confirmation;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMMAND_LONG, (const char *)packet, MAVLINK_MSG_ID_COMMAND_LONG_MIN_LEN, MAVLINK_MSG_ID_COMMAND_LONG_LEN, MAVLINK_MSG_ID_COMMAND_LONG_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE COMMAND_LONG UNPACKING
+
+
+/**
+ * @brief Get field target_system from command_long message
+ *
+ * @return  System which should execute the command
+ */
+static inline uint8_t mavlink_msg_command_long_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field target_component from command_long message
+ *
+ * @return  Component which should execute the command, 0 for all components
+ */
+static inline uint8_t mavlink_msg_command_long_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  31);
+}
+
+/**
+ * @brief Get field command from command_long message
+ *
+ * @return  Command ID (of command to send).
+ */
+static inline uint16_t mavlink_msg_command_long_get_command(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  28);
+}
+
+/**
+ * @brief Get field confirmation from command_long message
+ *
+ * @return  0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)
+ */
+static inline uint8_t mavlink_msg_command_long_get_confirmation(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field param1 from command_long message
+ *
+ * @return  Parameter 1 (for the specific command).
+ */
+static inline float mavlink_msg_command_long_get_param1(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  0);
+}
+
+/**
+ * @brief Get field param2 from command_long message
+ *
+ * @return  Parameter 2 (for the specific command).
+ */
+static inline float mavlink_msg_command_long_get_param2(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field param3 from command_long message
+ *
+ * @return  Parameter 3 (for the specific command).
+ */
+static inline float mavlink_msg_command_long_get_param3(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field param4 from command_long message
+ *
+ * @return  Parameter 4 (for the specific command).
+ */
+static inline float mavlink_msg_command_long_get_param4(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field param5 from command_long message
+ *
+ * @return  Parameter 5 (for the specific command).
+ */
+static inline float mavlink_msg_command_long_get_param5(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field param6 from command_long message
+ *
+ * @return  Parameter 6 (for the specific command).
+ */
+static inline float mavlink_msg_command_long_get_param6(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field param7 from command_long message
+ *
+ * @return  Parameter 7 (for the specific command).
+ */
+static inline float mavlink_msg_command_long_get_param7(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Decode a command_long message into a struct
+ *
+ * @param msg The message to decode
+ * @param command_long C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_command_long_decode(const mavlink_message_t* msg, mavlink_command_long_t* command_long)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    command_long->param1 = mavlink_msg_command_long_get_param1(msg);
+    command_long->param2 = mavlink_msg_command_long_get_param2(msg);
+    command_long->param3 = mavlink_msg_command_long_get_param3(msg);
+    command_long->param4 = mavlink_msg_command_long_get_param4(msg);
+    command_long->param5 = mavlink_msg_command_long_get_param5(msg);
+    command_long->param6 = mavlink_msg_command_long_get_param6(msg);
+    command_long->param7 = mavlink_msg_command_long_get_param7(msg);
+    command_long->command = mavlink_msg_command_long_get_command(msg);
+    command_long->target_system = mavlink_msg_command_long_get_target_system(msg);
+    command_long->target_component = mavlink_msg_command_long_get_target_component(msg);
+    command_long->confirmation = mavlink_msg_command_long_get_confirmation(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_COMMAND_LONG_LEN? msg->len : MAVLINK_MSG_ID_COMMAND_LONG_LEN;
+        memset(command_long, 0, MAVLINK_MSG_ID_COMMAND_LONG_LEN);
+    memcpy(command_long, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 306 - 0
v2.0/common/mavlink_msg_component_information.h

@@ -0,0 +1,306 @@
+#pragma once
+// MESSAGE COMPONENT_INFORMATION PACKING
+
+#define MAVLINK_MSG_ID_COMPONENT_INFORMATION 395
+
+
+typedef struct __mavlink_component_information_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint32_t general_metadata_file_crc; /*<  CRC32 of the general metadata file (general_metadata_uri).*/
+ uint32_t peripherals_metadata_file_crc; /*<  CRC32 of peripherals metadata file (peripherals_metadata_uri).*/
+ char general_metadata_uri[100]; /*<  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.*/
+ char peripherals_metadata_uri[100]; /*<  (Optional) MAVLink FTP URI for the peripherals metadata file (COMP_METADATA_TYPE_PERIPHERALS), which may be compressed with xz. This contains data about "attached components" such as UAVCAN nodes. The peripherals are in a separate file because the information must be generated dynamically at runtime. The string needs to be zero terminated.*/
+} mavlink_component_information_t;
+
+#define MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN 212
+#define MAVLINK_MSG_ID_COMPONENT_INFORMATION_MIN_LEN 212
+#define MAVLINK_MSG_ID_395_LEN 212
+#define MAVLINK_MSG_ID_395_MIN_LEN 212
+
+#define MAVLINK_MSG_ID_COMPONENT_INFORMATION_CRC 0
+#define MAVLINK_MSG_ID_395_CRC 0
+
+#define MAVLINK_MSG_COMPONENT_INFORMATION_FIELD_GENERAL_METADATA_URI_LEN 100
+#define MAVLINK_MSG_COMPONENT_INFORMATION_FIELD_PERIPHERALS_METADATA_URI_LEN 100
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_COMPONENT_INFORMATION { \
+    395, \
+    "COMPONENT_INFORMATION", \
+    5, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_component_information_t, time_boot_ms) }, \
+         { "general_metadata_file_crc", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_component_information_t, general_metadata_file_crc) }, \
+         { "general_metadata_uri", NULL, MAVLINK_TYPE_CHAR, 100, 12, offsetof(mavlink_component_information_t, general_metadata_uri) }, \
+         { "peripherals_metadata_file_crc", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_component_information_t, peripherals_metadata_file_crc) }, \
+         { "peripherals_metadata_uri", NULL, MAVLINK_TYPE_CHAR, 100, 112, offsetof(mavlink_component_information_t, peripherals_metadata_uri) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_COMPONENT_INFORMATION { \
+    "COMPONENT_INFORMATION", \
+    5, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_component_information_t, time_boot_ms) }, \
+         { "general_metadata_file_crc", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_component_information_t, general_metadata_file_crc) }, \
+         { "general_metadata_uri", NULL, MAVLINK_TYPE_CHAR, 100, 12, offsetof(mavlink_component_information_t, general_metadata_uri) }, \
+         { "peripherals_metadata_file_crc", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_component_information_t, peripherals_metadata_file_crc) }, \
+         { "peripherals_metadata_uri", NULL, MAVLINK_TYPE_CHAR, 100, 112, offsetof(mavlink_component_information_t, peripherals_metadata_uri) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a component_information message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param general_metadata_file_crc  CRC32 of the general metadata file (general_metadata_uri).
+ * @param general_metadata_uri  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.
+ * @param peripherals_metadata_file_crc  CRC32 of peripherals metadata file (peripherals_metadata_uri).
+ * @param peripherals_metadata_uri  (Optional) MAVLink FTP URI for the peripherals metadata file (COMP_METADATA_TYPE_PERIPHERALS), which may be compressed with xz. This contains data about "attached components" such as UAVCAN nodes. The peripherals are in a separate file because the information must be generated dynamically at runtime. The string needs to be zero terminated.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_component_information_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint32_t general_metadata_file_crc, const char *general_metadata_uri, uint32_t peripherals_metadata_file_crc, const char *peripherals_metadata_uri)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, general_metadata_file_crc);
+    _mav_put_uint32_t(buf, 8, peripherals_metadata_file_crc);
+    _mav_put_char_array(buf, 12, general_metadata_uri, 100);
+    _mav_put_char_array(buf, 112, peripherals_metadata_uri, 100);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN);
+#else
+    mavlink_component_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.general_metadata_file_crc = general_metadata_file_crc;
+    packet.peripherals_metadata_file_crc = peripherals_metadata_file_crc;
+    mav_array_memcpy(packet.general_metadata_uri, general_metadata_uri, sizeof(char)*100);
+    mav_array_memcpy(packet.peripherals_metadata_uri, peripherals_metadata_uri, sizeof(char)*100);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMPONENT_INFORMATION;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_COMPONENT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_CRC);
+}
+
+/**
+ * @brief Pack a component_information message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param general_metadata_file_crc  CRC32 of the general metadata file (general_metadata_uri).
+ * @param general_metadata_uri  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.
+ * @param peripherals_metadata_file_crc  CRC32 of peripherals metadata file (peripherals_metadata_uri).
+ * @param peripherals_metadata_uri  (Optional) MAVLink FTP URI for the peripherals metadata file (COMP_METADATA_TYPE_PERIPHERALS), which may be compressed with xz. This contains data about "attached components" such as UAVCAN nodes. The peripherals are in a separate file because the information must be generated dynamically at runtime. The string needs to be zero terminated.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_component_information_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint32_t general_metadata_file_crc,const char *general_metadata_uri,uint32_t peripherals_metadata_file_crc,const char *peripherals_metadata_uri)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, general_metadata_file_crc);
+    _mav_put_uint32_t(buf, 8, peripherals_metadata_file_crc);
+    _mav_put_char_array(buf, 12, general_metadata_uri, 100);
+    _mav_put_char_array(buf, 112, peripherals_metadata_uri, 100);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN);
+#else
+    mavlink_component_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.general_metadata_file_crc = general_metadata_file_crc;
+    packet.peripherals_metadata_file_crc = peripherals_metadata_file_crc;
+    mav_array_memcpy(packet.general_metadata_uri, general_metadata_uri, sizeof(char)*100);
+    mav_array_memcpy(packet.peripherals_metadata_uri, peripherals_metadata_uri, sizeof(char)*100);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMPONENT_INFORMATION;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_COMPONENT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_CRC);
+}
+
+/**
+ * @brief Encode a component_information struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param component_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_component_information_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_component_information_t* component_information)
+{
+    return mavlink_msg_component_information_pack(system_id, component_id, msg, component_information->time_boot_ms, component_information->general_metadata_file_crc, component_information->general_metadata_uri, component_information->peripherals_metadata_file_crc, component_information->peripherals_metadata_uri);
+}
+
+/**
+ * @brief Encode a component_information struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param component_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_component_information_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_component_information_t* component_information)
+{
+    return mavlink_msg_component_information_pack_chan(system_id, component_id, chan, msg, component_information->time_boot_ms, component_information->general_metadata_file_crc, component_information->general_metadata_uri, component_information->peripherals_metadata_file_crc, component_information->peripherals_metadata_uri);
+}
+
+/**
+ * @brief Send a component_information message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param general_metadata_file_crc  CRC32 of the general metadata file (general_metadata_uri).
+ * @param general_metadata_uri  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.
+ * @param peripherals_metadata_file_crc  CRC32 of peripherals metadata file (peripherals_metadata_uri).
+ * @param peripherals_metadata_uri  (Optional) MAVLink FTP URI for the peripherals metadata file (COMP_METADATA_TYPE_PERIPHERALS), which may be compressed with xz. This contains data about "attached components" such as UAVCAN nodes. The peripherals are in a separate file because the information must be generated dynamically at runtime. The string needs to be zero terminated.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_component_information_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint32_t general_metadata_file_crc, const char *general_metadata_uri, uint32_t peripherals_metadata_file_crc, const char *peripherals_metadata_uri)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, general_metadata_file_crc);
+    _mav_put_uint32_t(buf, 8, peripherals_metadata_file_crc);
+    _mav_put_char_array(buf, 12, general_metadata_uri, 100);
+    _mav_put_char_array(buf, 112, peripherals_metadata_uri, 100);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_INFORMATION, buf, MAVLINK_MSG_ID_COMPONENT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_CRC);
+#else
+    mavlink_component_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.general_metadata_file_crc = general_metadata_file_crc;
+    packet.peripherals_metadata_file_crc = peripherals_metadata_file_crc;
+    mav_array_memcpy(packet.general_metadata_uri, general_metadata_uri, sizeof(char)*100);
+    mav_array_memcpy(packet.peripherals_metadata_uri, peripherals_metadata_uri, sizeof(char)*100);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_INFORMATION, (const char *)&packet, MAVLINK_MSG_ID_COMPONENT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_CRC);
+#endif
+}
+
+/**
+ * @brief Send a component_information message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_component_information_send_struct(mavlink_channel_t chan, const mavlink_component_information_t* component_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_component_information_send(chan, component_information->time_boot_ms, component_information->general_metadata_file_crc, component_information->general_metadata_uri, component_information->peripherals_metadata_file_crc, component_information->peripherals_metadata_uri);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_INFORMATION, (const char *)component_information, MAVLINK_MSG_ID_COMPONENT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_component_information_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint32_t general_metadata_file_crc, const char *general_metadata_uri, uint32_t peripherals_metadata_file_crc, const char *peripherals_metadata_uri)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, general_metadata_file_crc);
+    _mav_put_uint32_t(buf, 8, peripherals_metadata_file_crc);
+    _mav_put_char_array(buf, 12, general_metadata_uri, 100);
+    _mav_put_char_array(buf, 112, peripherals_metadata_uri, 100);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_INFORMATION, buf, MAVLINK_MSG_ID_COMPONENT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_CRC);
+#else
+    mavlink_component_information_t *packet = (mavlink_component_information_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->general_metadata_file_crc = general_metadata_file_crc;
+    packet->peripherals_metadata_file_crc = peripherals_metadata_file_crc;
+    mav_array_memcpy(packet->general_metadata_uri, general_metadata_uri, sizeof(char)*100);
+    mav_array_memcpy(packet->peripherals_metadata_uri, peripherals_metadata_uri, sizeof(char)*100);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_INFORMATION, (const char *)packet, MAVLINK_MSG_ID_COMPONENT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN, MAVLINK_MSG_ID_COMPONENT_INFORMATION_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE COMPONENT_INFORMATION UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from component_information message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_component_information_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field general_metadata_file_crc from component_information message
+ *
+ * @return  CRC32 of the general metadata file (general_metadata_uri).
+ */
+static inline uint32_t mavlink_msg_component_information_get_general_metadata_file_crc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field general_metadata_uri from component_information message
+ *
+ * @return  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.
+ */
+static inline uint16_t mavlink_msg_component_information_get_general_metadata_uri(const mavlink_message_t* msg, char *general_metadata_uri)
+{
+    return _MAV_RETURN_char_array(msg, general_metadata_uri, 100,  12);
+}
+
+/**
+ * @brief Get field peripherals_metadata_file_crc from component_information message
+ *
+ * @return  CRC32 of peripherals metadata file (peripherals_metadata_uri).
+ */
+static inline uint32_t mavlink_msg_component_information_get_peripherals_metadata_file_crc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  8);
+}
+
+/**
+ * @brief Get field peripherals_metadata_uri from component_information message
+ *
+ * @return  (Optional) MAVLink FTP URI for the peripherals metadata file (COMP_METADATA_TYPE_PERIPHERALS), which may be compressed with xz. This contains data about "attached components" such as UAVCAN nodes. The peripherals are in a separate file because the information must be generated dynamically at runtime. The string needs to be zero terminated.
+ */
+static inline uint16_t mavlink_msg_component_information_get_peripherals_metadata_uri(const mavlink_message_t* msg, char *peripherals_metadata_uri)
+{
+    return _MAV_RETURN_char_array(msg, peripherals_metadata_uri, 100,  112);
+}
+
+/**
+ * @brief Decode a component_information message into a struct
+ *
+ * @param msg The message to decode
+ * @param component_information C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_component_information_decode(const mavlink_message_t* msg, mavlink_component_information_t* component_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    component_information->time_boot_ms = mavlink_msg_component_information_get_time_boot_ms(msg);
+    component_information->general_metadata_file_crc = mavlink_msg_component_information_get_general_metadata_file_crc(msg);
+    component_information->peripherals_metadata_file_crc = mavlink_msg_component_information_get_peripherals_metadata_file_crc(msg);
+    mavlink_msg_component_information_get_general_metadata_uri(msg, component_information->general_metadata_uri);
+    mavlink_msg_component_information_get_peripherals_metadata_uri(msg, component_information->peripherals_metadata_uri);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN? msg->len : MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN;
+        memset(component_information, 0, MAVLINK_MSG_ID_COMPONENT_INFORMATION_LEN);
+    memcpy(component_information, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 255 - 0
v2.0/common/mavlink_msg_component_metadata.h

@@ -0,0 +1,255 @@
+#pragma once
+// MESSAGE COMPONENT_METADATA PACKING
+
+#define MAVLINK_MSG_ID_COMPONENT_METADATA 397
+
+
+typedef struct __mavlink_component_metadata_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint32_t file_crc; /*<  CRC32 of the general metadata file.*/
+ char uri[100]; /*<  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.*/
+} mavlink_component_metadata_t;
+
+#define MAVLINK_MSG_ID_COMPONENT_METADATA_LEN 108
+#define MAVLINK_MSG_ID_COMPONENT_METADATA_MIN_LEN 108
+#define MAVLINK_MSG_ID_397_LEN 108
+#define MAVLINK_MSG_ID_397_MIN_LEN 108
+
+#define MAVLINK_MSG_ID_COMPONENT_METADATA_CRC 182
+#define MAVLINK_MSG_ID_397_CRC 182
+
+#define MAVLINK_MSG_COMPONENT_METADATA_FIELD_URI_LEN 100
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_COMPONENT_METADATA { \
+    397, \
+    "COMPONENT_METADATA", \
+    3, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_component_metadata_t, time_boot_ms) }, \
+         { "file_crc", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_component_metadata_t, file_crc) }, \
+         { "uri", NULL, MAVLINK_TYPE_CHAR, 100, 8, offsetof(mavlink_component_metadata_t, uri) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_COMPONENT_METADATA { \
+    "COMPONENT_METADATA", \
+    3, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_component_metadata_t, time_boot_ms) }, \
+         { "file_crc", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_component_metadata_t, file_crc) }, \
+         { "uri", NULL, MAVLINK_TYPE_CHAR, 100, 8, offsetof(mavlink_component_metadata_t, uri) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a component_metadata message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param file_crc  CRC32 of the general metadata file.
+ * @param uri  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_component_metadata_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint32_t file_crc, const char *uri)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMPONENT_METADATA_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, file_crc);
+    _mav_put_char_array(buf, 8, uri, 100);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN);
+#else
+    mavlink_component_metadata_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.file_crc = file_crc;
+    mav_array_memcpy(packet.uri, uri, sizeof(char)*100);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMPONENT_METADATA;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_COMPONENT_METADATA_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_CRC);
+}
+
+/**
+ * @brief Pack a component_metadata message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param file_crc  CRC32 of the general metadata file.
+ * @param uri  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_component_metadata_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint32_t file_crc,const char *uri)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMPONENT_METADATA_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, file_crc);
+    _mav_put_char_array(buf, 8, uri, 100);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN);
+#else
+    mavlink_component_metadata_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.file_crc = file_crc;
+    mav_array_memcpy(packet.uri, uri, sizeof(char)*100);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_COMPONENT_METADATA;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_COMPONENT_METADATA_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_CRC);
+}
+
+/**
+ * @brief Encode a component_metadata struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param component_metadata C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_component_metadata_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_component_metadata_t* component_metadata)
+{
+    return mavlink_msg_component_metadata_pack(system_id, component_id, msg, component_metadata->time_boot_ms, component_metadata->file_crc, component_metadata->uri);
+}
+
+/**
+ * @brief Encode a component_metadata struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param component_metadata C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_component_metadata_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_component_metadata_t* component_metadata)
+{
+    return mavlink_msg_component_metadata_pack_chan(system_id, component_id, chan, msg, component_metadata->time_boot_ms, component_metadata->file_crc, component_metadata->uri);
+}
+
+/**
+ * @brief Send a component_metadata message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param file_crc  CRC32 of the general metadata file.
+ * @param uri  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_component_metadata_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint32_t file_crc, const char *uri)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_COMPONENT_METADATA_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, file_crc);
+    _mav_put_char_array(buf, 8, uri, 100);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_METADATA, buf, MAVLINK_MSG_ID_COMPONENT_METADATA_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_CRC);
+#else
+    mavlink_component_metadata_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.file_crc = file_crc;
+    mav_array_memcpy(packet.uri, uri, sizeof(char)*100);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_METADATA, (const char *)&packet, MAVLINK_MSG_ID_COMPONENT_METADATA_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_CRC);
+#endif
+}
+
+/**
+ * @brief Send a component_metadata message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_component_metadata_send_struct(mavlink_channel_t chan, const mavlink_component_metadata_t* component_metadata)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_component_metadata_send(chan, component_metadata->time_boot_ms, component_metadata->file_crc, component_metadata->uri);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_METADATA, (const char *)component_metadata, MAVLINK_MSG_ID_COMPONENT_METADATA_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_COMPONENT_METADATA_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_component_metadata_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint32_t file_crc, const char *uri)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, file_crc);
+    _mav_put_char_array(buf, 8, uri, 100);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_METADATA, buf, MAVLINK_MSG_ID_COMPONENT_METADATA_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_CRC);
+#else
+    mavlink_component_metadata_t *packet = (mavlink_component_metadata_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->file_crc = file_crc;
+    mav_array_memcpy(packet->uri, uri, sizeof(char)*100);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_COMPONENT_METADATA, (const char *)packet, MAVLINK_MSG_ID_COMPONENT_METADATA_MIN_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN, MAVLINK_MSG_ID_COMPONENT_METADATA_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE COMPONENT_METADATA UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from component_metadata message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_component_metadata_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field file_crc from component_metadata message
+ *
+ * @return  CRC32 of the general metadata file.
+ */
+static inline uint32_t mavlink_msg_component_metadata_get_file_crc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field uri from component_metadata message
+ *
+ * @return  MAVLink FTP URI for the general metadata file (COMP_METADATA_TYPE_GENERAL), which may be compressed with xz. The file contains general component metadata, and may contain URI links for additional metadata (see COMP_METADATA_TYPE). The information is static from boot, and may be generated at compile time. The string needs to be zero terminated.
+ */
+static inline uint16_t mavlink_msg_component_metadata_get_uri(const mavlink_message_t* msg, char *uri)
+{
+    return _MAV_RETURN_char_array(msg, uri, 100,  8);
+}
+
+/**
+ * @brief Decode a component_metadata message into a struct
+ *
+ * @param msg The message to decode
+ * @param component_metadata C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_component_metadata_decode(const mavlink_message_t* msg, mavlink_component_metadata_t* component_metadata)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    component_metadata->time_boot_ms = mavlink_msg_component_metadata_get_time_boot_ms(msg);
+    component_metadata->file_crc = mavlink_msg_component_metadata_get_file_crc(msg);
+    mavlink_msg_component_metadata_get_uri(msg, component_metadata->uri);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_COMPONENT_METADATA_LEN? msg->len : MAVLINK_MSG_ID_COMPONENT_METADATA_LEN;
+        memset(component_metadata, 0, MAVLINK_MSG_ID_COMPONENT_METADATA_LEN);
+    memcpy(component_metadata, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 607 - 0
v2.0/common/mavlink_msg_control_system_state.h

@@ -0,0 +1,607 @@
+#pragma once
+// MESSAGE CONTROL_SYSTEM_STATE PACKING
+
+#define MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE 146
+
+
+typedef struct __mavlink_control_system_state_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float x_acc; /*< [m/s/s] X acceleration in body frame*/
+ float y_acc; /*< [m/s/s] Y acceleration in body frame*/
+ float z_acc; /*< [m/s/s] Z acceleration in body frame*/
+ float x_vel; /*< [m/s] X velocity in body frame*/
+ float y_vel; /*< [m/s] Y velocity in body frame*/
+ float z_vel; /*< [m/s] Z velocity in body frame*/
+ float x_pos; /*< [m] X position in local frame*/
+ float y_pos; /*< [m] Y position in local frame*/
+ float z_pos; /*< [m] Z position in local frame*/
+ float airspeed; /*< [m/s] Airspeed, set to -1 if unknown*/
+ float vel_variance[3]; /*<  Variance of body velocity estimate*/
+ float pos_variance[3]; /*<  Variance in local position*/
+ float q[4]; /*<  The attitude, represented as Quaternion*/
+ float roll_rate; /*< [rad/s] Angular rate in roll axis*/
+ float pitch_rate; /*< [rad/s] Angular rate in pitch axis*/
+ float yaw_rate; /*< [rad/s] Angular rate in yaw axis*/
+} mavlink_control_system_state_t;
+
+#define MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN 100
+#define MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_MIN_LEN 100
+#define MAVLINK_MSG_ID_146_LEN 100
+#define MAVLINK_MSG_ID_146_MIN_LEN 100
+
+#define MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_CRC 103
+#define MAVLINK_MSG_ID_146_CRC 103
+
+#define MAVLINK_MSG_CONTROL_SYSTEM_STATE_FIELD_VEL_VARIANCE_LEN 3
+#define MAVLINK_MSG_CONTROL_SYSTEM_STATE_FIELD_POS_VARIANCE_LEN 3
+#define MAVLINK_MSG_CONTROL_SYSTEM_STATE_FIELD_Q_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CONTROL_SYSTEM_STATE { \
+    146, \
+    "CONTROL_SYSTEM_STATE", \
+    17, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_control_system_state_t, time_usec) }, \
+         { "x_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_control_system_state_t, x_acc) }, \
+         { "y_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_control_system_state_t, y_acc) }, \
+         { "z_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_control_system_state_t, z_acc) }, \
+         { "x_vel", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_control_system_state_t, x_vel) }, \
+         { "y_vel", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_control_system_state_t, y_vel) }, \
+         { "z_vel", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_control_system_state_t, z_vel) }, \
+         { "x_pos", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_control_system_state_t, x_pos) }, \
+         { "y_pos", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_control_system_state_t, y_pos) }, \
+         { "z_pos", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_control_system_state_t, z_pos) }, \
+         { "airspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_control_system_state_t, airspeed) }, \
+         { "vel_variance", NULL, MAVLINK_TYPE_FLOAT, 3, 48, offsetof(mavlink_control_system_state_t, vel_variance) }, \
+         { "pos_variance", NULL, MAVLINK_TYPE_FLOAT, 3, 60, offsetof(mavlink_control_system_state_t, pos_variance) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 72, offsetof(mavlink_control_system_state_t, q) }, \
+         { "roll_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 88, offsetof(mavlink_control_system_state_t, roll_rate) }, \
+         { "pitch_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 92, offsetof(mavlink_control_system_state_t, pitch_rate) }, \
+         { "yaw_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 96, offsetof(mavlink_control_system_state_t, yaw_rate) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CONTROL_SYSTEM_STATE { \
+    "CONTROL_SYSTEM_STATE", \
+    17, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_control_system_state_t, time_usec) }, \
+         { "x_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_control_system_state_t, x_acc) }, \
+         { "y_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_control_system_state_t, y_acc) }, \
+         { "z_acc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_control_system_state_t, z_acc) }, \
+         { "x_vel", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_control_system_state_t, x_vel) }, \
+         { "y_vel", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_control_system_state_t, y_vel) }, \
+         { "z_vel", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_control_system_state_t, z_vel) }, \
+         { "x_pos", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_control_system_state_t, x_pos) }, \
+         { "y_pos", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_control_system_state_t, y_pos) }, \
+         { "z_pos", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_control_system_state_t, z_pos) }, \
+         { "airspeed", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_control_system_state_t, airspeed) }, \
+         { "vel_variance", NULL, MAVLINK_TYPE_FLOAT, 3, 48, offsetof(mavlink_control_system_state_t, vel_variance) }, \
+         { "pos_variance", NULL, MAVLINK_TYPE_FLOAT, 3, 60, offsetof(mavlink_control_system_state_t, pos_variance) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 72, offsetof(mavlink_control_system_state_t, q) }, \
+         { "roll_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 88, offsetof(mavlink_control_system_state_t, roll_rate) }, \
+         { "pitch_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 92, offsetof(mavlink_control_system_state_t, pitch_rate) }, \
+         { "yaw_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 96, offsetof(mavlink_control_system_state_t, yaw_rate) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a control_system_state message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param x_acc [m/s/s] X acceleration in body frame
+ * @param y_acc [m/s/s] Y acceleration in body frame
+ * @param z_acc [m/s/s] Z acceleration in body frame
+ * @param x_vel [m/s] X velocity in body frame
+ * @param y_vel [m/s] Y velocity in body frame
+ * @param z_vel [m/s] Z velocity in body frame
+ * @param x_pos [m] X position in local frame
+ * @param y_pos [m] Y position in local frame
+ * @param z_pos [m] Z position in local frame
+ * @param airspeed [m/s] Airspeed, set to -1 if unknown
+ * @param vel_variance  Variance of body velocity estimate
+ * @param pos_variance  Variance in local position
+ * @param q  The attitude, represented as Quaternion
+ * @param roll_rate [rad/s] Angular rate in roll axis
+ * @param pitch_rate [rad/s] Angular rate in pitch axis
+ * @param yaw_rate [rad/s] Angular rate in yaw axis
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_control_system_state_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, float x_acc, float y_acc, float z_acc, float x_vel, float y_vel, float z_vel, float x_pos, float y_pos, float z_pos, float airspeed, const float *vel_variance, const float *pos_variance, const float *q, float roll_rate, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, x_acc);
+    _mav_put_float(buf, 12, y_acc);
+    _mav_put_float(buf, 16, z_acc);
+    _mav_put_float(buf, 20, x_vel);
+    _mav_put_float(buf, 24, y_vel);
+    _mav_put_float(buf, 28, z_vel);
+    _mav_put_float(buf, 32, x_pos);
+    _mav_put_float(buf, 36, y_pos);
+    _mav_put_float(buf, 40, z_pos);
+    _mav_put_float(buf, 44, airspeed);
+    _mav_put_float(buf, 88, roll_rate);
+    _mav_put_float(buf, 92, pitch_rate);
+    _mav_put_float(buf, 96, yaw_rate);
+    _mav_put_float_array(buf, 48, vel_variance, 3);
+    _mav_put_float_array(buf, 60, pos_variance, 3);
+    _mav_put_float_array(buf, 72, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN);
+#else
+    mavlink_control_system_state_t packet;
+    packet.time_usec = time_usec;
+    packet.x_acc = x_acc;
+    packet.y_acc = y_acc;
+    packet.z_acc = z_acc;
+    packet.x_vel = x_vel;
+    packet.y_vel = y_vel;
+    packet.z_vel = z_vel;
+    packet.x_pos = x_pos;
+    packet.y_pos = y_pos;
+    packet.z_pos = z_pos;
+    packet.airspeed = airspeed;
+    packet.roll_rate = roll_rate;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    mav_array_memcpy(packet.vel_variance, vel_variance, sizeof(float)*3);
+    mav_array_memcpy(packet.pos_variance, pos_variance, sizeof(float)*3);
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_MIN_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_CRC);
+}
+
+/**
+ * @brief Pack a control_system_state message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param x_acc [m/s/s] X acceleration in body frame
+ * @param y_acc [m/s/s] Y acceleration in body frame
+ * @param z_acc [m/s/s] Z acceleration in body frame
+ * @param x_vel [m/s] X velocity in body frame
+ * @param y_vel [m/s] Y velocity in body frame
+ * @param z_vel [m/s] Z velocity in body frame
+ * @param x_pos [m] X position in local frame
+ * @param y_pos [m] Y position in local frame
+ * @param z_pos [m] Z position in local frame
+ * @param airspeed [m/s] Airspeed, set to -1 if unknown
+ * @param vel_variance  Variance of body velocity estimate
+ * @param pos_variance  Variance in local position
+ * @param q  The attitude, represented as Quaternion
+ * @param roll_rate [rad/s] Angular rate in roll axis
+ * @param pitch_rate [rad/s] Angular rate in pitch axis
+ * @param yaw_rate [rad/s] Angular rate in yaw axis
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_control_system_state_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,float x_acc,float y_acc,float z_acc,float x_vel,float y_vel,float z_vel,float x_pos,float y_pos,float z_pos,float airspeed,const float *vel_variance,const float *pos_variance,const float *q,float roll_rate,float pitch_rate,float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, x_acc);
+    _mav_put_float(buf, 12, y_acc);
+    _mav_put_float(buf, 16, z_acc);
+    _mav_put_float(buf, 20, x_vel);
+    _mav_put_float(buf, 24, y_vel);
+    _mav_put_float(buf, 28, z_vel);
+    _mav_put_float(buf, 32, x_pos);
+    _mav_put_float(buf, 36, y_pos);
+    _mav_put_float(buf, 40, z_pos);
+    _mav_put_float(buf, 44, airspeed);
+    _mav_put_float(buf, 88, roll_rate);
+    _mav_put_float(buf, 92, pitch_rate);
+    _mav_put_float(buf, 96, yaw_rate);
+    _mav_put_float_array(buf, 48, vel_variance, 3);
+    _mav_put_float_array(buf, 60, pos_variance, 3);
+    _mav_put_float_array(buf, 72, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN);
+#else
+    mavlink_control_system_state_t packet;
+    packet.time_usec = time_usec;
+    packet.x_acc = x_acc;
+    packet.y_acc = y_acc;
+    packet.z_acc = z_acc;
+    packet.x_vel = x_vel;
+    packet.y_vel = y_vel;
+    packet.z_vel = z_vel;
+    packet.x_pos = x_pos;
+    packet.y_pos = y_pos;
+    packet.z_pos = z_pos;
+    packet.airspeed = airspeed;
+    packet.roll_rate = roll_rate;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    mav_array_memcpy(packet.vel_variance, vel_variance, sizeof(float)*3);
+    mav_array_memcpy(packet.pos_variance, pos_variance, sizeof(float)*3);
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_MIN_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_CRC);
+}
+
+/**
+ * @brief Encode a control_system_state struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param control_system_state C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_control_system_state_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_control_system_state_t* control_system_state)
+{
+    return mavlink_msg_control_system_state_pack(system_id, component_id, msg, control_system_state->time_usec, control_system_state->x_acc, control_system_state->y_acc, control_system_state->z_acc, control_system_state->x_vel, control_system_state->y_vel, control_system_state->z_vel, control_system_state->x_pos, control_system_state->y_pos, control_system_state->z_pos, control_system_state->airspeed, control_system_state->vel_variance, control_system_state->pos_variance, control_system_state->q, control_system_state->roll_rate, control_system_state->pitch_rate, control_system_state->yaw_rate);
+}
+
+/**
+ * @brief Encode a control_system_state struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param control_system_state C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_control_system_state_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_control_system_state_t* control_system_state)
+{
+    return mavlink_msg_control_system_state_pack_chan(system_id, component_id, chan, msg, control_system_state->time_usec, control_system_state->x_acc, control_system_state->y_acc, control_system_state->z_acc, control_system_state->x_vel, control_system_state->y_vel, control_system_state->z_vel, control_system_state->x_pos, control_system_state->y_pos, control_system_state->z_pos, control_system_state->airspeed, control_system_state->vel_variance, control_system_state->pos_variance, control_system_state->q, control_system_state->roll_rate, control_system_state->pitch_rate, control_system_state->yaw_rate);
+}
+
+/**
+ * @brief Send a control_system_state message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param x_acc [m/s/s] X acceleration in body frame
+ * @param y_acc [m/s/s] Y acceleration in body frame
+ * @param z_acc [m/s/s] Z acceleration in body frame
+ * @param x_vel [m/s] X velocity in body frame
+ * @param y_vel [m/s] Y velocity in body frame
+ * @param z_vel [m/s] Z velocity in body frame
+ * @param x_pos [m] X position in local frame
+ * @param y_pos [m] Y position in local frame
+ * @param z_pos [m] Z position in local frame
+ * @param airspeed [m/s] Airspeed, set to -1 if unknown
+ * @param vel_variance  Variance of body velocity estimate
+ * @param pos_variance  Variance in local position
+ * @param q  The attitude, represented as Quaternion
+ * @param roll_rate [rad/s] Angular rate in roll axis
+ * @param pitch_rate [rad/s] Angular rate in pitch axis
+ * @param yaw_rate [rad/s] Angular rate in yaw axis
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_control_system_state_send(mavlink_channel_t chan, uint64_t time_usec, float x_acc, float y_acc, float z_acc, float x_vel, float y_vel, float z_vel, float x_pos, float y_pos, float z_pos, float airspeed, const float *vel_variance, const float *pos_variance, const float *q, float roll_rate, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, x_acc);
+    _mav_put_float(buf, 12, y_acc);
+    _mav_put_float(buf, 16, z_acc);
+    _mav_put_float(buf, 20, x_vel);
+    _mav_put_float(buf, 24, y_vel);
+    _mav_put_float(buf, 28, z_vel);
+    _mav_put_float(buf, 32, x_pos);
+    _mav_put_float(buf, 36, y_pos);
+    _mav_put_float(buf, 40, z_pos);
+    _mav_put_float(buf, 44, airspeed);
+    _mav_put_float(buf, 88, roll_rate);
+    _mav_put_float(buf, 92, pitch_rate);
+    _mav_put_float(buf, 96, yaw_rate);
+    _mav_put_float_array(buf, 48, vel_variance, 3);
+    _mav_put_float_array(buf, 60, pos_variance, 3);
+    _mav_put_float_array(buf, 72, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE, buf, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_MIN_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_CRC);
+#else
+    mavlink_control_system_state_t packet;
+    packet.time_usec = time_usec;
+    packet.x_acc = x_acc;
+    packet.y_acc = y_acc;
+    packet.z_acc = z_acc;
+    packet.x_vel = x_vel;
+    packet.y_vel = y_vel;
+    packet.z_vel = z_vel;
+    packet.x_pos = x_pos;
+    packet.y_pos = y_pos;
+    packet.z_pos = z_pos;
+    packet.airspeed = airspeed;
+    packet.roll_rate = roll_rate;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    mav_array_memcpy(packet.vel_variance, vel_variance, sizeof(float)*3);
+    mav_array_memcpy(packet.pos_variance, pos_variance, sizeof(float)*3);
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE, (const char *)&packet, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_MIN_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a control_system_state message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_control_system_state_send_struct(mavlink_channel_t chan, const mavlink_control_system_state_t* control_system_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_control_system_state_send(chan, control_system_state->time_usec, control_system_state->x_acc, control_system_state->y_acc, control_system_state->z_acc, control_system_state->x_vel, control_system_state->y_vel, control_system_state->z_vel, control_system_state->x_pos, control_system_state->y_pos, control_system_state->z_pos, control_system_state->airspeed, control_system_state->vel_variance, control_system_state->pos_variance, control_system_state->q, control_system_state->roll_rate, control_system_state->pitch_rate, control_system_state->yaw_rate);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE, (const char *)control_system_state, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_MIN_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_control_system_state_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, float x_acc, float y_acc, float z_acc, float x_vel, float y_vel, float z_vel, float x_pos, float y_pos, float z_pos, float airspeed, const float *vel_variance, const float *pos_variance, const float *q, float roll_rate, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, x_acc);
+    _mav_put_float(buf, 12, y_acc);
+    _mav_put_float(buf, 16, z_acc);
+    _mav_put_float(buf, 20, x_vel);
+    _mav_put_float(buf, 24, y_vel);
+    _mav_put_float(buf, 28, z_vel);
+    _mav_put_float(buf, 32, x_pos);
+    _mav_put_float(buf, 36, y_pos);
+    _mav_put_float(buf, 40, z_pos);
+    _mav_put_float(buf, 44, airspeed);
+    _mav_put_float(buf, 88, roll_rate);
+    _mav_put_float(buf, 92, pitch_rate);
+    _mav_put_float(buf, 96, yaw_rate);
+    _mav_put_float_array(buf, 48, vel_variance, 3);
+    _mav_put_float_array(buf, 60, pos_variance, 3);
+    _mav_put_float_array(buf, 72, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE, buf, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_MIN_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_CRC);
+#else
+    mavlink_control_system_state_t *packet = (mavlink_control_system_state_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->x_acc = x_acc;
+    packet->y_acc = y_acc;
+    packet->z_acc = z_acc;
+    packet->x_vel = x_vel;
+    packet->y_vel = y_vel;
+    packet->z_vel = z_vel;
+    packet->x_pos = x_pos;
+    packet->y_pos = y_pos;
+    packet->z_pos = z_pos;
+    packet->airspeed = airspeed;
+    packet->roll_rate = roll_rate;
+    packet->pitch_rate = pitch_rate;
+    packet->yaw_rate = yaw_rate;
+    mav_array_memcpy(packet->vel_variance, vel_variance, sizeof(float)*3);
+    mav_array_memcpy(packet->pos_variance, pos_variance, sizeof(float)*3);
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE, (const char *)packet, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_MIN_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CONTROL_SYSTEM_STATE UNPACKING
+
+
+/**
+ * @brief Get field time_usec from control_system_state message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_control_system_state_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field x_acc from control_system_state message
+ *
+ * @return [m/s/s] X acceleration in body frame
+ */
+static inline float mavlink_msg_control_system_state_get_x_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field y_acc from control_system_state message
+ *
+ * @return [m/s/s] Y acceleration in body frame
+ */
+static inline float mavlink_msg_control_system_state_get_y_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field z_acc from control_system_state message
+ *
+ * @return [m/s/s] Z acceleration in body frame
+ */
+static inline float mavlink_msg_control_system_state_get_z_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field x_vel from control_system_state message
+ *
+ * @return [m/s] X velocity in body frame
+ */
+static inline float mavlink_msg_control_system_state_get_x_vel(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field y_vel from control_system_state message
+ *
+ * @return [m/s] Y velocity in body frame
+ */
+static inline float mavlink_msg_control_system_state_get_y_vel(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field z_vel from control_system_state message
+ *
+ * @return [m/s] Z velocity in body frame
+ */
+static inline float mavlink_msg_control_system_state_get_z_vel(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field x_pos from control_system_state message
+ *
+ * @return [m] X position in local frame
+ */
+static inline float mavlink_msg_control_system_state_get_x_pos(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field y_pos from control_system_state message
+ *
+ * @return [m] Y position in local frame
+ */
+static inline float mavlink_msg_control_system_state_get_y_pos(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field z_pos from control_system_state message
+ *
+ * @return [m] Z position in local frame
+ */
+static inline float mavlink_msg_control_system_state_get_z_pos(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  40);
+}
+
+/**
+ * @brief Get field airspeed from control_system_state message
+ *
+ * @return [m/s] Airspeed, set to -1 if unknown
+ */
+static inline float mavlink_msg_control_system_state_get_airspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Get field vel_variance from control_system_state message
+ *
+ * @return  Variance of body velocity estimate
+ */
+static inline uint16_t mavlink_msg_control_system_state_get_vel_variance(const mavlink_message_t* msg, float *vel_variance)
+{
+    return _MAV_RETURN_float_array(msg, vel_variance, 3,  48);
+}
+
+/**
+ * @brief Get field pos_variance from control_system_state message
+ *
+ * @return  Variance in local position
+ */
+static inline uint16_t mavlink_msg_control_system_state_get_pos_variance(const mavlink_message_t* msg, float *pos_variance)
+{
+    return _MAV_RETURN_float_array(msg, pos_variance, 3,  60);
+}
+
+/**
+ * @brief Get field q from control_system_state message
+ *
+ * @return  The attitude, represented as Quaternion
+ */
+static inline uint16_t mavlink_msg_control_system_state_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  72);
+}
+
+/**
+ * @brief Get field roll_rate from control_system_state message
+ *
+ * @return [rad/s] Angular rate in roll axis
+ */
+static inline float mavlink_msg_control_system_state_get_roll_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  88);
+}
+
+/**
+ * @brief Get field pitch_rate from control_system_state message
+ *
+ * @return [rad/s] Angular rate in pitch axis
+ */
+static inline float mavlink_msg_control_system_state_get_pitch_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  92);
+}
+
+/**
+ * @brief Get field yaw_rate from control_system_state message
+ *
+ * @return [rad/s] Angular rate in yaw axis
+ */
+static inline float mavlink_msg_control_system_state_get_yaw_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  96);
+}
+
+/**
+ * @brief Decode a control_system_state message into a struct
+ *
+ * @param msg The message to decode
+ * @param control_system_state C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_control_system_state_decode(const mavlink_message_t* msg, mavlink_control_system_state_t* control_system_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    control_system_state->time_usec = mavlink_msg_control_system_state_get_time_usec(msg);
+    control_system_state->x_acc = mavlink_msg_control_system_state_get_x_acc(msg);
+    control_system_state->y_acc = mavlink_msg_control_system_state_get_y_acc(msg);
+    control_system_state->z_acc = mavlink_msg_control_system_state_get_z_acc(msg);
+    control_system_state->x_vel = mavlink_msg_control_system_state_get_x_vel(msg);
+    control_system_state->y_vel = mavlink_msg_control_system_state_get_y_vel(msg);
+    control_system_state->z_vel = mavlink_msg_control_system_state_get_z_vel(msg);
+    control_system_state->x_pos = mavlink_msg_control_system_state_get_x_pos(msg);
+    control_system_state->y_pos = mavlink_msg_control_system_state_get_y_pos(msg);
+    control_system_state->z_pos = mavlink_msg_control_system_state_get_z_pos(msg);
+    control_system_state->airspeed = mavlink_msg_control_system_state_get_airspeed(msg);
+    mavlink_msg_control_system_state_get_vel_variance(msg, control_system_state->vel_variance);
+    mavlink_msg_control_system_state_get_pos_variance(msg, control_system_state->pos_variance);
+    mavlink_msg_control_system_state_get_q(msg, control_system_state->q);
+    control_system_state->roll_rate = mavlink_msg_control_system_state_get_roll_rate(msg);
+    control_system_state->pitch_rate = mavlink_msg_control_system_state_get_pitch_rate(msg);
+    control_system_state->yaw_rate = mavlink_msg_control_system_state_get_yaw_rate(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN? msg->len : MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN;
+        memset(control_system_state, 0, MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE_LEN);
+    memcpy(control_system_state, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 238 - 0
v2.0/common/mavlink_msg_current_event_sequence.h

@@ -0,0 +1,238 @@
+#pragma once
+// MESSAGE CURRENT_EVENT_SEQUENCE PACKING
+
+#define MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE 411
+
+
+typedef struct __mavlink_current_event_sequence_t {
+ uint16_t sequence; /*<  Sequence number.*/
+ uint8_t flags; /*<  Flag bitset.*/
+} mavlink_current_event_sequence_t;
+
+#define MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN 3
+#define MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_MIN_LEN 3
+#define MAVLINK_MSG_ID_411_LEN 3
+#define MAVLINK_MSG_ID_411_MIN_LEN 3
+
+#define MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_CRC 106
+#define MAVLINK_MSG_ID_411_CRC 106
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_CURRENT_EVENT_SEQUENCE { \
+    411, \
+    "CURRENT_EVENT_SEQUENCE", \
+    2, \
+    {  { "sequence", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_current_event_sequence_t, sequence) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_current_event_sequence_t, flags) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_CURRENT_EVENT_SEQUENCE { \
+    "CURRENT_EVENT_SEQUENCE", \
+    2, \
+    {  { "sequence", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_current_event_sequence_t, sequence) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_current_event_sequence_t, flags) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a current_event_sequence message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param sequence  Sequence number.
+ * @param flags  Flag bitset.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_current_event_sequence_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint16_t sequence, uint8_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN];
+    _mav_put_uint16_t(buf, 0, sequence);
+    _mav_put_uint8_t(buf, 2, flags);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN);
+#else
+    mavlink_current_event_sequence_t packet;
+    packet.sequence = sequence;
+    packet.flags = flags;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_MIN_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_CRC);
+}
+
+/**
+ * @brief Pack a current_event_sequence message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param sequence  Sequence number.
+ * @param flags  Flag bitset.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_current_event_sequence_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint16_t sequence,uint8_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN];
+    _mav_put_uint16_t(buf, 0, sequence);
+    _mav_put_uint8_t(buf, 2, flags);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN);
+#else
+    mavlink_current_event_sequence_t packet;
+    packet.sequence = sequence;
+    packet.flags = flags;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_MIN_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_CRC);
+}
+
+/**
+ * @brief Encode a current_event_sequence struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param current_event_sequence C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_current_event_sequence_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_current_event_sequence_t* current_event_sequence)
+{
+    return mavlink_msg_current_event_sequence_pack(system_id, component_id, msg, current_event_sequence->sequence, current_event_sequence->flags);
+}
+
+/**
+ * @brief Encode a current_event_sequence struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param current_event_sequence C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_current_event_sequence_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_current_event_sequence_t* current_event_sequence)
+{
+    return mavlink_msg_current_event_sequence_pack_chan(system_id, component_id, chan, msg, current_event_sequence->sequence, current_event_sequence->flags);
+}
+
+/**
+ * @brief Send a current_event_sequence message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param sequence  Sequence number.
+ * @param flags  Flag bitset.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_current_event_sequence_send(mavlink_channel_t chan, uint16_t sequence, uint8_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN];
+    _mav_put_uint16_t(buf, 0, sequence);
+    _mav_put_uint8_t(buf, 2, flags);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE, buf, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_MIN_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_CRC);
+#else
+    mavlink_current_event_sequence_t packet;
+    packet.sequence = sequence;
+    packet.flags = flags;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE, (const char *)&packet, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_MIN_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a current_event_sequence message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_current_event_sequence_send_struct(mavlink_channel_t chan, const mavlink_current_event_sequence_t* current_event_sequence)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_current_event_sequence_send(chan, current_event_sequence->sequence, current_event_sequence->flags);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE, (const char *)current_event_sequence, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_MIN_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_current_event_sequence_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint16_t sequence, uint8_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint16_t(buf, 0, sequence);
+    _mav_put_uint8_t(buf, 2, flags);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE, buf, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_MIN_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_CRC);
+#else
+    mavlink_current_event_sequence_t *packet = (mavlink_current_event_sequence_t *)msgbuf;
+    packet->sequence = sequence;
+    packet->flags = flags;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE, (const char *)packet, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_MIN_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE CURRENT_EVENT_SEQUENCE UNPACKING
+
+
+/**
+ * @brief Get field sequence from current_event_sequence message
+ *
+ * @return  Sequence number.
+ */
+static inline uint16_t mavlink_msg_current_event_sequence_get_sequence(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  0);
+}
+
+/**
+ * @brief Get field flags from current_event_sequence message
+ *
+ * @return  Flag bitset.
+ */
+static inline uint8_t mavlink_msg_current_event_sequence_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  2);
+}
+
+/**
+ * @brief Decode a current_event_sequence message into a struct
+ *
+ * @param msg The message to decode
+ * @param current_event_sequence C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_current_event_sequence_decode(const mavlink_message_t* msg, mavlink_current_event_sequence_t* current_event_sequence)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    current_event_sequence->sequence = mavlink_msg_current_event_sequence_get_sequence(msg);
+    current_event_sequence->flags = mavlink_msg_current_event_sequence_get_flags(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN? msg->len : MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN;
+        memset(current_event_sequence, 0, MAVLINK_MSG_ID_CURRENT_EVENT_SEQUENCE_LEN);
+    memcpy(current_event_sequence, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 263 - 0
v2.0/common/mavlink_msg_data_stream.h

@@ -0,0 +1,263 @@
+#pragma once
+// MESSAGE DATA_STREAM PACKING
+
+#define MAVLINK_MSG_ID_DATA_STREAM 67
+
+
+typedef struct __mavlink_data_stream_t {
+ uint16_t message_rate; /*< [Hz] The message rate*/
+ uint8_t stream_id; /*<  The ID of the requested data stream*/
+ uint8_t on_off; /*<  1 stream is enabled, 0 stream is stopped.*/
+} mavlink_data_stream_t;
+
+#define MAVLINK_MSG_ID_DATA_STREAM_LEN 4
+#define MAVLINK_MSG_ID_DATA_STREAM_MIN_LEN 4
+#define MAVLINK_MSG_ID_67_LEN 4
+#define MAVLINK_MSG_ID_67_MIN_LEN 4
+
+#define MAVLINK_MSG_ID_DATA_STREAM_CRC 21
+#define MAVLINK_MSG_ID_67_CRC 21
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_DATA_STREAM { \
+    67, \
+    "DATA_STREAM", \
+    3, \
+    {  { "stream_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_data_stream_t, stream_id) }, \
+         { "message_rate", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_data_stream_t, message_rate) }, \
+         { "on_off", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_data_stream_t, on_off) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_DATA_STREAM { \
+    "DATA_STREAM", \
+    3, \
+    {  { "stream_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_data_stream_t, stream_id) }, \
+         { "message_rate", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_data_stream_t, message_rate) }, \
+         { "on_off", NULL, MAVLINK_TYPE_UINT8_T, 0, 3, offsetof(mavlink_data_stream_t, on_off) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a data_stream message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param stream_id  The ID of the requested data stream
+ * @param message_rate [Hz] The message rate
+ * @param on_off  1 stream is enabled, 0 stream is stopped.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_data_stream_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t stream_id, uint16_t message_rate, uint8_t on_off)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DATA_STREAM_LEN];
+    _mav_put_uint16_t(buf, 0, message_rate);
+    _mav_put_uint8_t(buf, 2, stream_id);
+    _mav_put_uint8_t(buf, 3, on_off);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DATA_STREAM_LEN);
+#else
+    mavlink_data_stream_t packet;
+    packet.message_rate = message_rate;
+    packet.stream_id = stream_id;
+    packet.on_off = on_off;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DATA_STREAM_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DATA_STREAM;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_DATA_STREAM_MIN_LEN, MAVLINK_MSG_ID_DATA_STREAM_LEN, MAVLINK_MSG_ID_DATA_STREAM_CRC);
+}
+
+/**
+ * @brief Pack a data_stream message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param stream_id  The ID of the requested data stream
+ * @param message_rate [Hz] The message rate
+ * @param on_off  1 stream is enabled, 0 stream is stopped.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_data_stream_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t stream_id,uint16_t message_rate,uint8_t on_off)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DATA_STREAM_LEN];
+    _mav_put_uint16_t(buf, 0, message_rate);
+    _mav_put_uint8_t(buf, 2, stream_id);
+    _mav_put_uint8_t(buf, 3, on_off);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DATA_STREAM_LEN);
+#else
+    mavlink_data_stream_t packet;
+    packet.message_rate = message_rate;
+    packet.stream_id = stream_id;
+    packet.on_off = on_off;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DATA_STREAM_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DATA_STREAM;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_DATA_STREAM_MIN_LEN, MAVLINK_MSG_ID_DATA_STREAM_LEN, MAVLINK_MSG_ID_DATA_STREAM_CRC);
+}
+
+/**
+ * @brief Encode a data_stream struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param data_stream C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_data_stream_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_data_stream_t* data_stream)
+{
+    return mavlink_msg_data_stream_pack(system_id, component_id, msg, data_stream->stream_id, data_stream->message_rate, data_stream->on_off);
+}
+
+/**
+ * @brief Encode a data_stream struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param data_stream C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_data_stream_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_data_stream_t* data_stream)
+{
+    return mavlink_msg_data_stream_pack_chan(system_id, component_id, chan, msg, data_stream->stream_id, data_stream->message_rate, data_stream->on_off);
+}
+
+/**
+ * @brief Send a data_stream message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param stream_id  The ID of the requested data stream
+ * @param message_rate [Hz] The message rate
+ * @param on_off  1 stream is enabled, 0 stream is stopped.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_data_stream_send(mavlink_channel_t chan, uint8_t stream_id, uint16_t message_rate, uint8_t on_off)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DATA_STREAM_LEN];
+    _mav_put_uint16_t(buf, 0, message_rate);
+    _mav_put_uint8_t(buf, 2, stream_id);
+    _mav_put_uint8_t(buf, 3, on_off);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_STREAM, buf, MAVLINK_MSG_ID_DATA_STREAM_MIN_LEN, MAVLINK_MSG_ID_DATA_STREAM_LEN, MAVLINK_MSG_ID_DATA_STREAM_CRC);
+#else
+    mavlink_data_stream_t packet;
+    packet.message_rate = message_rate;
+    packet.stream_id = stream_id;
+    packet.on_off = on_off;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_STREAM, (const char *)&packet, MAVLINK_MSG_ID_DATA_STREAM_MIN_LEN, MAVLINK_MSG_ID_DATA_STREAM_LEN, MAVLINK_MSG_ID_DATA_STREAM_CRC);
+#endif
+}
+
+/**
+ * @brief Send a data_stream message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_data_stream_send_struct(mavlink_channel_t chan, const mavlink_data_stream_t* data_stream)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_data_stream_send(chan, data_stream->stream_id, data_stream->message_rate, data_stream->on_off);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_STREAM, (const char *)data_stream, MAVLINK_MSG_ID_DATA_STREAM_MIN_LEN, MAVLINK_MSG_ID_DATA_STREAM_LEN, MAVLINK_MSG_ID_DATA_STREAM_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_DATA_STREAM_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_data_stream_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t stream_id, uint16_t message_rate, uint8_t on_off)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint16_t(buf, 0, message_rate);
+    _mav_put_uint8_t(buf, 2, stream_id);
+    _mav_put_uint8_t(buf, 3, on_off);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_STREAM, buf, MAVLINK_MSG_ID_DATA_STREAM_MIN_LEN, MAVLINK_MSG_ID_DATA_STREAM_LEN, MAVLINK_MSG_ID_DATA_STREAM_CRC);
+#else
+    mavlink_data_stream_t *packet = (mavlink_data_stream_t *)msgbuf;
+    packet->message_rate = message_rate;
+    packet->stream_id = stream_id;
+    packet->on_off = on_off;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_STREAM, (const char *)packet, MAVLINK_MSG_ID_DATA_STREAM_MIN_LEN, MAVLINK_MSG_ID_DATA_STREAM_LEN, MAVLINK_MSG_ID_DATA_STREAM_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE DATA_STREAM UNPACKING
+
+
+/**
+ * @brief Get field stream_id from data_stream message
+ *
+ * @return  The ID of the requested data stream
+ */
+static inline uint8_t mavlink_msg_data_stream_get_stream_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  2);
+}
+
+/**
+ * @brief Get field message_rate from data_stream message
+ *
+ * @return [Hz] The message rate
+ */
+static inline uint16_t mavlink_msg_data_stream_get_message_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  0);
+}
+
+/**
+ * @brief Get field on_off from data_stream message
+ *
+ * @return  1 stream is enabled, 0 stream is stopped.
+ */
+static inline uint8_t mavlink_msg_data_stream_get_on_off(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  3);
+}
+
+/**
+ * @brief Decode a data_stream message into a struct
+ *
+ * @param msg The message to decode
+ * @param data_stream C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_data_stream_decode(const mavlink_message_t* msg, mavlink_data_stream_t* data_stream)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    data_stream->message_rate = mavlink_msg_data_stream_get_message_rate(msg);
+    data_stream->stream_id = mavlink_msg_data_stream_get_stream_id(msg);
+    data_stream->on_off = mavlink_msg_data_stream_get_on_off(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_DATA_STREAM_LEN? msg->len : MAVLINK_MSG_ID_DATA_STREAM_LEN;
+        memset(data_stream, 0, MAVLINK_MSG_ID_DATA_STREAM_LEN);
+    memcpy(data_stream, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 363 - 0
v2.0/common/mavlink_msg_data_transmission_handshake.h

@@ -0,0 +1,363 @@
+#pragma once
+// MESSAGE DATA_TRANSMISSION_HANDSHAKE PACKING
+
+#define MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE 130
+
+
+typedef struct __mavlink_data_transmission_handshake_t {
+ uint32_t size; /*< [bytes] total data size (set on ACK only).*/
+ uint16_t width; /*<  Width of a matrix or image.*/
+ uint16_t height; /*<  Height of a matrix or image.*/
+ uint16_t packets; /*<  Number of packets being sent (set on ACK only).*/
+ uint8_t type; /*<  Type of requested/acknowledged data.*/
+ uint8_t payload; /*< [bytes] Payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only).*/
+ uint8_t jpg_quality; /*< [%] JPEG quality. Values: [1-100].*/
+} mavlink_data_transmission_handshake_t;
+
+#define MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN 13
+#define MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_MIN_LEN 13
+#define MAVLINK_MSG_ID_130_LEN 13
+#define MAVLINK_MSG_ID_130_MIN_LEN 13
+
+#define MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_CRC 29
+#define MAVLINK_MSG_ID_130_CRC 29
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_DATA_TRANSMISSION_HANDSHAKE { \
+    130, \
+    "DATA_TRANSMISSION_HANDSHAKE", \
+    7, \
+    {  { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_data_transmission_handshake_t, type) }, \
+         { "size", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_data_transmission_handshake_t, size) }, \
+         { "width", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_data_transmission_handshake_t, width) }, \
+         { "height", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_data_transmission_handshake_t, height) }, \
+         { "packets", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_data_transmission_handshake_t, packets) }, \
+         { "payload", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_data_transmission_handshake_t, payload) }, \
+         { "jpg_quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_data_transmission_handshake_t, jpg_quality) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_DATA_TRANSMISSION_HANDSHAKE { \
+    "DATA_TRANSMISSION_HANDSHAKE", \
+    7, \
+    {  { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_data_transmission_handshake_t, type) }, \
+         { "size", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_data_transmission_handshake_t, size) }, \
+         { "width", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_data_transmission_handshake_t, width) }, \
+         { "height", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_data_transmission_handshake_t, height) }, \
+         { "packets", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_data_transmission_handshake_t, packets) }, \
+         { "payload", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_data_transmission_handshake_t, payload) }, \
+         { "jpg_quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_data_transmission_handshake_t, jpg_quality) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a data_transmission_handshake message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param type  Type of requested/acknowledged data.
+ * @param size [bytes] total data size (set on ACK only).
+ * @param width  Width of a matrix or image.
+ * @param height  Height of a matrix or image.
+ * @param packets  Number of packets being sent (set on ACK only).
+ * @param payload [bytes] Payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only).
+ * @param jpg_quality [%] JPEG quality. Values: [1-100].
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_data_transmission_handshake_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t type, uint32_t size, uint16_t width, uint16_t height, uint16_t packets, uint8_t payload, uint8_t jpg_quality)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN];
+    _mav_put_uint32_t(buf, 0, size);
+    _mav_put_uint16_t(buf, 4, width);
+    _mav_put_uint16_t(buf, 6, height);
+    _mav_put_uint16_t(buf, 8, packets);
+    _mav_put_uint8_t(buf, 10, type);
+    _mav_put_uint8_t(buf, 11, payload);
+    _mav_put_uint8_t(buf, 12, jpg_quality);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN);
+#else
+    mavlink_data_transmission_handshake_t packet;
+    packet.size = size;
+    packet.width = width;
+    packet.height = height;
+    packet.packets = packets;
+    packet.type = type;
+    packet.payload = payload;
+    packet.jpg_quality = jpg_quality;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_MIN_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_CRC);
+}
+
+/**
+ * @brief Pack a data_transmission_handshake message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param type  Type of requested/acknowledged data.
+ * @param size [bytes] total data size (set on ACK only).
+ * @param width  Width of a matrix or image.
+ * @param height  Height of a matrix or image.
+ * @param packets  Number of packets being sent (set on ACK only).
+ * @param payload [bytes] Payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only).
+ * @param jpg_quality [%] JPEG quality. Values: [1-100].
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_data_transmission_handshake_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t type,uint32_t size,uint16_t width,uint16_t height,uint16_t packets,uint8_t payload,uint8_t jpg_quality)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN];
+    _mav_put_uint32_t(buf, 0, size);
+    _mav_put_uint16_t(buf, 4, width);
+    _mav_put_uint16_t(buf, 6, height);
+    _mav_put_uint16_t(buf, 8, packets);
+    _mav_put_uint8_t(buf, 10, type);
+    _mav_put_uint8_t(buf, 11, payload);
+    _mav_put_uint8_t(buf, 12, jpg_quality);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN);
+#else
+    mavlink_data_transmission_handshake_t packet;
+    packet.size = size;
+    packet.width = width;
+    packet.height = height;
+    packet.packets = packets;
+    packet.type = type;
+    packet.payload = payload;
+    packet.jpg_quality = jpg_quality;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_MIN_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_CRC);
+}
+
+/**
+ * @brief Encode a data_transmission_handshake struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param data_transmission_handshake C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_data_transmission_handshake_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_data_transmission_handshake_t* data_transmission_handshake)
+{
+    return mavlink_msg_data_transmission_handshake_pack(system_id, component_id, msg, data_transmission_handshake->type, data_transmission_handshake->size, data_transmission_handshake->width, data_transmission_handshake->height, data_transmission_handshake->packets, data_transmission_handshake->payload, data_transmission_handshake->jpg_quality);
+}
+
+/**
+ * @brief Encode a data_transmission_handshake struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param data_transmission_handshake C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_data_transmission_handshake_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_data_transmission_handshake_t* data_transmission_handshake)
+{
+    return mavlink_msg_data_transmission_handshake_pack_chan(system_id, component_id, chan, msg, data_transmission_handshake->type, data_transmission_handshake->size, data_transmission_handshake->width, data_transmission_handshake->height, data_transmission_handshake->packets, data_transmission_handshake->payload, data_transmission_handshake->jpg_quality);
+}
+
+/**
+ * @brief Send a data_transmission_handshake message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param type  Type of requested/acknowledged data.
+ * @param size [bytes] total data size (set on ACK only).
+ * @param width  Width of a matrix or image.
+ * @param height  Height of a matrix or image.
+ * @param packets  Number of packets being sent (set on ACK only).
+ * @param payload [bytes] Payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only).
+ * @param jpg_quality [%] JPEG quality. Values: [1-100].
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_data_transmission_handshake_send(mavlink_channel_t chan, uint8_t type, uint32_t size, uint16_t width, uint16_t height, uint16_t packets, uint8_t payload, uint8_t jpg_quality)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN];
+    _mav_put_uint32_t(buf, 0, size);
+    _mav_put_uint16_t(buf, 4, width);
+    _mav_put_uint16_t(buf, 6, height);
+    _mav_put_uint16_t(buf, 8, packets);
+    _mav_put_uint8_t(buf, 10, type);
+    _mav_put_uint8_t(buf, 11, payload);
+    _mav_put_uint8_t(buf, 12, jpg_quality);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE, buf, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_MIN_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_CRC);
+#else
+    mavlink_data_transmission_handshake_t packet;
+    packet.size = size;
+    packet.width = width;
+    packet.height = height;
+    packet.packets = packets;
+    packet.type = type;
+    packet.payload = payload;
+    packet.jpg_quality = jpg_quality;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE, (const char *)&packet, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_MIN_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a data_transmission_handshake message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_data_transmission_handshake_send_struct(mavlink_channel_t chan, const mavlink_data_transmission_handshake_t* data_transmission_handshake)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_data_transmission_handshake_send(chan, data_transmission_handshake->type, data_transmission_handshake->size, data_transmission_handshake->width, data_transmission_handshake->height, data_transmission_handshake->packets, data_transmission_handshake->payload, data_transmission_handshake->jpg_quality);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE, (const char *)data_transmission_handshake, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_MIN_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_data_transmission_handshake_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t type, uint32_t size, uint16_t width, uint16_t height, uint16_t packets, uint8_t payload, uint8_t jpg_quality)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, size);
+    _mav_put_uint16_t(buf, 4, width);
+    _mav_put_uint16_t(buf, 6, height);
+    _mav_put_uint16_t(buf, 8, packets);
+    _mav_put_uint8_t(buf, 10, type);
+    _mav_put_uint8_t(buf, 11, payload);
+    _mav_put_uint8_t(buf, 12, jpg_quality);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE, buf, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_MIN_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_CRC);
+#else
+    mavlink_data_transmission_handshake_t *packet = (mavlink_data_transmission_handshake_t *)msgbuf;
+    packet->size = size;
+    packet->width = width;
+    packet->height = height;
+    packet->packets = packets;
+    packet->type = type;
+    packet->payload = payload;
+    packet->jpg_quality = jpg_quality;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE, (const char *)packet, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_MIN_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE DATA_TRANSMISSION_HANDSHAKE UNPACKING
+
+
+/**
+ * @brief Get field type from data_transmission_handshake message
+ *
+ * @return  Type of requested/acknowledged data.
+ */
+static inline uint8_t mavlink_msg_data_transmission_handshake_get_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  10);
+}
+
+/**
+ * @brief Get field size from data_transmission_handshake message
+ *
+ * @return [bytes] total data size (set on ACK only).
+ */
+static inline uint32_t mavlink_msg_data_transmission_handshake_get_size(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field width from data_transmission_handshake message
+ *
+ * @return  Width of a matrix or image.
+ */
+static inline uint16_t mavlink_msg_data_transmission_handshake_get_width(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  4);
+}
+
+/**
+ * @brief Get field height from data_transmission_handshake message
+ *
+ * @return  Height of a matrix or image.
+ */
+static inline uint16_t mavlink_msg_data_transmission_handshake_get_height(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  6);
+}
+
+/**
+ * @brief Get field packets from data_transmission_handshake message
+ *
+ * @return  Number of packets being sent (set on ACK only).
+ */
+static inline uint16_t mavlink_msg_data_transmission_handshake_get_packets(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  8);
+}
+
+/**
+ * @brief Get field payload from data_transmission_handshake message
+ *
+ * @return [bytes] Payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only).
+ */
+static inline uint8_t mavlink_msg_data_transmission_handshake_get_payload(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  11);
+}
+
+/**
+ * @brief Get field jpg_quality from data_transmission_handshake message
+ *
+ * @return [%] JPEG quality. Values: [1-100].
+ */
+static inline uint8_t mavlink_msg_data_transmission_handshake_get_jpg_quality(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  12);
+}
+
+/**
+ * @brief Decode a data_transmission_handshake message into a struct
+ *
+ * @param msg The message to decode
+ * @param data_transmission_handshake C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_data_transmission_handshake_decode(const mavlink_message_t* msg, mavlink_data_transmission_handshake_t* data_transmission_handshake)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    data_transmission_handshake->size = mavlink_msg_data_transmission_handshake_get_size(msg);
+    data_transmission_handshake->width = mavlink_msg_data_transmission_handshake_get_width(msg);
+    data_transmission_handshake->height = mavlink_msg_data_transmission_handshake_get_height(msg);
+    data_transmission_handshake->packets = mavlink_msg_data_transmission_handshake_get_packets(msg);
+    data_transmission_handshake->type = mavlink_msg_data_transmission_handshake_get_type(msg);
+    data_transmission_handshake->payload = mavlink_msg_data_transmission_handshake_get_payload(msg);
+    data_transmission_handshake->jpg_quality = mavlink_msg_data_transmission_handshake_get_jpg_quality(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN? msg->len : MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN;
+        memset(data_transmission_handshake, 0, MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE_LEN);
+    memcpy(data_transmission_handshake, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 263 - 0
v2.0/common/mavlink_msg_debug.h

@@ -0,0 +1,263 @@
+#pragma once
+// MESSAGE DEBUG PACKING
+
+#define MAVLINK_MSG_ID_DEBUG 254
+
+
+typedef struct __mavlink_debug_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ float value; /*<  DEBUG value*/
+ uint8_t ind; /*<  index of debug variable*/
+} mavlink_debug_t;
+
+#define MAVLINK_MSG_ID_DEBUG_LEN 9
+#define MAVLINK_MSG_ID_DEBUG_MIN_LEN 9
+#define MAVLINK_MSG_ID_254_LEN 9
+#define MAVLINK_MSG_ID_254_MIN_LEN 9
+
+#define MAVLINK_MSG_ID_DEBUG_CRC 46
+#define MAVLINK_MSG_ID_254_CRC 46
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_DEBUG { \
+    254, \
+    "DEBUG", \
+    3, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_debug_t, time_boot_ms) }, \
+         { "ind", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_debug_t, ind) }, \
+         { "value", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_debug_t, value) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_DEBUG { \
+    "DEBUG", \
+    3, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_debug_t, time_boot_ms) }, \
+         { "ind", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_debug_t, ind) }, \
+         { "value", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_debug_t, value) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a debug message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param ind  index of debug variable
+ * @param value  DEBUG value
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_debug_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint8_t ind, float value)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, value);
+    _mav_put_uint8_t(buf, 8, ind);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEBUG_LEN);
+#else
+    mavlink_debug_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.value = value;
+    packet.ind = ind;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEBUG_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DEBUG;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_DEBUG_MIN_LEN, MAVLINK_MSG_ID_DEBUG_LEN, MAVLINK_MSG_ID_DEBUG_CRC);
+}
+
+/**
+ * @brief Pack a debug message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param ind  index of debug variable
+ * @param value  DEBUG value
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_debug_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint8_t ind,float value)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, value);
+    _mav_put_uint8_t(buf, 8, ind);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEBUG_LEN);
+#else
+    mavlink_debug_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.value = value;
+    packet.ind = ind;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEBUG_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DEBUG;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_DEBUG_MIN_LEN, MAVLINK_MSG_ID_DEBUG_LEN, MAVLINK_MSG_ID_DEBUG_CRC);
+}
+
+/**
+ * @brief Encode a debug struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param debug C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_debug_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_debug_t* debug)
+{
+    return mavlink_msg_debug_pack(system_id, component_id, msg, debug->time_boot_ms, debug->ind, debug->value);
+}
+
+/**
+ * @brief Encode a debug struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param debug C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_debug_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_debug_t* debug)
+{
+    return mavlink_msg_debug_pack_chan(system_id, component_id, chan, msg, debug->time_boot_ms, debug->ind, debug->value);
+}
+
+/**
+ * @brief Send a debug message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param ind  index of debug variable
+ * @param value  DEBUG value
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_debug_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint8_t ind, float value)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, value);
+    _mav_put_uint8_t(buf, 8, ind);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, buf, MAVLINK_MSG_ID_DEBUG_MIN_LEN, MAVLINK_MSG_ID_DEBUG_LEN, MAVLINK_MSG_ID_DEBUG_CRC);
+#else
+    mavlink_debug_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.value = value;
+    packet.ind = ind;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, (const char *)&packet, MAVLINK_MSG_ID_DEBUG_MIN_LEN, MAVLINK_MSG_ID_DEBUG_LEN, MAVLINK_MSG_ID_DEBUG_CRC);
+#endif
+}
+
+/**
+ * @brief Send a debug message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_debug_send_struct(mavlink_channel_t chan, const mavlink_debug_t* debug)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_debug_send(chan, debug->time_boot_ms, debug->ind, debug->value);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, (const char *)debug, MAVLINK_MSG_ID_DEBUG_MIN_LEN, MAVLINK_MSG_ID_DEBUG_LEN, MAVLINK_MSG_ID_DEBUG_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_DEBUG_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_debug_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint8_t ind, float value)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 4, value);
+    _mav_put_uint8_t(buf, 8, ind);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, buf, MAVLINK_MSG_ID_DEBUG_MIN_LEN, MAVLINK_MSG_ID_DEBUG_LEN, MAVLINK_MSG_ID_DEBUG_CRC);
+#else
+    mavlink_debug_t *packet = (mavlink_debug_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->value = value;
+    packet->ind = ind;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG, (const char *)packet, MAVLINK_MSG_ID_DEBUG_MIN_LEN, MAVLINK_MSG_ID_DEBUG_LEN, MAVLINK_MSG_ID_DEBUG_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE DEBUG UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from debug message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_debug_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field ind from debug message
+ *
+ * @return  index of debug variable
+ */
+static inline uint8_t mavlink_msg_debug_get_ind(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  8);
+}
+
+/**
+ * @brief Get field value from debug message
+ *
+ * @return  DEBUG value
+ */
+static inline float mavlink_msg_debug_get_value(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Decode a debug message into a struct
+ *
+ * @param msg The message to decode
+ * @param debug C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_debug_decode(const mavlink_message_t* msg, mavlink_debug_t* debug)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    debug->time_boot_ms = mavlink_msg_debug_get_time_boot_ms(msg);
+    debug->value = mavlink_msg_debug_get_value(msg);
+    debug->ind = mavlink_msg_debug_get_ind(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_DEBUG_LEN? msg->len : MAVLINK_MSG_ID_DEBUG_LEN;
+        memset(debug, 0, MAVLINK_MSG_ID_DEBUG_LEN);
+    memcpy(debug, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 281 - 0
v2.0/common/mavlink_msg_debug_float_array.h

@@ -0,0 +1,281 @@
+#pragma once
+// MESSAGE DEBUG_FLOAT_ARRAY PACKING
+
+#define MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY 350
+
+
+typedef struct __mavlink_debug_float_array_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ uint16_t array_id; /*<  Unique ID used to discriminate between arrays*/
+ char name[10]; /*<  Name, for human-friendly display in a Ground Control Station*/
+ float data[58]; /*<  data*/
+} mavlink_debug_float_array_t;
+
+#define MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN 252
+#define MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_MIN_LEN 20
+#define MAVLINK_MSG_ID_350_LEN 252
+#define MAVLINK_MSG_ID_350_MIN_LEN 20
+
+#define MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_CRC 232
+#define MAVLINK_MSG_ID_350_CRC 232
+
+#define MAVLINK_MSG_DEBUG_FLOAT_ARRAY_FIELD_NAME_LEN 10
+#define MAVLINK_MSG_DEBUG_FLOAT_ARRAY_FIELD_DATA_LEN 58
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_DEBUG_FLOAT_ARRAY { \
+    350, \
+    "DEBUG_FLOAT_ARRAY", \
+    4, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_debug_float_array_t, time_usec) }, \
+         { "name", NULL, MAVLINK_TYPE_CHAR, 10, 10, offsetof(mavlink_debug_float_array_t, name) }, \
+         { "array_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_debug_float_array_t, array_id) }, \
+         { "data", NULL, MAVLINK_TYPE_FLOAT, 58, 20, offsetof(mavlink_debug_float_array_t, data) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_DEBUG_FLOAT_ARRAY { \
+    "DEBUG_FLOAT_ARRAY", \
+    4, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_debug_float_array_t, time_usec) }, \
+         { "name", NULL, MAVLINK_TYPE_CHAR, 10, 10, offsetof(mavlink_debug_float_array_t, name) }, \
+         { "array_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_debug_float_array_t, array_id) }, \
+         { "data", NULL, MAVLINK_TYPE_FLOAT, 58, 20, offsetof(mavlink_debug_float_array_t, data) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a debug_float_array message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param name  Name, for human-friendly display in a Ground Control Station
+ * @param array_id  Unique ID used to discriminate between arrays
+ * @param data  data
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_debug_float_array_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, const char *name, uint16_t array_id, const float *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 8, array_id);
+    _mav_put_char_array(buf, 10, name, 10);
+    _mav_put_float_array(buf, 20, data, 58);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN);
+#else
+    mavlink_debug_float_array_t packet;
+    packet.time_usec = time_usec;
+    packet.array_id = array_id;
+    mav_array_memcpy(packet.name, name, sizeof(char)*10);
+    mav_array_memcpy(packet.data, data, sizeof(float)*58);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_MIN_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_CRC);
+}
+
+/**
+ * @brief Pack a debug_float_array message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param name  Name, for human-friendly display in a Ground Control Station
+ * @param array_id  Unique ID used to discriminate between arrays
+ * @param data  data
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_debug_float_array_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,const char *name,uint16_t array_id,const float *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 8, array_id);
+    _mav_put_char_array(buf, 10, name, 10);
+    _mav_put_float_array(buf, 20, data, 58);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN);
+#else
+    mavlink_debug_float_array_t packet;
+    packet.time_usec = time_usec;
+    packet.array_id = array_id;
+    mav_array_memcpy(packet.name, name, sizeof(char)*10);
+    mav_array_memcpy(packet.data, data, sizeof(float)*58);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_MIN_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_CRC);
+}
+
+/**
+ * @brief Encode a debug_float_array struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param debug_float_array C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_debug_float_array_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_debug_float_array_t* debug_float_array)
+{
+    return mavlink_msg_debug_float_array_pack(system_id, component_id, msg, debug_float_array->time_usec, debug_float_array->name, debug_float_array->array_id, debug_float_array->data);
+}
+
+/**
+ * @brief Encode a debug_float_array struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param debug_float_array C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_debug_float_array_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_debug_float_array_t* debug_float_array)
+{
+    return mavlink_msg_debug_float_array_pack_chan(system_id, component_id, chan, msg, debug_float_array->time_usec, debug_float_array->name, debug_float_array->array_id, debug_float_array->data);
+}
+
+/**
+ * @brief Send a debug_float_array message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param name  Name, for human-friendly display in a Ground Control Station
+ * @param array_id  Unique ID used to discriminate between arrays
+ * @param data  data
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_debug_float_array_send(mavlink_channel_t chan, uint64_t time_usec, const char *name, uint16_t array_id, const float *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 8, array_id);
+    _mav_put_char_array(buf, 10, name, 10);
+    _mav_put_float_array(buf, 20, data, 58);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY, buf, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_MIN_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_CRC);
+#else
+    mavlink_debug_float_array_t packet;
+    packet.time_usec = time_usec;
+    packet.array_id = array_id;
+    mav_array_memcpy(packet.name, name, sizeof(char)*10);
+    mav_array_memcpy(packet.data, data, sizeof(float)*58);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY, (const char *)&packet, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_MIN_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_CRC);
+#endif
+}
+
+/**
+ * @brief Send a debug_float_array message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_debug_float_array_send_struct(mavlink_channel_t chan, const mavlink_debug_float_array_t* debug_float_array)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_debug_float_array_send(chan, debug_float_array->time_usec, debug_float_array->name, debug_float_array->array_id, debug_float_array->data);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY, (const char *)debug_float_array, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_MIN_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_debug_float_array_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, const char *name, uint16_t array_id, const float *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 8, array_id);
+    _mav_put_char_array(buf, 10, name, 10);
+    _mav_put_float_array(buf, 20, data, 58);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY, buf, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_MIN_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_CRC);
+#else
+    mavlink_debug_float_array_t *packet = (mavlink_debug_float_array_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->array_id = array_id;
+    mav_array_memcpy(packet->name, name, sizeof(char)*10);
+    mav_array_memcpy(packet->data, data, sizeof(float)*58);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY, (const char *)packet, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_MIN_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE DEBUG_FLOAT_ARRAY UNPACKING
+
+
+/**
+ * @brief Get field time_usec from debug_float_array message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_debug_float_array_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field name from debug_float_array message
+ *
+ * @return  Name, for human-friendly display in a Ground Control Station
+ */
+static inline uint16_t mavlink_msg_debug_float_array_get_name(const mavlink_message_t* msg, char *name)
+{
+    return _MAV_RETURN_char_array(msg, name, 10,  10);
+}
+
+/**
+ * @brief Get field array_id from debug_float_array message
+ *
+ * @return  Unique ID used to discriminate between arrays
+ */
+static inline uint16_t mavlink_msg_debug_float_array_get_array_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  8);
+}
+
+/**
+ * @brief Get field data from debug_float_array message
+ *
+ * @return  data
+ */
+static inline uint16_t mavlink_msg_debug_float_array_get_data(const mavlink_message_t* msg, float *data)
+{
+    return _MAV_RETURN_float_array(msg, data, 58,  20);
+}
+
+/**
+ * @brief Decode a debug_float_array message into a struct
+ *
+ * @param msg The message to decode
+ * @param debug_float_array C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_debug_float_array_decode(const mavlink_message_t* msg, mavlink_debug_float_array_t* debug_float_array)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    debug_float_array->time_usec = mavlink_msg_debug_float_array_get_time_usec(msg);
+    debug_float_array->array_id = mavlink_msg_debug_float_array_get_array_id(msg);
+    mavlink_msg_debug_float_array_get_name(msg, debug_float_array->name);
+    mavlink_msg_debug_float_array_get_data(msg, debug_float_array->data);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN? msg->len : MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN;
+        memset(debug_float_array, 0, MAVLINK_MSG_ID_DEBUG_FLOAT_ARRAY_LEN);
+    memcpy(debug_float_array, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 305 - 0
v2.0/common/mavlink_msg_debug_vect.h

@@ -0,0 +1,305 @@
+#pragma once
+// MESSAGE DEBUG_VECT PACKING
+
+#define MAVLINK_MSG_ID_DEBUG_VECT 250
+
+
+typedef struct __mavlink_debug_vect_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float x; /*<  x*/
+ float y; /*<  y*/
+ float z; /*<  z*/
+ char name[10]; /*<  Name*/
+} mavlink_debug_vect_t;
+
+#define MAVLINK_MSG_ID_DEBUG_VECT_LEN 30
+#define MAVLINK_MSG_ID_DEBUG_VECT_MIN_LEN 30
+#define MAVLINK_MSG_ID_250_LEN 30
+#define MAVLINK_MSG_ID_250_MIN_LEN 30
+
+#define MAVLINK_MSG_ID_DEBUG_VECT_CRC 49
+#define MAVLINK_MSG_ID_250_CRC 49
+
+#define MAVLINK_MSG_DEBUG_VECT_FIELD_NAME_LEN 10
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_DEBUG_VECT { \
+    250, \
+    "DEBUG_VECT", \
+    5, \
+    {  { "name", NULL, MAVLINK_TYPE_CHAR, 10, 20, offsetof(mavlink_debug_vect_t, name) }, \
+         { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_debug_vect_t, time_usec) }, \
+         { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_debug_vect_t, x) }, \
+         { "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_debug_vect_t, y) }, \
+         { "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_debug_vect_t, z) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_DEBUG_VECT { \
+    "DEBUG_VECT", \
+    5, \
+    {  { "name", NULL, MAVLINK_TYPE_CHAR, 10, 20, offsetof(mavlink_debug_vect_t, name) }, \
+         { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_debug_vect_t, time_usec) }, \
+         { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_debug_vect_t, x) }, \
+         { "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_debug_vect_t, y) }, \
+         { "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_debug_vect_t, z) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a debug_vect message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param name  Name
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param x  x
+ * @param y  y
+ * @param z  z
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_debug_vect_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               const char *name, uint64_t time_usec, float x, float y, float z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_VECT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, x);
+    _mav_put_float(buf, 12, y);
+    _mav_put_float(buf, 16, z);
+    _mav_put_char_array(buf, 20, name, 10);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEBUG_VECT_LEN);
+#else
+    mavlink_debug_vect_t packet;
+    packet.time_usec = time_usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    mav_array_memcpy(packet.name, name, sizeof(char)*10);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEBUG_VECT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DEBUG_VECT;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_DEBUG_VECT_MIN_LEN, MAVLINK_MSG_ID_DEBUG_VECT_LEN, MAVLINK_MSG_ID_DEBUG_VECT_CRC);
+}
+
+/**
+ * @brief Pack a debug_vect message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param name  Name
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param x  x
+ * @param y  y
+ * @param z  z
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_debug_vect_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   const char *name,uint64_t time_usec,float x,float y,float z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_VECT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, x);
+    _mav_put_float(buf, 12, y);
+    _mav_put_float(buf, 16, z);
+    _mav_put_char_array(buf, 20, name, 10);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEBUG_VECT_LEN);
+#else
+    mavlink_debug_vect_t packet;
+    packet.time_usec = time_usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    mav_array_memcpy(packet.name, name, sizeof(char)*10);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEBUG_VECT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DEBUG_VECT;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_DEBUG_VECT_MIN_LEN, MAVLINK_MSG_ID_DEBUG_VECT_LEN, MAVLINK_MSG_ID_DEBUG_VECT_CRC);
+}
+
+/**
+ * @brief Encode a debug_vect struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param debug_vect C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_debug_vect_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_debug_vect_t* debug_vect)
+{
+    return mavlink_msg_debug_vect_pack(system_id, component_id, msg, debug_vect->name, debug_vect->time_usec, debug_vect->x, debug_vect->y, debug_vect->z);
+}
+
+/**
+ * @brief Encode a debug_vect struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param debug_vect C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_debug_vect_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_debug_vect_t* debug_vect)
+{
+    return mavlink_msg_debug_vect_pack_chan(system_id, component_id, chan, msg, debug_vect->name, debug_vect->time_usec, debug_vect->x, debug_vect->y, debug_vect->z);
+}
+
+/**
+ * @brief Send a debug_vect message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param name  Name
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param x  x
+ * @param y  y
+ * @param z  z
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_debug_vect_send(mavlink_channel_t chan, const char *name, uint64_t time_usec, float x, float y, float z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DEBUG_VECT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, x);
+    _mav_put_float(buf, 12, y);
+    _mav_put_float(buf, 16, z);
+    _mav_put_char_array(buf, 20, name, 10);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, buf, MAVLINK_MSG_ID_DEBUG_VECT_MIN_LEN, MAVLINK_MSG_ID_DEBUG_VECT_LEN, MAVLINK_MSG_ID_DEBUG_VECT_CRC);
+#else
+    mavlink_debug_vect_t packet;
+    packet.time_usec = time_usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    mav_array_memcpy(packet.name, name, sizeof(char)*10);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, (const char *)&packet, MAVLINK_MSG_ID_DEBUG_VECT_MIN_LEN, MAVLINK_MSG_ID_DEBUG_VECT_LEN, MAVLINK_MSG_ID_DEBUG_VECT_CRC);
+#endif
+}
+
+/**
+ * @brief Send a debug_vect message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_debug_vect_send_struct(mavlink_channel_t chan, const mavlink_debug_vect_t* debug_vect)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_debug_vect_send(chan, debug_vect->name, debug_vect->time_usec, debug_vect->x, debug_vect->y, debug_vect->z);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, (const char *)debug_vect, MAVLINK_MSG_ID_DEBUG_VECT_MIN_LEN, MAVLINK_MSG_ID_DEBUG_VECT_LEN, MAVLINK_MSG_ID_DEBUG_VECT_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_DEBUG_VECT_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_debug_vect_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  const char *name, uint64_t time_usec, float x, float y, float z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, x);
+    _mav_put_float(buf, 12, y);
+    _mav_put_float(buf, 16, z);
+    _mav_put_char_array(buf, 20, name, 10);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, buf, MAVLINK_MSG_ID_DEBUG_VECT_MIN_LEN, MAVLINK_MSG_ID_DEBUG_VECT_LEN, MAVLINK_MSG_ID_DEBUG_VECT_CRC);
+#else
+    mavlink_debug_vect_t *packet = (mavlink_debug_vect_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->x = x;
+    packet->y = y;
+    packet->z = z;
+    mav_array_memcpy(packet->name, name, sizeof(char)*10);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEBUG_VECT, (const char *)packet, MAVLINK_MSG_ID_DEBUG_VECT_MIN_LEN, MAVLINK_MSG_ID_DEBUG_VECT_LEN, MAVLINK_MSG_ID_DEBUG_VECT_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE DEBUG_VECT UNPACKING
+
+
+/**
+ * @brief Get field name from debug_vect message
+ *
+ * @return  Name
+ */
+static inline uint16_t mavlink_msg_debug_vect_get_name(const mavlink_message_t* msg, char *name)
+{
+    return _MAV_RETURN_char_array(msg, name, 10,  20);
+}
+
+/**
+ * @brief Get field time_usec from debug_vect message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_debug_vect_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field x from debug_vect message
+ *
+ * @return  x
+ */
+static inline float mavlink_msg_debug_vect_get_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field y from debug_vect message
+ *
+ * @return  y
+ */
+static inline float mavlink_msg_debug_vect_get_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field z from debug_vect message
+ *
+ * @return  z
+ */
+static inline float mavlink_msg_debug_vect_get_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Decode a debug_vect message into a struct
+ *
+ * @param msg The message to decode
+ * @param debug_vect C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_debug_vect_decode(const mavlink_message_t* msg, mavlink_debug_vect_t* debug_vect)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    debug_vect->time_usec = mavlink_msg_debug_vect_get_time_usec(msg);
+    debug_vect->x = mavlink_msg_debug_vect_get_x(msg);
+    debug_vect->y = mavlink_msg_debug_vect_get_y(msg);
+    debug_vect->z = mavlink_msg_debug_vect_get_z(msg);
+    mavlink_msg_debug_vect_get_name(msg, debug_vect->name);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_DEBUG_VECT_LEN? msg->len : MAVLINK_MSG_ID_DEBUG_VECT_LEN;
+        memset(debug_vect, 0, MAVLINK_MSG_ID_DEBUG_VECT_LEN);
+    memcpy(debug_vect, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 480 - 0
v2.0/common/mavlink_msg_distance_sensor.h

@@ -0,0 +1,480 @@
+#pragma once
+// MESSAGE DISTANCE_SENSOR PACKING
+
+#define MAVLINK_MSG_ID_DISTANCE_SENSOR 132
+
+MAVPACKED(
+typedef struct __mavlink_distance_sensor_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint16_t min_distance; /*< [cm] Minimum distance the sensor can measure*/
+ uint16_t max_distance; /*< [cm] Maximum distance the sensor can measure*/
+ uint16_t current_distance; /*< [cm] Current distance reading*/
+ uint8_t type; /*<  Type of distance sensor.*/
+ uint8_t id; /*<  Onboard ID of the sensor*/
+ uint8_t orientation; /*<  Direction the sensor faces. downward-facing: ROTATION_PITCH_270, upward-facing: ROTATION_PITCH_90, backward-facing: ROTATION_PITCH_180, forward-facing: ROTATION_NONE, left-facing: ROTATION_YAW_90, right-facing: ROTATION_YAW_270*/
+ uint8_t covariance; /*< [cm^2] Measurement variance. Max standard deviation is 6cm. UINT8_MAX if unknown.*/
+ float horizontal_fov; /*< [rad] Horizontal Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.*/
+ float vertical_fov; /*< [rad] Vertical Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.*/
+ float quaternion[4]; /*<  Quaternion of the sensor orientation in vehicle body frame (w, x, y, z order, zero-rotation is 1, 0, 0, 0). Zero-rotation is along the vehicle body x-axis. This field is required if the orientation is set to MAV_SENSOR_ROTATION_CUSTOM. Set it to 0 if invalid."*/
+ uint8_t signal_quality; /*< [%] Signal quality of the sensor. Specific to each sensor type, representing the relation of the signal strength with the target reflectivity, distance, size or aspect, but normalised as a percentage. 0 = unknown/unset signal quality, 1 = invalid signal, 100 = perfect signal.*/
+}) mavlink_distance_sensor_t;
+
+#define MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN 39
+#define MAVLINK_MSG_ID_DISTANCE_SENSOR_MIN_LEN 14
+#define MAVLINK_MSG_ID_132_LEN 39
+#define MAVLINK_MSG_ID_132_MIN_LEN 14
+
+#define MAVLINK_MSG_ID_DISTANCE_SENSOR_CRC 85
+#define MAVLINK_MSG_ID_132_CRC 85
+
+#define MAVLINK_MSG_DISTANCE_SENSOR_FIELD_QUATERNION_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_DISTANCE_SENSOR { \
+    132, \
+    "DISTANCE_SENSOR", \
+    12, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_distance_sensor_t, time_boot_ms) }, \
+         { "min_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_distance_sensor_t, min_distance) }, \
+         { "max_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_distance_sensor_t, max_distance) }, \
+         { "current_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_distance_sensor_t, current_distance) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_distance_sensor_t, type) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_distance_sensor_t, id) }, \
+         { "orientation", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_distance_sensor_t, orientation) }, \
+         { "covariance", NULL, MAVLINK_TYPE_UINT8_T, 0, 13, offsetof(mavlink_distance_sensor_t, covariance) }, \
+         { "horizontal_fov", NULL, MAVLINK_TYPE_FLOAT, 0, 14, offsetof(mavlink_distance_sensor_t, horizontal_fov) }, \
+         { "vertical_fov", NULL, MAVLINK_TYPE_FLOAT, 0, 18, offsetof(mavlink_distance_sensor_t, vertical_fov) }, \
+         { "quaternion", NULL, MAVLINK_TYPE_FLOAT, 4, 22, offsetof(mavlink_distance_sensor_t, quaternion) }, \
+         { "signal_quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 38, offsetof(mavlink_distance_sensor_t, signal_quality) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_DISTANCE_SENSOR { \
+    "DISTANCE_SENSOR", \
+    12, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_distance_sensor_t, time_boot_ms) }, \
+         { "min_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_distance_sensor_t, min_distance) }, \
+         { "max_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 6, offsetof(mavlink_distance_sensor_t, max_distance) }, \
+         { "current_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_distance_sensor_t, current_distance) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_distance_sensor_t, type) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_distance_sensor_t, id) }, \
+         { "orientation", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_distance_sensor_t, orientation) }, \
+         { "covariance", NULL, MAVLINK_TYPE_UINT8_T, 0, 13, offsetof(mavlink_distance_sensor_t, covariance) }, \
+         { "horizontal_fov", NULL, MAVLINK_TYPE_FLOAT, 0, 14, offsetof(mavlink_distance_sensor_t, horizontal_fov) }, \
+         { "vertical_fov", NULL, MAVLINK_TYPE_FLOAT, 0, 18, offsetof(mavlink_distance_sensor_t, vertical_fov) }, \
+         { "quaternion", NULL, MAVLINK_TYPE_FLOAT, 4, 22, offsetof(mavlink_distance_sensor_t, quaternion) }, \
+         { "signal_quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 38, offsetof(mavlink_distance_sensor_t, signal_quality) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a distance_sensor message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param min_distance [cm] Minimum distance the sensor can measure
+ * @param max_distance [cm] Maximum distance the sensor can measure
+ * @param current_distance [cm] Current distance reading
+ * @param type  Type of distance sensor.
+ * @param id  Onboard ID of the sensor
+ * @param orientation  Direction the sensor faces. downward-facing: ROTATION_PITCH_270, upward-facing: ROTATION_PITCH_90, backward-facing: ROTATION_PITCH_180, forward-facing: ROTATION_NONE, left-facing: ROTATION_YAW_90, right-facing: ROTATION_YAW_270
+ * @param covariance [cm^2] Measurement variance. Max standard deviation is 6cm. UINT8_MAX if unknown.
+ * @param horizontal_fov [rad] Horizontal Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.
+ * @param vertical_fov [rad] Vertical Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.
+ * @param quaternion  Quaternion of the sensor orientation in vehicle body frame (w, x, y, z order, zero-rotation is 1, 0, 0, 0). Zero-rotation is along the vehicle body x-axis. This field is required if the orientation is set to MAV_SENSOR_ROTATION_CUSTOM. Set it to 0 if invalid."
+ * @param signal_quality [%] Signal quality of the sensor. Specific to each sensor type, representing the relation of the signal strength with the target reflectivity, distance, size or aspect, but normalised as a percentage. 0 = unknown/unset signal quality, 1 = invalid signal, 100 = perfect signal.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_distance_sensor_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint16_t min_distance, uint16_t max_distance, uint16_t current_distance, uint8_t type, uint8_t id, uint8_t orientation, uint8_t covariance, float horizontal_fov, float vertical_fov, const float *quaternion, uint8_t signal_quality)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint16_t(buf, 4, min_distance);
+    _mav_put_uint16_t(buf, 6, max_distance);
+    _mav_put_uint16_t(buf, 8, current_distance);
+    _mav_put_uint8_t(buf, 10, type);
+    _mav_put_uint8_t(buf, 11, id);
+    _mav_put_uint8_t(buf, 12, orientation);
+    _mav_put_uint8_t(buf, 13, covariance);
+    _mav_put_float(buf, 14, horizontal_fov);
+    _mav_put_float(buf, 18, vertical_fov);
+    _mav_put_uint8_t(buf, 38, signal_quality);
+    _mav_put_float_array(buf, 22, quaternion, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN);
+#else
+    mavlink_distance_sensor_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.min_distance = min_distance;
+    packet.max_distance = max_distance;
+    packet.current_distance = current_distance;
+    packet.type = type;
+    packet.id = id;
+    packet.orientation = orientation;
+    packet.covariance = covariance;
+    packet.horizontal_fov = horizontal_fov;
+    packet.vertical_fov = vertical_fov;
+    packet.signal_quality = signal_quality;
+    mav_array_memcpy(packet.quaternion, quaternion, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DISTANCE_SENSOR;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_DISTANCE_SENSOR_MIN_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_CRC);
+}
+
+/**
+ * @brief Pack a distance_sensor message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param min_distance [cm] Minimum distance the sensor can measure
+ * @param max_distance [cm] Maximum distance the sensor can measure
+ * @param current_distance [cm] Current distance reading
+ * @param type  Type of distance sensor.
+ * @param id  Onboard ID of the sensor
+ * @param orientation  Direction the sensor faces. downward-facing: ROTATION_PITCH_270, upward-facing: ROTATION_PITCH_90, backward-facing: ROTATION_PITCH_180, forward-facing: ROTATION_NONE, left-facing: ROTATION_YAW_90, right-facing: ROTATION_YAW_270
+ * @param covariance [cm^2] Measurement variance. Max standard deviation is 6cm. UINT8_MAX if unknown.
+ * @param horizontal_fov [rad] Horizontal Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.
+ * @param vertical_fov [rad] Vertical Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.
+ * @param quaternion  Quaternion of the sensor orientation in vehicle body frame (w, x, y, z order, zero-rotation is 1, 0, 0, 0). Zero-rotation is along the vehicle body x-axis. This field is required if the orientation is set to MAV_SENSOR_ROTATION_CUSTOM. Set it to 0 if invalid."
+ * @param signal_quality [%] Signal quality of the sensor. Specific to each sensor type, representing the relation of the signal strength with the target reflectivity, distance, size or aspect, but normalised as a percentage. 0 = unknown/unset signal quality, 1 = invalid signal, 100 = perfect signal.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_distance_sensor_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint16_t min_distance,uint16_t max_distance,uint16_t current_distance,uint8_t type,uint8_t id,uint8_t orientation,uint8_t covariance,float horizontal_fov,float vertical_fov,const float *quaternion,uint8_t signal_quality)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint16_t(buf, 4, min_distance);
+    _mav_put_uint16_t(buf, 6, max_distance);
+    _mav_put_uint16_t(buf, 8, current_distance);
+    _mav_put_uint8_t(buf, 10, type);
+    _mav_put_uint8_t(buf, 11, id);
+    _mav_put_uint8_t(buf, 12, orientation);
+    _mav_put_uint8_t(buf, 13, covariance);
+    _mav_put_float(buf, 14, horizontal_fov);
+    _mav_put_float(buf, 18, vertical_fov);
+    _mav_put_uint8_t(buf, 38, signal_quality);
+    _mav_put_float_array(buf, 22, quaternion, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN);
+#else
+    mavlink_distance_sensor_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.min_distance = min_distance;
+    packet.max_distance = max_distance;
+    packet.current_distance = current_distance;
+    packet.type = type;
+    packet.id = id;
+    packet.orientation = orientation;
+    packet.covariance = covariance;
+    packet.horizontal_fov = horizontal_fov;
+    packet.vertical_fov = vertical_fov;
+    packet.signal_quality = signal_quality;
+    mav_array_memcpy(packet.quaternion, quaternion, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_DISTANCE_SENSOR;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_DISTANCE_SENSOR_MIN_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_CRC);
+}
+
+/**
+ * @brief Encode a distance_sensor struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param distance_sensor C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_distance_sensor_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_distance_sensor_t* distance_sensor)
+{
+    return mavlink_msg_distance_sensor_pack(system_id, component_id, msg, distance_sensor->time_boot_ms, distance_sensor->min_distance, distance_sensor->max_distance, distance_sensor->current_distance, distance_sensor->type, distance_sensor->id, distance_sensor->orientation, distance_sensor->covariance, distance_sensor->horizontal_fov, distance_sensor->vertical_fov, distance_sensor->quaternion, distance_sensor->signal_quality);
+}
+
+/**
+ * @brief Encode a distance_sensor struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param distance_sensor C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_distance_sensor_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_distance_sensor_t* distance_sensor)
+{
+    return mavlink_msg_distance_sensor_pack_chan(system_id, component_id, chan, msg, distance_sensor->time_boot_ms, distance_sensor->min_distance, distance_sensor->max_distance, distance_sensor->current_distance, distance_sensor->type, distance_sensor->id, distance_sensor->orientation, distance_sensor->covariance, distance_sensor->horizontal_fov, distance_sensor->vertical_fov, distance_sensor->quaternion, distance_sensor->signal_quality);
+}
+
+/**
+ * @brief Send a distance_sensor message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param min_distance [cm] Minimum distance the sensor can measure
+ * @param max_distance [cm] Maximum distance the sensor can measure
+ * @param current_distance [cm] Current distance reading
+ * @param type  Type of distance sensor.
+ * @param id  Onboard ID of the sensor
+ * @param orientation  Direction the sensor faces. downward-facing: ROTATION_PITCH_270, upward-facing: ROTATION_PITCH_90, backward-facing: ROTATION_PITCH_180, forward-facing: ROTATION_NONE, left-facing: ROTATION_YAW_90, right-facing: ROTATION_YAW_270
+ * @param covariance [cm^2] Measurement variance. Max standard deviation is 6cm. UINT8_MAX if unknown.
+ * @param horizontal_fov [rad] Horizontal Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.
+ * @param vertical_fov [rad] Vertical Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.
+ * @param quaternion  Quaternion of the sensor orientation in vehicle body frame (w, x, y, z order, zero-rotation is 1, 0, 0, 0). Zero-rotation is along the vehicle body x-axis. This field is required if the orientation is set to MAV_SENSOR_ROTATION_CUSTOM. Set it to 0 if invalid."
+ * @param signal_quality [%] Signal quality of the sensor. Specific to each sensor type, representing the relation of the signal strength with the target reflectivity, distance, size or aspect, but normalised as a percentage. 0 = unknown/unset signal quality, 1 = invalid signal, 100 = perfect signal.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_distance_sensor_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint16_t min_distance, uint16_t max_distance, uint16_t current_distance, uint8_t type, uint8_t id, uint8_t orientation, uint8_t covariance, float horizontal_fov, float vertical_fov, const float *quaternion, uint8_t signal_quality)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint16_t(buf, 4, min_distance);
+    _mav_put_uint16_t(buf, 6, max_distance);
+    _mav_put_uint16_t(buf, 8, current_distance);
+    _mav_put_uint8_t(buf, 10, type);
+    _mav_put_uint8_t(buf, 11, id);
+    _mav_put_uint8_t(buf, 12, orientation);
+    _mav_put_uint8_t(buf, 13, covariance);
+    _mav_put_float(buf, 14, horizontal_fov);
+    _mav_put_float(buf, 18, vertical_fov);
+    _mav_put_uint8_t(buf, 38, signal_quality);
+    _mav_put_float_array(buf, 22, quaternion, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DISTANCE_SENSOR, buf, MAVLINK_MSG_ID_DISTANCE_SENSOR_MIN_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_CRC);
+#else
+    mavlink_distance_sensor_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.min_distance = min_distance;
+    packet.max_distance = max_distance;
+    packet.current_distance = current_distance;
+    packet.type = type;
+    packet.id = id;
+    packet.orientation = orientation;
+    packet.covariance = covariance;
+    packet.horizontal_fov = horizontal_fov;
+    packet.vertical_fov = vertical_fov;
+    packet.signal_quality = signal_quality;
+    mav_array_memcpy(packet.quaternion, quaternion, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DISTANCE_SENSOR, (const char *)&packet, MAVLINK_MSG_ID_DISTANCE_SENSOR_MIN_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_CRC);
+#endif
+}
+
+/**
+ * @brief Send a distance_sensor message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_distance_sensor_send_struct(mavlink_channel_t chan, const mavlink_distance_sensor_t* distance_sensor)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_distance_sensor_send(chan, distance_sensor->time_boot_ms, distance_sensor->min_distance, distance_sensor->max_distance, distance_sensor->current_distance, distance_sensor->type, distance_sensor->id, distance_sensor->orientation, distance_sensor->covariance, distance_sensor->horizontal_fov, distance_sensor->vertical_fov, distance_sensor->quaternion, distance_sensor->signal_quality);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DISTANCE_SENSOR, (const char *)distance_sensor, MAVLINK_MSG_ID_DISTANCE_SENSOR_MIN_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_distance_sensor_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint16_t min_distance, uint16_t max_distance, uint16_t current_distance, uint8_t type, uint8_t id, uint8_t orientation, uint8_t covariance, float horizontal_fov, float vertical_fov, const float *quaternion, uint8_t signal_quality)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint16_t(buf, 4, min_distance);
+    _mav_put_uint16_t(buf, 6, max_distance);
+    _mav_put_uint16_t(buf, 8, current_distance);
+    _mav_put_uint8_t(buf, 10, type);
+    _mav_put_uint8_t(buf, 11, id);
+    _mav_put_uint8_t(buf, 12, orientation);
+    _mav_put_uint8_t(buf, 13, covariance);
+    _mav_put_float(buf, 14, horizontal_fov);
+    _mav_put_float(buf, 18, vertical_fov);
+    _mav_put_uint8_t(buf, 38, signal_quality);
+    _mav_put_float_array(buf, 22, quaternion, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DISTANCE_SENSOR, buf, MAVLINK_MSG_ID_DISTANCE_SENSOR_MIN_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_CRC);
+#else
+    mavlink_distance_sensor_t *packet = (mavlink_distance_sensor_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->min_distance = min_distance;
+    packet->max_distance = max_distance;
+    packet->current_distance = current_distance;
+    packet->type = type;
+    packet->id = id;
+    packet->orientation = orientation;
+    packet->covariance = covariance;
+    packet->horizontal_fov = horizontal_fov;
+    packet->vertical_fov = vertical_fov;
+    packet->signal_quality = signal_quality;
+    mav_array_memcpy(packet->quaternion, quaternion, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DISTANCE_SENSOR, (const char *)packet, MAVLINK_MSG_ID_DISTANCE_SENSOR_MIN_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN, MAVLINK_MSG_ID_DISTANCE_SENSOR_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE DISTANCE_SENSOR UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from distance_sensor message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_distance_sensor_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field min_distance from distance_sensor message
+ *
+ * @return [cm] Minimum distance the sensor can measure
+ */
+static inline uint16_t mavlink_msg_distance_sensor_get_min_distance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  4);
+}
+
+/**
+ * @brief Get field max_distance from distance_sensor message
+ *
+ * @return [cm] Maximum distance the sensor can measure
+ */
+static inline uint16_t mavlink_msg_distance_sensor_get_max_distance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  6);
+}
+
+/**
+ * @brief Get field current_distance from distance_sensor message
+ *
+ * @return [cm] Current distance reading
+ */
+static inline uint16_t mavlink_msg_distance_sensor_get_current_distance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  8);
+}
+
+/**
+ * @brief Get field type from distance_sensor message
+ *
+ * @return  Type of distance sensor.
+ */
+static inline uint8_t mavlink_msg_distance_sensor_get_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  10);
+}
+
+/**
+ * @brief Get field id from distance_sensor message
+ *
+ * @return  Onboard ID of the sensor
+ */
+static inline uint8_t mavlink_msg_distance_sensor_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  11);
+}
+
+/**
+ * @brief Get field orientation from distance_sensor message
+ *
+ * @return  Direction the sensor faces. downward-facing: ROTATION_PITCH_270, upward-facing: ROTATION_PITCH_90, backward-facing: ROTATION_PITCH_180, forward-facing: ROTATION_NONE, left-facing: ROTATION_YAW_90, right-facing: ROTATION_YAW_270
+ */
+static inline uint8_t mavlink_msg_distance_sensor_get_orientation(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  12);
+}
+
+/**
+ * @brief Get field covariance from distance_sensor message
+ *
+ * @return [cm^2] Measurement variance. Max standard deviation is 6cm. UINT8_MAX if unknown.
+ */
+static inline uint8_t mavlink_msg_distance_sensor_get_covariance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  13);
+}
+
+/**
+ * @brief Get field horizontal_fov from distance_sensor message
+ *
+ * @return [rad] Horizontal Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.
+ */
+static inline float mavlink_msg_distance_sensor_get_horizontal_fov(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  14);
+}
+
+/**
+ * @brief Get field vertical_fov from distance_sensor message
+ *
+ * @return [rad] Vertical Field of View (angle) where the distance measurement is valid and the field of view is known. Otherwise this is set to 0.
+ */
+static inline float mavlink_msg_distance_sensor_get_vertical_fov(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  18);
+}
+
+/**
+ * @brief Get field quaternion from distance_sensor message
+ *
+ * @return  Quaternion of the sensor orientation in vehicle body frame (w, x, y, z order, zero-rotation is 1, 0, 0, 0). Zero-rotation is along the vehicle body x-axis. This field is required if the orientation is set to MAV_SENSOR_ROTATION_CUSTOM. Set it to 0 if invalid."
+ */
+static inline uint16_t mavlink_msg_distance_sensor_get_quaternion(const mavlink_message_t* msg, float *quaternion)
+{
+    return _MAV_RETURN_float_array(msg, quaternion, 4,  22);
+}
+
+/**
+ * @brief Get field signal_quality from distance_sensor message
+ *
+ * @return [%] Signal quality of the sensor. Specific to each sensor type, representing the relation of the signal strength with the target reflectivity, distance, size or aspect, but normalised as a percentage. 0 = unknown/unset signal quality, 1 = invalid signal, 100 = perfect signal.
+ */
+static inline uint8_t mavlink_msg_distance_sensor_get_signal_quality(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  38);
+}
+
+/**
+ * @brief Decode a distance_sensor message into a struct
+ *
+ * @param msg The message to decode
+ * @param distance_sensor C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_distance_sensor_decode(const mavlink_message_t* msg, mavlink_distance_sensor_t* distance_sensor)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    distance_sensor->time_boot_ms = mavlink_msg_distance_sensor_get_time_boot_ms(msg);
+    distance_sensor->min_distance = mavlink_msg_distance_sensor_get_min_distance(msg);
+    distance_sensor->max_distance = mavlink_msg_distance_sensor_get_max_distance(msg);
+    distance_sensor->current_distance = mavlink_msg_distance_sensor_get_current_distance(msg);
+    distance_sensor->type = mavlink_msg_distance_sensor_get_type(msg);
+    distance_sensor->id = mavlink_msg_distance_sensor_get_id(msg);
+    distance_sensor->orientation = mavlink_msg_distance_sensor_get_orientation(msg);
+    distance_sensor->covariance = mavlink_msg_distance_sensor_get_covariance(msg);
+    distance_sensor->horizontal_fov = mavlink_msg_distance_sensor_get_horizontal_fov(msg);
+    distance_sensor->vertical_fov = mavlink_msg_distance_sensor_get_vertical_fov(msg);
+    mavlink_msg_distance_sensor_get_quaternion(msg, distance_sensor->quaternion);
+    distance_sensor->signal_quality = mavlink_msg_distance_sensor_get_signal_quality(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN? msg->len : MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN;
+        memset(distance_sensor, 0, MAVLINK_MSG_ID_DISTANCE_SENSOR_LEN);
+    memcpy(distance_sensor, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 663 - 0
v2.0/common/mavlink_msg_efi_status.h

@@ -0,0 +1,663 @@
+#pragma once
+// MESSAGE EFI_STATUS PACKING
+
+#define MAVLINK_MSG_ID_EFI_STATUS 225
+
+MAVPACKED(
+typedef struct __mavlink_efi_status_t {
+ float ecu_index; /*<  ECU index*/
+ float rpm; /*<  RPM*/
+ float fuel_consumed; /*< [cm^3] Fuel consumed*/
+ float fuel_flow; /*< [cm^3/min] Fuel flow rate*/
+ float engine_load; /*< [%] Engine load*/
+ float throttle_position; /*< [%] Throttle position*/
+ float spark_dwell_time; /*< [ms] Spark dwell time*/
+ float barometric_pressure; /*< [kPa] Barometric pressure*/
+ float intake_manifold_pressure; /*< [kPa] Intake manifold pressure(*/
+ float intake_manifold_temperature; /*< [degC] Intake manifold temperature*/
+ float cylinder_head_temperature; /*< [degC] Cylinder head temperature*/
+ float ignition_timing; /*< [deg] Ignition timing (Crank angle degrees)*/
+ float injection_time; /*< [ms] Injection time*/
+ float exhaust_gas_temperature; /*< [degC] Exhaust gas temperature*/
+ float throttle_out; /*< [%] Output throttle*/
+ float pt_compensation; /*<  Pressure/temperature compensation*/
+ uint8_t health; /*<  EFI health status*/
+ float ignition_voltage; /*< [V] Supply voltage to EFI sparking system.  Zero in this value means "unknown", so if the supply voltage really is zero volts use 0.0001 instead.*/
+ float fuel_pressure; /*< [kPa] Fuel pressure. Zero in this value means "unknown", so if the fuel pressure really is zero kPa use 0.0001 instead.*/
+}) mavlink_efi_status_t;
+
+#define MAVLINK_MSG_ID_EFI_STATUS_LEN 73
+#define MAVLINK_MSG_ID_EFI_STATUS_MIN_LEN 65
+#define MAVLINK_MSG_ID_225_LEN 73
+#define MAVLINK_MSG_ID_225_MIN_LEN 65
+
+#define MAVLINK_MSG_ID_EFI_STATUS_CRC 208
+#define MAVLINK_MSG_ID_225_CRC 208
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_EFI_STATUS { \
+    225, \
+    "EFI_STATUS", \
+    19, \
+    {  { "health", NULL, MAVLINK_TYPE_UINT8_T, 0, 64, offsetof(mavlink_efi_status_t, health) }, \
+         { "ecu_index", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_efi_status_t, ecu_index) }, \
+         { "rpm", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_efi_status_t, rpm) }, \
+         { "fuel_consumed", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_efi_status_t, fuel_consumed) }, \
+         { "fuel_flow", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_efi_status_t, fuel_flow) }, \
+         { "engine_load", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_efi_status_t, engine_load) }, \
+         { "throttle_position", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_efi_status_t, throttle_position) }, \
+         { "spark_dwell_time", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_efi_status_t, spark_dwell_time) }, \
+         { "barometric_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_efi_status_t, barometric_pressure) }, \
+         { "intake_manifold_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_efi_status_t, intake_manifold_pressure) }, \
+         { "intake_manifold_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_efi_status_t, intake_manifold_temperature) }, \
+         { "cylinder_head_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_efi_status_t, cylinder_head_temperature) }, \
+         { "ignition_timing", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_efi_status_t, ignition_timing) }, \
+         { "injection_time", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_efi_status_t, injection_time) }, \
+         { "exhaust_gas_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_efi_status_t, exhaust_gas_temperature) }, \
+         { "throttle_out", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_efi_status_t, throttle_out) }, \
+         { "pt_compensation", NULL, MAVLINK_TYPE_FLOAT, 0, 60, offsetof(mavlink_efi_status_t, pt_compensation) }, \
+         { "ignition_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 65, offsetof(mavlink_efi_status_t, ignition_voltage) }, \
+         { "fuel_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 69, offsetof(mavlink_efi_status_t, fuel_pressure) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_EFI_STATUS { \
+    "EFI_STATUS", \
+    19, \
+    {  { "health", NULL, MAVLINK_TYPE_UINT8_T, 0, 64, offsetof(mavlink_efi_status_t, health) }, \
+         { "ecu_index", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_efi_status_t, ecu_index) }, \
+         { "rpm", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_efi_status_t, rpm) }, \
+         { "fuel_consumed", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_efi_status_t, fuel_consumed) }, \
+         { "fuel_flow", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_efi_status_t, fuel_flow) }, \
+         { "engine_load", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_efi_status_t, engine_load) }, \
+         { "throttle_position", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_efi_status_t, throttle_position) }, \
+         { "spark_dwell_time", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_efi_status_t, spark_dwell_time) }, \
+         { "barometric_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_efi_status_t, barometric_pressure) }, \
+         { "intake_manifold_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_efi_status_t, intake_manifold_pressure) }, \
+         { "intake_manifold_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_efi_status_t, intake_manifold_temperature) }, \
+         { "cylinder_head_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_efi_status_t, cylinder_head_temperature) }, \
+         { "ignition_timing", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_efi_status_t, ignition_timing) }, \
+         { "injection_time", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_efi_status_t, injection_time) }, \
+         { "exhaust_gas_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_efi_status_t, exhaust_gas_temperature) }, \
+         { "throttle_out", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_efi_status_t, throttle_out) }, \
+         { "pt_compensation", NULL, MAVLINK_TYPE_FLOAT, 0, 60, offsetof(mavlink_efi_status_t, pt_compensation) }, \
+         { "ignition_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 65, offsetof(mavlink_efi_status_t, ignition_voltage) }, \
+         { "fuel_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 69, offsetof(mavlink_efi_status_t, fuel_pressure) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a efi_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param health  EFI health status
+ * @param ecu_index  ECU index
+ * @param rpm  RPM
+ * @param fuel_consumed [cm^3] Fuel consumed
+ * @param fuel_flow [cm^3/min] Fuel flow rate
+ * @param engine_load [%] Engine load
+ * @param throttle_position [%] Throttle position
+ * @param spark_dwell_time [ms] Spark dwell time
+ * @param barometric_pressure [kPa] Barometric pressure
+ * @param intake_manifold_pressure [kPa] Intake manifold pressure(
+ * @param intake_manifold_temperature [degC] Intake manifold temperature
+ * @param cylinder_head_temperature [degC] Cylinder head temperature
+ * @param ignition_timing [deg] Ignition timing (Crank angle degrees)
+ * @param injection_time [ms] Injection time
+ * @param exhaust_gas_temperature [degC] Exhaust gas temperature
+ * @param throttle_out [%] Output throttle
+ * @param pt_compensation  Pressure/temperature compensation
+ * @param ignition_voltage [V] Supply voltage to EFI sparking system.  Zero in this value means "unknown", so if the supply voltage really is zero volts use 0.0001 instead.
+ * @param fuel_pressure [kPa] Fuel pressure. Zero in this value means "unknown", so if the fuel pressure really is zero kPa use 0.0001 instead.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_efi_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t health, float ecu_index, float rpm, float fuel_consumed, float fuel_flow, float engine_load, float throttle_position, float spark_dwell_time, float barometric_pressure, float intake_manifold_pressure, float intake_manifold_temperature, float cylinder_head_temperature, float ignition_timing, float injection_time, float exhaust_gas_temperature, float throttle_out, float pt_compensation, float ignition_voltage, float fuel_pressure)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EFI_STATUS_LEN];
+    _mav_put_float(buf, 0, ecu_index);
+    _mav_put_float(buf, 4, rpm);
+    _mav_put_float(buf, 8, fuel_consumed);
+    _mav_put_float(buf, 12, fuel_flow);
+    _mav_put_float(buf, 16, engine_load);
+    _mav_put_float(buf, 20, throttle_position);
+    _mav_put_float(buf, 24, spark_dwell_time);
+    _mav_put_float(buf, 28, barometric_pressure);
+    _mav_put_float(buf, 32, intake_manifold_pressure);
+    _mav_put_float(buf, 36, intake_manifold_temperature);
+    _mav_put_float(buf, 40, cylinder_head_temperature);
+    _mav_put_float(buf, 44, ignition_timing);
+    _mav_put_float(buf, 48, injection_time);
+    _mav_put_float(buf, 52, exhaust_gas_temperature);
+    _mav_put_float(buf, 56, throttle_out);
+    _mav_put_float(buf, 60, pt_compensation);
+    _mav_put_uint8_t(buf, 64, health);
+    _mav_put_float(buf, 65, ignition_voltage);
+    _mav_put_float(buf, 69, fuel_pressure);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_EFI_STATUS_LEN);
+#else
+    mavlink_efi_status_t packet;
+    packet.ecu_index = ecu_index;
+    packet.rpm = rpm;
+    packet.fuel_consumed = fuel_consumed;
+    packet.fuel_flow = fuel_flow;
+    packet.engine_load = engine_load;
+    packet.throttle_position = throttle_position;
+    packet.spark_dwell_time = spark_dwell_time;
+    packet.barometric_pressure = barometric_pressure;
+    packet.intake_manifold_pressure = intake_manifold_pressure;
+    packet.intake_manifold_temperature = intake_manifold_temperature;
+    packet.cylinder_head_temperature = cylinder_head_temperature;
+    packet.ignition_timing = ignition_timing;
+    packet.injection_time = injection_time;
+    packet.exhaust_gas_temperature = exhaust_gas_temperature;
+    packet.throttle_out = throttle_out;
+    packet.pt_compensation = pt_compensation;
+    packet.health = health;
+    packet.ignition_voltage = ignition_voltage;
+    packet.fuel_pressure = fuel_pressure;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_EFI_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_EFI_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_EFI_STATUS_MIN_LEN, MAVLINK_MSG_ID_EFI_STATUS_LEN, MAVLINK_MSG_ID_EFI_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a efi_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param health  EFI health status
+ * @param ecu_index  ECU index
+ * @param rpm  RPM
+ * @param fuel_consumed [cm^3] Fuel consumed
+ * @param fuel_flow [cm^3/min] Fuel flow rate
+ * @param engine_load [%] Engine load
+ * @param throttle_position [%] Throttle position
+ * @param spark_dwell_time [ms] Spark dwell time
+ * @param barometric_pressure [kPa] Barometric pressure
+ * @param intake_manifold_pressure [kPa] Intake manifold pressure(
+ * @param intake_manifold_temperature [degC] Intake manifold temperature
+ * @param cylinder_head_temperature [degC] Cylinder head temperature
+ * @param ignition_timing [deg] Ignition timing (Crank angle degrees)
+ * @param injection_time [ms] Injection time
+ * @param exhaust_gas_temperature [degC] Exhaust gas temperature
+ * @param throttle_out [%] Output throttle
+ * @param pt_compensation  Pressure/temperature compensation
+ * @param ignition_voltage [V] Supply voltage to EFI sparking system.  Zero in this value means "unknown", so if the supply voltage really is zero volts use 0.0001 instead.
+ * @param fuel_pressure [kPa] Fuel pressure. Zero in this value means "unknown", so if the fuel pressure really is zero kPa use 0.0001 instead.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_efi_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t health,float ecu_index,float rpm,float fuel_consumed,float fuel_flow,float engine_load,float throttle_position,float spark_dwell_time,float barometric_pressure,float intake_manifold_pressure,float intake_manifold_temperature,float cylinder_head_temperature,float ignition_timing,float injection_time,float exhaust_gas_temperature,float throttle_out,float pt_compensation,float ignition_voltage,float fuel_pressure)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EFI_STATUS_LEN];
+    _mav_put_float(buf, 0, ecu_index);
+    _mav_put_float(buf, 4, rpm);
+    _mav_put_float(buf, 8, fuel_consumed);
+    _mav_put_float(buf, 12, fuel_flow);
+    _mav_put_float(buf, 16, engine_load);
+    _mav_put_float(buf, 20, throttle_position);
+    _mav_put_float(buf, 24, spark_dwell_time);
+    _mav_put_float(buf, 28, barometric_pressure);
+    _mav_put_float(buf, 32, intake_manifold_pressure);
+    _mav_put_float(buf, 36, intake_manifold_temperature);
+    _mav_put_float(buf, 40, cylinder_head_temperature);
+    _mav_put_float(buf, 44, ignition_timing);
+    _mav_put_float(buf, 48, injection_time);
+    _mav_put_float(buf, 52, exhaust_gas_temperature);
+    _mav_put_float(buf, 56, throttle_out);
+    _mav_put_float(buf, 60, pt_compensation);
+    _mav_put_uint8_t(buf, 64, health);
+    _mav_put_float(buf, 65, ignition_voltage);
+    _mav_put_float(buf, 69, fuel_pressure);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_EFI_STATUS_LEN);
+#else
+    mavlink_efi_status_t packet;
+    packet.ecu_index = ecu_index;
+    packet.rpm = rpm;
+    packet.fuel_consumed = fuel_consumed;
+    packet.fuel_flow = fuel_flow;
+    packet.engine_load = engine_load;
+    packet.throttle_position = throttle_position;
+    packet.spark_dwell_time = spark_dwell_time;
+    packet.barometric_pressure = barometric_pressure;
+    packet.intake_manifold_pressure = intake_manifold_pressure;
+    packet.intake_manifold_temperature = intake_manifold_temperature;
+    packet.cylinder_head_temperature = cylinder_head_temperature;
+    packet.ignition_timing = ignition_timing;
+    packet.injection_time = injection_time;
+    packet.exhaust_gas_temperature = exhaust_gas_temperature;
+    packet.throttle_out = throttle_out;
+    packet.pt_compensation = pt_compensation;
+    packet.health = health;
+    packet.ignition_voltage = ignition_voltage;
+    packet.fuel_pressure = fuel_pressure;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_EFI_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_EFI_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_EFI_STATUS_MIN_LEN, MAVLINK_MSG_ID_EFI_STATUS_LEN, MAVLINK_MSG_ID_EFI_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a efi_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param efi_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_efi_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_efi_status_t* efi_status)
+{
+    return mavlink_msg_efi_status_pack(system_id, component_id, msg, efi_status->health, efi_status->ecu_index, efi_status->rpm, efi_status->fuel_consumed, efi_status->fuel_flow, efi_status->engine_load, efi_status->throttle_position, efi_status->spark_dwell_time, efi_status->barometric_pressure, efi_status->intake_manifold_pressure, efi_status->intake_manifold_temperature, efi_status->cylinder_head_temperature, efi_status->ignition_timing, efi_status->injection_time, efi_status->exhaust_gas_temperature, efi_status->throttle_out, efi_status->pt_compensation, efi_status->ignition_voltage, efi_status->fuel_pressure);
+}
+
+/**
+ * @brief Encode a efi_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param efi_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_efi_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_efi_status_t* efi_status)
+{
+    return mavlink_msg_efi_status_pack_chan(system_id, component_id, chan, msg, efi_status->health, efi_status->ecu_index, efi_status->rpm, efi_status->fuel_consumed, efi_status->fuel_flow, efi_status->engine_load, efi_status->throttle_position, efi_status->spark_dwell_time, efi_status->barometric_pressure, efi_status->intake_manifold_pressure, efi_status->intake_manifold_temperature, efi_status->cylinder_head_temperature, efi_status->ignition_timing, efi_status->injection_time, efi_status->exhaust_gas_temperature, efi_status->throttle_out, efi_status->pt_compensation, efi_status->ignition_voltage, efi_status->fuel_pressure);
+}
+
+/**
+ * @brief Send a efi_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param health  EFI health status
+ * @param ecu_index  ECU index
+ * @param rpm  RPM
+ * @param fuel_consumed [cm^3] Fuel consumed
+ * @param fuel_flow [cm^3/min] Fuel flow rate
+ * @param engine_load [%] Engine load
+ * @param throttle_position [%] Throttle position
+ * @param spark_dwell_time [ms] Spark dwell time
+ * @param barometric_pressure [kPa] Barometric pressure
+ * @param intake_manifold_pressure [kPa] Intake manifold pressure(
+ * @param intake_manifold_temperature [degC] Intake manifold temperature
+ * @param cylinder_head_temperature [degC] Cylinder head temperature
+ * @param ignition_timing [deg] Ignition timing (Crank angle degrees)
+ * @param injection_time [ms] Injection time
+ * @param exhaust_gas_temperature [degC] Exhaust gas temperature
+ * @param throttle_out [%] Output throttle
+ * @param pt_compensation  Pressure/temperature compensation
+ * @param ignition_voltage [V] Supply voltage to EFI sparking system.  Zero in this value means "unknown", so if the supply voltage really is zero volts use 0.0001 instead.
+ * @param fuel_pressure [kPa] Fuel pressure. Zero in this value means "unknown", so if the fuel pressure really is zero kPa use 0.0001 instead.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_efi_status_send(mavlink_channel_t chan, uint8_t health, float ecu_index, float rpm, float fuel_consumed, float fuel_flow, float engine_load, float throttle_position, float spark_dwell_time, float barometric_pressure, float intake_manifold_pressure, float intake_manifold_temperature, float cylinder_head_temperature, float ignition_timing, float injection_time, float exhaust_gas_temperature, float throttle_out, float pt_compensation, float ignition_voltage, float fuel_pressure)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EFI_STATUS_LEN];
+    _mav_put_float(buf, 0, ecu_index);
+    _mav_put_float(buf, 4, rpm);
+    _mav_put_float(buf, 8, fuel_consumed);
+    _mav_put_float(buf, 12, fuel_flow);
+    _mav_put_float(buf, 16, engine_load);
+    _mav_put_float(buf, 20, throttle_position);
+    _mav_put_float(buf, 24, spark_dwell_time);
+    _mav_put_float(buf, 28, barometric_pressure);
+    _mav_put_float(buf, 32, intake_manifold_pressure);
+    _mav_put_float(buf, 36, intake_manifold_temperature);
+    _mav_put_float(buf, 40, cylinder_head_temperature);
+    _mav_put_float(buf, 44, ignition_timing);
+    _mav_put_float(buf, 48, injection_time);
+    _mav_put_float(buf, 52, exhaust_gas_temperature);
+    _mav_put_float(buf, 56, throttle_out);
+    _mav_put_float(buf, 60, pt_compensation);
+    _mav_put_uint8_t(buf, 64, health);
+    _mav_put_float(buf, 65, ignition_voltage);
+    _mav_put_float(buf, 69, fuel_pressure);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EFI_STATUS, buf, MAVLINK_MSG_ID_EFI_STATUS_MIN_LEN, MAVLINK_MSG_ID_EFI_STATUS_LEN, MAVLINK_MSG_ID_EFI_STATUS_CRC);
+#else
+    mavlink_efi_status_t packet;
+    packet.ecu_index = ecu_index;
+    packet.rpm = rpm;
+    packet.fuel_consumed = fuel_consumed;
+    packet.fuel_flow = fuel_flow;
+    packet.engine_load = engine_load;
+    packet.throttle_position = throttle_position;
+    packet.spark_dwell_time = spark_dwell_time;
+    packet.barometric_pressure = barometric_pressure;
+    packet.intake_manifold_pressure = intake_manifold_pressure;
+    packet.intake_manifold_temperature = intake_manifold_temperature;
+    packet.cylinder_head_temperature = cylinder_head_temperature;
+    packet.ignition_timing = ignition_timing;
+    packet.injection_time = injection_time;
+    packet.exhaust_gas_temperature = exhaust_gas_temperature;
+    packet.throttle_out = throttle_out;
+    packet.pt_compensation = pt_compensation;
+    packet.health = health;
+    packet.ignition_voltage = ignition_voltage;
+    packet.fuel_pressure = fuel_pressure;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EFI_STATUS, (const char *)&packet, MAVLINK_MSG_ID_EFI_STATUS_MIN_LEN, MAVLINK_MSG_ID_EFI_STATUS_LEN, MAVLINK_MSG_ID_EFI_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a efi_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_efi_status_send_struct(mavlink_channel_t chan, const mavlink_efi_status_t* efi_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_efi_status_send(chan, efi_status->health, efi_status->ecu_index, efi_status->rpm, efi_status->fuel_consumed, efi_status->fuel_flow, efi_status->engine_load, efi_status->throttle_position, efi_status->spark_dwell_time, efi_status->barometric_pressure, efi_status->intake_manifold_pressure, efi_status->intake_manifold_temperature, efi_status->cylinder_head_temperature, efi_status->ignition_timing, efi_status->injection_time, efi_status->exhaust_gas_temperature, efi_status->throttle_out, efi_status->pt_compensation, efi_status->ignition_voltage, efi_status->fuel_pressure);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EFI_STATUS, (const char *)efi_status, MAVLINK_MSG_ID_EFI_STATUS_MIN_LEN, MAVLINK_MSG_ID_EFI_STATUS_LEN, MAVLINK_MSG_ID_EFI_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_EFI_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_efi_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t health, float ecu_index, float rpm, float fuel_consumed, float fuel_flow, float engine_load, float throttle_position, float spark_dwell_time, float barometric_pressure, float intake_manifold_pressure, float intake_manifold_temperature, float cylinder_head_temperature, float ignition_timing, float injection_time, float exhaust_gas_temperature, float throttle_out, float pt_compensation, float ignition_voltage, float fuel_pressure)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_float(buf, 0, ecu_index);
+    _mav_put_float(buf, 4, rpm);
+    _mav_put_float(buf, 8, fuel_consumed);
+    _mav_put_float(buf, 12, fuel_flow);
+    _mav_put_float(buf, 16, engine_load);
+    _mav_put_float(buf, 20, throttle_position);
+    _mav_put_float(buf, 24, spark_dwell_time);
+    _mav_put_float(buf, 28, barometric_pressure);
+    _mav_put_float(buf, 32, intake_manifold_pressure);
+    _mav_put_float(buf, 36, intake_manifold_temperature);
+    _mav_put_float(buf, 40, cylinder_head_temperature);
+    _mav_put_float(buf, 44, ignition_timing);
+    _mav_put_float(buf, 48, injection_time);
+    _mav_put_float(buf, 52, exhaust_gas_temperature);
+    _mav_put_float(buf, 56, throttle_out);
+    _mav_put_float(buf, 60, pt_compensation);
+    _mav_put_uint8_t(buf, 64, health);
+    _mav_put_float(buf, 65, ignition_voltage);
+    _mav_put_float(buf, 69, fuel_pressure);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EFI_STATUS, buf, MAVLINK_MSG_ID_EFI_STATUS_MIN_LEN, MAVLINK_MSG_ID_EFI_STATUS_LEN, MAVLINK_MSG_ID_EFI_STATUS_CRC);
+#else
+    mavlink_efi_status_t *packet = (mavlink_efi_status_t *)msgbuf;
+    packet->ecu_index = ecu_index;
+    packet->rpm = rpm;
+    packet->fuel_consumed = fuel_consumed;
+    packet->fuel_flow = fuel_flow;
+    packet->engine_load = engine_load;
+    packet->throttle_position = throttle_position;
+    packet->spark_dwell_time = spark_dwell_time;
+    packet->barometric_pressure = barometric_pressure;
+    packet->intake_manifold_pressure = intake_manifold_pressure;
+    packet->intake_manifold_temperature = intake_manifold_temperature;
+    packet->cylinder_head_temperature = cylinder_head_temperature;
+    packet->ignition_timing = ignition_timing;
+    packet->injection_time = injection_time;
+    packet->exhaust_gas_temperature = exhaust_gas_temperature;
+    packet->throttle_out = throttle_out;
+    packet->pt_compensation = pt_compensation;
+    packet->health = health;
+    packet->ignition_voltage = ignition_voltage;
+    packet->fuel_pressure = fuel_pressure;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EFI_STATUS, (const char *)packet, MAVLINK_MSG_ID_EFI_STATUS_MIN_LEN, MAVLINK_MSG_ID_EFI_STATUS_LEN, MAVLINK_MSG_ID_EFI_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE EFI_STATUS UNPACKING
+
+
+/**
+ * @brief Get field health from efi_status message
+ *
+ * @return  EFI health status
+ */
+static inline uint8_t mavlink_msg_efi_status_get_health(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  64);
+}
+
+/**
+ * @brief Get field ecu_index from efi_status message
+ *
+ * @return  ECU index
+ */
+static inline float mavlink_msg_efi_status_get_ecu_index(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  0);
+}
+
+/**
+ * @brief Get field rpm from efi_status message
+ *
+ * @return  RPM
+ */
+static inline float mavlink_msg_efi_status_get_rpm(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field fuel_consumed from efi_status message
+ *
+ * @return [cm^3] Fuel consumed
+ */
+static inline float mavlink_msg_efi_status_get_fuel_consumed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field fuel_flow from efi_status message
+ *
+ * @return [cm^3/min] Fuel flow rate
+ */
+static inline float mavlink_msg_efi_status_get_fuel_flow(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field engine_load from efi_status message
+ *
+ * @return [%] Engine load
+ */
+static inline float mavlink_msg_efi_status_get_engine_load(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field throttle_position from efi_status message
+ *
+ * @return [%] Throttle position
+ */
+static inline float mavlink_msg_efi_status_get_throttle_position(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field spark_dwell_time from efi_status message
+ *
+ * @return [ms] Spark dwell time
+ */
+static inline float mavlink_msg_efi_status_get_spark_dwell_time(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field barometric_pressure from efi_status message
+ *
+ * @return [kPa] Barometric pressure
+ */
+static inline float mavlink_msg_efi_status_get_barometric_pressure(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field intake_manifold_pressure from efi_status message
+ *
+ * @return [kPa] Intake manifold pressure(
+ */
+static inline float mavlink_msg_efi_status_get_intake_manifold_pressure(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field intake_manifold_temperature from efi_status message
+ *
+ * @return [degC] Intake manifold temperature
+ */
+static inline float mavlink_msg_efi_status_get_intake_manifold_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field cylinder_head_temperature from efi_status message
+ *
+ * @return [degC] Cylinder head temperature
+ */
+static inline float mavlink_msg_efi_status_get_cylinder_head_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  40);
+}
+
+/**
+ * @brief Get field ignition_timing from efi_status message
+ *
+ * @return [deg] Ignition timing (Crank angle degrees)
+ */
+static inline float mavlink_msg_efi_status_get_ignition_timing(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Get field injection_time from efi_status message
+ *
+ * @return [ms] Injection time
+ */
+static inline float mavlink_msg_efi_status_get_injection_time(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  48);
+}
+
+/**
+ * @brief Get field exhaust_gas_temperature from efi_status message
+ *
+ * @return [degC] Exhaust gas temperature
+ */
+static inline float mavlink_msg_efi_status_get_exhaust_gas_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  52);
+}
+
+/**
+ * @brief Get field throttle_out from efi_status message
+ *
+ * @return [%] Output throttle
+ */
+static inline float mavlink_msg_efi_status_get_throttle_out(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  56);
+}
+
+/**
+ * @brief Get field pt_compensation from efi_status message
+ *
+ * @return  Pressure/temperature compensation
+ */
+static inline float mavlink_msg_efi_status_get_pt_compensation(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  60);
+}
+
+/**
+ * @brief Get field ignition_voltage from efi_status message
+ *
+ * @return [V] Supply voltage to EFI sparking system.  Zero in this value means "unknown", so if the supply voltage really is zero volts use 0.0001 instead.
+ */
+static inline float mavlink_msg_efi_status_get_ignition_voltage(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  65);
+}
+
+/**
+ * @brief Get field fuel_pressure from efi_status message
+ *
+ * @return [kPa] Fuel pressure. Zero in this value means "unknown", so if the fuel pressure really is zero kPa use 0.0001 instead.
+ */
+static inline float mavlink_msg_efi_status_get_fuel_pressure(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  69);
+}
+
+/**
+ * @brief Decode a efi_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param efi_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_efi_status_decode(const mavlink_message_t* msg, mavlink_efi_status_t* efi_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    efi_status->ecu_index = mavlink_msg_efi_status_get_ecu_index(msg);
+    efi_status->rpm = mavlink_msg_efi_status_get_rpm(msg);
+    efi_status->fuel_consumed = mavlink_msg_efi_status_get_fuel_consumed(msg);
+    efi_status->fuel_flow = mavlink_msg_efi_status_get_fuel_flow(msg);
+    efi_status->engine_load = mavlink_msg_efi_status_get_engine_load(msg);
+    efi_status->throttle_position = mavlink_msg_efi_status_get_throttle_position(msg);
+    efi_status->spark_dwell_time = mavlink_msg_efi_status_get_spark_dwell_time(msg);
+    efi_status->barometric_pressure = mavlink_msg_efi_status_get_barometric_pressure(msg);
+    efi_status->intake_manifold_pressure = mavlink_msg_efi_status_get_intake_manifold_pressure(msg);
+    efi_status->intake_manifold_temperature = mavlink_msg_efi_status_get_intake_manifold_temperature(msg);
+    efi_status->cylinder_head_temperature = mavlink_msg_efi_status_get_cylinder_head_temperature(msg);
+    efi_status->ignition_timing = mavlink_msg_efi_status_get_ignition_timing(msg);
+    efi_status->injection_time = mavlink_msg_efi_status_get_injection_time(msg);
+    efi_status->exhaust_gas_temperature = mavlink_msg_efi_status_get_exhaust_gas_temperature(msg);
+    efi_status->throttle_out = mavlink_msg_efi_status_get_throttle_out(msg);
+    efi_status->pt_compensation = mavlink_msg_efi_status_get_pt_compensation(msg);
+    efi_status->health = mavlink_msg_efi_status_get_health(msg);
+    efi_status->ignition_voltage = mavlink_msg_efi_status_get_ignition_voltage(msg);
+    efi_status->fuel_pressure = mavlink_msg_efi_status_get_fuel_pressure(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_EFI_STATUS_LEN? msg->len : MAVLINK_MSG_ID_EFI_STATUS_LEN;
+        memset(efi_status, 0, MAVLINK_MSG_ID_EFI_STATUS_LEN);
+    memcpy(efi_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 230 - 0
v2.0/common/mavlink_msg_encapsulated_data.h

@@ -0,0 +1,230 @@
+#pragma once
+// MESSAGE ENCAPSULATED_DATA PACKING
+
+#define MAVLINK_MSG_ID_ENCAPSULATED_DATA 131
+
+
+typedef struct __mavlink_encapsulated_data_t {
+ uint16_t seqnr; /*<  sequence number (starting with 0 on every transmission)*/
+ uint8_t data[253]; /*<  image data bytes*/
+} mavlink_encapsulated_data_t;
+
+#define MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN 255
+#define MAVLINK_MSG_ID_ENCAPSULATED_DATA_MIN_LEN 255
+#define MAVLINK_MSG_ID_131_LEN 255
+#define MAVLINK_MSG_ID_131_MIN_LEN 255
+
+#define MAVLINK_MSG_ID_ENCAPSULATED_DATA_CRC 223
+#define MAVLINK_MSG_ID_131_CRC 223
+
+#define MAVLINK_MSG_ENCAPSULATED_DATA_FIELD_DATA_LEN 253
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ENCAPSULATED_DATA { \
+    131, \
+    "ENCAPSULATED_DATA", \
+    2, \
+    {  { "seqnr", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_encapsulated_data_t, seqnr) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 253, 2, offsetof(mavlink_encapsulated_data_t, data) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ENCAPSULATED_DATA { \
+    "ENCAPSULATED_DATA", \
+    2, \
+    {  { "seqnr", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_encapsulated_data_t, seqnr) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 253, 2, offsetof(mavlink_encapsulated_data_t, data) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a encapsulated_data message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param seqnr  sequence number (starting with 0 on every transmission)
+ * @param data  image data bytes
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_encapsulated_data_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint16_t seqnr, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN];
+    _mav_put_uint16_t(buf, 0, seqnr);
+    _mav_put_uint8_t_array(buf, 2, data, 253);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN);
+#else
+    mavlink_encapsulated_data_t packet;
+    packet.seqnr = seqnr;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*253);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ENCAPSULATED_DATA;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ENCAPSULATED_DATA_MIN_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_CRC);
+}
+
+/**
+ * @brief Pack a encapsulated_data message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param seqnr  sequence number (starting with 0 on every transmission)
+ * @param data  image data bytes
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_encapsulated_data_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint16_t seqnr,const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN];
+    _mav_put_uint16_t(buf, 0, seqnr);
+    _mav_put_uint8_t_array(buf, 2, data, 253);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN);
+#else
+    mavlink_encapsulated_data_t packet;
+    packet.seqnr = seqnr;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*253);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ENCAPSULATED_DATA;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ENCAPSULATED_DATA_MIN_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_CRC);
+}
+
+/**
+ * @brief Encode a encapsulated_data struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param encapsulated_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_encapsulated_data_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_encapsulated_data_t* encapsulated_data)
+{
+    return mavlink_msg_encapsulated_data_pack(system_id, component_id, msg, encapsulated_data->seqnr, encapsulated_data->data);
+}
+
+/**
+ * @brief Encode a encapsulated_data struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param encapsulated_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_encapsulated_data_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_encapsulated_data_t* encapsulated_data)
+{
+    return mavlink_msg_encapsulated_data_pack_chan(system_id, component_id, chan, msg, encapsulated_data->seqnr, encapsulated_data->data);
+}
+
+/**
+ * @brief Send a encapsulated_data message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param seqnr  sequence number (starting with 0 on every transmission)
+ * @param data  image data bytes
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_encapsulated_data_send(mavlink_channel_t chan, uint16_t seqnr, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN];
+    _mav_put_uint16_t(buf, 0, seqnr);
+    _mav_put_uint8_t_array(buf, 2, data, 253);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ENCAPSULATED_DATA, buf, MAVLINK_MSG_ID_ENCAPSULATED_DATA_MIN_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_CRC);
+#else
+    mavlink_encapsulated_data_t packet;
+    packet.seqnr = seqnr;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*253);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ENCAPSULATED_DATA, (const char *)&packet, MAVLINK_MSG_ID_ENCAPSULATED_DATA_MIN_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_CRC);
+#endif
+}
+
+/**
+ * @brief Send a encapsulated_data message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_encapsulated_data_send_struct(mavlink_channel_t chan, const mavlink_encapsulated_data_t* encapsulated_data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_encapsulated_data_send(chan, encapsulated_data->seqnr, encapsulated_data->data);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ENCAPSULATED_DATA, (const char *)encapsulated_data, MAVLINK_MSG_ID_ENCAPSULATED_DATA_MIN_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_encapsulated_data_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint16_t seqnr, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint16_t(buf, 0, seqnr);
+    _mav_put_uint8_t_array(buf, 2, data, 253);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ENCAPSULATED_DATA, buf, MAVLINK_MSG_ID_ENCAPSULATED_DATA_MIN_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_CRC);
+#else
+    mavlink_encapsulated_data_t *packet = (mavlink_encapsulated_data_t *)msgbuf;
+    packet->seqnr = seqnr;
+    mav_array_memcpy(packet->data, data, sizeof(uint8_t)*253);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ENCAPSULATED_DATA, (const char *)packet, MAVLINK_MSG_ID_ENCAPSULATED_DATA_MIN_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN, MAVLINK_MSG_ID_ENCAPSULATED_DATA_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ENCAPSULATED_DATA UNPACKING
+
+
+/**
+ * @brief Get field seqnr from encapsulated_data message
+ *
+ * @return  sequence number (starting with 0 on every transmission)
+ */
+static inline uint16_t mavlink_msg_encapsulated_data_get_seqnr(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  0);
+}
+
+/**
+ * @brief Get field data from encapsulated_data message
+ *
+ * @return  image data bytes
+ */
+static inline uint16_t mavlink_msg_encapsulated_data_get_data(const mavlink_message_t* msg, uint8_t *data)
+{
+    return _MAV_RETURN_uint8_t_array(msg, data, 253,  2);
+}
+
+/**
+ * @brief Decode a encapsulated_data message into a struct
+ *
+ * @param msg The message to decode
+ * @param encapsulated_data C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_encapsulated_data_decode(const mavlink_message_t* msg, mavlink_encapsulated_data_t* encapsulated_data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    encapsulated_data->seqnr = mavlink_msg_encapsulated_data_get_seqnr(msg);
+    mavlink_msg_encapsulated_data_get_data(msg, encapsulated_data->data);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN? msg->len : MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN;
+        memset(encapsulated_data, 0, MAVLINK_MSG_ID_ENCAPSULATED_DATA_LEN);
+    memcpy(encapsulated_data, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 407 - 0
v2.0/common/mavlink_msg_esc_info.h

@@ -0,0 +1,407 @@
+#pragma once
+// MESSAGE ESC_INFO PACKING
+
+#define MAVLINK_MSG_ID_ESC_INFO 290
+
+
+typedef struct __mavlink_esc_info_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.*/
+ uint32_t error_count[4]; /*<  Number of reported errors by each ESC since boot.*/
+ uint16_t counter; /*<  Counter of data packets received.*/
+ uint16_t failure_flags[4]; /*<  Bitmap of ESC failure flags.*/
+ int16_t temperature[4]; /*< [cdegC] Temperature of each ESC. INT16_MAX: if data not supplied by ESC.*/
+ uint8_t index; /*<  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.*/
+ uint8_t count; /*<  Total number of ESCs in all messages of this type. Message fields with an index higher than this should be ignored because they contain invalid data.*/
+ uint8_t connection_type; /*<  Connection type protocol for all ESC.*/
+ uint8_t info; /*<  Information regarding online/offline status of each ESC.*/
+} mavlink_esc_info_t;
+
+#define MAVLINK_MSG_ID_ESC_INFO_LEN 46
+#define MAVLINK_MSG_ID_ESC_INFO_MIN_LEN 46
+#define MAVLINK_MSG_ID_290_LEN 46
+#define MAVLINK_MSG_ID_290_MIN_LEN 46
+
+#define MAVLINK_MSG_ID_ESC_INFO_CRC 251
+#define MAVLINK_MSG_ID_290_CRC 251
+
+#define MAVLINK_MSG_ESC_INFO_FIELD_ERROR_COUNT_LEN 4
+#define MAVLINK_MSG_ESC_INFO_FIELD_FAILURE_FLAGS_LEN 4
+#define MAVLINK_MSG_ESC_INFO_FIELD_TEMPERATURE_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ESC_INFO { \
+    290, \
+    "ESC_INFO", \
+    9, \
+    {  { "index", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_esc_info_t, index) }, \
+         { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_esc_info_t, time_usec) }, \
+         { "counter", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_esc_info_t, counter) }, \
+         { "count", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_esc_info_t, count) }, \
+         { "connection_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 44, offsetof(mavlink_esc_info_t, connection_type) }, \
+         { "info", NULL, MAVLINK_TYPE_UINT8_T, 0, 45, offsetof(mavlink_esc_info_t, info) }, \
+         { "failure_flags", NULL, MAVLINK_TYPE_UINT16_T, 4, 26, offsetof(mavlink_esc_info_t, failure_flags) }, \
+         { "error_count", NULL, MAVLINK_TYPE_UINT32_T, 4, 8, offsetof(mavlink_esc_info_t, error_count) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 4, 34, offsetof(mavlink_esc_info_t, temperature) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ESC_INFO { \
+    "ESC_INFO", \
+    9, \
+    {  { "index", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_esc_info_t, index) }, \
+         { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_esc_info_t, time_usec) }, \
+         { "counter", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_esc_info_t, counter) }, \
+         { "count", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_esc_info_t, count) }, \
+         { "connection_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 44, offsetof(mavlink_esc_info_t, connection_type) }, \
+         { "info", NULL, MAVLINK_TYPE_UINT8_T, 0, 45, offsetof(mavlink_esc_info_t, info) }, \
+         { "failure_flags", NULL, MAVLINK_TYPE_UINT16_T, 4, 26, offsetof(mavlink_esc_info_t, failure_flags) }, \
+         { "error_count", NULL, MAVLINK_TYPE_UINT32_T, 4, 8, offsetof(mavlink_esc_info_t, error_count) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 4, 34, offsetof(mavlink_esc_info_t, temperature) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a esc_info message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param index  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.
+ * @param counter  Counter of data packets received.
+ * @param count  Total number of ESCs in all messages of this type. Message fields with an index higher than this should be ignored because they contain invalid data.
+ * @param connection_type  Connection type protocol for all ESC.
+ * @param info  Information regarding online/offline status of each ESC.
+ * @param failure_flags  Bitmap of ESC failure flags.
+ * @param error_count  Number of reported errors by each ESC since boot.
+ * @param temperature [cdegC] Temperature of each ESC. INT16_MAX: if data not supplied by ESC.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_esc_info_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t index, uint64_t time_usec, uint16_t counter, uint8_t count, uint8_t connection_type, uint8_t info, const uint16_t *failure_flags, const uint32_t *error_count, const int16_t *temperature)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESC_INFO_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 24, counter);
+    _mav_put_uint8_t(buf, 42, index);
+    _mav_put_uint8_t(buf, 43, count);
+    _mav_put_uint8_t(buf, 44, connection_type);
+    _mav_put_uint8_t(buf, 45, info);
+    _mav_put_uint32_t_array(buf, 8, error_count, 4);
+    _mav_put_uint16_t_array(buf, 26, failure_flags, 4);
+    _mav_put_int16_t_array(buf, 34, temperature, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ESC_INFO_LEN);
+#else
+    mavlink_esc_info_t packet;
+    packet.time_usec = time_usec;
+    packet.counter = counter;
+    packet.index = index;
+    packet.count = count;
+    packet.connection_type = connection_type;
+    packet.info = info;
+    mav_array_memcpy(packet.error_count, error_count, sizeof(uint32_t)*4);
+    mav_array_memcpy(packet.failure_flags, failure_flags, sizeof(uint16_t)*4);
+    mav_array_memcpy(packet.temperature, temperature, sizeof(int16_t)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ESC_INFO_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ESC_INFO;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ESC_INFO_MIN_LEN, MAVLINK_MSG_ID_ESC_INFO_LEN, MAVLINK_MSG_ID_ESC_INFO_CRC);
+}
+
+/**
+ * @brief Pack a esc_info message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param index  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.
+ * @param counter  Counter of data packets received.
+ * @param count  Total number of ESCs in all messages of this type. Message fields with an index higher than this should be ignored because they contain invalid data.
+ * @param connection_type  Connection type protocol for all ESC.
+ * @param info  Information regarding online/offline status of each ESC.
+ * @param failure_flags  Bitmap of ESC failure flags.
+ * @param error_count  Number of reported errors by each ESC since boot.
+ * @param temperature [cdegC] Temperature of each ESC. INT16_MAX: if data not supplied by ESC.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_esc_info_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t index,uint64_t time_usec,uint16_t counter,uint8_t count,uint8_t connection_type,uint8_t info,const uint16_t *failure_flags,const uint32_t *error_count,const int16_t *temperature)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESC_INFO_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 24, counter);
+    _mav_put_uint8_t(buf, 42, index);
+    _mav_put_uint8_t(buf, 43, count);
+    _mav_put_uint8_t(buf, 44, connection_type);
+    _mav_put_uint8_t(buf, 45, info);
+    _mav_put_uint32_t_array(buf, 8, error_count, 4);
+    _mav_put_uint16_t_array(buf, 26, failure_flags, 4);
+    _mav_put_int16_t_array(buf, 34, temperature, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ESC_INFO_LEN);
+#else
+    mavlink_esc_info_t packet;
+    packet.time_usec = time_usec;
+    packet.counter = counter;
+    packet.index = index;
+    packet.count = count;
+    packet.connection_type = connection_type;
+    packet.info = info;
+    mav_array_memcpy(packet.error_count, error_count, sizeof(uint32_t)*4);
+    mav_array_memcpy(packet.failure_flags, failure_flags, sizeof(uint16_t)*4);
+    mav_array_memcpy(packet.temperature, temperature, sizeof(int16_t)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ESC_INFO_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ESC_INFO;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ESC_INFO_MIN_LEN, MAVLINK_MSG_ID_ESC_INFO_LEN, MAVLINK_MSG_ID_ESC_INFO_CRC);
+}
+
+/**
+ * @brief Encode a esc_info struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param esc_info C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_esc_info_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_esc_info_t* esc_info)
+{
+    return mavlink_msg_esc_info_pack(system_id, component_id, msg, esc_info->index, esc_info->time_usec, esc_info->counter, esc_info->count, esc_info->connection_type, esc_info->info, esc_info->failure_flags, esc_info->error_count, esc_info->temperature);
+}
+
+/**
+ * @brief Encode a esc_info struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param esc_info C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_esc_info_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_esc_info_t* esc_info)
+{
+    return mavlink_msg_esc_info_pack_chan(system_id, component_id, chan, msg, esc_info->index, esc_info->time_usec, esc_info->counter, esc_info->count, esc_info->connection_type, esc_info->info, esc_info->failure_flags, esc_info->error_count, esc_info->temperature);
+}
+
+/**
+ * @brief Send a esc_info message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param index  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.
+ * @param counter  Counter of data packets received.
+ * @param count  Total number of ESCs in all messages of this type. Message fields with an index higher than this should be ignored because they contain invalid data.
+ * @param connection_type  Connection type protocol for all ESC.
+ * @param info  Information regarding online/offline status of each ESC.
+ * @param failure_flags  Bitmap of ESC failure flags.
+ * @param error_count  Number of reported errors by each ESC since boot.
+ * @param temperature [cdegC] Temperature of each ESC. INT16_MAX: if data not supplied by ESC.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_esc_info_send(mavlink_channel_t chan, uint8_t index, uint64_t time_usec, uint16_t counter, uint8_t count, uint8_t connection_type, uint8_t info, const uint16_t *failure_flags, const uint32_t *error_count, const int16_t *temperature)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESC_INFO_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 24, counter);
+    _mav_put_uint8_t(buf, 42, index);
+    _mav_put_uint8_t(buf, 43, count);
+    _mav_put_uint8_t(buf, 44, connection_type);
+    _mav_put_uint8_t(buf, 45, info);
+    _mav_put_uint32_t_array(buf, 8, error_count, 4);
+    _mav_put_uint16_t_array(buf, 26, failure_flags, 4);
+    _mav_put_int16_t_array(buf, 34, temperature, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_INFO, buf, MAVLINK_MSG_ID_ESC_INFO_MIN_LEN, MAVLINK_MSG_ID_ESC_INFO_LEN, MAVLINK_MSG_ID_ESC_INFO_CRC);
+#else
+    mavlink_esc_info_t packet;
+    packet.time_usec = time_usec;
+    packet.counter = counter;
+    packet.index = index;
+    packet.count = count;
+    packet.connection_type = connection_type;
+    packet.info = info;
+    mav_array_memcpy(packet.error_count, error_count, sizeof(uint32_t)*4);
+    mav_array_memcpy(packet.failure_flags, failure_flags, sizeof(uint16_t)*4);
+    mav_array_memcpy(packet.temperature, temperature, sizeof(int16_t)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_INFO, (const char *)&packet, MAVLINK_MSG_ID_ESC_INFO_MIN_LEN, MAVLINK_MSG_ID_ESC_INFO_LEN, MAVLINK_MSG_ID_ESC_INFO_CRC);
+#endif
+}
+
+/**
+ * @brief Send a esc_info message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_esc_info_send_struct(mavlink_channel_t chan, const mavlink_esc_info_t* esc_info)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_esc_info_send(chan, esc_info->index, esc_info->time_usec, esc_info->counter, esc_info->count, esc_info->connection_type, esc_info->info, esc_info->failure_flags, esc_info->error_count, esc_info->temperature);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_INFO, (const char *)esc_info, MAVLINK_MSG_ID_ESC_INFO_MIN_LEN, MAVLINK_MSG_ID_ESC_INFO_LEN, MAVLINK_MSG_ID_ESC_INFO_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ESC_INFO_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_esc_info_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t index, uint64_t time_usec, uint16_t counter, uint8_t count, uint8_t connection_type, uint8_t info, const uint16_t *failure_flags, const uint32_t *error_count, const int16_t *temperature)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 24, counter);
+    _mav_put_uint8_t(buf, 42, index);
+    _mav_put_uint8_t(buf, 43, count);
+    _mav_put_uint8_t(buf, 44, connection_type);
+    _mav_put_uint8_t(buf, 45, info);
+    _mav_put_uint32_t_array(buf, 8, error_count, 4);
+    _mav_put_uint16_t_array(buf, 26, failure_flags, 4);
+    _mav_put_int16_t_array(buf, 34, temperature, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_INFO, buf, MAVLINK_MSG_ID_ESC_INFO_MIN_LEN, MAVLINK_MSG_ID_ESC_INFO_LEN, MAVLINK_MSG_ID_ESC_INFO_CRC);
+#else
+    mavlink_esc_info_t *packet = (mavlink_esc_info_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->counter = counter;
+    packet->index = index;
+    packet->count = count;
+    packet->connection_type = connection_type;
+    packet->info = info;
+    mav_array_memcpy(packet->error_count, error_count, sizeof(uint32_t)*4);
+    mav_array_memcpy(packet->failure_flags, failure_flags, sizeof(uint16_t)*4);
+    mav_array_memcpy(packet->temperature, temperature, sizeof(int16_t)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_INFO, (const char *)packet, MAVLINK_MSG_ID_ESC_INFO_MIN_LEN, MAVLINK_MSG_ID_ESC_INFO_LEN, MAVLINK_MSG_ID_ESC_INFO_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ESC_INFO UNPACKING
+
+
+/**
+ * @brief Get field index from esc_info message
+ *
+ * @return  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.
+ */
+static inline uint8_t mavlink_msg_esc_info_get_index(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  42);
+}
+
+/**
+ * @brief Get field time_usec from esc_info message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.
+ */
+static inline uint64_t mavlink_msg_esc_info_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field counter from esc_info message
+ *
+ * @return  Counter of data packets received.
+ */
+static inline uint16_t mavlink_msg_esc_info_get_counter(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Get field count from esc_info message
+ *
+ * @return  Total number of ESCs in all messages of this type. Message fields with an index higher than this should be ignored because they contain invalid data.
+ */
+static inline uint8_t mavlink_msg_esc_info_get_count(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  43);
+}
+
+/**
+ * @brief Get field connection_type from esc_info message
+ *
+ * @return  Connection type protocol for all ESC.
+ */
+static inline uint8_t mavlink_msg_esc_info_get_connection_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  44);
+}
+
+/**
+ * @brief Get field info from esc_info message
+ *
+ * @return  Information regarding online/offline status of each ESC.
+ */
+static inline uint8_t mavlink_msg_esc_info_get_info(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  45);
+}
+
+/**
+ * @brief Get field failure_flags from esc_info message
+ *
+ * @return  Bitmap of ESC failure flags.
+ */
+static inline uint16_t mavlink_msg_esc_info_get_failure_flags(const mavlink_message_t* msg, uint16_t *failure_flags)
+{
+    return _MAV_RETURN_uint16_t_array(msg, failure_flags, 4,  26);
+}
+
+/**
+ * @brief Get field error_count from esc_info message
+ *
+ * @return  Number of reported errors by each ESC since boot.
+ */
+static inline uint16_t mavlink_msg_esc_info_get_error_count(const mavlink_message_t* msg, uint32_t *error_count)
+{
+    return _MAV_RETURN_uint32_t_array(msg, error_count, 4,  8);
+}
+
+/**
+ * @brief Get field temperature from esc_info message
+ *
+ * @return [cdegC] Temperature of each ESC. INT16_MAX: if data not supplied by ESC.
+ */
+static inline uint16_t mavlink_msg_esc_info_get_temperature(const mavlink_message_t* msg, int16_t *temperature)
+{
+    return _MAV_RETURN_int16_t_array(msg, temperature, 4,  34);
+}
+
+/**
+ * @brief Decode a esc_info message into a struct
+ *
+ * @param msg The message to decode
+ * @param esc_info C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_esc_info_decode(const mavlink_message_t* msg, mavlink_esc_info_t* esc_info)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    esc_info->time_usec = mavlink_msg_esc_info_get_time_usec(msg);
+    mavlink_msg_esc_info_get_error_count(msg, esc_info->error_count);
+    esc_info->counter = mavlink_msg_esc_info_get_counter(msg);
+    mavlink_msg_esc_info_get_failure_flags(msg, esc_info->failure_flags);
+    mavlink_msg_esc_info_get_temperature(msg, esc_info->temperature);
+    esc_info->index = mavlink_msg_esc_info_get_index(msg);
+    esc_info->count = mavlink_msg_esc_info_get_count(msg);
+    esc_info->connection_type = mavlink_msg_esc_info_get_connection_type(msg);
+    esc_info->info = mavlink_msg_esc_info_get_info(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ESC_INFO_LEN? msg->len : MAVLINK_MSG_ID_ESC_INFO_LEN;
+        memset(esc_info, 0, MAVLINK_MSG_ID_ESC_INFO_LEN);
+    memcpy(esc_info, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 307 - 0
v2.0/common/mavlink_msg_esc_status.h

@@ -0,0 +1,307 @@
+#pragma once
+// MESSAGE ESC_STATUS PACKING
+
+#define MAVLINK_MSG_ID_ESC_STATUS 291
+
+
+typedef struct __mavlink_esc_status_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.*/
+ int32_t rpm[4]; /*< [rpm] Reported motor RPM from each ESC (negative for reverse rotation).*/
+ float voltage[4]; /*< [V] Voltage measured from each ESC.*/
+ float current[4]; /*< [A] Current measured from each ESC.*/
+ uint8_t index; /*<  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.*/
+} mavlink_esc_status_t;
+
+#define MAVLINK_MSG_ID_ESC_STATUS_LEN 57
+#define MAVLINK_MSG_ID_ESC_STATUS_MIN_LEN 57
+#define MAVLINK_MSG_ID_291_LEN 57
+#define MAVLINK_MSG_ID_291_MIN_LEN 57
+
+#define MAVLINK_MSG_ID_ESC_STATUS_CRC 10
+#define MAVLINK_MSG_ID_291_CRC 10
+
+#define MAVLINK_MSG_ESC_STATUS_FIELD_RPM_LEN 4
+#define MAVLINK_MSG_ESC_STATUS_FIELD_VOLTAGE_LEN 4
+#define MAVLINK_MSG_ESC_STATUS_FIELD_CURRENT_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ESC_STATUS { \
+    291, \
+    "ESC_STATUS", \
+    5, \
+    {  { "index", NULL, MAVLINK_TYPE_UINT8_T, 0, 56, offsetof(mavlink_esc_status_t, index) }, \
+         { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_esc_status_t, time_usec) }, \
+         { "rpm", NULL, MAVLINK_TYPE_INT32_T, 4, 8, offsetof(mavlink_esc_status_t, rpm) }, \
+         { "voltage", NULL, MAVLINK_TYPE_FLOAT, 4, 24, offsetof(mavlink_esc_status_t, voltage) }, \
+         { "current", NULL, MAVLINK_TYPE_FLOAT, 4, 40, offsetof(mavlink_esc_status_t, current) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ESC_STATUS { \
+    "ESC_STATUS", \
+    5, \
+    {  { "index", NULL, MAVLINK_TYPE_UINT8_T, 0, 56, offsetof(mavlink_esc_status_t, index) }, \
+         { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_esc_status_t, time_usec) }, \
+         { "rpm", NULL, MAVLINK_TYPE_INT32_T, 4, 8, offsetof(mavlink_esc_status_t, rpm) }, \
+         { "voltage", NULL, MAVLINK_TYPE_FLOAT, 4, 24, offsetof(mavlink_esc_status_t, voltage) }, \
+         { "current", NULL, MAVLINK_TYPE_FLOAT, 4, 40, offsetof(mavlink_esc_status_t, current) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a esc_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param index  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.
+ * @param rpm [rpm] Reported motor RPM from each ESC (negative for reverse rotation).
+ * @param voltage [V] Voltage measured from each ESC.
+ * @param current [A] Current measured from each ESC.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_esc_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t index, uint64_t time_usec, const int32_t *rpm, const float *voltage, const float *current)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESC_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint8_t(buf, 56, index);
+    _mav_put_int32_t_array(buf, 8, rpm, 4);
+    _mav_put_float_array(buf, 24, voltage, 4);
+    _mav_put_float_array(buf, 40, current, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ESC_STATUS_LEN);
+#else
+    mavlink_esc_status_t packet;
+    packet.time_usec = time_usec;
+    packet.index = index;
+    mav_array_memcpy(packet.rpm, rpm, sizeof(int32_t)*4);
+    mav_array_memcpy(packet.voltage, voltage, sizeof(float)*4);
+    mav_array_memcpy(packet.current, current, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ESC_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ESC_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ESC_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESC_STATUS_LEN, MAVLINK_MSG_ID_ESC_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a esc_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param index  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.
+ * @param rpm [rpm] Reported motor RPM from each ESC (negative for reverse rotation).
+ * @param voltage [V] Voltage measured from each ESC.
+ * @param current [A] Current measured from each ESC.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_esc_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t index,uint64_t time_usec,const int32_t *rpm,const float *voltage,const float *current)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESC_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint8_t(buf, 56, index);
+    _mav_put_int32_t_array(buf, 8, rpm, 4);
+    _mav_put_float_array(buf, 24, voltage, 4);
+    _mav_put_float_array(buf, 40, current, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ESC_STATUS_LEN);
+#else
+    mavlink_esc_status_t packet;
+    packet.time_usec = time_usec;
+    packet.index = index;
+    mav_array_memcpy(packet.rpm, rpm, sizeof(int32_t)*4);
+    mav_array_memcpy(packet.voltage, voltage, sizeof(float)*4);
+    mav_array_memcpy(packet.current, current, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ESC_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ESC_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ESC_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESC_STATUS_LEN, MAVLINK_MSG_ID_ESC_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a esc_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param esc_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_esc_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_esc_status_t* esc_status)
+{
+    return mavlink_msg_esc_status_pack(system_id, component_id, msg, esc_status->index, esc_status->time_usec, esc_status->rpm, esc_status->voltage, esc_status->current);
+}
+
+/**
+ * @brief Encode a esc_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param esc_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_esc_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_esc_status_t* esc_status)
+{
+    return mavlink_msg_esc_status_pack_chan(system_id, component_id, chan, msg, esc_status->index, esc_status->time_usec, esc_status->rpm, esc_status->voltage, esc_status->current);
+}
+
+/**
+ * @brief Send a esc_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param index  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.
+ * @param rpm [rpm] Reported motor RPM from each ESC (negative for reverse rotation).
+ * @param voltage [V] Voltage measured from each ESC.
+ * @param current [A] Current measured from each ESC.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_esc_status_send(mavlink_channel_t chan, uint8_t index, uint64_t time_usec, const int32_t *rpm, const float *voltage, const float *current)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESC_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint8_t(buf, 56, index);
+    _mav_put_int32_t_array(buf, 8, rpm, 4);
+    _mav_put_float_array(buf, 24, voltage, 4);
+    _mav_put_float_array(buf, 40, current, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_STATUS, buf, MAVLINK_MSG_ID_ESC_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESC_STATUS_LEN, MAVLINK_MSG_ID_ESC_STATUS_CRC);
+#else
+    mavlink_esc_status_t packet;
+    packet.time_usec = time_usec;
+    packet.index = index;
+    mav_array_memcpy(packet.rpm, rpm, sizeof(int32_t)*4);
+    mav_array_memcpy(packet.voltage, voltage, sizeof(float)*4);
+    mav_array_memcpy(packet.current, current, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_STATUS, (const char *)&packet, MAVLINK_MSG_ID_ESC_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESC_STATUS_LEN, MAVLINK_MSG_ID_ESC_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a esc_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_esc_status_send_struct(mavlink_channel_t chan, const mavlink_esc_status_t* esc_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_esc_status_send(chan, esc_status->index, esc_status->time_usec, esc_status->rpm, esc_status->voltage, esc_status->current);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_STATUS, (const char *)esc_status, MAVLINK_MSG_ID_ESC_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESC_STATUS_LEN, MAVLINK_MSG_ID_ESC_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ESC_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_esc_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t index, uint64_t time_usec, const int32_t *rpm, const float *voltage, const float *current)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint8_t(buf, 56, index);
+    _mav_put_int32_t_array(buf, 8, rpm, 4);
+    _mav_put_float_array(buf, 24, voltage, 4);
+    _mav_put_float_array(buf, 40, current, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_STATUS, buf, MAVLINK_MSG_ID_ESC_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESC_STATUS_LEN, MAVLINK_MSG_ID_ESC_STATUS_CRC);
+#else
+    mavlink_esc_status_t *packet = (mavlink_esc_status_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->index = index;
+    mav_array_memcpy(packet->rpm, rpm, sizeof(int32_t)*4);
+    mav_array_memcpy(packet->voltage, voltage, sizeof(float)*4);
+    mav_array_memcpy(packet->current, current, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESC_STATUS, (const char *)packet, MAVLINK_MSG_ID_ESC_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESC_STATUS_LEN, MAVLINK_MSG_ID_ESC_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ESC_STATUS UNPACKING
+
+
+/**
+ * @brief Get field index from esc_status message
+ *
+ * @return  Index of the first ESC in this message. minValue = 0, maxValue = 60, increment = 4.
+ */
+static inline uint8_t mavlink_msg_esc_status_get_index(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  56);
+}
+
+/**
+ * @brief Get field time_usec from esc_status message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number.
+ */
+static inline uint64_t mavlink_msg_esc_status_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field rpm from esc_status message
+ *
+ * @return [rpm] Reported motor RPM from each ESC (negative for reverse rotation).
+ */
+static inline uint16_t mavlink_msg_esc_status_get_rpm(const mavlink_message_t* msg, int32_t *rpm)
+{
+    return _MAV_RETURN_int32_t_array(msg, rpm, 4,  8);
+}
+
+/**
+ * @brief Get field voltage from esc_status message
+ *
+ * @return [V] Voltage measured from each ESC.
+ */
+static inline uint16_t mavlink_msg_esc_status_get_voltage(const mavlink_message_t* msg, float *voltage)
+{
+    return _MAV_RETURN_float_array(msg, voltage, 4,  24);
+}
+
+/**
+ * @brief Get field current from esc_status message
+ *
+ * @return [A] Current measured from each ESC.
+ */
+static inline uint16_t mavlink_msg_esc_status_get_current(const mavlink_message_t* msg, float *current)
+{
+    return _MAV_RETURN_float_array(msg, current, 4,  40);
+}
+
+/**
+ * @brief Decode a esc_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param esc_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_esc_status_decode(const mavlink_message_t* msg, mavlink_esc_status_t* esc_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    esc_status->time_usec = mavlink_msg_esc_status_get_time_usec(msg);
+    mavlink_msg_esc_status_get_rpm(msg, esc_status->rpm);
+    mavlink_msg_esc_status_get_voltage(msg, esc_status->voltage);
+    mavlink_msg_esc_status_get_current(msg, esc_status->current);
+    esc_status->index = mavlink_msg_esc_status_get_index(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ESC_STATUS_LEN? msg->len : MAVLINK_MSG_ID_ESC_STATUS_LEN;
+        memset(esc_status, 0, MAVLINK_MSG_ID_ESC_STATUS_LEN);
+    memcpy(esc_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 438 - 0
v2.0/common/mavlink_msg_estimator_status.h

@@ -0,0 +1,438 @@
+#pragma once
+// MESSAGE ESTIMATOR_STATUS PACKING
+
+#define MAVLINK_MSG_ID_ESTIMATOR_STATUS 230
+
+
+typedef struct __mavlink_estimator_status_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float vel_ratio; /*<  Velocity innovation test ratio*/
+ float pos_horiz_ratio; /*<  Horizontal position innovation test ratio*/
+ float pos_vert_ratio; /*<  Vertical position innovation test ratio*/
+ float mag_ratio; /*<  Magnetometer innovation test ratio*/
+ float hagl_ratio; /*<  Height above terrain innovation test ratio*/
+ float tas_ratio; /*<  True airspeed innovation test ratio*/
+ float pos_horiz_accuracy; /*< [m] Horizontal position 1-STD accuracy relative to the EKF local origin*/
+ float pos_vert_accuracy; /*< [m] Vertical position 1-STD accuracy relative to the EKF local origin*/
+ uint16_t flags; /*<  Bitmap indicating which EKF outputs are valid.*/
+} mavlink_estimator_status_t;
+
+#define MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN 42
+#define MAVLINK_MSG_ID_ESTIMATOR_STATUS_MIN_LEN 42
+#define MAVLINK_MSG_ID_230_LEN 42
+#define MAVLINK_MSG_ID_230_MIN_LEN 42
+
+#define MAVLINK_MSG_ID_ESTIMATOR_STATUS_CRC 163
+#define MAVLINK_MSG_ID_230_CRC 163
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_ESTIMATOR_STATUS { \
+    230, \
+    "ESTIMATOR_STATUS", \
+    10, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_estimator_status_t, time_usec) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 40, offsetof(mavlink_estimator_status_t, flags) }, \
+         { "vel_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_estimator_status_t, vel_ratio) }, \
+         { "pos_horiz_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_estimator_status_t, pos_horiz_ratio) }, \
+         { "pos_vert_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_estimator_status_t, pos_vert_ratio) }, \
+         { "mag_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_estimator_status_t, mag_ratio) }, \
+         { "hagl_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_estimator_status_t, hagl_ratio) }, \
+         { "tas_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_estimator_status_t, tas_ratio) }, \
+         { "pos_horiz_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_estimator_status_t, pos_horiz_accuracy) }, \
+         { "pos_vert_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_estimator_status_t, pos_vert_accuracy) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_ESTIMATOR_STATUS { \
+    "ESTIMATOR_STATUS", \
+    10, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_estimator_status_t, time_usec) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 40, offsetof(mavlink_estimator_status_t, flags) }, \
+         { "vel_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_estimator_status_t, vel_ratio) }, \
+         { "pos_horiz_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_estimator_status_t, pos_horiz_ratio) }, \
+         { "pos_vert_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_estimator_status_t, pos_vert_ratio) }, \
+         { "mag_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_estimator_status_t, mag_ratio) }, \
+         { "hagl_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_estimator_status_t, hagl_ratio) }, \
+         { "tas_ratio", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_estimator_status_t, tas_ratio) }, \
+         { "pos_horiz_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_estimator_status_t, pos_horiz_accuracy) }, \
+         { "pos_vert_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_estimator_status_t, pos_vert_accuracy) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a estimator_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param flags  Bitmap indicating which EKF outputs are valid.
+ * @param vel_ratio  Velocity innovation test ratio
+ * @param pos_horiz_ratio  Horizontal position innovation test ratio
+ * @param pos_vert_ratio  Vertical position innovation test ratio
+ * @param mag_ratio  Magnetometer innovation test ratio
+ * @param hagl_ratio  Height above terrain innovation test ratio
+ * @param tas_ratio  True airspeed innovation test ratio
+ * @param pos_horiz_accuracy [m] Horizontal position 1-STD accuracy relative to the EKF local origin
+ * @param pos_vert_accuracy [m] Vertical position 1-STD accuracy relative to the EKF local origin
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_estimator_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint16_t flags, float vel_ratio, float pos_horiz_ratio, float pos_vert_ratio, float mag_ratio, float hagl_ratio, float tas_ratio, float pos_horiz_accuracy, float pos_vert_accuracy)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, vel_ratio);
+    _mav_put_float(buf, 12, pos_horiz_ratio);
+    _mav_put_float(buf, 16, pos_vert_ratio);
+    _mav_put_float(buf, 20, mag_ratio);
+    _mav_put_float(buf, 24, hagl_ratio);
+    _mav_put_float(buf, 28, tas_ratio);
+    _mav_put_float(buf, 32, pos_horiz_accuracy);
+    _mav_put_float(buf, 36, pos_vert_accuracy);
+    _mav_put_uint16_t(buf, 40, flags);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN);
+#else
+    mavlink_estimator_status_t packet;
+    packet.time_usec = time_usec;
+    packet.vel_ratio = vel_ratio;
+    packet.pos_horiz_ratio = pos_horiz_ratio;
+    packet.pos_vert_ratio = pos_vert_ratio;
+    packet.mag_ratio = mag_ratio;
+    packet.hagl_ratio = hagl_ratio;
+    packet.tas_ratio = tas_ratio;
+    packet.pos_horiz_accuracy = pos_horiz_accuracy;
+    packet.pos_vert_accuracy = pos_vert_accuracy;
+    packet.flags = flags;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ESTIMATOR_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_ESTIMATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a estimator_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param flags  Bitmap indicating which EKF outputs are valid.
+ * @param vel_ratio  Velocity innovation test ratio
+ * @param pos_horiz_ratio  Horizontal position innovation test ratio
+ * @param pos_vert_ratio  Vertical position innovation test ratio
+ * @param mag_ratio  Magnetometer innovation test ratio
+ * @param hagl_ratio  Height above terrain innovation test ratio
+ * @param tas_ratio  True airspeed innovation test ratio
+ * @param pos_horiz_accuracy [m] Horizontal position 1-STD accuracy relative to the EKF local origin
+ * @param pos_vert_accuracy [m] Vertical position 1-STD accuracy relative to the EKF local origin
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_estimator_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint16_t flags,float vel_ratio,float pos_horiz_ratio,float pos_vert_ratio,float mag_ratio,float hagl_ratio,float tas_ratio,float pos_horiz_accuracy,float pos_vert_accuracy)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, vel_ratio);
+    _mav_put_float(buf, 12, pos_horiz_ratio);
+    _mav_put_float(buf, 16, pos_vert_ratio);
+    _mav_put_float(buf, 20, mag_ratio);
+    _mav_put_float(buf, 24, hagl_ratio);
+    _mav_put_float(buf, 28, tas_ratio);
+    _mav_put_float(buf, 32, pos_horiz_accuracy);
+    _mav_put_float(buf, 36, pos_vert_accuracy);
+    _mav_put_uint16_t(buf, 40, flags);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN);
+#else
+    mavlink_estimator_status_t packet;
+    packet.time_usec = time_usec;
+    packet.vel_ratio = vel_ratio;
+    packet.pos_horiz_ratio = pos_horiz_ratio;
+    packet.pos_vert_ratio = pos_vert_ratio;
+    packet.mag_ratio = mag_ratio;
+    packet.hagl_ratio = hagl_ratio;
+    packet.tas_ratio = tas_ratio;
+    packet.pos_horiz_accuracy = pos_horiz_accuracy;
+    packet.pos_vert_accuracy = pos_vert_accuracy;
+    packet.flags = flags;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_ESTIMATOR_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_ESTIMATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a estimator_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param estimator_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_estimator_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_estimator_status_t* estimator_status)
+{
+    return mavlink_msg_estimator_status_pack(system_id, component_id, msg, estimator_status->time_usec, estimator_status->flags, estimator_status->vel_ratio, estimator_status->pos_horiz_ratio, estimator_status->pos_vert_ratio, estimator_status->mag_ratio, estimator_status->hagl_ratio, estimator_status->tas_ratio, estimator_status->pos_horiz_accuracy, estimator_status->pos_vert_accuracy);
+}
+
+/**
+ * @brief Encode a estimator_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param estimator_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_estimator_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_estimator_status_t* estimator_status)
+{
+    return mavlink_msg_estimator_status_pack_chan(system_id, component_id, chan, msg, estimator_status->time_usec, estimator_status->flags, estimator_status->vel_ratio, estimator_status->pos_horiz_ratio, estimator_status->pos_vert_ratio, estimator_status->mag_ratio, estimator_status->hagl_ratio, estimator_status->tas_ratio, estimator_status->pos_horiz_accuracy, estimator_status->pos_vert_accuracy);
+}
+
+/**
+ * @brief Send a estimator_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param flags  Bitmap indicating which EKF outputs are valid.
+ * @param vel_ratio  Velocity innovation test ratio
+ * @param pos_horiz_ratio  Horizontal position innovation test ratio
+ * @param pos_vert_ratio  Vertical position innovation test ratio
+ * @param mag_ratio  Magnetometer innovation test ratio
+ * @param hagl_ratio  Height above terrain innovation test ratio
+ * @param tas_ratio  True airspeed innovation test ratio
+ * @param pos_horiz_accuracy [m] Horizontal position 1-STD accuracy relative to the EKF local origin
+ * @param pos_vert_accuracy [m] Vertical position 1-STD accuracy relative to the EKF local origin
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_estimator_status_send(mavlink_channel_t chan, uint64_t time_usec, uint16_t flags, float vel_ratio, float pos_horiz_ratio, float pos_vert_ratio, float mag_ratio, float hagl_ratio, float tas_ratio, float pos_horiz_accuracy, float pos_vert_accuracy)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, vel_ratio);
+    _mav_put_float(buf, 12, pos_horiz_ratio);
+    _mav_put_float(buf, 16, pos_vert_ratio);
+    _mav_put_float(buf, 20, mag_ratio);
+    _mav_put_float(buf, 24, hagl_ratio);
+    _mav_put_float(buf, 28, tas_ratio);
+    _mav_put_float(buf, 32, pos_horiz_accuracy);
+    _mav_put_float(buf, 36, pos_vert_accuracy);
+    _mav_put_uint16_t(buf, 40, flags);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESTIMATOR_STATUS, buf, MAVLINK_MSG_ID_ESTIMATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_CRC);
+#else
+    mavlink_estimator_status_t packet;
+    packet.time_usec = time_usec;
+    packet.vel_ratio = vel_ratio;
+    packet.pos_horiz_ratio = pos_horiz_ratio;
+    packet.pos_vert_ratio = pos_vert_ratio;
+    packet.mag_ratio = mag_ratio;
+    packet.hagl_ratio = hagl_ratio;
+    packet.tas_ratio = tas_ratio;
+    packet.pos_horiz_accuracy = pos_horiz_accuracy;
+    packet.pos_vert_accuracy = pos_vert_accuracy;
+    packet.flags = flags;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESTIMATOR_STATUS, (const char *)&packet, MAVLINK_MSG_ID_ESTIMATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a estimator_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_estimator_status_send_struct(mavlink_channel_t chan, const mavlink_estimator_status_t* estimator_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_estimator_status_send(chan, estimator_status->time_usec, estimator_status->flags, estimator_status->vel_ratio, estimator_status->pos_horiz_ratio, estimator_status->pos_vert_ratio, estimator_status->mag_ratio, estimator_status->hagl_ratio, estimator_status->tas_ratio, estimator_status->pos_horiz_accuracy, estimator_status->pos_vert_accuracy);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESTIMATOR_STATUS, (const char *)estimator_status, MAVLINK_MSG_ID_ESTIMATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_estimator_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint16_t flags, float vel_ratio, float pos_horiz_ratio, float pos_vert_ratio, float mag_ratio, float hagl_ratio, float tas_ratio, float pos_horiz_accuracy, float pos_vert_accuracy)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, vel_ratio);
+    _mav_put_float(buf, 12, pos_horiz_ratio);
+    _mav_put_float(buf, 16, pos_vert_ratio);
+    _mav_put_float(buf, 20, mag_ratio);
+    _mav_put_float(buf, 24, hagl_ratio);
+    _mav_put_float(buf, 28, tas_ratio);
+    _mav_put_float(buf, 32, pos_horiz_accuracy);
+    _mav_put_float(buf, 36, pos_vert_accuracy);
+    _mav_put_uint16_t(buf, 40, flags);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESTIMATOR_STATUS, buf, MAVLINK_MSG_ID_ESTIMATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_CRC);
+#else
+    mavlink_estimator_status_t *packet = (mavlink_estimator_status_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->vel_ratio = vel_ratio;
+    packet->pos_horiz_ratio = pos_horiz_ratio;
+    packet->pos_vert_ratio = pos_vert_ratio;
+    packet->mag_ratio = mag_ratio;
+    packet->hagl_ratio = hagl_ratio;
+    packet->tas_ratio = tas_ratio;
+    packet->pos_horiz_accuracy = pos_horiz_accuracy;
+    packet->pos_vert_accuracy = pos_vert_accuracy;
+    packet->flags = flags;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_ESTIMATOR_STATUS, (const char *)packet, MAVLINK_MSG_ID_ESTIMATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN, MAVLINK_MSG_ID_ESTIMATOR_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE ESTIMATOR_STATUS UNPACKING
+
+
+/**
+ * @brief Get field time_usec from estimator_status message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_estimator_status_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field flags from estimator_status message
+ *
+ * @return  Bitmap indicating which EKF outputs are valid.
+ */
+static inline uint16_t mavlink_msg_estimator_status_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  40);
+}
+
+/**
+ * @brief Get field vel_ratio from estimator_status message
+ *
+ * @return  Velocity innovation test ratio
+ */
+static inline float mavlink_msg_estimator_status_get_vel_ratio(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field pos_horiz_ratio from estimator_status message
+ *
+ * @return  Horizontal position innovation test ratio
+ */
+static inline float mavlink_msg_estimator_status_get_pos_horiz_ratio(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field pos_vert_ratio from estimator_status message
+ *
+ * @return  Vertical position innovation test ratio
+ */
+static inline float mavlink_msg_estimator_status_get_pos_vert_ratio(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field mag_ratio from estimator_status message
+ *
+ * @return  Magnetometer innovation test ratio
+ */
+static inline float mavlink_msg_estimator_status_get_mag_ratio(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field hagl_ratio from estimator_status message
+ *
+ * @return  Height above terrain innovation test ratio
+ */
+static inline float mavlink_msg_estimator_status_get_hagl_ratio(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field tas_ratio from estimator_status message
+ *
+ * @return  True airspeed innovation test ratio
+ */
+static inline float mavlink_msg_estimator_status_get_tas_ratio(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field pos_horiz_accuracy from estimator_status message
+ *
+ * @return [m] Horizontal position 1-STD accuracy relative to the EKF local origin
+ */
+static inline float mavlink_msg_estimator_status_get_pos_horiz_accuracy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field pos_vert_accuracy from estimator_status message
+ *
+ * @return [m] Vertical position 1-STD accuracy relative to the EKF local origin
+ */
+static inline float mavlink_msg_estimator_status_get_pos_vert_accuracy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Decode a estimator_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param estimator_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_estimator_status_decode(const mavlink_message_t* msg, mavlink_estimator_status_t* estimator_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    estimator_status->time_usec = mavlink_msg_estimator_status_get_time_usec(msg);
+    estimator_status->vel_ratio = mavlink_msg_estimator_status_get_vel_ratio(msg);
+    estimator_status->pos_horiz_ratio = mavlink_msg_estimator_status_get_pos_horiz_ratio(msg);
+    estimator_status->pos_vert_ratio = mavlink_msg_estimator_status_get_pos_vert_ratio(msg);
+    estimator_status->mag_ratio = mavlink_msg_estimator_status_get_mag_ratio(msg);
+    estimator_status->hagl_ratio = mavlink_msg_estimator_status_get_hagl_ratio(msg);
+    estimator_status->tas_ratio = mavlink_msg_estimator_status_get_tas_ratio(msg);
+    estimator_status->pos_horiz_accuracy = mavlink_msg_estimator_status_get_pos_horiz_accuracy(msg);
+    estimator_status->pos_vert_accuracy = mavlink_msg_estimator_status_get_pos_vert_accuracy(msg);
+    estimator_status->flags = mavlink_msg_estimator_status_get_flags(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN? msg->len : MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN;
+        memset(estimator_status, 0, MAVLINK_MSG_ID_ESTIMATOR_STATUS_LEN);
+    memcpy(estimator_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 355 - 0
v2.0/common/mavlink_msg_event.h

@@ -0,0 +1,355 @@
+#pragma once
+// MESSAGE EVENT PACKING
+
+#define MAVLINK_MSG_ID_EVENT 410
+
+
+typedef struct __mavlink_event_t {
+ uint32_t id; /*<  Event ID (as defined in the component metadata)*/
+ uint32_t event_time_boot_ms; /*< [ms] Timestamp (time since system boot when the event happened).*/
+ uint16_t sequence; /*<  Sequence number.*/
+ uint8_t destination_component; /*<  Component ID*/
+ uint8_t destination_system; /*<  System ID*/
+ uint8_t log_levels; /*<  Log levels: 4 bits MSB: internal (for logging purposes), 4 bits LSB: external. Levels: Emergency = 0, Alert = 1, Critical = 2, Error = 3, Warning = 4, Notice = 5, Info = 6, Debug = 7, Protocol = 8, Disabled = 9*/
+ uint8_t arguments[40]; /*<  Arguments (depend on event ID).*/
+} mavlink_event_t;
+
+#define MAVLINK_MSG_ID_EVENT_LEN 53
+#define MAVLINK_MSG_ID_EVENT_MIN_LEN 53
+#define MAVLINK_MSG_ID_410_LEN 53
+#define MAVLINK_MSG_ID_410_MIN_LEN 53
+
+#define MAVLINK_MSG_ID_EVENT_CRC 160
+#define MAVLINK_MSG_ID_410_CRC 160
+
+#define MAVLINK_MSG_EVENT_FIELD_ARGUMENTS_LEN 40
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_EVENT { \
+    410, \
+    "EVENT", \
+    7, \
+    {  { "destination_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_event_t, destination_component) }, \
+         { "destination_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_event_t, destination_system) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_event_t, id) }, \
+         { "event_time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_event_t, event_time_boot_ms) }, \
+         { "sequence", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_event_t, sequence) }, \
+         { "log_levels", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_event_t, log_levels) }, \
+         { "arguments", NULL, MAVLINK_TYPE_UINT8_T, 40, 13, offsetof(mavlink_event_t, arguments) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_EVENT { \
+    "EVENT", \
+    7, \
+    {  { "destination_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_event_t, destination_component) }, \
+         { "destination_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_event_t, destination_system) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_event_t, id) }, \
+         { "event_time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_event_t, event_time_boot_ms) }, \
+         { "sequence", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_event_t, sequence) }, \
+         { "log_levels", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_event_t, log_levels) }, \
+         { "arguments", NULL, MAVLINK_TYPE_UINT8_T, 40, 13, offsetof(mavlink_event_t, arguments) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a event message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param destination_component  Component ID
+ * @param destination_system  System ID
+ * @param id  Event ID (as defined in the component metadata)
+ * @param event_time_boot_ms [ms] Timestamp (time since system boot when the event happened).
+ * @param sequence  Sequence number.
+ * @param log_levels  Log levels: 4 bits MSB: internal (for logging purposes), 4 bits LSB: external. Levels: Emergency = 0, Alert = 1, Critical = 2, Error = 3, Warning = 4, Notice = 5, Info = 6, Debug = 7, Protocol = 8, Disabled = 9
+ * @param arguments  Arguments (depend on event ID).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_event_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t destination_component, uint8_t destination_system, uint32_t id, uint32_t event_time_boot_ms, uint16_t sequence, uint8_t log_levels, const uint8_t *arguments)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EVENT_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint32_t(buf, 4, event_time_boot_ms);
+    _mav_put_uint16_t(buf, 8, sequence);
+    _mav_put_uint8_t(buf, 10, destination_component);
+    _mav_put_uint8_t(buf, 11, destination_system);
+    _mav_put_uint8_t(buf, 12, log_levels);
+    _mav_put_uint8_t_array(buf, 13, arguments, 40);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_EVENT_LEN);
+#else
+    mavlink_event_t packet;
+    packet.id = id;
+    packet.event_time_boot_ms = event_time_boot_ms;
+    packet.sequence = sequence;
+    packet.destination_component = destination_component;
+    packet.destination_system = destination_system;
+    packet.log_levels = log_levels;
+    mav_array_memcpy(packet.arguments, arguments, sizeof(uint8_t)*40);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_EVENT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_EVENT;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_EVENT_MIN_LEN, MAVLINK_MSG_ID_EVENT_LEN, MAVLINK_MSG_ID_EVENT_CRC);
+}
+
+/**
+ * @brief Pack a event message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param destination_component  Component ID
+ * @param destination_system  System ID
+ * @param id  Event ID (as defined in the component metadata)
+ * @param event_time_boot_ms [ms] Timestamp (time since system boot when the event happened).
+ * @param sequence  Sequence number.
+ * @param log_levels  Log levels: 4 bits MSB: internal (for logging purposes), 4 bits LSB: external. Levels: Emergency = 0, Alert = 1, Critical = 2, Error = 3, Warning = 4, Notice = 5, Info = 6, Debug = 7, Protocol = 8, Disabled = 9
+ * @param arguments  Arguments (depend on event ID).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_event_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t destination_component,uint8_t destination_system,uint32_t id,uint32_t event_time_boot_ms,uint16_t sequence,uint8_t log_levels,const uint8_t *arguments)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EVENT_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint32_t(buf, 4, event_time_boot_ms);
+    _mav_put_uint16_t(buf, 8, sequence);
+    _mav_put_uint8_t(buf, 10, destination_component);
+    _mav_put_uint8_t(buf, 11, destination_system);
+    _mav_put_uint8_t(buf, 12, log_levels);
+    _mav_put_uint8_t_array(buf, 13, arguments, 40);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_EVENT_LEN);
+#else
+    mavlink_event_t packet;
+    packet.id = id;
+    packet.event_time_boot_ms = event_time_boot_ms;
+    packet.sequence = sequence;
+    packet.destination_component = destination_component;
+    packet.destination_system = destination_system;
+    packet.log_levels = log_levels;
+    mav_array_memcpy(packet.arguments, arguments, sizeof(uint8_t)*40);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_EVENT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_EVENT;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_EVENT_MIN_LEN, MAVLINK_MSG_ID_EVENT_LEN, MAVLINK_MSG_ID_EVENT_CRC);
+}
+
+/**
+ * @brief Encode a event struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param event C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_event_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_event_t* event)
+{
+    return mavlink_msg_event_pack(system_id, component_id, msg, event->destination_component, event->destination_system, event->id, event->event_time_boot_ms, event->sequence, event->log_levels, event->arguments);
+}
+
+/**
+ * @brief Encode a event struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param event C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_event_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_event_t* event)
+{
+    return mavlink_msg_event_pack_chan(system_id, component_id, chan, msg, event->destination_component, event->destination_system, event->id, event->event_time_boot_ms, event->sequence, event->log_levels, event->arguments);
+}
+
+/**
+ * @brief Send a event message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param destination_component  Component ID
+ * @param destination_system  System ID
+ * @param id  Event ID (as defined in the component metadata)
+ * @param event_time_boot_ms [ms] Timestamp (time since system boot when the event happened).
+ * @param sequence  Sequence number.
+ * @param log_levels  Log levels: 4 bits MSB: internal (for logging purposes), 4 bits LSB: external. Levels: Emergency = 0, Alert = 1, Critical = 2, Error = 3, Warning = 4, Notice = 5, Info = 6, Debug = 7, Protocol = 8, Disabled = 9
+ * @param arguments  Arguments (depend on event ID).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_event_send(mavlink_channel_t chan, uint8_t destination_component, uint8_t destination_system, uint32_t id, uint32_t event_time_boot_ms, uint16_t sequence, uint8_t log_levels, const uint8_t *arguments)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EVENT_LEN];
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint32_t(buf, 4, event_time_boot_ms);
+    _mav_put_uint16_t(buf, 8, sequence);
+    _mav_put_uint8_t(buf, 10, destination_component);
+    _mav_put_uint8_t(buf, 11, destination_system);
+    _mav_put_uint8_t(buf, 12, log_levels);
+    _mav_put_uint8_t_array(buf, 13, arguments, 40);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EVENT, buf, MAVLINK_MSG_ID_EVENT_MIN_LEN, MAVLINK_MSG_ID_EVENT_LEN, MAVLINK_MSG_ID_EVENT_CRC);
+#else
+    mavlink_event_t packet;
+    packet.id = id;
+    packet.event_time_boot_ms = event_time_boot_ms;
+    packet.sequence = sequence;
+    packet.destination_component = destination_component;
+    packet.destination_system = destination_system;
+    packet.log_levels = log_levels;
+    mav_array_memcpy(packet.arguments, arguments, sizeof(uint8_t)*40);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EVENT, (const char *)&packet, MAVLINK_MSG_ID_EVENT_MIN_LEN, MAVLINK_MSG_ID_EVENT_LEN, MAVLINK_MSG_ID_EVENT_CRC);
+#endif
+}
+
+/**
+ * @brief Send a event message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_event_send_struct(mavlink_channel_t chan, const mavlink_event_t* event)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_event_send(chan, event->destination_component, event->destination_system, event->id, event->event_time_boot_ms, event->sequence, event->log_levels, event->arguments);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EVENT, (const char *)event, MAVLINK_MSG_ID_EVENT_MIN_LEN, MAVLINK_MSG_ID_EVENT_LEN, MAVLINK_MSG_ID_EVENT_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_EVENT_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_event_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t destination_component, uint8_t destination_system, uint32_t id, uint32_t event_time_boot_ms, uint16_t sequence, uint8_t log_levels, const uint8_t *arguments)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, id);
+    _mav_put_uint32_t(buf, 4, event_time_boot_ms);
+    _mav_put_uint16_t(buf, 8, sequence);
+    _mav_put_uint8_t(buf, 10, destination_component);
+    _mav_put_uint8_t(buf, 11, destination_system);
+    _mav_put_uint8_t(buf, 12, log_levels);
+    _mav_put_uint8_t_array(buf, 13, arguments, 40);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EVENT, buf, MAVLINK_MSG_ID_EVENT_MIN_LEN, MAVLINK_MSG_ID_EVENT_LEN, MAVLINK_MSG_ID_EVENT_CRC);
+#else
+    mavlink_event_t *packet = (mavlink_event_t *)msgbuf;
+    packet->id = id;
+    packet->event_time_boot_ms = event_time_boot_ms;
+    packet->sequence = sequence;
+    packet->destination_component = destination_component;
+    packet->destination_system = destination_system;
+    packet->log_levels = log_levels;
+    mav_array_memcpy(packet->arguments, arguments, sizeof(uint8_t)*40);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EVENT, (const char *)packet, MAVLINK_MSG_ID_EVENT_MIN_LEN, MAVLINK_MSG_ID_EVENT_LEN, MAVLINK_MSG_ID_EVENT_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE EVENT UNPACKING
+
+
+/**
+ * @brief Get field destination_component from event message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_event_get_destination_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  10);
+}
+
+/**
+ * @brief Get field destination_system from event message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_event_get_destination_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  11);
+}
+
+/**
+ * @brief Get field id from event message
+ *
+ * @return  Event ID (as defined in the component metadata)
+ */
+static inline uint32_t mavlink_msg_event_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field event_time_boot_ms from event message
+ *
+ * @return [ms] Timestamp (time since system boot when the event happened).
+ */
+static inline uint32_t mavlink_msg_event_get_event_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field sequence from event message
+ *
+ * @return  Sequence number.
+ */
+static inline uint16_t mavlink_msg_event_get_sequence(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  8);
+}
+
+/**
+ * @brief Get field log_levels from event message
+ *
+ * @return  Log levels: 4 bits MSB: internal (for logging purposes), 4 bits LSB: external. Levels: Emergency = 0, Alert = 1, Critical = 2, Error = 3, Warning = 4, Notice = 5, Info = 6, Debug = 7, Protocol = 8, Disabled = 9
+ */
+static inline uint8_t mavlink_msg_event_get_log_levels(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  12);
+}
+
+/**
+ * @brief Get field arguments from event message
+ *
+ * @return  Arguments (depend on event ID).
+ */
+static inline uint16_t mavlink_msg_event_get_arguments(const mavlink_message_t* msg, uint8_t *arguments)
+{
+    return _MAV_RETURN_uint8_t_array(msg, arguments, 40,  13);
+}
+
+/**
+ * @brief Decode a event message into a struct
+ *
+ * @param msg The message to decode
+ * @param event C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_event_decode(const mavlink_message_t* msg, mavlink_event_t* event)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    event->id = mavlink_msg_event_get_id(msg);
+    event->event_time_boot_ms = mavlink_msg_event_get_event_time_boot_ms(msg);
+    event->sequence = mavlink_msg_event_get_sequence(msg);
+    event->destination_component = mavlink_msg_event_get_destination_component(msg);
+    event->destination_system = mavlink_msg_event_get_destination_system(msg);
+    event->log_levels = mavlink_msg_event_get_log_levels(msg);
+    mavlink_msg_event_get_arguments(msg, event->arguments);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_EVENT_LEN? msg->len : MAVLINK_MSG_ID_EVENT_LEN;
+        memset(event, 0, MAVLINK_MSG_ID_EVENT_LEN);
+    memcpy(event, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 238 - 0
v2.0/common/mavlink_msg_extended_sys_state.h

@@ -0,0 +1,238 @@
+#pragma once
+// MESSAGE EXTENDED_SYS_STATE PACKING
+
+#define MAVLINK_MSG_ID_EXTENDED_SYS_STATE 245
+
+
+typedef struct __mavlink_extended_sys_state_t {
+ uint8_t vtol_state; /*<  The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration.*/
+ uint8_t landed_state; /*<  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.*/
+} mavlink_extended_sys_state_t;
+
+#define MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN 2
+#define MAVLINK_MSG_ID_EXTENDED_SYS_STATE_MIN_LEN 2
+#define MAVLINK_MSG_ID_245_LEN 2
+#define MAVLINK_MSG_ID_245_MIN_LEN 2
+
+#define MAVLINK_MSG_ID_EXTENDED_SYS_STATE_CRC 130
+#define MAVLINK_MSG_ID_245_CRC 130
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_EXTENDED_SYS_STATE { \
+    245, \
+    "EXTENDED_SYS_STATE", \
+    2, \
+    {  { "vtol_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_extended_sys_state_t, vtol_state) }, \
+         { "landed_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_extended_sys_state_t, landed_state) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_EXTENDED_SYS_STATE { \
+    "EXTENDED_SYS_STATE", \
+    2, \
+    {  { "vtol_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_extended_sys_state_t, vtol_state) }, \
+         { "landed_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_extended_sys_state_t, landed_state) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a extended_sys_state message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param vtol_state  The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_extended_sys_state_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t vtol_state, uint8_t landed_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN];
+    _mav_put_uint8_t(buf, 0, vtol_state);
+    _mav_put_uint8_t(buf, 1, landed_state);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN);
+#else
+    mavlink_extended_sys_state_t packet;
+    packet.vtol_state = vtol_state;
+    packet.landed_state = landed_state;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_EXTENDED_SYS_STATE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_MIN_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_CRC);
+}
+
+/**
+ * @brief Pack a extended_sys_state message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param vtol_state  The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_extended_sys_state_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t vtol_state,uint8_t landed_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN];
+    _mav_put_uint8_t(buf, 0, vtol_state);
+    _mav_put_uint8_t(buf, 1, landed_state);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN);
+#else
+    mavlink_extended_sys_state_t packet;
+    packet.vtol_state = vtol_state;
+    packet.landed_state = landed_state;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_EXTENDED_SYS_STATE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_MIN_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_CRC);
+}
+
+/**
+ * @brief Encode a extended_sys_state struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param extended_sys_state C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_extended_sys_state_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_extended_sys_state_t* extended_sys_state)
+{
+    return mavlink_msg_extended_sys_state_pack(system_id, component_id, msg, extended_sys_state->vtol_state, extended_sys_state->landed_state);
+}
+
+/**
+ * @brief Encode a extended_sys_state struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param extended_sys_state C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_extended_sys_state_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_extended_sys_state_t* extended_sys_state)
+{
+    return mavlink_msg_extended_sys_state_pack_chan(system_id, component_id, chan, msg, extended_sys_state->vtol_state, extended_sys_state->landed_state);
+}
+
+/**
+ * @brief Send a extended_sys_state message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param vtol_state  The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_extended_sys_state_send(mavlink_channel_t chan, uint8_t vtol_state, uint8_t landed_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN];
+    _mav_put_uint8_t(buf, 0, vtol_state);
+    _mav_put_uint8_t(buf, 1, landed_state);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EXTENDED_SYS_STATE, buf, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_MIN_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_CRC);
+#else
+    mavlink_extended_sys_state_t packet;
+    packet.vtol_state = vtol_state;
+    packet.landed_state = landed_state;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EXTENDED_SYS_STATE, (const char *)&packet, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_MIN_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a extended_sys_state message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_extended_sys_state_send_struct(mavlink_channel_t chan, const mavlink_extended_sys_state_t* extended_sys_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_extended_sys_state_send(chan, extended_sys_state->vtol_state, extended_sys_state->landed_state);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EXTENDED_SYS_STATE, (const char *)extended_sys_state, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_MIN_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_extended_sys_state_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t vtol_state, uint8_t landed_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, vtol_state);
+    _mav_put_uint8_t(buf, 1, landed_state);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EXTENDED_SYS_STATE, buf, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_MIN_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_CRC);
+#else
+    mavlink_extended_sys_state_t *packet = (mavlink_extended_sys_state_t *)msgbuf;
+    packet->vtol_state = vtol_state;
+    packet->landed_state = landed_state;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_EXTENDED_SYS_STATE, (const char *)packet, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_MIN_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE EXTENDED_SYS_STATE UNPACKING
+
+
+/**
+ * @brief Get field vtol_state from extended_sys_state message
+ *
+ * @return  The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration.
+ */
+static inline uint8_t mavlink_msg_extended_sys_state_get_vtol_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field landed_state from extended_sys_state message
+ *
+ * @return  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ */
+static inline uint8_t mavlink_msg_extended_sys_state_get_landed_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  1);
+}
+
+/**
+ * @brief Decode a extended_sys_state message into a struct
+ *
+ * @param msg The message to decode
+ * @param extended_sys_state C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_extended_sys_state_decode(const mavlink_message_t* msg, mavlink_extended_sys_state_t* extended_sys_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    extended_sys_state->vtol_state = mavlink_msg_extended_sys_state_get_vtol_state(msg);
+    extended_sys_state->landed_state = mavlink_msg_extended_sys_state_get_landed_state(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN? msg->len : MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN;
+        memset(extended_sys_state, 0, MAVLINK_MSG_ID_EXTENDED_SYS_STATE_LEN);
+    memcpy(extended_sys_state, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 313 - 0
v2.0/common/mavlink_msg_fence_status.h

@@ -0,0 +1,313 @@
+#pragma once
+// MESSAGE FENCE_STATUS PACKING
+
+#define MAVLINK_MSG_ID_FENCE_STATUS 162
+
+
+typedef struct __mavlink_fence_status_t {
+ uint32_t breach_time; /*< [ms] Time (since boot) of last breach.*/
+ uint16_t breach_count; /*<  Number of fence breaches.*/
+ uint8_t breach_status; /*<  Breach status (0 if currently inside fence, 1 if outside).*/
+ uint8_t breach_type; /*<  Last breach type.*/
+ uint8_t breach_mitigation; /*<  Active action to prevent fence breach*/
+} mavlink_fence_status_t;
+
+#define MAVLINK_MSG_ID_FENCE_STATUS_LEN 9
+#define MAVLINK_MSG_ID_FENCE_STATUS_MIN_LEN 8
+#define MAVLINK_MSG_ID_162_LEN 9
+#define MAVLINK_MSG_ID_162_MIN_LEN 8
+
+#define MAVLINK_MSG_ID_FENCE_STATUS_CRC 189
+#define MAVLINK_MSG_ID_162_CRC 189
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_FENCE_STATUS { \
+    162, \
+    "FENCE_STATUS", \
+    5, \
+    {  { "breach_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_fence_status_t, breach_status) }, \
+         { "breach_count", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_fence_status_t, breach_count) }, \
+         { "breach_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_fence_status_t, breach_type) }, \
+         { "breach_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_fence_status_t, breach_time) }, \
+         { "breach_mitigation", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_fence_status_t, breach_mitigation) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_FENCE_STATUS { \
+    "FENCE_STATUS", \
+    5, \
+    {  { "breach_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 6, offsetof(mavlink_fence_status_t, breach_status) }, \
+         { "breach_count", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_fence_status_t, breach_count) }, \
+         { "breach_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 7, offsetof(mavlink_fence_status_t, breach_type) }, \
+         { "breach_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_fence_status_t, breach_time) }, \
+         { "breach_mitigation", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_fence_status_t, breach_mitigation) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a fence_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param breach_status  Breach status (0 if currently inside fence, 1 if outside).
+ * @param breach_count  Number of fence breaches.
+ * @param breach_type  Last breach type.
+ * @param breach_time [ms] Time (since boot) of last breach.
+ * @param breach_mitigation  Active action to prevent fence breach
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_fence_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t breach_status, uint16_t breach_count, uint8_t breach_type, uint32_t breach_time, uint8_t breach_mitigation)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FENCE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, breach_time);
+    _mav_put_uint16_t(buf, 4, breach_count);
+    _mav_put_uint8_t(buf, 6, breach_status);
+    _mav_put_uint8_t(buf, 7, breach_type);
+    _mav_put_uint8_t(buf, 8, breach_mitigation);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_FENCE_STATUS_LEN);
+#else
+    mavlink_fence_status_t packet;
+    packet.breach_time = breach_time;
+    packet.breach_count = breach_count;
+    packet.breach_status = breach_status;
+    packet.breach_type = breach_type;
+    packet.breach_mitigation = breach_mitigation;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_FENCE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_FENCE_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_FENCE_STATUS_MIN_LEN, MAVLINK_MSG_ID_FENCE_STATUS_LEN, MAVLINK_MSG_ID_FENCE_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a fence_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param breach_status  Breach status (0 if currently inside fence, 1 if outside).
+ * @param breach_count  Number of fence breaches.
+ * @param breach_type  Last breach type.
+ * @param breach_time [ms] Time (since boot) of last breach.
+ * @param breach_mitigation  Active action to prevent fence breach
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_fence_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t breach_status,uint16_t breach_count,uint8_t breach_type,uint32_t breach_time,uint8_t breach_mitigation)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FENCE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, breach_time);
+    _mav_put_uint16_t(buf, 4, breach_count);
+    _mav_put_uint8_t(buf, 6, breach_status);
+    _mav_put_uint8_t(buf, 7, breach_type);
+    _mav_put_uint8_t(buf, 8, breach_mitigation);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_FENCE_STATUS_LEN);
+#else
+    mavlink_fence_status_t packet;
+    packet.breach_time = breach_time;
+    packet.breach_count = breach_count;
+    packet.breach_status = breach_status;
+    packet.breach_type = breach_type;
+    packet.breach_mitigation = breach_mitigation;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_FENCE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_FENCE_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_FENCE_STATUS_MIN_LEN, MAVLINK_MSG_ID_FENCE_STATUS_LEN, MAVLINK_MSG_ID_FENCE_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a fence_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param fence_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_fence_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_fence_status_t* fence_status)
+{
+    return mavlink_msg_fence_status_pack(system_id, component_id, msg, fence_status->breach_status, fence_status->breach_count, fence_status->breach_type, fence_status->breach_time, fence_status->breach_mitigation);
+}
+
+/**
+ * @brief Encode a fence_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param fence_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_fence_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_fence_status_t* fence_status)
+{
+    return mavlink_msg_fence_status_pack_chan(system_id, component_id, chan, msg, fence_status->breach_status, fence_status->breach_count, fence_status->breach_type, fence_status->breach_time, fence_status->breach_mitigation);
+}
+
+/**
+ * @brief Send a fence_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param breach_status  Breach status (0 if currently inside fence, 1 if outside).
+ * @param breach_count  Number of fence breaches.
+ * @param breach_type  Last breach type.
+ * @param breach_time [ms] Time (since boot) of last breach.
+ * @param breach_mitigation  Active action to prevent fence breach
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_fence_status_send(mavlink_channel_t chan, uint8_t breach_status, uint16_t breach_count, uint8_t breach_type, uint32_t breach_time, uint8_t breach_mitigation)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FENCE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, breach_time);
+    _mav_put_uint16_t(buf, 4, breach_count);
+    _mav_put_uint8_t(buf, 6, breach_status);
+    _mav_put_uint8_t(buf, 7, breach_type);
+    _mav_put_uint8_t(buf, 8, breach_mitigation);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, buf, MAVLINK_MSG_ID_FENCE_STATUS_MIN_LEN, MAVLINK_MSG_ID_FENCE_STATUS_LEN, MAVLINK_MSG_ID_FENCE_STATUS_CRC);
+#else
+    mavlink_fence_status_t packet;
+    packet.breach_time = breach_time;
+    packet.breach_count = breach_count;
+    packet.breach_status = breach_status;
+    packet.breach_type = breach_type;
+    packet.breach_mitigation = breach_mitigation;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, (const char *)&packet, MAVLINK_MSG_ID_FENCE_STATUS_MIN_LEN, MAVLINK_MSG_ID_FENCE_STATUS_LEN, MAVLINK_MSG_ID_FENCE_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a fence_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_fence_status_send_struct(mavlink_channel_t chan, const mavlink_fence_status_t* fence_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_fence_status_send(chan, fence_status->breach_status, fence_status->breach_count, fence_status->breach_type, fence_status->breach_time, fence_status->breach_mitigation);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, (const char *)fence_status, MAVLINK_MSG_ID_FENCE_STATUS_MIN_LEN, MAVLINK_MSG_ID_FENCE_STATUS_LEN, MAVLINK_MSG_ID_FENCE_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_FENCE_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_fence_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t breach_status, uint16_t breach_count, uint8_t breach_type, uint32_t breach_time, uint8_t breach_mitigation)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, breach_time);
+    _mav_put_uint16_t(buf, 4, breach_count);
+    _mav_put_uint8_t(buf, 6, breach_status);
+    _mav_put_uint8_t(buf, 7, breach_type);
+    _mav_put_uint8_t(buf, 8, breach_mitigation);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, buf, MAVLINK_MSG_ID_FENCE_STATUS_MIN_LEN, MAVLINK_MSG_ID_FENCE_STATUS_LEN, MAVLINK_MSG_ID_FENCE_STATUS_CRC);
+#else
+    mavlink_fence_status_t *packet = (mavlink_fence_status_t *)msgbuf;
+    packet->breach_time = breach_time;
+    packet->breach_count = breach_count;
+    packet->breach_status = breach_status;
+    packet->breach_type = breach_type;
+    packet->breach_mitigation = breach_mitigation;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FENCE_STATUS, (const char *)packet, MAVLINK_MSG_ID_FENCE_STATUS_MIN_LEN, MAVLINK_MSG_ID_FENCE_STATUS_LEN, MAVLINK_MSG_ID_FENCE_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE FENCE_STATUS UNPACKING
+
+
+/**
+ * @brief Get field breach_status from fence_status message
+ *
+ * @return  Breach status (0 if currently inside fence, 1 if outside).
+ */
+static inline uint8_t mavlink_msg_fence_status_get_breach_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  6);
+}
+
+/**
+ * @brief Get field breach_count from fence_status message
+ *
+ * @return  Number of fence breaches.
+ */
+static inline uint16_t mavlink_msg_fence_status_get_breach_count(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  4);
+}
+
+/**
+ * @brief Get field breach_type from fence_status message
+ *
+ * @return  Last breach type.
+ */
+static inline uint8_t mavlink_msg_fence_status_get_breach_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  7);
+}
+
+/**
+ * @brief Get field breach_time from fence_status message
+ *
+ * @return [ms] Time (since boot) of last breach.
+ */
+static inline uint32_t mavlink_msg_fence_status_get_breach_time(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field breach_mitigation from fence_status message
+ *
+ * @return  Active action to prevent fence breach
+ */
+static inline uint8_t mavlink_msg_fence_status_get_breach_mitigation(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  8);
+}
+
+/**
+ * @brief Decode a fence_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param fence_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_fence_status_decode(const mavlink_message_t* msg, mavlink_fence_status_t* fence_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    fence_status->breach_time = mavlink_msg_fence_status_get_breach_time(msg);
+    fence_status->breach_count = mavlink_msg_fence_status_get_breach_count(msg);
+    fence_status->breach_status = mavlink_msg_fence_status_get_breach_status(msg);
+    fence_status->breach_type = mavlink_msg_fence_status_get_breach_type(msg);
+    fence_status->breach_mitigation = mavlink_msg_fence_status_get_breach_mitigation(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_FENCE_STATUS_LEN? msg->len : MAVLINK_MSG_ID_FENCE_STATUS_LEN;
+        memset(fence_status, 0, MAVLINK_MSG_ID_FENCE_STATUS_LEN);
+    memcpy(fence_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 280 - 0
v2.0/common/mavlink_msg_file_transfer_protocol.h

@@ -0,0 +1,280 @@
+#pragma once
+// MESSAGE FILE_TRANSFER_PROTOCOL PACKING
+
+#define MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL 110
+
+
+typedef struct __mavlink_file_transfer_protocol_t {
+ uint8_t target_network; /*<  Network ID (0 for broadcast)*/
+ uint8_t target_system; /*<  System ID (0 for broadcast)*/
+ uint8_t target_component; /*<  Component ID (0 for broadcast)*/
+ uint8_t payload[251]; /*<  Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The content/format of this block is defined in https://mavlink.io/en/services/ftp.html.*/
+} mavlink_file_transfer_protocol_t;
+
+#define MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN 254
+#define MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_MIN_LEN 254
+#define MAVLINK_MSG_ID_110_LEN 254
+#define MAVLINK_MSG_ID_110_MIN_LEN 254
+
+#define MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_CRC 84
+#define MAVLINK_MSG_ID_110_CRC 84
+
+#define MAVLINK_MSG_FILE_TRANSFER_PROTOCOL_FIELD_PAYLOAD_LEN 251
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_FILE_TRANSFER_PROTOCOL { \
+    110, \
+    "FILE_TRANSFER_PROTOCOL", \
+    4, \
+    {  { "target_network", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_file_transfer_protocol_t, target_network) }, \
+         { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_file_transfer_protocol_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_file_transfer_protocol_t, target_component) }, \
+         { "payload", NULL, MAVLINK_TYPE_UINT8_T, 251, 3, offsetof(mavlink_file_transfer_protocol_t, payload) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_FILE_TRANSFER_PROTOCOL { \
+    "FILE_TRANSFER_PROTOCOL", \
+    4, \
+    {  { "target_network", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_file_transfer_protocol_t, target_network) }, \
+         { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_file_transfer_protocol_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_file_transfer_protocol_t, target_component) }, \
+         { "payload", NULL, MAVLINK_TYPE_UINT8_T, 251, 3, offsetof(mavlink_file_transfer_protocol_t, payload) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a file_transfer_protocol message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_network  Network ID (0 for broadcast)
+ * @param target_system  System ID (0 for broadcast)
+ * @param target_component  Component ID (0 for broadcast)
+ * @param payload  Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The content/format of this block is defined in https://mavlink.io/en/services/ftp.html.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_file_transfer_protocol_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_network, uint8_t target_system, uint8_t target_component, const uint8_t *payload)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN];
+    _mav_put_uint8_t(buf, 0, target_network);
+    _mav_put_uint8_t(buf, 1, target_system);
+    _mav_put_uint8_t(buf, 2, target_component);
+    _mav_put_uint8_t_array(buf, 3, payload, 251);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN);
+#else
+    mavlink_file_transfer_protocol_t packet;
+    packet.target_network = target_network;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    mav_array_memcpy(packet.payload, payload, sizeof(uint8_t)*251);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_MIN_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_CRC);
+}
+
+/**
+ * @brief Pack a file_transfer_protocol message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_network  Network ID (0 for broadcast)
+ * @param target_system  System ID (0 for broadcast)
+ * @param target_component  Component ID (0 for broadcast)
+ * @param payload  Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The content/format of this block is defined in https://mavlink.io/en/services/ftp.html.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_file_transfer_protocol_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_network,uint8_t target_system,uint8_t target_component,const uint8_t *payload)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN];
+    _mav_put_uint8_t(buf, 0, target_network);
+    _mav_put_uint8_t(buf, 1, target_system);
+    _mav_put_uint8_t(buf, 2, target_component);
+    _mav_put_uint8_t_array(buf, 3, payload, 251);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN);
+#else
+    mavlink_file_transfer_protocol_t packet;
+    packet.target_network = target_network;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    mav_array_memcpy(packet.payload, payload, sizeof(uint8_t)*251);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_MIN_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_CRC);
+}
+
+/**
+ * @brief Encode a file_transfer_protocol struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param file_transfer_protocol C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_file_transfer_protocol_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_file_transfer_protocol_t* file_transfer_protocol)
+{
+    return mavlink_msg_file_transfer_protocol_pack(system_id, component_id, msg, file_transfer_protocol->target_network, file_transfer_protocol->target_system, file_transfer_protocol->target_component, file_transfer_protocol->payload);
+}
+
+/**
+ * @brief Encode a file_transfer_protocol struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param file_transfer_protocol C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_file_transfer_protocol_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_file_transfer_protocol_t* file_transfer_protocol)
+{
+    return mavlink_msg_file_transfer_protocol_pack_chan(system_id, component_id, chan, msg, file_transfer_protocol->target_network, file_transfer_protocol->target_system, file_transfer_protocol->target_component, file_transfer_protocol->payload);
+}
+
+/**
+ * @brief Send a file_transfer_protocol message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_network  Network ID (0 for broadcast)
+ * @param target_system  System ID (0 for broadcast)
+ * @param target_component  Component ID (0 for broadcast)
+ * @param payload  Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The content/format of this block is defined in https://mavlink.io/en/services/ftp.html.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_file_transfer_protocol_send(mavlink_channel_t chan, uint8_t target_network, uint8_t target_system, uint8_t target_component, const uint8_t *payload)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN];
+    _mav_put_uint8_t(buf, 0, target_network);
+    _mav_put_uint8_t(buf, 1, target_system);
+    _mav_put_uint8_t(buf, 2, target_component);
+    _mav_put_uint8_t_array(buf, 3, payload, 251);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL, buf, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_MIN_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_CRC);
+#else
+    mavlink_file_transfer_protocol_t packet;
+    packet.target_network = target_network;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    mav_array_memcpy(packet.payload, payload, sizeof(uint8_t)*251);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL, (const char *)&packet, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_MIN_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_CRC);
+#endif
+}
+
+/**
+ * @brief Send a file_transfer_protocol message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_file_transfer_protocol_send_struct(mavlink_channel_t chan, const mavlink_file_transfer_protocol_t* file_transfer_protocol)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_file_transfer_protocol_send(chan, file_transfer_protocol->target_network, file_transfer_protocol->target_system, file_transfer_protocol->target_component, file_transfer_protocol->payload);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL, (const char *)file_transfer_protocol, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_MIN_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_file_transfer_protocol_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_network, uint8_t target_system, uint8_t target_component, const uint8_t *payload)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, target_network);
+    _mav_put_uint8_t(buf, 1, target_system);
+    _mav_put_uint8_t(buf, 2, target_component);
+    _mav_put_uint8_t_array(buf, 3, payload, 251);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL, buf, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_MIN_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_CRC);
+#else
+    mavlink_file_transfer_protocol_t *packet = (mavlink_file_transfer_protocol_t *)msgbuf;
+    packet->target_network = target_network;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    mav_array_memcpy(packet->payload, payload, sizeof(uint8_t)*251);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL, (const char *)packet, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_MIN_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE FILE_TRANSFER_PROTOCOL UNPACKING
+
+
+/**
+ * @brief Get field target_network from file_transfer_protocol message
+ *
+ * @return  Network ID (0 for broadcast)
+ */
+static inline uint8_t mavlink_msg_file_transfer_protocol_get_target_network(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field target_system from file_transfer_protocol message
+ *
+ * @return  System ID (0 for broadcast)
+ */
+static inline uint8_t mavlink_msg_file_transfer_protocol_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  1);
+}
+
+/**
+ * @brief Get field target_component from file_transfer_protocol message
+ *
+ * @return  Component ID (0 for broadcast)
+ */
+static inline uint8_t mavlink_msg_file_transfer_protocol_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  2);
+}
+
+/**
+ * @brief Get field payload from file_transfer_protocol message
+ *
+ * @return  Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The content/format of this block is defined in https://mavlink.io/en/services/ftp.html.
+ */
+static inline uint16_t mavlink_msg_file_transfer_protocol_get_payload(const mavlink_message_t* msg, uint8_t *payload)
+{
+    return _MAV_RETURN_uint8_t_array(msg, payload, 251,  3);
+}
+
+/**
+ * @brief Decode a file_transfer_protocol message into a struct
+ *
+ * @param msg The message to decode
+ * @param file_transfer_protocol C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_file_transfer_protocol_decode(const mavlink_message_t* msg, mavlink_file_transfer_protocol_t* file_transfer_protocol)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    file_transfer_protocol->target_network = mavlink_msg_file_transfer_protocol_get_target_network(msg);
+    file_transfer_protocol->target_system = mavlink_msg_file_transfer_protocol_get_target_system(msg);
+    file_transfer_protocol->target_component = mavlink_msg_file_transfer_protocol_get_target_component(msg);
+    mavlink_msg_file_transfer_protocol_get_payload(msg, file_transfer_protocol->payload);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN? msg->len : MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN;
+        memset(file_transfer_protocol, 0, MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN);
+    memcpy(file_transfer_protocol, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 313 - 0
v2.0/common/mavlink_msg_flight_information.h

@@ -0,0 +1,313 @@
+#pragma once
+// MESSAGE FLIGHT_INFORMATION PACKING
+
+#define MAVLINK_MSG_ID_FLIGHT_INFORMATION 264
+
+
+typedef struct __mavlink_flight_information_t {
+ uint64_t arming_time_utc; /*< [us] Timestamp at arming (since system boot). Set to 0 on boot. Set value on arming. Note, field is misnamed UTC.*/
+ uint64_t takeoff_time_utc; /*< [us] Timestamp at takeoff (since system boot). Set to 0 at boot and on arming. Note, field is misnamed UTC.*/
+ uint64_t flight_uuid; /*<  Flight number. Note, field is misnamed UUID.*/
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint32_t landing_time; /*< [ms] Timestamp at landing (in ms since system boot). Set to 0 at boot and on arming.*/
+} mavlink_flight_information_t;
+
+#define MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN 32
+#define MAVLINK_MSG_ID_FLIGHT_INFORMATION_MIN_LEN 28
+#define MAVLINK_MSG_ID_264_LEN 32
+#define MAVLINK_MSG_ID_264_MIN_LEN 28
+
+#define MAVLINK_MSG_ID_FLIGHT_INFORMATION_CRC 49
+#define MAVLINK_MSG_ID_264_CRC 49
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_FLIGHT_INFORMATION { \
+    264, \
+    "FLIGHT_INFORMATION", \
+    5, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 24, offsetof(mavlink_flight_information_t, time_boot_ms) }, \
+         { "arming_time_utc", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_flight_information_t, arming_time_utc) }, \
+         { "takeoff_time_utc", NULL, MAVLINK_TYPE_UINT64_T, 0, 8, offsetof(mavlink_flight_information_t, takeoff_time_utc) }, \
+         { "flight_uuid", NULL, MAVLINK_TYPE_UINT64_T, 0, 16, offsetof(mavlink_flight_information_t, flight_uuid) }, \
+         { "landing_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 28, offsetof(mavlink_flight_information_t, landing_time) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_FLIGHT_INFORMATION { \
+    "FLIGHT_INFORMATION", \
+    5, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 24, offsetof(mavlink_flight_information_t, time_boot_ms) }, \
+         { "arming_time_utc", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_flight_information_t, arming_time_utc) }, \
+         { "takeoff_time_utc", NULL, MAVLINK_TYPE_UINT64_T, 0, 8, offsetof(mavlink_flight_information_t, takeoff_time_utc) }, \
+         { "flight_uuid", NULL, MAVLINK_TYPE_UINT64_T, 0, 16, offsetof(mavlink_flight_information_t, flight_uuid) }, \
+         { "landing_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 28, offsetof(mavlink_flight_information_t, landing_time) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a flight_information message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param arming_time_utc [us] Timestamp at arming (since system boot). Set to 0 on boot. Set value on arming. Note, field is misnamed UTC.
+ * @param takeoff_time_utc [us] Timestamp at takeoff (since system boot). Set to 0 at boot and on arming. Note, field is misnamed UTC.
+ * @param flight_uuid  Flight number. Note, field is misnamed UUID.
+ * @param landing_time [ms] Timestamp at landing (in ms since system boot). Set to 0 at boot and on arming.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_flight_information_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint64_t arming_time_utc, uint64_t takeoff_time_utc, uint64_t flight_uuid, uint32_t landing_time)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN];
+    _mav_put_uint64_t(buf, 0, arming_time_utc);
+    _mav_put_uint64_t(buf, 8, takeoff_time_utc);
+    _mav_put_uint64_t(buf, 16, flight_uuid);
+    _mav_put_uint32_t(buf, 24, time_boot_ms);
+    _mav_put_uint32_t(buf, 28, landing_time);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN);
+#else
+    mavlink_flight_information_t packet;
+    packet.arming_time_utc = arming_time_utc;
+    packet.takeoff_time_utc = takeoff_time_utc;
+    packet.flight_uuid = flight_uuid;
+    packet.time_boot_ms = time_boot_ms;
+    packet.landing_time = landing_time;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_FLIGHT_INFORMATION;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_FLIGHT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_CRC);
+}
+
+/**
+ * @brief Pack a flight_information message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param arming_time_utc [us] Timestamp at arming (since system boot). Set to 0 on boot. Set value on arming. Note, field is misnamed UTC.
+ * @param takeoff_time_utc [us] Timestamp at takeoff (since system boot). Set to 0 at boot and on arming. Note, field is misnamed UTC.
+ * @param flight_uuid  Flight number. Note, field is misnamed UUID.
+ * @param landing_time [ms] Timestamp at landing (in ms since system boot). Set to 0 at boot and on arming.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_flight_information_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint64_t arming_time_utc,uint64_t takeoff_time_utc,uint64_t flight_uuid,uint32_t landing_time)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN];
+    _mav_put_uint64_t(buf, 0, arming_time_utc);
+    _mav_put_uint64_t(buf, 8, takeoff_time_utc);
+    _mav_put_uint64_t(buf, 16, flight_uuid);
+    _mav_put_uint32_t(buf, 24, time_boot_ms);
+    _mav_put_uint32_t(buf, 28, landing_time);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN);
+#else
+    mavlink_flight_information_t packet;
+    packet.arming_time_utc = arming_time_utc;
+    packet.takeoff_time_utc = takeoff_time_utc;
+    packet.flight_uuid = flight_uuid;
+    packet.time_boot_ms = time_boot_ms;
+    packet.landing_time = landing_time;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_FLIGHT_INFORMATION;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_FLIGHT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_CRC);
+}
+
+/**
+ * @brief Encode a flight_information struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param flight_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_flight_information_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_flight_information_t* flight_information)
+{
+    return mavlink_msg_flight_information_pack(system_id, component_id, msg, flight_information->time_boot_ms, flight_information->arming_time_utc, flight_information->takeoff_time_utc, flight_information->flight_uuid, flight_information->landing_time);
+}
+
+/**
+ * @brief Encode a flight_information struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param flight_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_flight_information_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_flight_information_t* flight_information)
+{
+    return mavlink_msg_flight_information_pack_chan(system_id, component_id, chan, msg, flight_information->time_boot_ms, flight_information->arming_time_utc, flight_information->takeoff_time_utc, flight_information->flight_uuid, flight_information->landing_time);
+}
+
+/**
+ * @brief Send a flight_information message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param arming_time_utc [us] Timestamp at arming (since system boot). Set to 0 on boot. Set value on arming. Note, field is misnamed UTC.
+ * @param takeoff_time_utc [us] Timestamp at takeoff (since system boot). Set to 0 at boot and on arming. Note, field is misnamed UTC.
+ * @param flight_uuid  Flight number. Note, field is misnamed UUID.
+ * @param landing_time [ms] Timestamp at landing (in ms since system boot). Set to 0 at boot and on arming.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_flight_information_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint64_t arming_time_utc, uint64_t takeoff_time_utc, uint64_t flight_uuid, uint32_t landing_time)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN];
+    _mav_put_uint64_t(buf, 0, arming_time_utc);
+    _mav_put_uint64_t(buf, 8, takeoff_time_utc);
+    _mav_put_uint64_t(buf, 16, flight_uuid);
+    _mav_put_uint32_t(buf, 24, time_boot_ms);
+    _mav_put_uint32_t(buf, 28, landing_time);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FLIGHT_INFORMATION, buf, MAVLINK_MSG_ID_FLIGHT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_CRC);
+#else
+    mavlink_flight_information_t packet;
+    packet.arming_time_utc = arming_time_utc;
+    packet.takeoff_time_utc = takeoff_time_utc;
+    packet.flight_uuid = flight_uuid;
+    packet.time_boot_ms = time_boot_ms;
+    packet.landing_time = landing_time;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FLIGHT_INFORMATION, (const char *)&packet, MAVLINK_MSG_ID_FLIGHT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_CRC);
+#endif
+}
+
+/**
+ * @brief Send a flight_information message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_flight_information_send_struct(mavlink_channel_t chan, const mavlink_flight_information_t* flight_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_flight_information_send(chan, flight_information->time_boot_ms, flight_information->arming_time_utc, flight_information->takeoff_time_utc, flight_information->flight_uuid, flight_information->landing_time);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FLIGHT_INFORMATION, (const char *)flight_information, MAVLINK_MSG_ID_FLIGHT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_flight_information_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint64_t arming_time_utc, uint64_t takeoff_time_utc, uint64_t flight_uuid, uint32_t landing_time)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, arming_time_utc);
+    _mav_put_uint64_t(buf, 8, takeoff_time_utc);
+    _mav_put_uint64_t(buf, 16, flight_uuid);
+    _mav_put_uint32_t(buf, 24, time_boot_ms);
+    _mav_put_uint32_t(buf, 28, landing_time);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FLIGHT_INFORMATION, buf, MAVLINK_MSG_ID_FLIGHT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_CRC);
+#else
+    mavlink_flight_information_t *packet = (mavlink_flight_information_t *)msgbuf;
+    packet->arming_time_utc = arming_time_utc;
+    packet->takeoff_time_utc = takeoff_time_utc;
+    packet->flight_uuid = flight_uuid;
+    packet->time_boot_ms = time_boot_ms;
+    packet->landing_time = landing_time;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FLIGHT_INFORMATION, (const char *)packet, MAVLINK_MSG_ID_FLIGHT_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN, MAVLINK_MSG_ID_FLIGHT_INFORMATION_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE FLIGHT_INFORMATION UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from flight_information message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_flight_information_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  24);
+}
+
+/**
+ * @brief Get field arming_time_utc from flight_information message
+ *
+ * @return [us] Timestamp at arming (since system boot). Set to 0 on boot. Set value on arming. Note, field is misnamed UTC.
+ */
+static inline uint64_t mavlink_msg_flight_information_get_arming_time_utc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field takeoff_time_utc from flight_information message
+ *
+ * @return [us] Timestamp at takeoff (since system boot). Set to 0 at boot and on arming. Note, field is misnamed UTC.
+ */
+static inline uint64_t mavlink_msg_flight_information_get_takeoff_time_utc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  8);
+}
+
+/**
+ * @brief Get field flight_uuid from flight_information message
+ *
+ * @return  Flight number. Note, field is misnamed UUID.
+ */
+static inline uint64_t mavlink_msg_flight_information_get_flight_uuid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  16);
+}
+
+/**
+ * @brief Get field landing_time from flight_information message
+ *
+ * @return [ms] Timestamp at landing (in ms since system boot). Set to 0 at boot and on arming.
+ */
+static inline uint32_t mavlink_msg_flight_information_get_landing_time(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  28);
+}
+
+/**
+ * @brief Decode a flight_information message into a struct
+ *
+ * @param msg The message to decode
+ * @param flight_information C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_flight_information_decode(const mavlink_message_t* msg, mavlink_flight_information_t* flight_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    flight_information->arming_time_utc = mavlink_msg_flight_information_get_arming_time_utc(msg);
+    flight_information->takeoff_time_utc = mavlink_msg_flight_information_get_takeoff_time_utc(msg);
+    flight_information->flight_uuid = mavlink_msg_flight_information_get_flight_uuid(msg);
+    flight_information->time_boot_ms = mavlink_msg_flight_information_get_time_boot_ms(msg);
+    flight_information->landing_time = mavlink_msg_flight_information_get_landing_time(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN? msg->len : MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN;
+        memset(flight_information, 0, MAVLINK_MSG_ID_FLIGHT_INFORMATION_LEN);
+    memcpy(flight_information, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 459 - 0
v2.0/common/mavlink_msg_follow_target.h

@@ -0,0 +1,459 @@
+#pragma once
+// MESSAGE FOLLOW_TARGET PACKING
+
+#define MAVLINK_MSG_ID_FOLLOW_TARGET 144
+
+
+typedef struct __mavlink_follow_target_t {
+ uint64_t timestamp; /*< [ms] Timestamp (time since system boot).*/
+ uint64_t custom_state; /*<  button states or switches of a tracker device*/
+ int32_t lat; /*< [degE7] Latitude (WGS84)*/
+ int32_t lon; /*< [degE7] Longitude (WGS84)*/
+ float alt; /*< [m] Altitude (MSL)*/
+ float vel[3]; /*< [m/s] target velocity (0,0,0) for unknown*/
+ float acc[3]; /*< [m/s/s] linear target acceleration (0,0,0) for unknown*/
+ float attitude_q[4]; /*<  (0 0 0 0 for unknown)*/
+ float rates[3]; /*<  (0 0 0 for unknown)*/
+ float position_cov[3]; /*<  eph epv*/
+ uint8_t est_capabilities; /*<  bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3)*/
+} mavlink_follow_target_t;
+
+#define MAVLINK_MSG_ID_FOLLOW_TARGET_LEN 93
+#define MAVLINK_MSG_ID_FOLLOW_TARGET_MIN_LEN 93
+#define MAVLINK_MSG_ID_144_LEN 93
+#define MAVLINK_MSG_ID_144_MIN_LEN 93
+
+#define MAVLINK_MSG_ID_FOLLOW_TARGET_CRC 127
+#define MAVLINK_MSG_ID_144_CRC 127
+
+#define MAVLINK_MSG_FOLLOW_TARGET_FIELD_VEL_LEN 3
+#define MAVLINK_MSG_FOLLOW_TARGET_FIELD_ACC_LEN 3
+#define MAVLINK_MSG_FOLLOW_TARGET_FIELD_ATTITUDE_Q_LEN 4
+#define MAVLINK_MSG_FOLLOW_TARGET_FIELD_RATES_LEN 3
+#define MAVLINK_MSG_FOLLOW_TARGET_FIELD_POSITION_COV_LEN 3
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_FOLLOW_TARGET { \
+    144, \
+    "FOLLOW_TARGET", \
+    11, \
+    {  { "timestamp", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_follow_target_t, timestamp) }, \
+         { "est_capabilities", NULL, MAVLINK_TYPE_UINT8_T, 0, 92, offsetof(mavlink_follow_target_t, est_capabilities) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_follow_target_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_follow_target_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_follow_target_t, alt) }, \
+         { "vel", NULL, MAVLINK_TYPE_FLOAT, 3, 28, offsetof(mavlink_follow_target_t, vel) }, \
+         { "acc", NULL, MAVLINK_TYPE_FLOAT, 3, 40, offsetof(mavlink_follow_target_t, acc) }, \
+         { "attitude_q", NULL, MAVLINK_TYPE_FLOAT, 4, 52, offsetof(mavlink_follow_target_t, attitude_q) }, \
+         { "rates", NULL, MAVLINK_TYPE_FLOAT, 3, 68, offsetof(mavlink_follow_target_t, rates) }, \
+         { "position_cov", NULL, MAVLINK_TYPE_FLOAT, 3, 80, offsetof(mavlink_follow_target_t, position_cov) }, \
+         { "custom_state", NULL, MAVLINK_TYPE_UINT64_T, 0, 8, offsetof(mavlink_follow_target_t, custom_state) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_FOLLOW_TARGET { \
+    "FOLLOW_TARGET", \
+    11, \
+    {  { "timestamp", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_follow_target_t, timestamp) }, \
+         { "est_capabilities", NULL, MAVLINK_TYPE_UINT8_T, 0, 92, offsetof(mavlink_follow_target_t, est_capabilities) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_follow_target_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_follow_target_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_follow_target_t, alt) }, \
+         { "vel", NULL, MAVLINK_TYPE_FLOAT, 3, 28, offsetof(mavlink_follow_target_t, vel) }, \
+         { "acc", NULL, MAVLINK_TYPE_FLOAT, 3, 40, offsetof(mavlink_follow_target_t, acc) }, \
+         { "attitude_q", NULL, MAVLINK_TYPE_FLOAT, 4, 52, offsetof(mavlink_follow_target_t, attitude_q) }, \
+         { "rates", NULL, MAVLINK_TYPE_FLOAT, 3, 68, offsetof(mavlink_follow_target_t, rates) }, \
+         { "position_cov", NULL, MAVLINK_TYPE_FLOAT, 3, 80, offsetof(mavlink_follow_target_t, position_cov) }, \
+         { "custom_state", NULL, MAVLINK_TYPE_UINT64_T, 0, 8, offsetof(mavlink_follow_target_t, custom_state) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a follow_target message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param timestamp [ms] Timestamp (time since system boot).
+ * @param est_capabilities  bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3)
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [m] Altitude (MSL)
+ * @param vel [m/s] target velocity (0,0,0) for unknown
+ * @param acc [m/s/s] linear target acceleration (0,0,0) for unknown
+ * @param attitude_q  (0 0 0 0 for unknown)
+ * @param rates  (0 0 0 for unknown)
+ * @param position_cov  eph epv
+ * @param custom_state  button states or switches of a tracker device
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_follow_target_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t timestamp, uint8_t est_capabilities, int32_t lat, int32_t lon, float alt, const float *vel, const float *acc, const float *attitude_q, const float *rates, const float *position_cov, uint64_t custom_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FOLLOW_TARGET_LEN];
+    _mav_put_uint64_t(buf, 0, timestamp);
+    _mav_put_uint64_t(buf, 8, custom_state);
+    _mav_put_int32_t(buf, 16, lat);
+    _mav_put_int32_t(buf, 20, lon);
+    _mav_put_float(buf, 24, alt);
+    _mav_put_uint8_t(buf, 92, est_capabilities);
+    _mav_put_float_array(buf, 28, vel, 3);
+    _mav_put_float_array(buf, 40, acc, 3);
+    _mav_put_float_array(buf, 52, attitude_q, 4);
+    _mav_put_float_array(buf, 68, rates, 3);
+    _mav_put_float_array(buf, 80, position_cov, 3);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN);
+#else
+    mavlink_follow_target_t packet;
+    packet.timestamp = timestamp;
+    packet.custom_state = custom_state;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.est_capabilities = est_capabilities;
+    mav_array_memcpy(packet.vel, vel, sizeof(float)*3);
+    mav_array_memcpy(packet.acc, acc, sizeof(float)*3);
+    mav_array_memcpy(packet.attitude_q, attitude_q, sizeof(float)*4);
+    mav_array_memcpy(packet.rates, rates, sizeof(float)*3);
+    mav_array_memcpy(packet.position_cov, position_cov, sizeof(float)*3);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_FOLLOW_TARGET;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_FOLLOW_TARGET_MIN_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_CRC);
+}
+
+/**
+ * @brief Pack a follow_target message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param timestamp [ms] Timestamp (time since system boot).
+ * @param est_capabilities  bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3)
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [m] Altitude (MSL)
+ * @param vel [m/s] target velocity (0,0,0) for unknown
+ * @param acc [m/s/s] linear target acceleration (0,0,0) for unknown
+ * @param attitude_q  (0 0 0 0 for unknown)
+ * @param rates  (0 0 0 for unknown)
+ * @param position_cov  eph epv
+ * @param custom_state  button states or switches of a tracker device
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_follow_target_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t timestamp,uint8_t est_capabilities,int32_t lat,int32_t lon,float alt,const float *vel,const float *acc,const float *attitude_q,const float *rates,const float *position_cov,uint64_t custom_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FOLLOW_TARGET_LEN];
+    _mav_put_uint64_t(buf, 0, timestamp);
+    _mav_put_uint64_t(buf, 8, custom_state);
+    _mav_put_int32_t(buf, 16, lat);
+    _mav_put_int32_t(buf, 20, lon);
+    _mav_put_float(buf, 24, alt);
+    _mav_put_uint8_t(buf, 92, est_capabilities);
+    _mav_put_float_array(buf, 28, vel, 3);
+    _mav_put_float_array(buf, 40, acc, 3);
+    _mav_put_float_array(buf, 52, attitude_q, 4);
+    _mav_put_float_array(buf, 68, rates, 3);
+    _mav_put_float_array(buf, 80, position_cov, 3);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN);
+#else
+    mavlink_follow_target_t packet;
+    packet.timestamp = timestamp;
+    packet.custom_state = custom_state;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.est_capabilities = est_capabilities;
+    mav_array_memcpy(packet.vel, vel, sizeof(float)*3);
+    mav_array_memcpy(packet.acc, acc, sizeof(float)*3);
+    mav_array_memcpy(packet.attitude_q, attitude_q, sizeof(float)*4);
+    mav_array_memcpy(packet.rates, rates, sizeof(float)*3);
+    mav_array_memcpy(packet.position_cov, position_cov, sizeof(float)*3);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_FOLLOW_TARGET;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_FOLLOW_TARGET_MIN_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_CRC);
+}
+
+/**
+ * @brief Encode a follow_target struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param follow_target C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_follow_target_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_follow_target_t* follow_target)
+{
+    return mavlink_msg_follow_target_pack(system_id, component_id, msg, follow_target->timestamp, follow_target->est_capabilities, follow_target->lat, follow_target->lon, follow_target->alt, follow_target->vel, follow_target->acc, follow_target->attitude_q, follow_target->rates, follow_target->position_cov, follow_target->custom_state);
+}
+
+/**
+ * @brief Encode a follow_target struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param follow_target C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_follow_target_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_follow_target_t* follow_target)
+{
+    return mavlink_msg_follow_target_pack_chan(system_id, component_id, chan, msg, follow_target->timestamp, follow_target->est_capabilities, follow_target->lat, follow_target->lon, follow_target->alt, follow_target->vel, follow_target->acc, follow_target->attitude_q, follow_target->rates, follow_target->position_cov, follow_target->custom_state);
+}
+
+/**
+ * @brief Send a follow_target message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param timestamp [ms] Timestamp (time since system boot).
+ * @param est_capabilities  bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3)
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [m] Altitude (MSL)
+ * @param vel [m/s] target velocity (0,0,0) for unknown
+ * @param acc [m/s/s] linear target acceleration (0,0,0) for unknown
+ * @param attitude_q  (0 0 0 0 for unknown)
+ * @param rates  (0 0 0 for unknown)
+ * @param position_cov  eph epv
+ * @param custom_state  button states or switches of a tracker device
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_follow_target_send(mavlink_channel_t chan, uint64_t timestamp, uint8_t est_capabilities, int32_t lat, int32_t lon, float alt, const float *vel, const float *acc, const float *attitude_q, const float *rates, const float *position_cov, uint64_t custom_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_FOLLOW_TARGET_LEN];
+    _mav_put_uint64_t(buf, 0, timestamp);
+    _mav_put_uint64_t(buf, 8, custom_state);
+    _mav_put_int32_t(buf, 16, lat);
+    _mav_put_int32_t(buf, 20, lon);
+    _mav_put_float(buf, 24, alt);
+    _mav_put_uint8_t(buf, 92, est_capabilities);
+    _mav_put_float_array(buf, 28, vel, 3);
+    _mav_put_float_array(buf, 40, acc, 3);
+    _mav_put_float_array(buf, 52, attitude_q, 4);
+    _mav_put_float_array(buf, 68, rates, 3);
+    _mav_put_float_array(buf, 80, position_cov, 3);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FOLLOW_TARGET, buf, MAVLINK_MSG_ID_FOLLOW_TARGET_MIN_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_CRC);
+#else
+    mavlink_follow_target_t packet;
+    packet.timestamp = timestamp;
+    packet.custom_state = custom_state;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.est_capabilities = est_capabilities;
+    mav_array_memcpy(packet.vel, vel, sizeof(float)*3);
+    mav_array_memcpy(packet.acc, acc, sizeof(float)*3);
+    mav_array_memcpy(packet.attitude_q, attitude_q, sizeof(float)*4);
+    mav_array_memcpy(packet.rates, rates, sizeof(float)*3);
+    mav_array_memcpy(packet.position_cov, position_cov, sizeof(float)*3);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FOLLOW_TARGET, (const char *)&packet, MAVLINK_MSG_ID_FOLLOW_TARGET_MIN_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_CRC);
+#endif
+}
+
+/**
+ * @brief Send a follow_target message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_follow_target_send_struct(mavlink_channel_t chan, const mavlink_follow_target_t* follow_target)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_follow_target_send(chan, follow_target->timestamp, follow_target->est_capabilities, follow_target->lat, follow_target->lon, follow_target->alt, follow_target->vel, follow_target->acc, follow_target->attitude_q, follow_target->rates, follow_target->position_cov, follow_target->custom_state);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FOLLOW_TARGET, (const char *)follow_target, MAVLINK_MSG_ID_FOLLOW_TARGET_MIN_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_FOLLOW_TARGET_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_follow_target_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t timestamp, uint8_t est_capabilities, int32_t lat, int32_t lon, float alt, const float *vel, const float *acc, const float *attitude_q, const float *rates, const float *position_cov, uint64_t custom_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, timestamp);
+    _mav_put_uint64_t(buf, 8, custom_state);
+    _mav_put_int32_t(buf, 16, lat);
+    _mav_put_int32_t(buf, 20, lon);
+    _mav_put_float(buf, 24, alt);
+    _mav_put_uint8_t(buf, 92, est_capabilities);
+    _mav_put_float_array(buf, 28, vel, 3);
+    _mav_put_float_array(buf, 40, acc, 3);
+    _mav_put_float_array(buf, 52, attitude_q, 4);
+    _mav_put_float_array(buf, 68, rates, 3);
+    _mav_put_float_array(buf, 80, position_cov, 3);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FOLLOW_TARGET, buf, MAVLINK_MSG_ID_FOLLOW_TARGET_MIN_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_CRC);
+#else
+    mavlink_follow_target_t *packet = (mavlink_follow_target_t *)msgbuf;
+    packet->timestamp = timestamp;
+    packet->custom_state = custom_state;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->est_capabilities = est_capabilities;
+    mav_array_memcpy(packet->vel, vel, sizeof(float)*3);
+    mav_array_memcpy(packet->acc, acc, sizeof(float)*3);
+    mav_array_memcpy(packet->attitude_q, attitude_q, sizeof(float)*4);
+    mav_array_memcpy(packet->rates, rates, sizeof(float)*3);
+    mav_array_memcpy(packet->position_cov, position_cov, sizeof(float)*3);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_FOLLOW_TARGET, (const char *)packet, MAVLINK_MSG_ID_FOLLOW_TARGET_MIN_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN, MAVLINK_MSG_ID_FOLLOW_TARGET_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE FOLLOW_TARGET UNPACKING
+
+
+/**
+ * @brief Get field timestamp from follow_target message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint64_t mavlink_msg_follow_target_get_timestamp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field est_capabilities from follow_target message
+ *
+ * @return  bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3)
+ */
+static inline uint8_t mavlink_msg_follow_target_get_est_capabilities(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  92);
+}
+
+/**
+ * @brief Get field lat from follow_target message
+ *
+ * @return [degE7] Latitude (WGS84)
+ */
+static inline int32_t mavlink_msg_follow_target_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field lon from follow_target message
+ *
+ * @return [degE7] Longitude (WGS84)
+ */
+static inline int32_t mavlink_msg_follow_target_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  20);
+}
+
+/**
+ * @brief Get field alt from follow_target message
+ *
+ * @return [m] Altitude (MSL)
+ */
+static inline float mavlink_msg_follow_target_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field vel from follow_target message
+ *
+ * @return [m/s] target velocity (0,0,0) for unknown
+ */
+static inline uint16_t mavlink_msg_follow_target_get_vel(const mavlink_message_t* msg, float *vel)
+{
+    return _MAV_RETURN_float_array(msg, vel, 3,  28);
+}
+
+/**
+ * @brief Get field acc from follow_target message
+ *
+ * @return [m/s/s] linear target acceleration (0,0,0) for unknown
+ */
+static inline uint16_t mavlink_msg_follow_target_get_acc(const mavlink_message_t* msg, float *acc)
+{
+    return _MAV_RETURN_float_array(msg, acc, 3,  40);
+}
+
+/**
+ * @brief Get field attitude_q from follow_target message
+ *
+ * @return  (0 0 0 0 for unknown)
+ */
+static inline uint16_t mavlink_msg_follow_target_get_attitude_q(const mavlink_message_t* msg, float *attitude_q)
+{
+    return _MAV_RETURN_float_array(msg, attitude_q, 4,  52);
+}
+
+/**
+ * @brief Get field rates from follow_target message
+ *
+ * @return  (0 0 0 for unknown)
+ */
+static inline uint16_t mavlink_msg_follow_target_get_rates(const mavlink_message_t* msg, float *rates)
+{
+    return _MAV_RETURN_float_array(msg, rates, 3,  68);
+}
+
+/**
+ * @brief Get field position_cov from follow_target message
+ *
+ * @return  eph epv
+ */
+static inline uint16_t mavlink_msg_follow_target_get_position_cov(const mavlink_message_t* msg, float *position_cov)
+{
+    return _MAV_RETURN_float_array(msg, position_cov, 3,  80);
+}
+
+/**
+ * @brief Get field custom_state from follow_target message
+ *
+ * @return  button states or switches of a tracker device
+ */
+static inline uint64_t mavlink_msg_follow_target_get_custom_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  8);
+}
+
+/**
+ * @brief Decode a follow_target message into a struct
+ *
+ * @param msg The message to decode
+ * @param follow_target C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_follow_target_decode(const mavlink_message_t* msg, mavlink_follow_target_t* follow_target)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    follow_target->timestamp = mavlink_msg_follow_target_get_timestamp(msg);
+    follow_target->custom_state = mavlink_msg_follow_target_get_custom_state(msg);
+    follow_target->lat = mavlink_msg_follow_target_get_lat(msg);
+    follow_target->lon = mavlink_msg_follow_target_get_lon(msg);
+    follow_target->alt = mavlink_msg_follow_target_get_alt(msg);
+    mavlink_msg_follow_target_get_vel(msg, follow_target->vel);
+    mavlink_msg_follow_target_get_acc(msg, follow_target->acc);
+    mavlink_msg_follow_target_get_attitude_q(msg, follow_target->attitude_q);
+    mavlink_msg_follow_target_get_rates(msg, follow_target->rates);
+    mavlink_msg_follow_target_get_position_cov(msg, follow_target->position_cov);
+    follow_target->est_capabilities = mavlink_msg_follow_target_get_est_capabilities(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_FOLLOW_TARGET_LEN? msg->len : MAVLINK_MSG_ID_FOLLOW_TARGET_LEN;
+        memset(follow_target, 0, MAVLINK_MSG_ID_FOLLOW_TARGET_LEN);
+    memcpy(follow_target, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 463 - 0
v2.0/common/mavlink_msg_generator_status.h

@@ -0,0 +1,463 @@
+#pragma once
+// MESSAGE GENERATOR_STATUS PACKING
+
+#define MAVLINK_MSG_ID_GENERATOR_STATUS 373
+
+
+typedef struct __mavlink_generator_status_t {
+ uint64_t status; /*<  Status flags.*/
+ float battery_current; /*< [A] Current into/out of battery. Positive for out. Negative for in. NaN: field not provided.*/
+ float load_current; /*< [A] Current going to the UAV. If battery current not available this is the DC current from the generator. Positive for out. Negative for in. NaN: field not provided*/
+ float power_generated; /*< [W] The power being generated. NaN: field not provided*/
+ float bus_voltage; /*< [V] Voltage of the bus seen at the generator, or battery bus if battery bus is controlled by generator and at a different voltage to main bus.*/
+ float bat_current_setpoint; /*< [A] The target battery current. Positive for out. Negative for in. NaN: field not provided*/
+ uint32_t runtime; /*< [s] Seconds this generator has run since it was rebooted. UINT32_MAX: field not provided.*/
+ int32_t time_until_maintenance; /*< [s] Seconds until this generator requires maintenance.  A negative value indicates maintenance is past-due. INT32_MAX: field not provided.*/
+ uint16_t generator_speed; /*< [rpm] Speed of electrical generator or alternator. UINT16_MAX: field not provided.*/
+ int16_t rectifier_temperature; /*< [degC] The temperature of the rectifier or power converter. INT16_MAX: field not provided.*/
+ int16_t generator_temperature; /*< [degC] The temperature of the mechanical motor, fuel cell core or generator. INT16_MAX: field not provided.*/
+} mavlink_generator_status_t;
+
+#define MAVLINK_MSG_ID_GENERATOR_STATUS_LEN 42
+#define MAVLINK_MSG_ID_GENERATOR_STATUS_MIN_LEN 42
+#define MAVLINK_MSG_ID_373_LEN 42
+#define MAVLINK_MSG_ID_373_MIN_LEN 42
+
+#define MAVLINK_MSG_ID_GENERATOR_STATUS_CRC 117
+#define MAVLINK_MSG_ID_373_CRC 117
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GENERATOR_STATUS { \
+    373, \
+    "GENERATOR_STATUS", \
+    11, \
+    {  { "status", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_generator_status_t, status) }, \
+         { "generator_speed", NULL, MAVLINK_TYPE_UINT16_T, 0, 36, offsetof(mavlink_generator_status_t, generator_speed) }, \
+         { "battery_current", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_generator_status_t, battery_current) }, \
+         { "load_current", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_generator_status_t, load_current) }, \
+         { "power_generated", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_generator_status_t, power_generated) }, \
+         { "bus_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_generator_status_t, bus_voltage) }, \
+         { "rectifier_temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 38, offsetof(mavlink_generator_status_t, rectifier_temperature) }, \
+         { "bat_current_setpoint", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_generator_status_t, bat_current_setpoint) }, \
+         { "generator_temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 40, offsetof(mavlink_generator_status_t, generator_temperature) }, \
+         { "runtime", NULL, MAVLINK_TYPE_UINT32_T, 0, 28, offsetof(mavlink_generator_status_t, runtime) }, \
+         { "time_until_maintenance", NULL, MAVLINK_TYPE_INT32_T, 0, 32, offsetof(mavlink_generator_status_t, time_until_maintenance) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GENERATOR_STATUS { \
+    "GENERATOR_STATUS", \
+    11, \
+    {  { "status", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_generator_status_t, status) }, \
+         { "generator_speed", NULL, MAVLINK_TYPE_UINT16_T, 0, 36, offsetof(mavlink_generator_status_t, generator_speed) }, \
+         { "battery_current", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_generator_status_t, battery_current) }, \
+         { "load_current", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_generator_status_t, load_current) }, \
+         { "power_generated", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_generator_status_t, power_generated) }, \
+         { "bus_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_generator_status_t, bus_voltage) }, \
+         { "rectifier_temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 38, offsetof(mavlink_generator_status_t, rectifier_temperature) }, \
+         { "bat_current_setpoint", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_generator_status_t, bat_current_setpoint) }, \
+         { "generator_temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 40, offsetof(mavlink_generator_status_t, generator_temperature) }, \
+         { "runtime", NULL, MAVLINK_TYPE_UINT32_T, 0, 28, offsetof(mavlink_generator_status_t, runtime) }, \
+         { "time_until_maintenance", NULL, MAVLINK_TYPE_INT32_T, 0, 32, offsetof(mavlink_generator_status_t, time_until_maintenance) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a generator_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param status  Status flags.
+ * @param generator_speed [rpm] Speed of electrical generator or alternator. UINT16_MAX: field not provided.
+ * @param battery_current [A] Current into/out of battery. Positive for out. Negative for in. NaN: field not provided.
+ * @param load_current [A] Current going to the UAV. If battery current not available this is the DC current from the generator. Positive for out. Negative for in. NaN: field not provided
+ * @param power_generated [W] The power being generated. NaN: field not provided
+ * @param bus_voltage [V] Voltage of the bus seen at the generator, or battery bus if battery bus is controlled by generator and at a different voltage to main bus.
+ * @param rectifier_temperature [degC] The temperature of the rectifier or power converter. INT16_MAX: field not provided.
+ * @param bat_current_setpoint [A] The target battery current. Positive for out. Negative for in. NaN: field not provided
+ * @param generator_temperature [degC] The temperature of the mechanical motor, fuel cell core or generator. INT16_MAX: field not provided.
+ * @param runtime [s] Seconds this generator has run since it was rebooted. UINT32_MAX: field not provided.
+ * @param time_until_maintenance [s] Seconds until this generator requires maintenance.  A negative value indicates maintenance is past-due. INT32_MAX: field not provided.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_generator_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t status, uint16_t generator_speed, float battery_current, float load_current, float power_generated, float bus_voltage, int16_t rectifier_temperature, float bat_current_setpoint, int16_t generator_temperature, uint32_t runtime, int32_t time_until_maintenance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GENERATOR_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, status);
+    _mav_put_float(buf, 8, battery_current);
+    _mav_put_float(buf, 12, load_current);
+    _mav_put_float(buf, 16, power_generated);
+    _mav_put_float(buf, 20, bus_voltage);
+    _mav_put_float(buf, 24, bat_current_setpoint);
+    _mav_put_uint32_t(buf, 28, runtime);
+    _mav_put_int32_t(buf, 32, time_until_maintenance);
+    _mav_put_uint16_t(buf, 36, generator_speed);
+    _mav_put_int16_t(buf, 38, rectifier_temperature);
+    _mav_put_int16_t(buf, 40, generator_temperature);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN);
+#else
+    mavlink_generator_status_t packet;
+    packet.status = status;
+    packet.battery_current = battery_current;
+    packet.load_current = load_current;
+    packet.power_generated = power_generated;
+    packet.bus_voltage = bus_voltage;
+    packet.bat_current_setpoint = bat_current_setpoint;
+    packet.runtime = runtime;
+    packet.time_until_maintenance = time_until_maintenance;
+    packet.generator_speed = generator_speed;
+    packet.rectifier_temperature = rectifier_temperature;
+    packet.generator_temperature = generator_temperature;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GENERATOR_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GENERATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a generator_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param status  Status flags.
+ * @param generator_speed [rpm] Speed of electrical generator or alternator. UINT16_MAX: field not provided.
+ * @param battery_current [A] Current into/out of battery. Positive for out. Negative for in. NaN: field not provided.
+ * @param load_current [A] Current going to the UAV. If battery current not available this is the DC current from the generator. Positive for out. Negative for in. NaN: field not provided
+ * @param power_generated [W] The power being generated. NaN: field not provided
+ * @param bus_voltage [V] Voltage of the bus seen at the generator, or battery bus if battery bus is controlled by generator and at a different voltage to main bus.
+ * @param rectifier_temperature [degC] The temperature of the rectifier or power converter. INT16_MAX: field not provided.
+ * @param bat_current_setpoint [A] The target battery current. Positive for out. Negative for in. NaN: field not provided
+ * @param generator_temperature [degC] The temperature of the mechanical motor, fuel cell core or generator. INT16_MAX: field not provided.
+ * @param runtime [s] Seconds this generator has run since it was rebooted. UINT32_MAX: field not provided.
+ * @param time_until_maintenance [s] Seconds until this generator requires maintenance.  A negative value indicates maintenance is past-due. INT32_MAX: field not provided.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_generator_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t status,uint16_t generator_speed,float battery_current,float load_current,float power_generated,float bus_voltage,int16_t rectifier_temperature,float bat_current_setpoint,int16_t generator_temperature,uint32_t runtime,int32_t time_until_maintenance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GENERATOR_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, status);
+    _mav_put_float(buf, 8, battery_current);
+    _mav_put_float(buf, 12, load_current);
+    _mav_put_float(buf, 16, power_generated);
+    _mav_put_float(buf, 20, bus_voltage);
+    _mav_put_float(buf, 24, bat_current_setpoint);
+    _mav_put_uint32_t(buf, 28, runtime);
+    _mav_put_int32_t(buf, 32, time_until_maintenance);
+    _mav_put_uint16_t(buf, 36, generator_speed);
+    _mav_put_int16_t(buf, 38, rectifier_temperature);
+    _mav_put_int16_t(buf, 40, generator_temperature);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN);
+#else
+    mavlink_generator_status_t packet;
+    packet.status = status;
+    packet.battery_current = battery_current;
+    packet.load_current = load_current;
+    packet.power_generated = power_generated;
+    packet.bus_voltage = bus_voltage;
+    packet.bat_current_setpoint = bat_current_setpoint;
+    packet.runtime = runtime;
+    packet.time_until_maintenance = time_until_maintenance;
+    packet.generator_speed = generator_speed;
+    packet.rectifier_temperature = rectifier_temperature;
+    packet.generator_temperature = generator_temperature;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GENERATOR_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GENERATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a generator_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param generator_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_generator_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_generator_status_t* generator_status)
+{
+    return mavlink_msg_generator_status_pack(system_id, component_id, msg, generator_status->status, generator_status->generator_speed, generator_status->battery_current, generator_status->load_current, generator_status->power_generated, generator_status->bus_voltage, generator_status->rectifier_temperature, generator_status->bat_current_setpoint, generator_status->generator_temperature, generator_status->runtime, generator_status->time_until_maintenance);
+}
+
+/**
+ * @brief Encode a generator_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param generator_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_generator_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_generator_status_t* generator_status)
+{
+    return mavlink_msg_generator_status_pack_chan(system_id, component_id, chan, msg, generator_status->status, generator_status->generator_speed, generator_status->battery_current, generator_status->load_current, generator_status->power_generated, generator_status->bus_voltage, generator_status->rectifier_temperature, generator_status->bat_current_setpoint, generator_status->generator_temperature, generator_status->runtime, generator_status->time_until_maintenance);
+}
+
+/**
+ * @brief Send a generator_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param status  Status flags.
+ * @param generator_speed [rpm] Speed of electrical generator or alternator. UINT16_MAX: field not provided.
+ * @param battery_current [A] Current into/out of battery. Positive for out. Negative for in. NaN: field not provided.
+ * @param load_current [A] Current going to the UAV. If battery current not available this is the DC current from the generator. Positive for out. Negative for in. NaN: field not provided
+ * @param power_generated [W] The power being generated. NaN: field not provided
+ * @param bus_voltage [V] Voltage of the bus seen at the generator, or battery bus if battery bus is controlled by generator and at a different voltage to main bus.
+ * @param rectifier_temperature [degC] The temperature of the rectifier or power converter. INT16_MAX: field not provided.
+ * @param bat_current_setpoint [A] The target battery current. Positive for out. Negative for in. NaN: field not provided
+ * @param generator_temperature [degC] The temperature of the mechanical motor, fuel cell core or generator. INT16_MAX: field not provided.
+ * @param runtime [s] Seconds this generator has run since it was rebooted. UINT32_MAX: field not provided.
+ * @param time_until_maintenance [s] Seconds until this generator requires maintenance.  A negative value indicates maintenance is past-due. INT32_MAX: field not provided.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_generator_status_send(mavlink_channel_t chan, uint64_t status, uint16_t generator_speed, float battery_current, float load_current, float power_generated, float bus_voltage, int16_t rectifier_temperature, float bat_current_setpoint, int16_t generator_temperature, uint32_t runtime, int32_t time_until_maintenance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GENERATOR_STATUS_LEN];
+    _mav_put_uint64_t(buf, 0, status);
+    _mav_put_float(buf, 8, battery_current);
+    _mav_put_float(buf, 12, load_current);
+    _mav_put_float(buf, 16, power_generated);
+    _mav_put_float(buf, 20, bus_voltage);
+    _mav_put_float(buf, 24, bat_current_setpoint);
+    _mav_put_uint32_t(buf, 28, runtime);
+    _mav_put_int32_t(buf, 32, time_until_maintenance);
+    _mav_put_uint16_t(buf, 36, generator_speed);
+    _mav_put_int16_t(buf, 38, rectifier_temperature);
+    _mav_put_int16_t(buf, 40, generator_temperature);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GENERATOR_STATUS, buf, MAVLINK_MSG_ID_GENERATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_CRC);
+#else
+    mavlink_generator_status_t packet;
+    packet.status = status;
+    packet.battery_current = battery_current;
+    packet.load_current = load_current;
+    packet.power_generated = power_generated;
+    packet.bus_voltage = bus_voltage;
+    packet.bat_current_setpoint = bat_current_setpoint;
+    packet.runtime = runtime;
+    packet.time_until_maintenance = time_until_maintenance;
+    packet.generator_speed = generator_speed;
+    packet.rectifier_temperature = rectifier_temperature;
+    packet.generator_temperature = generator_temperature;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GENERATOR_STATUS, (const char *)&packet, MAVLINK_MSG_ID_GENERATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a generator_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_generator_status_send_struct(mavlink_channel_t chan, const mavlink_generator_status_t* generator_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_generator_status_send(chan, generator_status->status, generator_status->generator_speed, generator_status->battery_current, generator_status->load_current, generator_status->power_generated, generator_status->bus_voltage, generator_status->rectifier_temperature, generator_status->bat_current_setpoint, generator_status->generator_temperature, generator_status->runtime, generator_status->time_until_maintenance);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GENERATOR_STATUS, (const char *)generator_status, MAVLINK_MSG_ID_GENERATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GENERATOR_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_generator_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t status, uint16_t generator_speed, float battery_current, float load_current, float power_generated, float bus_voltage, int16_t rectifier_temperature, float bat_current_setpoint, int16_t generator_temperature, uint32_t runtime, int32_t time_until_maintenance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, status);
+    _mav_put_float(buf, 8, battery_current);
+    _mav_put_float(buf, 12, load_current);
+    _mav_put_float(buf, 16, power_generated);
+    _mav_put_float(buf, 20, bus_voltage);
+    _mav_put_float(buf, 24, bat_current_setpoint);
+    _mav_put_uint32_t(buf, 28, runtime);
+    _mav_put_int32_t(buf, 32, time_until_maintenance);
+    _mav_put_uint16_t(buf, 36, generator_speed);
+    _mav_put_int16_t(buf, 38, rectifier_temperature);
+    _mav_put_int16_t(buf, 40, generator_temperature);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GENERATOR_STATUS, buf, MAVLINK_MSG_ID_GENERATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_CRC);
+#else
+    mavlink_generator_status_t *packet = (mavlink_generator_status_t *)msgbuf;
+    packet->status = status;
+    packet->battery_current = battery_current;
+    packet->load_current = load_current;
+    packet->power_generated = power_generated;
+    packet->bus_voltage = bus_voltage;
+    packet->bat_current_setpoint = bat_current_setpoint;
+    packet->runtime = runtime;
+    packet->time_until_maintenance = time_until_maintenance;
+    packet->generator_speed = generator_speed;
+    packet->rectifier_temperature = rectifier_temperature;
+    packet->generator_temperature = generator_temperature;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GENERATOR_STATUS, (const char *)packet, MAVLINK_MSG_ID_GENERATOR_STATUS_MIN_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN, MAVLINK_MSG_ID_GENERATOR_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GENERATOR_STATUS UNPACKING
+
+
+/**
+ * @brief Get field status from generator_status message
+ *
+ * @return  Status flags.
+ */
+static inline uint64_t mavlink_msg_generator_status_get_status(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field generator_speed from generator_status message
+ *
+ * @return [rpm] Speed of electrical generator or alternator. UINT16_MAX: field not provided.
+ */
+static inline uint16_t mavlink_msg_generator_status_get_generator_speed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  36);
+}
+
+/**
+ * @brief Get field battery_current from generator_status message
+ *
+ * @return [A] Current into/out of battery. Positive for out. Negative for in. NaN: field not provided.
+ */
+static inline float mavlink_msg_generator_status_get_battery_current(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field load_current from generator_status message
+ *
+ * @return [A] Current going to the UAV. If battery current not available this is the DC current from the generator. Positive for out. Negative for in. NaN: field not provided
+ */
+static inline float mavlink_msg_generator_status_get_load_current(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field power_generated from generator_status message
+ *
+ * @return [W] The power being generated. NaN: field not provided
+ */
+static inline float mavlink_msg_generator_status_get_power_generated(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field bus_voltage from generator_status message
+ *
+ * @return [V] Voltage of the bus seen at the generator, or battery bus if battery bus is controlled by generator and at a different voltage to main bus.
+ */
+static inline float mavlink_msg_generator_status_get_bus_voltage(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field rectifier_temperature from generator_status message
+ *
+ * @return [degC] The temperature of the rectifier or power converter. INT16_MAX: field not provided.
+ */
+static inline int16_t mavlink_msg_generator_status_get_rectifier_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  38);
+}
+
+/**
+ * @brief Get field bat_current_setpoint from generator_status message
+ *
+ * @return [A] The target battery current. Positive for out. Negative for in. NaN: field not provided
+ */
+static inline float mavlink_msg_generator_status_get_bat_current_setpoint(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field generator_temperature from generator_status message
+ *
+ * @return [degC] The temperature of the mechanical motor, fuel cell core or generator. INT16_MAX: field not provided.
+ */
+static inline int16_t mavlink_msg_generator_status_get_generator_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  40);
+}
+
+/**
+ * @brief Get field runtime from generator_status message
+ *
+ * @return [s] Seconds this generator has run since it was rebooted. UINT32_MAX: field not provided.
+ */
+static inline uint32_t mavlink_msg_generator_status_get_runtime(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  28);
+}
+
+/**
+ * @brief Get field time_until_maintenance from generator_status message
+ *
+ * @return [s] Seconds until this generator requires maintenance.  A negative value indicates maintenance is past-due. INT32_MAX: field not provided.
+ */
+static inline int32_t mavlink_msg_generator_status_get_time_until_maintenance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  32);
+}
+
+/**
+ * @brief Decode a generator_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param generator_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_generator_status_decode(const mavlink_message_t* msg, mavlink_generator_status_t* generator_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    generator_status->status = mavlink_msg_generator_status_get_status(msg);
+    generator_status->battery_current = mavlink_msg_generator_status_get_battery_current(msg);
+    generator_status->load_current = mavlink_msg_generator_status_get_load_current(msg);
+    generator_status->power_generated = mavlink_msg_generator_status_get_power_generated(msg);
+    generator_status->bus_voltage = mavlink_msg_generator_status_get_bus_voltage(msg);
+    generator_status->bat_current_setpoint = mavlink_msg_generator_status_get_bat_current_setpoint(msg);
+    generator_status->runtime = mavlink_msg_generator_status_get_runtime(msg);
+    generator_status->time_until_maintenance = mavlink_msg_generator_status_get_time_until_maintenance(msg);
+    generator_status->generator_speed = mavlink_msg_generator_status_get_generator_speed(msg);
+    generator_status->rectifier_temperature = mavlink_msg_generator_status_get_rectifier_temperature(msg);
+    generator_status->generator_temperature = mavlink_msg_generator_status_get_generator_temperature(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GENERATOR_STATUS_LEN? msg->len : MAVLINK_MSG_ID_GENERATOR_STATUS_LEN;
+        memset(generator_status, 0, MAVLINK_MSG_ID_GENERATOR_STATUS_LEN);
+    memcpy(generator_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 480 - 0
v2.0/common/mavlink_msg_gimbal_device_attitude_status.h

@@ -0,0 +1,480 @@
+#pragma once
+// MESSAGE GIMBAL_DEVICE_ATTITUDE_STATUS PACKING
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS 285
+
+
+typedef struct __mavlink_gimbal_device_attitude_status_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ float q[4]; /*<  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description.*/
+ float angular_velocity_x; /*< [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN if unknown.*/
+ float angular_velocity_y; /*< [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN if unknown.*/
+ float angular_velocity_z; /*< [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN if unknown.*/
+ uint32_t failure_flags; /*<  Failure flags (0 for no failure)*/
+ uint16_t flags; /*<  Current gimbal flags set.*/
+ uint8_t target_system; /*<  System ID*/
+ uint8_t target_component; /*<  Component ID*/
+ float delta_yaw; /*< [rad] Yaw angle relating the quaternions in earth and body frames (see message description). NaN if unknown.*/
+ float delta_yaw_velocity; /*< [rad/s] Yaw angular velocity relating the angular velocities in earth and body frames (see message description). NaN if unknown.*/
+ uint8_t gimbal_device_id; /*<  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.*/
+} mavlink_gimbal_device_attitude_status_t;
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN 49
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_MIN_LEN 40
+#define MAVLINK_MSG_ID_285_LEN 49
+#define MAVLINK_MSG_ID_285_MIN_LEN 40
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_CRC 137
+#define MAVLINK_MSG_ID_285_CRC 137
+
+#define MAVLINK_MSG_GIMBAL_DEVICE_ATTITUDE_STATUS_FIELD_Q_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GIMBAL_DEVICE_ATTITUDE_STATUS { \
+    285, \
+    "GIMBAL_DEVICE_ATTITUDE_STATUS", \
+    12, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 38, offsetof(mavlink_gimbal_device_attitude_status_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 39, offsetof(mavlink_gimbal_device_attitude_status_t, target_component) }, \
+         { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_device_attitude_status_t, time_boot_ms) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 36, offsetof(mavlink_gimbal_device_attitude_status_t, flags) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 4, offsetof(mavlink_gimbal_device_attitude_status_t, q) }, \
+         { "angular_velocity_x", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_device_attitude_status_t, angular_velocity_x) }, \
+         { "angular_velocity_y", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_device_attitude_status_t, angular_velocity_y) }, \
+         { "angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gimbal_device_attitude_status_t, angular_velocity_z) }, \
+         { "failure_flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 32, offsetof(mavlink_gimbal_device_attitude_status_t, failure_flags) }, \
+         { "delta_yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_gimbal_device_attitude_status_t, delta_yaw) }, \
+         { "delta_yaw_velocity", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_gimbal_device_attitude_status_t, delta_yaw_velocity) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 48, offsetof(mavlink_gimbal_device_attitude_status_t, gimbal_device_id) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GIMBAL_DEVICE_ATTITUDE_STATUS { \
+    "GIMBAL_DEVICE_ATTITUDE_STATUS", \
+    12, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 38, offsetof(mavlink_gimbal_device_attitude_status_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 39, offsetof(mavlink_gimbal_device_attitude_status_t, target_component) }, \
+         { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_device_attitude_status_t, time_boot_ms) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 36, offsetof(mavlink_gimbal_device_attitude_status_t, flags) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 4, offsetof(mavlink_gimbal_device_attitude_status_t, q) }, \
+         { "angular_velocity_x", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_device_attitude_status_t, angular_velocity_x) }, \
+         { "angular_velocity_y", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_device_attitude_status_t, angular_velocity_y) }, \
+         { "angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gimbal_device_attitude_status_t, angular_velocity_z) }, \
+         { "failure_flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 32, offsetof(mavlink_gimbal_device_attitude_status_t, failure_flags) }, \
+         { "delta_yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_gimbal_device_attitude_status_t, delta_yaw) }, \
+         { "delta_yaw_velocity", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_gimbal_device_attitude_status_t, delta_yaw_velocity) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 48, offsetof(mavlink_gimbal_device_attitude_status_t, gimbal_device_id) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gimbal_device_attitude_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param flags  Current gimbal flags set.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description.
+ * @param angular_velocity_x [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN if unknown.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN if unknown.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN if unknown.
+ * @param failure_flags  Failure flags (0 for no failure)
+ * @param delta_yaw [rad] Yaw angle relating the quaternions in earth and body frames (see message description). NaN if unknown.
+ * @param delta_yaw_velocity [rad/s] Yaw angular velocity relating the angular velocities in earth and body frames (see message description). NaN if unknown.
+ * @param gimbal_device_id  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_device_attitude_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint32_t time_boot_ms, uint16_t flags, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z, uint32_t failure_flags, float delta_yaw, float delta_yaw_velocity, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 20, angular_velocity_x);
+    _mav_put_float(buf, 24, angular_velocity_y);
+    _mav_put_float(buf, 28, angular_velocity_z);
+    _mav_put_uint32_t(buf, 32, failure_flags);
+    _mav_put_uint16_t(buf, 36, flags);
+    _mav_put_uint8_t(buf, 38, target_system);
+    _mav_put_uint8_t(buf, 39, target_component);
+    _mav_put_float(buf, 40, delta_yaw);
+    _mav_put_float(buf, 44, delta_yaw_velocity);
+    _mav_put_uint8_t(buf, 48, gimbal_device_id);
+    _mav_put_float_array(buf, 4, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN);
+#else
+    mavlink_gimbal_device_attitude_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.failure_flags = failure_flags;
+    packet.flags = flags;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.delta_yaw = delta_yaw;
+    packet.delta_yaw_velocity = delta_yaw_velocity;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a gimbal_device_attitude_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param flags  Current gimbal flags set.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description.
+ * @param angular_velocity_x [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN if unknown.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN if unknown.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN if unknown.
+ * @param failure_flags  Failure flags (0 for no failure)
+ * @param delta_yaw [rad] Yaw angle relating the quaternions in earth and body frames (see message description). NaN if unknown.
+ * @param delta_yaw_velocity [rad/s] Yaw angular velocity relating the angular velocities in earth and body frames (see message description). NaN if unknown.
+ * @param gimbal_device_id  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_device_attitude_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint32_t time_boot_ms,uint16_t flags,const float *q,float angular_velocity_x,float angular_velocity_y,float angular_velocity_z,uint32_t failure_flags,float delta_yaw,float delta_yaw_velocity,uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 20, angular_velocity_x);
+    _mav_put_float(buf, 24, angular_velocity_y);
+    _mav_put_float(buf, 28, angular_velocity_z);
+    _mav_put_uint32_t(buf, 32, failure_flags);
+    _mav_put_uint16_t(buf, 36, flags);
+    _mav_put_uint8_t(buf, 38, target_system);
+    _mav_put_uint8_t(buf, 39, target_component);
+    _mav_put_float(buf, 40, delta_yaw);
+    _mav_put_float(buf, 44, delta_yaw_velocity);
+    _mav_put_uint8_t(buf, 48, gimbal_device_id);
+    _mav_put_float_array(buf, 4, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN);
+#else
+    mavlink_gimbal_device_attitude_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.failure_flags = failure_flags;
+    packet.flags = flags;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.delta_yaw = delta_yaw;
+    packet.delta_yaw_velocity = delta_yaw_velocity;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a gimbal_device_attitude_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_device_attitude_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_device_attitude_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gimbal_device_attitude_status_t* gimbal_device_attitude_status)
+{
+    return mavlink_msg_gimbal_device_attitude_status_pack(system_id, component_id, msg, gimbal_device_attitude_status->target_system, gimbal_device_attitude_status->target_component, gimbal_device_attitude_status->time_boot_ms, gimbal_device_attitude_status->flags, gimbal_device_attitude_status->q, gimbal_device_attitude_status->angular_velocity_x, gimbal_device_attitude_status->angular_velocity_y, gimbal_device_attitude_status->angular_velocity_z, gimbal_device_attitude_status->failure_flags, gimbal_device_attitude_status->delta_yaw, gimbal_device_attitude_status->delta_yaw_velocity, gimbal_device_attitude_status->gimbal_device_id);
+}
+
+/**
+ * @brief Encode a gimbal_device_attitude_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_device_attitude_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_device_attitude_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gimbal_device_attitude_status_t* gimbal_device_attitude_status)
+{
+    return mavlink_msg_gimbal_device_attitude_status_pack_chan(system_id, component_id, chan, msg, gimbal_device_attitude_status->target_system, gimbal_device_attitude_status->target_component, gimbal_device_attitude_status->time_boot_ms, gimbal_device_attitude_status->flags, gimbal_device_attitude_status->q, gimbal_device_attitude_status->angular_velocity_x, gimbal_device_attitude_status->angular_velocity_y, gimbal_device_attitude_status->angular_velocity_z, gimbal_device_attitude_status->failure_flags, gimbal_device_attitude_status->delta_yaw, gimbal_device_attitude_status->delta_yaw_velocity, gimbal_device_attitude_status->gimbal_device_id);
+}
+
+/**
+ * @brief Send a gimbal_device_attitude_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param flags  Current gimbal flags set.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description.
+ * @param angular_velocity_x [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN if unknown.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN if unknown.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN if unknown.
+ * @param failure_flags  Failure flags (0 for no failure)
+ * @param delta_yaw [rad] Yaw angle relating the quaternions in earth and body frames (see message description). NaN if unknown.
+ * @param delta_yaw_velocity [rad/s] Yaw angular velocity relating the angular velocities in earth and body frames (see message description). NaN if unknown.
+ * @param gimbal_device_id  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gimbal_device_attitude_status_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint32_t time_boot_ms, uint16_t flags, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z, uint32_t failure_flags, float delta_yaw, float delta_yaw_velocity, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 20, angular_velocity_x);
+    _mav_put_float(buf, 24, angular_velocity_y);
+    _mav_put_float(buf, 28, angular_velocity_z);
+    _mav_put_uint32_t(buf, 32, failure_flags);
+    _mav_put_uint16_t(buf, 36, flags);
+    _mav_put_uint8_t(buf, 38, target_system);
+    _mav_put_uint8_t(buf, 39, target_component);
+    _mav_put_float(buf, 40, delta_yaw);
+    _mav_put_float(buf, 44, delta_yaw_velocity);
+    _mav_put_uint8_t(buf, 48, gimbal_device_id);
+    _mav_put_float_array(buf, 4, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS, buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_CRC);
+#else
+    mavlink_gimbal_device_attitude_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.failure_flags = failure_flags;
+    packet.flags = flags;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.delta_yaw = delta_yaw;
+    packet.delta_yaw_velocity = delta_yaw_velocity;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS, (const char *)&packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gimbal_device_attitude_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gimbal_device_attitude_status_send_struct(mavlink_channel_t chan, const mavlink_gimbal_device_attitude_status_t* gimbal_device_attitude_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_device_attitude_status_send(chan, gimbal_device_attitude_status->target_system, gimbal_device_attitude_status->target_component, gimbal_device_attitude_status->time_boot_ms, gimbal_device_attitude_status->flags, gimbal_device_attitude_status->q, gimbal_device_attitude_status->angular_velocity_x, gimbal_device_attitude_status->angular_velocity_y, gimbal_device_attitude_status->angular_velocity_z, gimbal_device_attitude_status->failure_flags, gimbal_device_attitude_status->delta_yaw, gimbal_device_attitude_status->delta_yaw_velocity, gimbal_device_attitude_status->gimbal_device_id);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS, (const char *)gimbal_device_attitude_status, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gimbal_device_attitude_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint32_t time_boot_ms, uint16_t flags, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z, uint32_t failure_flags, float delta_yaw, float delta_yaw_velocity, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_float(buf, 20, angular_velocity_x);
+    _mav_put_float(buf, 24, angular_velocity_y);
+    _mav_put_float(buf, 28, angular_velocity_z);
+    _mav_put_uint32_t(buf, 32, failure_flags);
+    _mav_put_uint16_t(buf, 36, flags);
+    _mav_put_uint8_t(buf, 38, target_system);
+    _mav_put_uint8_t(buf, 39, target_component);
+    _mav_put_float(buf, 40, delta_yaw);
+    _mav_put_float(buf, 44, delta_yaw_velocity);
+    _mav_put_uint8_t(buf, 48, gimbal_device_id);
+    _mav_put_float_array(buf, 4, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS, buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_CRC);
+#else
+    mavlink_gimbal_device_attitude_status_t *packet = (mavlink_gimbal_device_attitude_status_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->angular_velocity_x = angular_velocity_x;
+    packet->angular_velocity_y = angular_velocity_y;
+    packet->angular_velocity_z = angular_velocity_z;
+    packet->failure_flags = failure_flags;
+    packet->flags = flags;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->delta_yaw = delta_yaw;
+    packet->delta_yaw_velocity = delta_yaw_velocity;
+    packet->gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS, (const char *)packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GIMBAL_DEVICE_ATTITUDE_STATUS UNPACKING
+
+
+/**
+ * @brief Get field target_system from gimbal_device_attitude_status message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_gimbal_device_attitude_status_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  38);
+}
+
+/**
+ * @brief Get field target_component from gimbal_device_attitude_status message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_gimbal_device_attitude_status_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  39);
+}
+
+/**
+ * @brief Get field time_boot_ms from gimbal_device_attitude_status message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_gimbal_device_attitude_status_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field flags from gimbal_device_attitude_status message
+ *
+ * @return  Current gimbal flags set.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_attitude_status_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  36);
+}
+
+/**
+ * @brief Get field q from gimbal_device_attitude_status message
+ *
+ * @return  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_attitude_status_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  4);
+}
+
+/**
+ * @brief Get field angular_velocity_x from gimbal_device_attitude_status message
+ *
+ * @return [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_attitude_status_get_angular_velocity_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field angular_velocity_y from gimbal_device_attitude_status message
+ *
+ * @return [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_attitude_status_get_angular_velocity_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field angular_velocity_z from gimbal_device_attitude_status message
+ *
+ * @return [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_attitude_status_get_angular_velocity_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field failure_flags from gimbal_device_attitude_status message
+ *
+ * @return  Failure flags (0 for no failure)
+ */
+static inline uint32_t mavlink_msg_gimbal_device_attitude_status_get_failure_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  32);
+}
+
+/**
+ * @brief Get field delta_yaw from gimbal_device_attitude_status message
+ *
+ * @return [rad] Yaw angle relating the quaternions in earth and body frames (see message description). NaN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_attitude_status_get_delta_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  40);
+}
+
+/**
+ * @brief Get field delta_yaw_velocity from gimbal_device_attitude_status message
+ *
+ * @return [rad/s] Yaw angular velocity relating the angular velocities in earth and body frames (see message description). NaN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_attitude_status_get_delta_yaw_velocity(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Get field gimbal_device_id from gimbal_device_attitude_status message
+ *
+ * @return  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.
+ */
+static inline uint8_t mavlink_msg_gimbal_device_attitude_status_get_gimbal_device_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  48);
+}
+
+/**
+ * @brief Decode a gimbal_device_attitude_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param gimbal_device_attitude_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gimbal_device_attitude_status_decode(const mavlink_message_t* msg, mavlink_gimbal_device_attitude_status_t* gimbal_device_attitude_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gimbal_device_attitude_status->time_boot_ms = mavlink_msg_gimbal_device_attitude_status_get_time_boot_ms(msg);
+    mavlink_msg_gimbal_device_attitude_status_get_q(msg, gimbal_device_attitude_status->q);
+    gimbal_device_attitude_status->angular_velocity_x = mavlink_msg_gimbal_device_attitude_status_get_angular_velocity_x(msg);
+    gimbal_device_attitude_status->angular_velocity_y = mavlink_msg_gimbal_device_attitude_status_get_angular_velocity_y(msg);
+    gimbal_device_attitude_status->angular_velocity_z = mavlink_msg_gimbal_device_attitude_status_get_angular_velocity_z(msg);
+    gimbal_device_attitude_status->failure_flags = mavlink_msg_gimbal_device_attitude_status_get_failure_flags(msg);
+    gimbal_device_attitude_status->flags = mavlink_msg_gimbal_device_attitude_status_get_flags(msg);
+    gimbal_device_attitude_status->target_system = mavlink_msg_gimbal_device_attitude_status_get_target_system(msg);
+    gimbal_device_attitude_status->target_component = mavlink_msg_gimbal_device_attitude_status_get_target_component(msg);
+    gimbal_device_attitude_status->delta_yaw = mavlink_msg_gimbal_device_attitude_status_get_delta_yaw(msg);
+    gimbal_device_attitude_status->delta_yaw_velocity = mavlink_msg_gimbal_device_attitude_status_get_delta_yaw_velocity(msg);
+    gimbal_device_attitude_status->gimbal_device_id = mavlink_msg_gimbal_device_attitude_status_get_gimbal_device_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN? msg->len : MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN;
+        memset(gimbal_device_attitude_status, 0, MAVLINK_MSG_ID_GIMBAL_DEVICE_ATTITUDE_STATUS_LEN);
+    memcpy(gimbal_device_attitude_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 582 - 0
v2.0/common/mavlink_msg_gimbal_device_information.h

@@ -0,0 +1,582 @@
+#pragma once
+// MESSAGE GIMBAL_DEVICE_INFORMATION PACKING
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION 283
+
+
+typedef struct __mavlink_gimbal_device_information_t {
+ uint64_t uid; /*<  UID of gimbal hardware (0 if unknown).*/
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint32_t firmware_version; /*<  Version of the gimbal firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).*/
+ uint32_t hardware_version; /*<  Version of the gimbal hardware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).*/
+ float roll_min; /*< [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.*/
+ float roll_max; /*< [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.*/
+ float pitch_min; /*< [rad] Minimum hardware pitch angle (positive: up, negative: down). NAN if unknown.*/
+ float pitch_max; /*< [rad] Maximum hardware pitch angle (positive: up, negative: down). NAN if unknown.*/
+ float yaw_min; /*< [rad] Minimum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.*/
+ float yaw_max; /*< [rad] Maximum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.*/
+ uint16_t cap_flags; /*<  Bitmap of gimbal capability flags.*/
+ uint16_t custom_cap_flags; /*<  Bitmap for use for gimbal-specific capability flags.*/
+ char vendor_name[32]; /*<  Name of the gimbal vendor.*/
+ char model_name[32]; /*<  Name of the gimbal model.*/
+ char custom_name[32]; /*<  Custom name of the gimbal given to it by the user.*/
+ uint8_t gimbal_device_id; /*<  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set to a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.*/
+} mavlink_gimbal_device_information_t;
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN 145
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_MIN_LEN 144
+#define MAVLINK_MSG_ID_283_LEN 145
+#define MAVLINK_MSG_ID_283_MIN_LEN 144
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_CRC 74
+#define MAVLINK_MSG_ID_283_CRC 74
+
+#define MAVLINK_MSG_GIMBAL_DEVICE_INFORMATION_FIELD_VENDOR_NAME_LEN 32
+#define MAVLINK_MSG_GIMBAL_DEVICE_INFORMATION_FIELD_MODEL_NAME_LEN 32
+#define MAVLINK_MSG_GIMBAL_DEVICE_INFORMATION_FIELD_CUSTOM_NAME_LEN 32
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GIMBAL_DEVICE_INFORMATION { \
+    283, \
+    "GIMBAL_DEVICE_INFORMATION", \
+    16, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_gimbal_device_information_t, time_boot_ms) }, \
+         { "vendor_name", NULL, MAVLINK_TYPE_CHAR, 32, 48, offsetof(mavlink_gimbal_device_information_t, vendor_name) }, \
+         { "model_name", NULL, MAVLINK_TYPE_CHAR, 32, 80, offsetof(mavlink_gimbal_device_information_t, model_name) }, \
+         { "custom_name", NULL, MAVLINK_TYPE_CHAR, 32, 112, offsetof(mavlink_gimbal_device_information_t, custom_name) }, \
+         { "firmware_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 12, offsetof(mavlink_gimbal_device_information_t, firmware_version) }, \
+         { "hardware_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 16, offsetof(mavlink_gimbal_device_information_t, hardware_version) }, \
+         { "uid", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gimbal_device_information_t, uid) }, \
+         { "cap_flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 44, offsetof(mavlink_gimbal_device_information_t, cap_flags) }, \
+         { "custom_cap_flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 46, offsetof(mavlink_gimbal_device_information_t, custom_cap_flags) }, \
+         { "roll_min", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_device_information_t, roll_min) }, \
+         { "roll_max", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_device_information_t, roll_max) }, \
+         { "pitch_min", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gimbal_device_information_t, pitch_min) }, \
+         { "pitch_max", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_gimbal_device_information_t, pitch_max) }, \
+         { "yaw_min", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_gimbal_device_information_t, yaw_min) }, \
+         { "yaw_max", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_gimbal_device_information_t, yaw_max) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 144, offsetof(mavlink_gimbal_device_information_t, gimbal_device_id) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GIMBAL_DEVICE_INFORMATION { \
+    "GIMBAL_DEVICE_INFORMATION", \
+    16, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_gimbal_device_information_t, time_boot_ms) }, \
+         { "vendor_name", NULL, MAVLINK_TYPE_CHAR, 32, 48, offsetof(mavlink_gimbal_device_information_t, vendor_name) }, \
+         { "model_name", NULL, MAVLINK_TYPE_CHAR, 32, 80, offsetof(mavlink_gimbal_device_information_t, model_name) }, \
+         { "custom_name", NULL, MAVLINK_TYPE_CHAR, 32, 112, offsetof(mavlink_gimbal_device_information_t, custom_name) }, \
+         { "firmware_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 12, offsetof(mavlink_gimbal_device_information_t, firmware_version) }, \
+         { "hardware_version", NULL, MAVLINK_TYPE_UINT32_T, 0, 16, offsetof(mavlink_gimbal_device_information_t, hardware_version) }, \
+         { "uid", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gimbal_device_information_t, uid) }, \
+         { "cap_flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 44, offsetof(mavlink_gimbal_device_information_t, cap_flags) }, \
+         { "custom_cap_flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 46, offsetof(mavlink_gimbal_device_information_t, custom_cap_flags) }, \
+         { "roll_min", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_device_information_t, roll_min) }, \
+         { "roll_max", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_device_information_t, roll_max) }, \
+         { "pitch_min", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gimbal_device_information_t, pitch_min) }, \
+         { "pitch_max", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_gimbal_device_information_t, pitch_max) }, \
+         { "yaw_min", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_gimbal_device_information_t, yaw_min) }, \
+         { "yaw_max", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_gimbal_device_information_t, yaw_max) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 144, offsetof(mavlink_gimbal_device_information_t, gimbal_device_id) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gimbal_device_information message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param vendor_name  Name of the gimbal vendor.
+ * @param model_name  Name of the gimbal model.
+ * @param custom_name  Custom name of the gimbal given to it by the user.
+ * @param firmware_version  Version of the gimbal firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).
+ * @param hardware_version  Version of the gimbal hardware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).
+ * @param uid  UID of gimbal hardware (0 if unknown).
+ * @param cap_flags  Bitmap of gimbal capability flags.
+ * @param custom_cap_flags  Bitmap for use for gimbal-specific capability flags.
+ * @param roll_min [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.
+ * @param roll_max [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.
+ * @param pitch_min [rad] Minimum hardware pitch angle (positive: up, negative: down). NAN if unknown.
+ * @param pitch_max [rad] Maximum hardware pitch angle (positive: up, negative: down). NAN if unknown.
+ * @param yaw_min [rad] Minimum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.
+ * @param yaw_max [rad] Maximum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.
+ * @param gimbal_device_id  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set to a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, const char *vendor_name, const char *model_name, const char *custom_name, uint32_t firmware_version, uint32_t hardware_version, uint64_t uid, uint16_t cap_flags, uint16_t custom_cap_flags, float roll_min, float roll_max, float pitch_min, float pitch_max, float yaw_min, float yaw_max, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN];
+    _mav_put_uint64_t(buf, 0, uid);
+    _mav_put_uint32_t(buf, 8, time_boot_ms);
+    _mav_put_uint32_t(buf, 12, firmware_version);
+    _mav_put_uint32_t(buf, 16, hardware_version);
+    _mav_put_float(buf, 20, roll_min);
+    _mav_put_float(buf, 24, roll_max);
+    _mav_put_float(buf, 28, pitch_min);
+    _mav_put_float(buf, 32, pitch_max);
+    _mav_put_float(buf, 36, yaw_min);
+    _mav_put_float(buf, 40, yaw_max);
+    _mav_put_uint16_t(buf, 44, cap_flags);
+    _mav_put_uint16_t(buf, 46, custom_cap_flags);
+    _mav_put_uint8_t(buf, 144, gimbal_device_id);
+    _mav_put_char_array(buf, 48, vendor_name, 32);
+    _mav_put_char_array(buf, 80, model_name, 32);
+    _mav_put_char_array(buf, 112, custom_name, 32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN);
+#else
+    mavlink_gimbal_device_information_t packet;
+    packet.uid = uid;
+    packet.time_boot_ms = time_boot_ms;
+    packet.firmware_version = firmware_version;
+    packet.hardware_version = hardware_version;
+    packet.roll_min = roll_min;
+    packet.roll_max = roll_max;
+    packet.pitch_min = pitch_min;
+    packet.pitch_max = pitch_max;
+    packet.yaw_min = yaw_min;
+    packet.yaw_max = yaw_max;
+    packet.cap_flags = cap_flags;
+    packet.custom_cap_flags = custom_cap_flags;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.vendor_name, vendor_name, sizeof(char)*32);
+    mav_array_memcpy(packet.model_name, model_name, sizeof(char)*32);
+    mav_array_memcpy(packet.custom_name, custom_name, sizeof(char)*32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_CRC);
+}
+
+/**
+ * @brief Pack a gimbal_device_information message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param vendor_name  Name of the gimbal vendor.
+ * @param model_name  Name of the gimbal model.
+ * @param custom_name  Custom name of the gimbal given to it by the user.
+ * @param firmware_version  Version of the gimbal firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).
+ * @param hardware_version  Version of the gimbal hardware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).
+ * @param uid  UID of gimbal hardware (0 if unknown).
+ * @param cap_flags  Bitmap of gimbal capability flags.
+ * @param custom_cap_flags  Bitmap for use for gimbal-specific capability flags.
+ * @param roll_min [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.
+ * @param roll_max [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.
+ * @param pitch_min [rad] Minimum hardware pitch angle (positive: up, negative: down). NAN if unknown.
+ * @param pitch_max [rad] Maximum hardware pitch angle (positive: up, negative: down). NAN if unknown.
+ * @param yaw_min [rad] Minimum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.
+ * @param yaw_max [rad] Maximum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.
+ * @param gimbal_device_id  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set to a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,const char *vendor_name,const char *model_name,const char *custom_name,uint32_t firmware_version,uint32_t hardware_version,uint64_t uid,uint16_t cap_flags,uint16_t custom_cap_flags,float roll_min,float roll_max,float pitch_min,float pitch_max,float yaw_min,float yaw_max,uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN];
+    _mav_put_uint64_t(buf, 0, uid);
+    _mav_put_uint32_t(buf, 8, time_boot_ms);
+    _mav_put_uint32_t(buf, 12, firmware_version);
+    _mav_put_uint32_t(buf, 16, hardware_version);
+    _mav_put_float(buf, 20, roll_min);
+    _mav_put_float(buf, 24, roll_max);
+    _mav_put_float(buf, 28, pitch_min);
+    _mav_put_float(buf, 32, pitch_max);
+    _mav_put_float(buf, 36, yaw_min);
+    _mav_put_float(buf, 40, yaw_max);
+    _mav_put_uint16_t(buf, 44, cap_flags);
+    _mav_put_uint16_t(buf, 46, custom_cap_flags);
+    _mav_put_uint8_t(buf, 144, gimbal_device_id);
+    _mav_put_char_array(buf, 48, vendor_name, 32);
+    _mav_put_char_array(buf, 80, model_name, 32);
+    _mav_put_char_array(buf, 112, custom_name, 32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN);
+#else
+    mavlink_gimbal_device_information_t packet;
+    packet.uid = uid;
+    packet.time_boot_ms = time_boot_ms;
+    packet.firmware_version = firmware_version;
+    packet.hardware_version = hardware_version;
+    packet.roll_min = roll_min;
+    packet.roll_max = roll_max;
+    packet.pitch_min = pitch_min;
+    packet.pitch_max = pitch_max;
+    packet.yaw_min = yaw_min;
+    packet.yaw_max = yaw_max;
+    packet.cap_flags = cap_flags;
+    packet.custom_cap_flags = custom_cap_flags;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.vendor_name, vendor_name, sizeof(char)*32);
+    mav_array_memcpy(packet.model_name, model_name, sizeof(char)*32);
+    mav_array_memcpy(packet.custom_name, custom_name, sizeof(char)*32);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_CRC);
+}
+
+/**
+ * @brief Encode a gimbal_device_information struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_device_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gimbal_device_information_t* gimbal_device_information)
+{
+    return mavlink_msg_gimbal_device_information_pack(system_id, component_id, msg, gimbal_device_information->time_boot_ms, gimbal_device_information->vendor_name, gimbal_device_information->model_name, gimbal_device_information->custom_name, gimbal_device_information->firmware_version, gimbal_device_information->hardware_version, gimbal_device_information->uid, gimbal_device_information->cap_flags, gimbal_device_information->custom_cap_flags, gimbal_device_information->roll_min, gimbal_device_information->roll_max, gimbal_device_information->pitch_min, gimbal_device_information->pitch_max, gimbal_device_information->yaw_min, gimbal_device_information->yaw_max, gimbal_device_information->gimbal_device_id);
+}
+
+/**
+ * @brief Encode a gimbal_device_information struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_device_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gimbal_device_information_t* gimbal_device_information)
+{
+    return mavlink_msg_gimbal_device_information_pack_chan(system_id, component_id, chan, msg, gimbal_device_information->time_boot_ms, gimbal_device_information->vendor_name, gimbal_device_information->model_name, gimbal_device_information->custom_name, gimbal_device_information->firmware_version, gimbal_device_information->hardware_version, gimbal_device_information->uid, gimbal_device_information->cap_flags, gimbal_device_information->custom_cap_flags, gimbal_device_information->roll_min, gimbal_device_information->roll_max, gimbal_device_information->pitch_min, gimbal_device_information->pitch_max, gimbal_device_information->yaw_min, gimbal_device_information->yaw_max, gimbal_device_information->gimbal_device_id);
+}
+
+/**
+ * @brief Send a gimbal_device_information message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param vendor_name  Name of the gimbal vendor.
+ * @param model_name  Name of the gimbal model.
+ * @param custom_name  Custom name of the gimbal given to it by the user.
+ * @param firmware_version  Version of the gimbal firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).
+ * @param hardware_version  Version of the gimbal hardware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).
+ * @param uid  UID of gimbal hardware (0 if unknown).
+ * @param cap_flags  Bitmap of gimbal capability flags.
+ * @param custom_cap_flags  Bitmap for use for gimbal-specific capability flags.
+ * @param roll_min [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.
+ * @param roll_max [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.
+ * @param pitch_min [rad] Minimum hardware pitch angle (positive: up, negative: down). NAN if unknown.
+ * @param pitch_max [rad] Maximum hardware pitch angle (positive: up, negative: down). NAN if unknown.
+ * @param yaw_min [rad] Minimum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.
+ * @param yaw_max [rad] Maximum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.
+ * @param gimbal_device_id  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set to a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gimbal_device_information_send(mavlink_channel_t chan, uint32_t time_boot_ms, const char *vendor_name, const char *model_name, const char *custom_name, uint32_t firmware_version, uint32_t hardware_version, uint64_t uid, uint16_t cap_flags, uint16_t custom_cap_flags, float roll_min, float roll_max, float pitch_min, float pitch_max, float yaw_min, float yaw_max, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN];
+    _mav_put_uint64_t(buf, 0, uid);
+    _mav_put_uint32_t(buf, 8, time_boot_ms);
+    _mav_put_uint32_t(buf, 12, firmware_version);
+    _mav_put_uint32_t(buf, 16, hardware_version);
+    _mav_put_float(buf, 20, roll_min);
+    _mav_put_float(buf, 24, roll_max);
+    _mav_put_float(buf, 28, pitch_min);
+    _mav_put_float(buf, 32, pitch_max);
+    _mav_put_float(buf, 36, yaw_min);
+    _mav_put_float(buf, 40, yaw_max);
+    _mav_put_uint16_t(buf, 44, cap_flags);
+    _mav_put_uint16_t(buf, 46, custom_cap_flags);
+    _mav_put_uint8_t(buf, 144, gimbal_device_id);
+    _mav_put_char_array(buf, 48, vendor_name, 32);
+    _mav_put_char_array(buf, 80, model_name, 32);
+    _mav_put_char_array(buf, 112, custom_name, 32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION, buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_CRC);
+#else
+    mavlink_gimbal_device_information_t packet;
+    packet.uid = uid;
+    packet.time_boot_ms = time_boot_ms;
+    packet.firmware_version = firmware_version;
+    packet.hardware_version = hardware_version;
+    packet.roll_min = roll_min;
+    packet.roll_max = roll_max;
+    packet.pitch_min = pitch_min;
+    packet.pitch_max = pitch_max;
+    packet.yaw_min = yaw_min;
+    packet.yaw_max = yaw_max;
+    packet.cap_flags = cap_flags;
+    packet.custom_cap_flags = custom_cap_flags;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.vendor_name, vendor_name, sizeof(char)*32);
+    mav_array_memcpy(packet.model_name, model_name, sizeof(char)*32);
+    mav_array_memcpy(packet.custom_name, custom_name, sizeof(char)*32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION, (const char *)&packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gimbal_device_information message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gimbal_device_information_send_struct(mavlink_channel_t chan, const mavlink_gimbal_device_information_t* gimbal_device_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_device_information_send(chan, gimbal_device_information->time_boot_ms, gimbal_device_information->vendor_name, gimbal_device_information->model_name, gimbal_device_information->custom_name, gimbal_device_information->firmware_version, gimbal_device_information->hardware_version, gimbal_device_information->uid, gimbal_device_information->cap_flags, gimbal_device_information->custom_cap_flags, gimbal_device_information->roll_min, gimbal_device_information->roll_max, gimbal_device_information->pitch_min, gimbal_device_information->pitch_max, gimbal_device_information->yaw_min, gimbal_device_information->yaw_max, gimbal_device_information->gimbal_device_id);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION, (const char *)gimbal_device_information, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gimbal_device_information_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, const char *vendor_name, const char *model_name, const char *custom_name, uint32_t firmware_version, uint32_t hardware_version, uint64_t uid, uint16_t cap_flags, uint16_t custom_cap_flags, float roll_min, float roll_max, float pitch_min, float pitch_max, float yaw_min, float yaw_max, uint8_t gimbal_device_id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, uid);
+    _mav_put_uint32_t(buf, 8, time_boot_ms);
+    _mav_put_uint32_t(buf, 12, firmware_version);
+    _mav_put_uint32_t(buf, 16, hardware_version);
+    _mav_put_float(buf, 20, roll_min);
+    _mav_put_float(buf, 24, roll_max);
+    _mav_put_float(buf, 28, pitch_min);
+    _mav_put_float(buf, 32, pitch_max);
+    _mav_put_float(buf, 36, yaw_min);
+    _mav_put_float(buf, 40, yaw_max);
+    _mav_put_uint16_t(buf, 44, cap_flags);
+    _mav_put_uint16_t(buf, 46, custom_cap_flags);
+    _mav_put_uint8_t(buf, 144, gimbal_device_id);
+    _mav_put_char_array(buf, 48, vendor_name, 32);
+    _mav_put_char_array(buf, 80, model_name, 32);
+    _mav_put_char_array(buf, 112, custom_name, 32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION, buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_CRC);
+#else
+    mavlink_gimbal_device_information_t *packet = (mavlink_gimbal_device_information_t *)msgbuf;
+    packet->uid = uid;
+    packet->time_boot_ms = time_boot_ms;
+    packet->firmware_version = firmware_version;
+    packet->hardware_version = hardware_version;
+    packet->roll_min = roll_min;
+    packet->roll_max = roll_max;
+    packet->pitch_min = pitch_min;
+    packet->pitch_max = pitch_max;
+    packet->yaw_min = yaw_min;
+    packet->yaw_max = yaw_max;
+    packet->cap_flags = cap_flags;
+    packet->custom_cap_flags = custom_cap_flags;
+    packet->gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet->vendor_name, vendor_name, sizeof(char)*32);
+    mav_array_memcpy(packet->model_name, model_name, sizeof(char)*32);
+    mav_array_memcpy(packet->custom_name, custom_name, sizeof(char)*32);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION, (const char *)packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GIMBAL_DEVICE_INFORMATION UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from gimbal_device_information message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_gimbal_device_information_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  8);
+}
+
+/**
+ * @brief Get field vendor_name from gimbal_device_information message
+ *
+ * @return  Name of the gimbal vendor.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_get_vendor_name(const mavlink_message_t* msg, char *vendor_name)
+{
+    return _MAV_RETURN_char_array(msg, vendor_name, 32,  48);
+}
+
+/**
+ * @brief Get field model_name from gimbal_device_information message
+ *
+ * @return  Name of the gimbal model.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_get_model_name(const mavlink_message_t* msg, char *model_name)
+{
+    return _MAV_RETURN_char_array(msg, model_name, 32,  80);
+}
+
+/**
+ * @brief Get field custom_name from gimbal_device_information message
+ *
+ * @return  Custom name of the gimbal given to it by the user.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_get_custom_name(const mavlink_message_t* msg, char *custom_name)
+{
+    return _MAV_RETURN_char_array(msg, custom_name, 32,  112);
+}
+
+/**
+ * @brief Get field firmware_version from gimbal_device_information message
+ *
+ * @return  Version of the gimbal firmware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).
+ */
+static inline uint32_t mavlink_msg_gimbal_device_information_get_firmware_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  12);
+}
+
+/**
+ * @brief Get field hardware_version from gimbal_device_information message
+ *
+ * @return  Version of the gimbal hardware, encoded as: (Dev & 0xff) << 24 | (Patch & 0xff) << 16 | (Minor & 0xff) << 8 | (Major & 0xff).
+ */
+static inline uint32_t mavlink_msg_gimbal_device_information_get_hardware_version(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  16);
+}
+
+/**
+ * @brief Get field uid from gimbal_device_information message
+ *
+ * @return  UID of gimbal hardware (0 if unknown).
+ */
+static inline uint64_t mavlink_msg_gimbal_device_information_get_uid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field cap_flags from gimbal_device_information message
+ *
+ * @return  Bitmap of gimbal capability flags.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_get_cap_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  44);
+}
+
+/**
+ * @brief Get field custom_cap_flags from gimbal_device_information message
+ *
+ * @return  Bitmap for use for gimbal-specific capability flags.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_information_get_custom_cap_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  46);
+}
+
+/**
+ * @brief Get field roll_min from gimbal_device_information message
+ *
+ * @return [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_information_get_roll_min(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field roll_max from gimbal_device_information message
+ *
+ * @return [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left). NAN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_information_get_roll_max(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field pitch_min from gimbal_device_information message
+ *
+ * @return [rad] Minimum hardware pitch angle (positive: up, negative: down). NAN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_information_get_pitch_min(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field pitch_max from gimbal_device_information message
+ *
+ * @return [rad] Maximum hardware pitch angle (positive: up, negative: down). NAN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_information_get_pitch_max(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field yaw_min from gimbal_device_information message
+ *
+ * @return [rad] Minimum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_information_get_yaw_min(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field yaw_max from gimbal_device_information message
+ *
+ * @return [rad] Maximum hardware yaw angle (positive: to the right, negative: to the left). NAN if unknown.
+ */
+static inline float mavlink_msg_gimbal_device_information_get_yaw_max(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  40);
+}
+
+/**
+ * @brief Get field gimbal_device_id from gimbal_device_information message
+ *
+ * @return  This field is to be used if the gimbal manager and the gimbal device are the same component and hence have the same component ID. This field is then set to a number between 1-6. If the component ID is separate, this field is not required and must be set to 0.
+ */
+static inline uint8_t mavlink_msg_gimbal_device_information_get_gimbal_device_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  144);
+}
+
+/**
+ * @brief Decode a gimbal_device_information message into a struct
+ *
+ * @param msg The message to decode
+ * @param gimbal_device_information C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gimbal_device_information_decode(const mavlink_message_t* msg, mavlink_gimbal_device_information_t* gimbal_device_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gimbal_device_information->uid = mavlink_msg_gimbal_device_information_get_uid(msg);
+    gimbal_device_information->time_boot_ms = mavlink_msg_gimbal_device_information_get_time_boot_ms(msg);
+    gimbal_device_information->firmware_version = mavlink_msg_gimbal_device_information_get_firmware_version(msg);
+    gimbal_device_information->hardware_version = mavlink_msg_gimbal_device_information_get_hardware_version(msg);
+    gimbal_device_information->roll_min = mavlink_msg_gimbal_device_information_get_roll_min(msg);
+    gimbal_device_information->roll_max = mavlink_msg_gimbal_device_information_get_roll_max(msg);
+    gimbal_device_information->pitch_min = mavlink_msg_gimbal_device_information_get_pitch_min(msg);
+    gimbal_device_information->pitch_max = mavlink_msg_gimbal_device_information_get_pitch_max(msg);
+    gimbal_device_information->yaw_min = mavlink_msg_gimbal_device_information_get_yaw_min(msg);
+    gimbal_device_information->yaw_max = mavlink_msg_gimbal_device_information_get_yaw_max(msg);
+    gimbal_device_information->cap_flags = mavlink_msg_gimbal_device_information_get_cap_flags(msg);
+    gimbal_device_information->custom_cap_flags = mavlink_msg_gimbal_device_information_get_custom_cap_flags(msg);
+    mavlink_msg_gimbal_device_information_get_vendor_name(msg, gimbal_device_information->vendor_name);
+    mavlink_msg_gimbal_device_information_get_model_name(msg, gimbal_device_information->model_name);
+    mavlink_msg_gimbal_device_information_get_custom_name(msg, gimbal_device_information->custom_name);
+    gimbal_device_information->gimbal_device_id = mavlink_msg_gimbal_device_information_get_gimbal_device_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN? msg->len : MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN;
+        memset(gimbal_device_information, 0, MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATION_LEN);
+    memcpy(gimbal_device_information, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 355 - 0
v2.0/common/mavlink_msg_gimbal_device_set_attitude.h

@@ -0,0 +1,355 @@
+#pragma once
+// MESSAGE GIMBAL_DEVICE_SET_ATTITUDE PACKING
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE 284
+
+
+typedef struct __mavlink_gimbal_device_set_attitude_t {
+ float q[4]; /*<  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description. Set fields to NaN to be ignored.*/
+ float angular_velocity_x; /*< [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN to be ignored.*/
+ float angular_velocity_y; /*< [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN to be ignored.*/
+ float angular_velocity_z; /*< [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN to be ignored.*/
+ uint16_t flags; /*<  Low level gimbal flags.*/
+ uint8_t target_system; /*<  System ID*/
+ uint8_t target_component; /*<  Component ID*/
+} mavlink_gimbal_device_set_attitude_t;
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN 32
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_MIN_LEN 32
+#define MAVLINK_MSG_ID_284_LEN 32
+#define MAVLINK_MSG_ID_284_MIN_LEN 32
+
+#define MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_CRC 99
+#define MAVLINK_MSG_ID_284_CRC 99
+
+#define MAVLINK_MSG_GIMBAL_DEVICE_SET_ATTITUDE_FIELD_Q_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GIMBAL_DEVICE_SET_ATTITUDE { \
+    284, \
+    "GIMBAL_DEVICE_SET_ATTITUDE", \
+    7, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_gimbal_device_set_attitude_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_gimbal_device_set_attitude_t, target_component) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gimbal_device_set_attitude_t, flags) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 0, offsetof(mavlink_gimbal_device_set_attitude_t, q) }, \
+         { "angular_velocity_x", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_gimbal_device_set_attitude_t, angular_velocity_x) }, \
+         { "angular_velocity_y", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_device_set_attitude_t, angular_velocity_y) }, \
+         { "angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_device_set_attitude_t, angular_velocity_z) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GIMBAL_DEVICE_SET_ATTITUDE { \
+    "GIMBAL_DEVICE_SET_ATTITUDE", \
+    7, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_gimbal_device_set_attitude_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_gimbal_device_set_attitude_t, target_component) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gimbal_device_set_attitude_t, flags) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 0, offsetof(mavlink_gimbal_device_set_attitude_t, q) }, \
+         { "angular_velocity_x", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_gimbal_device_set_attitude_t, angular_velocity_x) }, \
+         { "angular_velocity_y", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_device_set_attitude_t, angular_velocity_y) }, \
+         { "angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_device_set_attitude_t, angular_velocity_z) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gimbal_device_set_attitude message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  Low level gimbal flags.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description. Set fields to NaN to be ignored.
+ * @param angular_velocity_x [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN to be ignored.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN to be ignored.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN to be ignored.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_device_set_attitude_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint16_t flags, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN];
+    _mav_put_float(buf, 16, angular_velocity_x);
+    _mav_put_float(buf, 20, angular_velocity_y);
+    _mav_put_float(buf, 24, angular_velocity_z);
+    _mav_put_uint16_t(buf, 28, flags);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_float_array(buf, 0, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN);
+#else
+    mavlink_gimbal_device_set_attitude_t packet;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.flags = flags;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_CRC);
+}
+
+/**
+ * @brief Pack a gimbal_device_set_attitude message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  Low level gimbal flags.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description. Set fields to NaN to be ignored.
+ * @param angular_velocity_x [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN to be ignored.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN to be ignored.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN to be ignored.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_device_set_attitude_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint16_t flags,const float *q,float angular_velocity_x,float angular_velocity_y,float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN];
+    _mav_put_float(buf, 16, angular_velocity_x);
+    _mav_put_float(buf, 20, angular_velocity_y);
+    _mav_put_float(buf, 24, angular_velocity_z);
+    _mav_put_uint16_t(buf, 28, flags);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_float_array(buf, 0, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN);
+#else
+    mavlink_gimbal_device_set_attitude_t packet;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.flags = flags;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_CRC);
+}
+
+/**
+ * @brief Encode a gimbal_device_set_attitude struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_device_set_attitude C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_device_set_attitude_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gimbal_device_set_attitude_t* gimbal_device_set_attitude)
+{
+    return mavlink_msg_gimbal_device_set_attitude_pack(system_id, component_id, msg, gimbal_device_set_attitude->target_system, gimbal_device_set_attitude->target_component, gimbal_device_set_attitude->flags, gimbal_device_set_attitude->q, gimbal_device_set_attitude->angular_velocity_x, gimbal_device_set_attitude->angular_velocity_y, gimbal_device_set_attitude->angular_velocity_z);
+}
+
+/**
+ * @brief Encode a gimbal_device_set_attitude struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_device_set_attitude C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_device_set_attitude_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gimbal_device_set_attitude_t* gimbal_device_set_attitude)
+{
+    return mavlink_msg_gimbal_device_set_attitude_pack_chan(system_id, component_id, chan, msg, gimbal_device_set_attitude->target_system, gimbal_device_set_attitude->target_component, gimbal_device_set_attitude->flags, gimbal_device_set_attitude->q, gimbal_device_set_attitude->angular_velocity_x, gimbal_device_set_attitude->angular_velocity_y, gimbal_device_set_attitude->angular_velocity_z);
+}
+
+/**
+ * @brief Send a gimbal_device_set_attitude message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  Low level gimbal flags.
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description. Set fields to NaN to be ignored.
+ * @param angular_velocity_x [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN to be ignored.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN to be ignored.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN to be ignored.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gimbal_device_set_attitude_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint16_t flags, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN];
+    _mav_put_float(buf, 16, angular_velocity_x);
+    _mav_put_float(buf, 20, angular_velocity_y);
+    _mav_put_float(buf, 24, angular_velocity_z);
+    _mav_put_uint16_t(buf, 28, flags);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_float_array(buf, 0, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE, buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_CRC);
+#else
+    mavlink_gimbal_device_set_attitude_t packet;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.flags = flags;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE, (const char *)&packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gimbal_device_set_attitude message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gimbal_device_set_attitude_send_struct(mavlink_channel_t chan, const mavlink_gimbal_device_set_attitude_t* gimbal_device_set_attitude)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_device_set_attitude_send(chan, gimbal_device_set_attitude->target_system, gimbal_device_set_attitude->target_component, gimbal_device_set_attitude->flags, gimbal_device_set_attitude->q, gimbal_device_set_attitude->angular_velocity_x, gimbal_device_set_attitude->angular_velocity_y, gimbal_device_set_attitude->angular_velocity_z);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE, (const char *)gimbal_device_set_attitude, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gimbal_device_set_attitude_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint16_t flags, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_float(buf, 16, angular_velocity_x);
+    _mav_put_float(buf, 20, angular_velocity_y);
+    _mav_put_float(buf, 24, angular_velocity_z);
+    _mav_put_uint16_t(buf, 28, flags);
+    _mav_put_uint8_t(buf, 30, target_system);
+    _mav_put_uint8_t(buf, 31, target_component);
+    _mav_put_float_array(buf, 0, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE, buf, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_CRC);
+#else
+    mavlink_gimbal_device_set_attitude_t *packet = (mavlink_gimbal_device_set_attitude_t *)msgbuf;
+    packet->angular_velocity_x = angular_velocity_x;
+    packet->angular_velocity_y = angular_velocity_y;
+    packet->angular_velocity_z = angular_velocity_z;
+    packet->flags = flags;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE, (const char *)packet, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GIMBAL_DEVICE_SET_ATTITUDE UNPACKING
+
+
+/**
+ * @brief Get field target_system from gimbal_device_set_attitude message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_gimbal_device_set_attitude_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field target_component from gimbal_device_set_attitude message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_gimbal_device_set_attitude_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  31);
+}
+
+/**
+ * @brief Get field flags from gimbal_device_set_attitude message
+ *
+ * @return  Low level gimbal flags.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_set_attitude_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  28);
+}
+
+/**
+ * @brief Get field q from gimbal_device_set_attitude message
+ *
+ * @return  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation). The frame is described in the message description. Set fields to NaN to be ignored.
+ */
+static inline uint16_t mavlink_msg_gimbal_device_set_attitude_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  0);
+}
+
+/**
+ * @brief Get field angular_velocity_x from gimbal_device_set_attitude message
+ *
+ * @return [rad/s] X component of angular velocity (positive: rolling to the right). The frame is described in the message description. NaN to be ignored.
+ */
+static inline float mavlink_msg_gimbal_device_set_attitude_get_angular_velocity_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field angular_velocity_y from gimbal_device_set_attitude message
+ *
+ * @return [rad/s] Y component of angular velocity (positive: pitching up). The frame is described in the message description. NaN to be ignored.
+ */
+static inline float mavlink_msg_gimbal_device_set_attitude_get_angular_velocity_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field angular_velocity_z from gimbal_device_set_attitude message
+ *
+ * @return [rad/s] Z component of angular velocity (positive: yawing to the right). The frame is described in the message description. NaN to be ignored.
+ */
+static inline float mavlink_msg_gimbal_device_set_attitude_get_angular_velocity_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Decode a gimbal_device_set_attitude message into a struct
+ *
+ * @param msg The message to decode
+ * @param gimbal_device_set_attitude C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gimbal_device_set_attitude_decode(const mavlink_message_t* msg, mavlink_gimbal_device_set_attitude_t* gimbal_device_set_attitude)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_device_set_attitude_get_q(msg, gimbal_device_set_attitude->q);
+    gimbal_device_set_attitude->angular_velocity_x = mavlink_msg_gimbal_device_set_attitude_get_angular_velocity_x(msg);
+    gimbal_device_set_attitude->angular_velocity_y = mavlink_msg_gimbal_device_set_attitude_get_angular_velocity_y(msg);
+    gimbal_device_set_attitude->angular_velocity_z = mavlink_msg_gimbal_device_set_attitude_get_angular_velocity_z(msg);
+    gimbal_device_set_attitude->flags = mavlink_msg_gimbal_device_set_attitude_get_flags(msg);
+    gimbal_device_set_attitude->target_system = mavlink_msg_gimbal_device_set_attitude_get_target_system(msg);
+    gimbal_device_set_attitude->target_component = mavlink_msg_gimbal_device_set_attitude_get_target_component(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN? msg->len : MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN;
+        memset(gimbal_device_set_attitude, 0, MAVLINK_MSG_ID_GIMBAL_DEVICE_SET_ATTITUDE_LEN);
+    memcpy(gimbal_device_set_attitude, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 413 - 0
v2.0/common/mavlink_msg_gimbal_manager_information.h

@@ -0,0 +1,413 @@
+#pragma once
+// MESSAGE GIMBAL_MANAGER_INFORMATION PACKING
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION 280
+
+
+typedef struct __mavlink_gimbal_manager_information_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint32_t cap_flags; /*<  Bitmap of gimbal capability flags.*/
+ float roll_min; /*< [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left)*/
+ float roll_max; /*< [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left)*/
+ float pitch_min; /*< [rad] Minimum pitch angle (positive: up, negative: down)*/
+ float pitch_max; /*< [rad] Maximum pitch angle (positive: up, negative: down)*/
+ float yaw_min; /*< [rad] Minimum yaw angle (positive: to the right, negative: to the left)*/
+ float yaw_max; /*< [rad] Maximum yaw angle (positive: to the right, negative: to the left)*/
+ uint8_t gimbal_device_id; /*<  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).*/
+} mavlink_gimbal_manager_information_t;
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN 33
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_MIN_LEN 33
+#define MAVLINK_MSG_ID_280_LEN 33
+#define MAVLINK_MSG_ID_280_MIN_LEN 33
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_CRC 70
+#define MAVLINK_MSG_ID_280_CRC 70
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_INFORMATION { \
+    280, \
+    "GIMBAL_MANAGER_INFORMATION", \
+    9, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_information_t, time_boot_ms) }, \
+         { "cap_flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_gimbal_manager_information_t, cap_flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gimbal_manager_information_t, gimbal_device_id) }, \
+         { "roll_min", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_gimbal_manager_information_t, roll_min) }, \
+         { "roll_max", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_gimbal_manager_information_t, roll_max) }, \
+         { "pitch_min", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_gimbal_manager_information_t, pitch_min) }, \
+         { "pitch_max", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_manager_information_t, pitch_max) }, \
+         { "yaw_min", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_manager_information_t, yaw_min) }, \
+         { "yaw_max", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gimbal_manager_information_t, yaw_max) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_INFORMATION { \
+    "GIMBAL_MANAGER_INFORMATION", \
+    9, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_information_t, time_boot_ms) }, \
+         { "cap_flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_gimbal_manager_information_t, cap_flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gimbal_manager_information_t, gimbal_device_id) }, \
+         { "roll_min", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_gimbal_manager_information_t, roll_min) }, \
+         { "roll_max", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_gimbal_manager_information_t, roll_max) }, \
+         { "pitch_min", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_gimbal_manager_information_t, pitch_min) }, \
+         { "pitch_max", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_manager_information_t, pitch_max) }, \
+         { "yaw_min", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_manager_information_t, yaw_min) }, \
+         { "yaw_max", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gimbal_manager_information_t, yaw_max) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gimbal_manager_information message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param cap_flags  Bitmap of gimbal capability flags.
+ * @param gimbal_device_id  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).
+ * @param roll_min [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left)
+ * @param roll_max [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left)
+ * @param pitch_min [rad] Minimum pitch angle (positive: up, negative: down)
+ * @param pitch_max [rad] Maximum pitch angle (positive: up, negative: down)
+ * @param yaw_min [rad] Minimum yaw angle (positive: to the right, negative: to the left)
+ * @param yaw_max [rad] Maximum yaw angle (positive: to the right, negative: to the left)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_information_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint32_t cap_flags, uint8_t gimbal_device_id, float roll_min, float roll_max, float pitch_min, float pitch_max, float yaw_min, float yaw_max)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, cap_flags);
+    _mav_put_float(buf, 8, roll_min);
+    _mav_put_float(buf, 12, roll_max);
+    _mav_put_float(buf, 16, pitch_min);
+    _mav_put_float(buf, 20, pitch_max);
+    _mav_put_float(buf, 24, yaw_min);
+    _mav_put_float(buf, 28, yaw_max);
+    _mav_put_uint8_t(buf, 32, gimbal_device_id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN);
+#else
+    mavlink_gimbal_manager_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.cap_flags = cap_flags;
+    packet.roll_min = roll_min;
+    packet.roll_max = roll_max;
+    packet.pitch_min = pitch_min;
+    packet.pitch_max = pitch_max;
+    packet.yaw_min = yaw_min;
+    packet.yaw_max = yaw_max;
+    packet.gimbal_device_id = gimbal_device_id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_CRC);
+}
+
+/**
+ * @brief Pack a gimbal_manager_information message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param cap_flags  Bitmap of gimbal capability flags.
+ * @param gimbal_device_id  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).
+ * @param roll_min [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left)
+ * @param roll_max [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left)
+ * @param pitch_min [rad] Minimum pitch angle (positive: up, negative: down)
+ * @param pitch_max [rad] Maximum pitch angle (positive: up, negative: down)
+ * @param yaw_min [rad] Minimum yaw angle (positive: to the right, negative: to the left)
+ * @param yaw_max [rad] Maximum yaw angle (positive: to the right, negative: to the left)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_information_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint32_t cap_flags,uint8_t gimbal_device_id,float roll_min,float roll_max,float pitch_min,float pitch_max,float yaw_min,float yaw_max)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, cap_flags);
+    _mav_put_float(buf, 8, roll_min);
+    _mav_put_float(buf, 12, roll_max);
+    _mav_put_float(buf, 16, pitch_min);
+    _mav_put_float(buf, 20, pitch_max);
+    _mav_put_float(buf, 24, yaw_min);
+    _mav_put_float(buf, 28, yaw_max);
+    _mav_put_uint8_t(buf, 32, gimbal_device_id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN);
+#else
+    mavlink_gimbal_manager_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.cap_flags = cap_flags;
+    packet.roll_min = roll_min;
+    packet.roll_max = roll_max;
+    packet.pitch_min = pitch_min;
+    packet.pitch_max = pitch_max;
+    packet.yaw_min = yaw_min;
+    packet.yaw_max = yaw_max;
+    packet.gimbal_device_id = gimbal_device_id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_CRC);
+}
+
+/**
+ * @brief Encode a gimbal_manager_information struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_information_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gimbal_manager_information_t* gimbal_manager_information)
+{
+    return mavlink_msg_gimbal_manager_information_pack(system_id, component_id, msg, gimbal_manager_information->time_boot_ms, gimbal_manager_information->cap_flags, gimbal_manager_information->gimbal_device_id, gimbal_manager_information->roll_min, gimbal_manager_information->roll_max, gimbal_manager_information->pitch_min, gimbal_manager_information->pitch_max, gimbal_manager_information->yaw_min, gimbal_manager_information->yaw_max);
+}
+
+/**
+ * @brief Encode a gimbal_manager_information struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_information C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_information_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gimbal_manager_information_t* gimbal_manager_information)
+{
+    return mavlink_msg_gimbal_manager_information_pack_chan(system_id, component_id, chan, msg, gimbal_manager_information->time_boot_ms, gimbal_manager_information->cap_flags, gimbal_manager_information->gimbal_device_id, gimbal_manager_information->roll_min, gimbal_manager_information->roll_max, gimbal_manager_information->pitch_min, gimbal_manager_information->pitch_max, gimbal_manager_information->yaw_min, gimbal_manager_information->yaw_max);
+}
+
+/**
+ * @brief Send a gimbal_manager_information message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param cap_flags  Bitmap of gimbal capability flags.
+ * @param gimbal_device_id  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).
+ * @param roll_min [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left)
+ * @param roll_max [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left)
+ * @param pitch_min [rad] Minimum pitch angle (positive: up, negative: down)
+ * @param pitch_max [rad] Maximum pitch angle (positive: up, negative: down)
+ * @param yaw_min [rad] Minimum yaw angle (positive: to the right, negative: to the left)
+ * @param yaw_max [rad] Maximum yaw angle (positive: to the right, negative: to the left)
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gimbal_manager_information_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint32_t cap_flags, uint8_t gimbal_device_id, float roll_min, float roll_max, float pitch_min, float pitch_max, float yaw_min, float yaw_max)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, cap_flags);
+    _mav_put_float(buf, 8, roll_min);
+    _mav_put_float(buf, 12, roll_max);
+    _mav_put_float(buf, 16, pitch_min);
+    _mav_put_float(buf, 20, pitch_max);
+    _mav_put_float(buf, 24, yaw_min);
+    _mav_put_float(buf, 28, yaw_max);
+    _mav_put_uint8_t(buf, 32, gimbal_device_id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_CRC);
+#else
+    mavlink_gimbal_manager_information_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.cap_flags = cap_flags;
+    packet.roll_min = roll_min;
+    packet.roll_max = roll_max;
+    packet.pitch_min = pitch_min;
+    packet.pitch_max = pitch_max;
+    packet.yaw_min = yaw_min;
+    packet.yaw_max = yaw_max;
+    packet.gimbal_device_id = gimbal_device_id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION, (const char *)&packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gimbal_manager_information message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gimbal_manager_information_send_struct(mavlink_channel_t chan, const mavlink_gimbal_manager_information_t* gimbal_manager_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_manager_information_send(chan, gimbal_manager_information->time_boot_ms, gimbal_manager_information->cap_flags, gimbal_manager_information->gimbal_device_id, gimbal_manager_information->roll_min, gimbal_manager_information->roll_max, gimbal_manager_information->pitch_min, gimbal_manager_information->pitch_max, gimbal_manager_information->yaw_min, gimbal_manager_information->yaw_max);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION, (const char *)gimbal_manager_information, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gimbal_manager_information_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint32_t cap_flags, uint8_t gimbal_device_id, float roll_min, float roll_max, float pitch_min, float pitch_max, float yaw_min, float yaw_max)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, cap_flags);
+    _mav_put_float(buf, 8, roll_min);
+    _mav_put_float(buf, 12, roll_max);
+    _mav_put_float(buf, 16, pitch_min);
+    _mav_put_float(buf, 20, pitch_max);
+    _mav_put_float(buf, 24, yaw_min);
+    _mav_put_float(buf, 28, yaw_max);
+    _mav_put_uint8_t(buf, 32, gimbal_device_id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_CRC);
+#else
+    mavlink_gimbal_manager_information_t *packet = (mavlink_gimbal_manager_information_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->cap_flags = cap_flags;
+    packet->roll_min = roll_min;
+    packet->roll_max = roll_max;
+    packet->pitch_min = pitch_min;
+    packet->pitch_max = pitch_max;
+    packet->yaw_min = yaw_min;
+    packet->yaw_max = yaw_max;
+    packet->gimbal_device_id = gimbal_device_id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION, (const char *)packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GIMBAL_MANAGER_INFORMATION UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from gimbal_manager_information message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_gimbal_manager_information_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field cap_flags from gimbal_manager_information message
+ *
+ * @return  Bitmap of gimbal capability flags.
+ */
+static inline uint32_t mavlink_msg_gimbal_manager_information_get_cap_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field gimbal_device_id from gimbal_manager_information message
+ *
+ * @return  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_information_get_gimbal_device_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field roll_min from gimbal_manager_information message
+ *
+ * @return [rad] Minimum hardware roll angle (positive: rolling to the right, negative: rolling to the left)
+ */
+static inline float mavlink_msg_gimbal_manager_information_get_roll_min(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field roll_max from gimbal_manager_information message
+ *
+ * @return [rad] Maximum hardware roll angle (positive: rolling to the right, negative: rolling to the left)
+ */
+static inline float mavlink_msg_gimbal_manager_information_get_roll_max(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field pitch_min from gimbal_manager_information message
+ *
+ * @return [rad] Minimum pitch angle (positive: up, negative: down)
+ */
+static inline float mavlink_msg_gimbal_manager_information_get_pitch_min(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field pitch_max from gimbal_manager_information message
+ *
+ * @return [rad] Maximum pitch angle (positive: up, negative: down)
+ */
+static inline float mavlink_msg_gimbal_manager_information_get_pitch_max(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field yaw_min from gimbal_manager_information message
+ *
+ * @return [rad] Minimum yaw angle (positive: to the right, negative: to the left)
+ */
+static inline float mavlink_msg_gimbal_manager_information_get_yaw_min(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field yaw_max from gimbal_manager_information message
+ *
+ * @return [rad] Maximum yaw angle (positive: to the right, negative: to the left)
+ */
+static inline float mavlink_msg_gimbal_manager_information_get_yaw_max(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Decode a gimbal_manager_information message into a struct
+ *
+ * @param msg The message to decode
+ * @param gimbal_manager_information C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gimbal_manager_information_decode(const mavlink_message_t* msg, mavlink_gimbal_manager_information_t* gimbal_manager_information)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gimbal_manager_information->time_boot_ms = mavlink_msg_gimbal_manager_information_get_time_boot_ms(msg);
+    gimbal_manager_information->cap_flags = mavlink_msg_gimbal_manager_information_get_cap_flags(msg);
+    gimbal_manager_information->roll_min = mavlink_msg_gimbal_manager_information_get_roll_min(msg);
+    gimbal_manager_information->roll_max = mavlink_msg_gimbal_manager_information_get_roll_max(msg);
+    gimbal_manager_information->pitch_min = mavlink_msg_gimbal_manager_information_get_pitch_min(msg);
+    gimbal_manager_information->pitch_max = mavlink_msg_gimbal_manager_information_get_pitch_max(msg);
+    gimbal_manager_information->yaw_min = mavlink_msg_gimbal_manager_information_get_yaw_min(msg);
+    gimbal_manager_information->yaw_max = mavlink_msg_gimbal_manager_information_get_yaw_max(msg);
+    gimbal_manager_information->gimbal_device_id = mavlink_msg_gimbal_manager_information_get_gimbal_device_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN? msg->len : MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN;
+        memset(gimbal_manager_information, 0, MAVLINK_MSG_ID_GIMBAL_MANAGER_INFORMATION_LEN);
+    memcpy(gimbal_manager_information, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 380 - 0
v2.0/common/mavlink_msg_gimbal_manager_set_attitude.h

@@ -0,0 +1,380 @@
+#pragma once
+// MESSAGE GIMBAL_MANAGER_SET_ATTITUDE PACKING
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE 282
+
+
+typedef struct __mavlink_gimbal_manager_set_attitude_t {
+ uint32_t flags; /*<  High level gimbal manager flags to use.*/
+ float q[4]; /*<  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation, the frame is depends on whether the flag GIMBAL_MANAGER_FLAGS_YAW_LOCK is set)*/
+ float angular_velocity_x; /*< [rad/s] X component of angular velocity, positive is rolling to the right, NaN to be ignored.*/
+ float angular_velocity_y; /*< [rad/s] Y component of angular velocity, positive is pitching up, NaN to be ignored.*/
+ float angular_velocity_z; /*< [rad/s] Z component of angular velocity, positive is yawing to the right, NaN to be ignored.*/
+ uint8_t target_system; /*<  System ID*/
+ uint8_t target_component; /*<  Component ID*/
+ uint8_t gimbal_device_id; /*<  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).*/
+} mavlink_gimbal_manager_set_attitude_t;
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN 35
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_MIN_LEN 35
+#define MAVLINK_MSG_ID_282_LEN 35
+#define MAVLINK_MSG_ID_282_MIN_LEN 35
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_CRC 123
+#define MAVLINK_MSG_ID_282_CRC 123
+
+#define MAVLINK_MSG_GIMBAL_MANAGER_SET_ATTITUDE_FIELD_Q_LEN 4
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_SET_ATTITUDE { \
+    282, \
+    "GIMBAL_MANAGER_SET_ATTITUDE", \
+    8, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gimbal_manager_set_attitude_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gimbal_manager_set_attitude_t, target_component) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_set_attitude_t, flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gimbal_manager_set_attitude_t, gimbal_device_id) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 4, offsetof(mavlink_gimbal_manager_set_attitude_t, q) }, \
+         { "angular_velocity_x", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_manager_set_attitude_t, angular_velocity_x) }, \
+         { "angular_velocity_y", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_manager_set_attitude_t, angular_velocity_y) }, \
+         { "angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gimbal_manager_set_attitude_t, angular_velocity_z) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_SET_ATTITUDE { \
+    "GIMBAL_MANAGER_SET_ATTITUDE", \
+    8, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gimbal_manager_set_attitude_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gimbal_manager_set_attitude_t, target_component) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_set_attitude_t, flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gimbal_manager_set_attitude_t, gimbal_device_id) }, \
+         { "q", NULL, MAVLINK_TYPE_FLOAT, 4, 4, offsetof(mavlink_gimbal_manager_set_attitude_t, q) }, \
+         { "angular_velocity_x", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gimbal_manager_set_attitude_t, angular_velocity_x) }, \
+         { "angular_velocity_y", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gimbal_manager_set_attitude_t, angular_velocity_y) }, \
+         { "angular_velocity_z", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gimbal_manager_set_attitude_t, angular_velocity_z) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gimbal_manager_set_attitude message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags to use.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation, the frame is depends on whether the flag GIMBAL_MANAGER_FLAGS_YAW_LOCK is set)
+ * @param angular_velocity_x [rad/s] X component of angular velocity, positive is rolling to the right, NaN to be ignored.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity, positive is pitching up, NaN to be ignored.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity, positive is yawing to the right, NaN to be ignored.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_attitude_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 20, angular_velocity_x);
+    _mav_put_float(buf, 24, angular_velocity_y);
+    _mav_put_float(buf, 28, angular_velocity_z);
+    _mav_put_uint8_t(buf, 32, target_system);
+    _mav_put_uint8_t(buf, 33, target_component);
+    _mav_put_uint8_t(buf, 34, gimbal_device_id);
+    _mav_put_float_array(buf, 4, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN);
+#else
+    mavlink_gimbal_manager_set_attitude_t packet;
+    packet.flags = flags;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_CRC);
+}
+
+/**
+ * @brief Pack a gimbal_manager_set_attitude message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags to use.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation, the frame is depends on whether the flag GIMBAL_MANAGER_FLAGS_YAW_LOCK is set)
+ * @param angular_velocity_x [rad/s] X component of angular velocity, positive is rolling to the right, NaN to be ignored.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity, positive is pitching up, NaN to be ignored.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity, positive is yawing to the right, NaN to be ignored.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_attitude_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint32_t flags,uint8_t gimbal_device_id,const float *q,float angular_velocity_x,float angular_velocity_y,float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 20, angular_velocity_x);
+    _mav_put_float(buf, 24, angular_velocity_y);
+    _mav_put_float(buf, 28, angular_velocity_z);
+    _mav_put_uint8_t(buf, 32, target_system);
+    _mav_put_uint8_t(buf, 33, target_component);
+    _mav_put_uint8_t(buf, 34, gimbal_device_id);
+    _mav_put_float_array(buf, 4, q, 4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN);
+#else
+    mavlink_gimbal_manager_set_attitude_t packet;
+    packet.flags = flags;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_CRC);
+}
+
+/**
+ * @brief Encode a gimbal_manager_set_attitude struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_set_attitude C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_attitude_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gimbal_manager_set_attitude_t* gimbal_manager_set_attitude)
+{
+    return mavlink_msg_gimbal_manager_set_attitude_pack(system_id, component_id, msg, gimbal_manager_set_attitude->target_system, gimbal_manager_set_attitude->target_component, gimbal_manager_set_attitude->flags, gimbal_manager_set_attitude->gimbal_device_id, gimbal_manager_set_attitude->q, gimbal_manager_set_attitude->angular_velocity_x, gimbal_manager_set_attitude->angular_velocity_y, gimbal_manager_set_attitude->angular_velocity_z);
+}
+
+/**
+ * @brief Encode a gimbal_manager_set_attitude struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_set_attitude C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_attitude_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gimbal_manager_set_attitude_t* gimbal_manager_set_attitude)
+{
+    return mavlink_msg_gimbal_manager_set_attitude_pack_chan(system_id, component_id, chan, msg, gimbal_manager_set_attitude->target_system, gimbal_manager_set_attitude->target_component, gimbal_manager_set_attitude->flags, gimbal_manager_set_attitude->gimbal_device_id, gimbal_manager_set_attitude->q, gimbal_manager_set_attitude->angular_velocity_x, gimbal_manager_set_attitude->angular_velocity_y, gimbal_manager_set_attitude->angular_velocity_z);
+}
+
+/**
+ * @brief Send a gimbal_manager_set_attitude message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags to use.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param q  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation, the frame is depends on whether the flag GIMBAL_MANAGER_FLAGS_YAW_LOCK is set)
+ * @param angular_velocity_x [rad/s] X component of angular velocity, positive is rolling to the right, NaN to be ignored.
+ * @param angular_velocity_y [rad/s] Y component of angular velocity, positive is pitching up, NaN to be ignored.
+ * @param angular_velocity_z [rad/s] Z component of angular velocity, positive is yawing to the right, NaN to be ignored.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gimbal_manager_set_attitude_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 20, angular_velocity_x);
+    _mav_put_float(buf, 24, angular_velocity_y);
+    _mav_put_float(buf, 28, angular_velocity_z);
+    _mav_put_uint8_t(buf, 32, target_system);
+    _mav_put_uint8_t(buf, 33, target_component);
+    _mav_put_uint8_t(buf, 34, gimbal_device_id);
+    _mav_put_float_array(buf, 4, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_CRC);
+#else
+    mavlink_gimbal_manager_set_attitude_t packet;
+    packet.flags = flags;
+    packet.angular_velocity_x = angular_velocity_x;
+    packet.angular_velocity_y = angular_velocity_y;
+    packet.angular_velocity_z = angular_velocity_z;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet.q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE, (const char *)&packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gimbal_manager_set_attitude message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gimbal_manager_set_attitude_send_struct(mavlink_channel_t chan, const mavlink_gimbal_manager_set_attitude_t* gimbal_manager_set_attitude)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_manager_set_attitude_send(chan, gimbal_manager_set_attitude->target_system, gimbal_manager_set_attitude->target_component, gimbal_manager_set_attitude->flags, gimbal_manager_set_attitude->gimbal_device_id, gimbal_manager_set_attitude->q, gimbal_manager_set_attitude->angular_velocity_x, gimbal_manager_set_attitude->angular_velocity_y, gimbal_manager_set_attitude->angular_velocity_z);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE, (const char *)gimbal_manager_set_attitude, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gimbal_manager_set_attitude_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, const float *q, float angular_velocity_x, float angular_velocity_y, float angular_velocity_z)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 20, angular_velocity_x);
+    _mav_put_float(buf, 24, angular_velocity_y);
+    _mav_put_float(buf, 28, angular_velocity_z);
+    _mav_put_uint8_t(buf, 32, target_system);
+    _mav_put_uint8_t(buf, 33, target_component);
+    _mav_put_uint8_t(buf, 34, gimbal_device_id);
+    _mav_put_float_array(buf, 4, q, 4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_CRC);
+#else
+    mavlink_gimbal_manager_set_attitude_t *packet = (mavlink_gimbal_manager_set_attitude_t *)msgbuf;
+    packet->flags = flags;
+    packet->angular_velocity_x = angular_velocity_x;
+    packet->angular_velocity_y = angular_velocity_y;
+    packet->angular_velocity_z = angular_velocity_z;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->gimbal_device_id = gimbal_device_id;
+    mav_array_memcpy(packet->q, q, sizeof(float)*4);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE, (const char *)packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GIMBAL_MANAGER_SET_ATTITUDE UNPACKING
+
+
+/**
+ * @brief Get field target_system from gimbal_manager_set_attitude message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_attitude_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field target_component from gimbal_manager_set_attitude message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_attitude_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field flags from gimbal_manager_set_attitude message
+ *
+ * @return  High level gimbal manager flags to use.
+ */
+static inline uint32_t mavlink_msg_gimbal_manager_set_attitude_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field gimbal_device_id from gimbal_manager_set_attitude message
+ *
+ * @return  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_attitude_get_gimbal_device_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field q from gimbal_manager_set_attitude message
+ *
+ * @return  Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation, the frame is depends on whether the flag GIMBAL_MANAGER_FLAGS_YAW_LOCK is set)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_attitude_get_q(const mavlink_message_t* msg, float *q)
+{
+    return _MAV_RETURN_float_array(msg, q, 4,  4);
+}
+
+/**
+ * @brief Get field angular_velocity_x from gimbal_manager_set_attitude message
+ *
+ * @return [rad/s] X component of angular velocity, positive is rolling to the right, NaN to be ignored.
+ */
+static inline float mavlink_msg_gimbal_manager_set_attitude_get_angular_velocity_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field angular_velocity_y from gimbal_manager_set_attitude message
+ *
+ * @return [rad/s] Y component of angular velocity, positive is pitching up, NaN to be ignored.
+ */
+static inline float mavlink_msg_gimbal_manager_set_attitude_get_angular_velocity_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field angular_velocity_z from gimbal_manager_set_attitude message
+ *
+ * @return [rad/s] Z component of angular velocity, positive is yawing to the right, NaN to be ignored.
+ */
+static inline float mavlink_msg_gimbal_manager_set_attitude_get_angular_velocity_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Decode a gimbal_manager_set_attitude message into a struct
+ *
+ * @param msg The message to decode
+ * @param gimbal_manager_set_attitude C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gimbal_manager_set_attitude_decode(const mavlink_message_t* msg, mavlink_gimbal_manager_set_attitude_t* gimbal_manager_set_attitude)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gimbal_manager_set_attitude->flags = mavlink_msg_gimbal_manager_set_attitude_get_flags(msg);
+    mavlink_msg_gimbal_manager_set_attitude_get_q(msg, gimbal_manager_set_attitude->q);
+    gimbal_manager_set_attitude->angular_velocity_x = mavlink_msg_gimbal_manager_set_attitude_get_angular_velocity_x(msg);
+    gimbal_manager_set_attitude->angular_velocity_y = mavlink_msg_gimbal_manager_set_attitude_get_angular_velocity_y(msg);
+    gimbal_manager_set_attitude->angular_velocity_z = mavlink_msg_gimbal_manager_set_attitude_get_angular_velocity_z(msg);
+    gimbal_manager_set_attitude->target_system = mavlink_msg_gimbal_manager_set_attitude_get_target_system(msg);
+    gimbal_manager_set_attitude->target_component = mavlink_msg_gimbal_manager_set_attitude_get_target_component(msg);
+    gimbal_manager_set_attitude->gimbal_device_id = mavlink_msg_gimbal_manager_set_attitude_get_gimbal_device_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN? msg->len : MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN;
+        memset(gimbal_manager_set_attitude, 0, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_ATTITUDE_LEN);
+    memcpy(gimbal_manager_set_attitude, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 388 - 0
v2.0/common/mavlink_msg_gimbal_manager_set_manual_control.h

@@ -0,0 +1,388 @@
+#pragma once
+// MESSAGE GIMBAL_MANAGER_SET_MANUAL_CONTROL PACKING
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL 288
+
+
+typedef struct __mavlink_gimbal_manager_set_manual_control_t {
+ uint32_t flags; /*<  High level gimbal manager flags.*/
+ float pitch; /*<  Pitch angle unitless (-1..1, positive: up, negative: down, NaN to be ignored).*/
+ float yaw; /*<  Yaw angle unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).*/
+ float pitch_rate; /*<  Pitch angular rate unitless (-1..1, positive: up, negative: down, NaN to be ignored).*/
+ float yaw_rate; /*<  Yaw angular rate unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).*/
+ uint8_t target_system; /*<  System ID*/
+ uint8_t target_component; /*<  Component ID*/
+ uint8_t gimbal_device_id; /*<  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).*/
+} mavlink_gimbal_manager_set_manual_control_t;
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN 23
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_MIN_LEN 23
+#define MAVLINK_MSG_ID_288_LEN 23
+#define MAVLINK_MSG_ID_288_MIN_LEN 23
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_CRC 20
+#define MAVLINK_MSG_ID_288_CRC 20
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_SET_MANUAL_CONTROL { \
+    288, \
+    "GIMBAL_MANAGER_SET_MANUAL_CONTROL", \
+    8, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_gimbal_manager_set_manual_control_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 21, offsetof(mavlink_gimbal_manager_set_manual_control_t, target_component) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_set_manual_control_t, flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 22, offsetof(mavlink_gimbal_manager_set_manual_control_t, gimbal_device_id) }, \
+         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_gimbal_manager_set_manual_control_t, pitch) }, \
+         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_gimbal_manager_set_manual_control_t, yaw) }, \
+         { "pitch_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_gimbal_manager_set_manual_control_t, pitch_rate) }, \
+         { "yaw_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_gimbal_manager_set_manual_control_t, yaw_rate) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_SET_MANUAL_CONTROL { \
+    "GIMBAL_MANAGER_SET_MANUAL_CONTROL", \
+    8, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_gimbal_manager_set_manual_control_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 21, offsetof(mavlink_gimbal_manager_set_manual_control_t, target_component) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_set_manual_control_t, flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 22, offsetof(mavlink_gimbal_manager_set_manual_control_t, gimbal_device_id) }, \
+         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_gimbal_manager_set_manual_control_t, pitch) }, \
+         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_gimbal_manager_set_manual_control_t, yaw) }, \
+         { "pitch_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_gimbal_manager_set_manual_control_t, pitch_rate) }, \
+         { "yaw_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_gimbal_manager_set_manual_control_t, yaw_rate) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gimbal_manager_set_manual_control message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param pitch  Pitch angle unitless (-1..1, positive: up, negative: down, NaN to be ignored).
+ * @param yaw  Yaw angle unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).
+ * @param pitch_rate  Pitch angular rate unitless (-1..1, positive: up, negative: down, NaN to be ignored).
+ * @param yaw_rate  Yaw angular rate unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_manual_control_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, float pitch, float yaw, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 4, pitch);
+    _mav_put_float(buf, 8, yaw);
+    _mav_put_float(buf, 12, pitch_rate);
+    _mav_put_float(buf, 16, yaw_rate);
+    _mav_put_uint8_t(buf, 20, target_system);
+    _mav_put_uint8_t(buf, 21, target_component);
+    _mav_put_uint8_t(buf, 22, gimbal_device_id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN);
+#else
+    mavlink_gimbal_manager_set_manual_control_t packet;
+    packet.flags = flags;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_CRC);
+}
+
+/**
+ * @brief Pack a gimbal_manager_set_manual_control message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param pitch  Pitch angle unitless (-1..1, positive: up, negative: down, NaN to be ignored).
+ * @param yaw  Yaw angle unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).
+ * @param pitch_rate  Pitch angular rate unitless (-1..1, positive: up, negative: down, NaN to be ignored).
+ * @param yaw_rate  Yaw angular rate unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_manual_control_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint32_t flags,uint8_t gimbal_device_id,float pitch,float yaw,float pitch_rate,float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 4, pitch);
+    _mav_put_float(buf, 8, yaw);
+    _mav_put_float(buf, 12, pitch_rate);
+    _mav_put_float(buf, 16, yaw_rate);
+    _mav_put_uint8_t(buf, 20, target_system);
+    _mav_put_uint8_t(buf, 21, target_component);
+    _mav_put_uint8_t(buf, 22, gimbal_device_id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN);
+#else
+    mavlink_gimbal_manager_set_manual_control_t packet;
+    packet.flags = flags;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_CRC);
+}
+
+/**
+ * @brief Encode a gimbal_manager_set_manual_control struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_set_manual_control C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_manual_control_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gimbal_manager_set_manual_control_t* gimbal_manager_set_manual_control)
+{
+    return mavlink_msg_gimbal_manager_set_manual_control_pack(system_id, component_id, msg, gimbal_manager_set_manual_control->target_system, gimbal_manager_set_manual_control->target_component, gimbal_manager_set_manual_control->flags, gimbal_manager_set_manual_control->gimbal_device_id, gimbal_manager_set_manual_control->pitch, gimbal_manager_set_manual_control->yaw, gimbal_manager_set_manual_control->pitch_rate, gimbal_manager_set_manual_control->yaw_rate);
+}
+
+/**
+ * @brief Encode a gimbal_manager_set_manual_control struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_set_manual_control C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_manual_control_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gimbal_manager_set_manual_control_t* gimbal_manager_set_manual_control)
+{
+    return mavlink_msg_gimbal_manager_set_manual_control_pack_chan(system_id, component_id, chan, msg, gimbal_manager_set_manual_control->target_system, gimbal_manager_set_manual_control->target_component, gimbal_manager_set_manual_control->flags, gimbal_manager_set_manual_control->gimbal_device_id, gimbal_manager_set_manual_control->pitch, gimbal_manager_set_manual_control->yaw, gimbal_manager_set_manual_control->pitch_rate, gimbal_manager_set_manual_control->yaw_rate);
+}
+
+/**
+ * @brief Send a gimbal_manager_set_manual_control message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param pitch  Pitch angle unitless (-1..1, positive: up, negative: down, NaN to be ignored).
+ * @param yaw  Yaw angle unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).
+ * @param pitch_rate  Pitch angular rate unitless (-1..1, positive: up, negative: down, NaN to be ignored).
+ * @param yaw_rate  Yaw angular rate unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gimbal_manager_set_manual_control_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, float pitch, float yaw, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 4, pitch);
+    _mav_put_float(buf, 8, yaw);
+    _mav_put_float(buf, 12, pitch_rate);
+    _mav_put_float(buf, 16, yaw_rate);
+    _mav_put_uint8_t(buf, 20, target_system);
+    _mav_put_uint8_t(buf, 21, target_component);
+    _mav_put_uint8_t(buf, 22, gimbal_device_id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_CRC);
+#else
+    mavlink_gimbal_manager_set_manual_control_t packet;
+    packet.flags = flags;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL, (const char *)&packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gimbal_manager_set_manual_control message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gimbal_manager_set_manual_control_send_struct(mavlink_channel_t chan, const mavlink_gimbal_manager_set_manual_control_t* gimbal_manager_set_manual_control)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_manager_set_manual_control_send(chan, gimbal_manager_set_manual_control->target_system, gimbal_manager_set_manual_control->target_component, gimbal_manager_set_manual_control->flags, gimbal_manager_set_manual_control->gimbal_device_id, gimbal_manager_set_manual_control->pitch, gimbal_manager_set_manual_control->yaw, gimbal_manager_set_manual_control->pitch_rate, gimbal_manager_set_manual_control->yaw_rate);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL, (const char *)gimbal_manager_set_manual_control, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gimbal_manager_set_manual_control_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, float pitch, float yaw, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 4, pitch);
+    _mav_put_float(buf, 8, yaw);
+    _mav_put_float(buf, 12, pitch_rate);
+    _mav_put_float(buf, 16, yaw_rate);
+    _mav_put_uint8_t(buf, 20, target_system);
+    _mav_put_uint8_t(buf, 21, target_component);
+    _mav_put_uint8_t(buf, 22, gimbal_device_id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_CRC);
+#else
+    mavlink_gimbal_manager_set_manual_control_t *packet = (mavlink_gimbal_manager_set_manual_control_t *)msgbuf;
+    packet->flags = flags;
+    packet->pitch = pitch;
+    packet->yaw = yaw;
+    packet->pitch_rate = pitch_rate;
+    packet->yaw_rate = yaw_rate;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->gimbal_device_id = gimbal_device_id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL, (const char *)packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GIMBAL_MANAGER_SET_MANUAL_CONTROL UNPACKING
+
+
+/**
+ * @brief Get field target_system from gimbal_manager_set_manual_control message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_manual_control_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  20);
+}
+
+/**
+ * @brief Get field target_component from gimbal_manager_set_manual_control message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_manual_control_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  21);
+}
+
+/**
+ * @brief Get field flags from gimbal_manager_set_manual_control message
+ *
+ * @return  High level gimbal manager flags.
+ */
+static inline uint32_t mavlink_msg_gimbal_manager_set_manual_control_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field gimbal_device_id from gimbal_manager_set_manual_control message
+ *
+ * @return  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_manual_control_get_gimbal_device_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  22);
+}
+
+/**
+ * @brief Get field pitch from gimbal_manager_set_manual_control message
+ *
+ * @return  Pitch angle unitless (-1..1, positive: up, negative: down, NaN to be ignored).
+ */
+static inline float mavlink_msg_gimbal_manager_set_manual_control_get_pitch(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field yaw from gimbal_manager_set_manual_control message
+ *
+ * @return  Yaw angle unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).
+ */
+static inline float mavlink_msg_gimbal_manager_set_manual_control_get_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field pitch_rate from gimbal_manager_set_manual_control message
+ *
+ * @return  Pitch angular rate unitless (-1..1, positive: up, negative: down, NaN to be ignored).
+ */
+static inline float mavlink_msg_gimbal_manager_set_manual_control_get_pitch_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field yaw_rate from gimbal_manager_set_manual_control message
+ *
+ * @return  Yaw angular rate unitless (-1..1, positive: to the right, negative: to the left, NaN to be ignored).
+ */
+static inline float mavlink_msg_gimbal_manager_set_manual_control_get_yaw_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Decode a gimbal_manager_set_manual_control message into a struct
+ *
+ * @param msg The message to decode
+ * @param gimbal_manager_set_manual_control C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gimbal_manager_set_manual_control_decode(const mavlink_message_t* msg, mavlink_gimbal_manager_set_manual_control_t* gimbal_manager_set_manual_control)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gimbal_manager_set_manual_control->flags = mavlink_msg_gimbal_manager_set_manual_control_get_flags(msg);
+    gimbal_manager_set_manual_control->pitch = mavlink_msg_gimbal_manager_set_manual_control_get_pitch(msg);
+    gimbal_manager_set_manual_control->yaw = mavlink_msg_gimbal_manager_set_manual_control_get_yaw(msg);
+    gimbal_manager_set_manual_control->pitch_rate = mavlink_msg_gimbal_manager_set_manual_control_get_pitch_rate(msg);
+    gimbal_manager_set_manual_control->yaw_rate = mavlink_msg_gimbal_manager_set_manual_control_get_yaw_rate(msg);
+    gimbal_manager_set_manual_control->target_system = mavlink_msg_gimbal_manager_set_manual_control_get_target_system(msg);
+    gimbal_manager_set_manual_control->target_component = mavlink_msg_gimbal_manager_set_manual_control_get_target_component(msg);
+    gimbal_manager_set_manual_control->gimbal_device_id = mavlink_msg_gimbal_manager_set_manual_control_get_gimbal_device_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN? msg->len : MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN;
+        memset(gimbal_manager_set_manual_control, 0, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_MANUAL_CONTROL_LEN);
+    memcpy(gimbal_manager_set_manual_control, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 388 - 0
v2.0/common/mavlink_msg_gimbal_manager_set_pitchyaw.h

@@ -0,0 +1,388 @@
+#pragma once
+// MESSAGE GIMBAL_MANAGER_SET_PITCHYAW PACKING
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW 287
+
+
+typedef struct __mavlink_gimbal_manager_set_pitchyaw_t {
+ uint32_t flags; /*<  High level gimbal manager flags to use.*/
+ float pitch; /*< [rad] Pitch angle (positive: up, negative: down, NaN to be ignored).*/
+ float yaw; /*< [rad] Yaw angle (positive: to the right, negative: to the left, NaN to be ignored).*/
+ float pitch_rate; /*< [rad/s] Pitch angular rate (positive: up, negative: down, NaN to be ignored).*/
+ float yaw_rate; /*< [rad/s] Yaw angular rate (positive: to the right, negative: to the left, NaN to be ignored).*/
+ uint8_t target_system; /*<  System ID*/
+ uint8_t target_component; /*<  Component ID*/
+ uint8_t gimbal_device_id; /*<  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).*/
+} mavlink_gimbal_manager_set_pitchyaw_t;
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN 23
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_MIN_LEN 23
+#define MAVLINK_MSG_ID_287_LEN 23
+#define MAVLINK_MSG_ID_287_MIN_LEN 23
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_CRC 1
+#define MAVLINK_MSG_ID_287_CRC 1
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_SET_PITCHYAW { \
+    287, \
+    "GIMBAL_MANAGER_SET_PITCHYAW", \
+    8, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 21, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, target_component) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 22, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, gimbal_device_id) }, \
+         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, pitch) }, \
+         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, yaw) }, \
+         { "pitch_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, pitch_rate) }, \
+         { "yaw_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, yaw_rate) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_SET_PITCHYAW { \
+    "GIMBAL_MANAGER_SET_PITCHYAW", \
+    8, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 20, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 21, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, target_component) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 22, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, gimbal_device_id) }, \
+         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, pitch) }, \
+         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, yaw) }, \
+         { "pitch_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, pitch_rate) }, \
+         { "yaw_rate", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_gimbal_manager_set_pitchyaw_t, yaw_rate) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gimbal_manager_set_pitchyaw message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags to use.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param pitch [rad] Pitch angle (positive: up, negative: down, NaN to be ignored).
+ * @param yaw [rad] Yaw angle (positive: to the right, negative: to the left, NaN to be ignored).
+ * @param pitch_rate [rad/s] Pitch angular rate (positive: up, negative: down, NaN to be ignored).
+ * @param yaw_rate [rad/s] Yaw angular rate (positive: to the right, negative: to the left, NaN to be ignored).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_pitchyaw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, float pitch, float yaw, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 4, pitch);
+    _mav_put_float(buf, 8, yaw);
+    _mav_put_float(buf, 12, pitch_rate);
+    _mav_put_float(buf, 16, yaw_rate);
+    _mav_put_uint8_t(buf, 20, target_system);
+    _mav_put_uint8_t(buf, 21, target_component);
+    _mav_put_uint8_t(buf, 22, gimbal_device_id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN);
+#else
+    mavlink_gimbal_manager_set_pitchyaw_t packet;
+    packet.flags = flags;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_CRC);
+}
+
+/**
+ * @brief Pack a gimbal_manager_set_pitchyaw message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags to use.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param pitch [rad] Pitch angle (positive: up, negative: down, NaN to be ignored).
+ * @param yaw [rad] Yaw angle (positive: to the right, negative: to the left, NaN to be ignored).
+ * @param pitch_rate [rad/s] Pitch angular rate (positive: up, negative: down, NaN to be ignored).
+ * @param yaw_rate [rad/s] Yaw angular rate (positive: to the right, negative: to the left, NaN to be ignored).
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_pitchyaw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint32_t flags,uint8_t gimbal_device_id,float pitch,float yaw,float pitch_rate,float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 4, pitch);
+    _mav_put_float(buf, 8, yaw);
+    _mav_put_float(buf, 12, pitch_rate);
+    _mav_put_float(buf, 16, yaw_rate);
+    _mav_put_uint8_t(buf, 20, target_system);
+    _mav_put_uint8_t(buf, 21, target_component);
+    _mav_put_uint8_t(buf, 22, gimbal_device_id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN);
+#else
+    mavlink_gimbal_manager_set_pitchyaw_t packet;
+    packet.flags = flags;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_CRC);
+}
+
+/**
+ * @brief Encode a gimbal_manager_set_pitchyaw struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_set_pitchyaw C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_pitchyaw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gimbal_manager_set_pitchyaw_t* gimbal_manager_set_pitchyaw)
+{
+    return mavlink_msg_gimbal_manager_set_pitchyaw_pack(system_id, component_id, msg, gimbal_manager_set_pitchyaw->target_system, gimbal_manager_set_pitchyaw->target_component, gimbal_manager_set_pitchyaw->flags, gimbal_manager_set_pitchyaw->gimbal_device_id, gimbal_manager_set_pitchyaw->pitch, gimbal_manager_set_pitchyaw->yaw, gimbal_manager_set_pitchyaw->pitch_rate, gimbal_manager_set_pitchyaw->yaw_rate);
+}
+
+/**
+ * @brief Encode a gimbal_manager_set_pitchyaw struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_set_pitchyaw C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_set_pitchyaw_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gimbal_manager_set_pitchyaw_t* gimbal_manager_set_pitchyaw)
+{
+    return mavlink_msg_gimbal_manager_set_pitchyaw_pack_chan(system_id, component_id, chan, msg, gimbal_manager_set_pitchyaw->target_system, gimbal_manager_set_pitchyaw->target_component, gimbal_manager_set_pitchyaw->flags, gimbal_manager_set_pitchyaw->gimbal_device_id, gimbal_manager_set_pitchyaw->pitch, gimbal_manager_set_pitchyaw->yaw, gimbal_manager_set_pitchyaw->pitch_rate, gimbal_manager_set_pitchyaw->yaw_rate);
+}
+
+/**
+ * @brief Send a gimbal_manager_set_pitchyaw message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param flags  High level gimbal manager flags to use.
+ * @param gimbal_device_id  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ * @param pitch [rad] Pitch angle (positive: up, negative: down, NaN to be ignored).
+ * @param yaw [rad] Yaw angle (positive: to the right, negative: to the left, NaN to be ignored).
+ * @param pitch_rate [rad/s] Pitch angular rate (positive: up, negative: down, NaN to be ignored).
+ * @param yaw_rate [rad/s] Yaw angular rate (positive: to the right, negative: to the left, NaN to be ignored).
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gimbal_manager_set_pitchyaw_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, float pitch, float yaw, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN];
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 4, pitch);
+    _mav_put_float(buf, 8, yaw);
+    _mav_put_float(buf, 12, pitch_rate);
+    _mav_put_float(buf, 16, yaw_rate);
+    _mav_put_uint8_t(buf, 20, target_system);
+    _mav_put_uint8_t(buf, 21, target_component);
+    _mav_put_uint8_t(buf, 22, gimbal_device_id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_CRC);
+#else
+    mavlink_gimbal_manager_set_pitchyaw_t packet;
+    packet.flags = flags;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.pitch_rate = pitch_rate;
+    packet.yaw_rate = yaw_rate;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.gimbal_device_id = gimbal_device_id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW, (const char *)&packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gimbal_manager_set_pitchyaw message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gimbal_manager_set_pitchyaw_send_struct(mavlink_channel_t chan, const mavlink_gimbal_manager_set_pitchyaw_t* gimbal_manager_set_pitchyaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_manager_set_pitchyaw_send(chan, gimbal_manager_set_pitchyaw->target_system, gimbal_manager_set_pitchyaw->target_component, gimbal_manager_set_pitchyaw->flags, gimbal_manager_set_pitchyaw->gimbal_device_id, gimbal_manager_set_pitchyaw->pitch, gimbal_manager_set_pitchyaw->yaw, gimbal_manager_set_pitchyaw->pitch_rate, gimbal_manager_set_pitchyaw->yaw_rate);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW, (const char *)gimbal_manager_set_pitchyaw, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gimbal_manager_set_pitchyaw_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint32_t flags, uint8_t gimbal_device_id, float pitch, float yaw, float pitch_rate, float yaw_rate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, flags);
+    _mav_put_float(buf, 4, pitch);
+    _mav_put_float(buf, 8, yaw);
+    _mav_put_float(buf, 12, pitch_rate);
+    _mav_put_float(buf, 16, yaw_rate);
+    _mav_put_uint8_t(buf, 20, target_system);
+    _mav_put_uint8_t(buf, 21, target_component);
+    _mav_put_uint8_t(buf, 22, gimbal_device_id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_CRC);
+#else
+    mavlink_gimbal_manager_set_pitchyaw_t *packet = (mavlink_gimbal_manager_set_pitchyaw_t *)msgbuf;
+    packet->flags = flags;
+    packet->pitch = pitch;
+    packet->yaw = yaw;
+    packet->pitch_rate = pitch_rate;
+    packet->yaw_rate = yaw_rate;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->gimbal_device_id = gimbal_device_id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW, (const char *)packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GIMBAL_MANAGER_SET_PITCHYAW UNPACKING
+
+
+/**
+ * @brief Get field target_system from gimbal_manager_set_pitchyaw message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_pitchyaw_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  20);
+}
+
+/**
+ * @brief Get field target_component from gimbal_manager_set_pitchyaw message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_pitchyaw_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  21);
+}
+
+/**
+ * @brief Get field flags from gimbal_manager_set_pitchyaw message
+ *
+ * @return  High level gimbal manager flags to use.
+ */
+static inline uint32_t mavlink_msg_gimbal_manager_set_pitchyaw_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field gimbal_device_id from gimbal_manager_set_pitchyaw message
+ *
+ * @return  Component ID of gimbal device to address (or 1-6 for non-MAVLink gimbal), 0 for all gimbal device components. Send command multiple times for more than one gimbal (but not all gimbals).
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_set_pitchyaw_get_gimbal_device_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  22);
+}
+
+/**
+ * @brief Get field pitch from gimbal_manager_set_pitchyaw message
+ *
+ * @return [rad] Pitch angle (positive: up, negative: down, NaN to be ignored).
+ */
+static inline float mavlink_msg_gimbal_manager_set_pitchyaw_get_pitch(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Get field yaw from gimbal_manager_set_pitchyaw message
+ *
+ * @return [rad] Yaw angle (positive: to the right, negative: to the left, NaN to be ignored).
+ */
+static inline float mavlink_msg_gimbal_manager_set_pitchyaw_get_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field pitch_rate from gimbal_manager_set_pitchyaw message
+ *
+ * @return [rad/s] Pitch angular rate (positive: up, negative: down, NaN to be ignored).
+ */
+static inline float mavlink_msg_gimbal_manager_set_pitchyaw_get_pitch_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field yaw_rate from gimbal_manager_set_pitchyaw message
+ *
+ * @return [rad/s] Yaw angular rate (positive: to the right, negative: to the left, NaN to be ignored).
+ */
+static inline float mavlink_msg_gimbal_manager_set_pitchyaw_get_yaw_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Decode a gimbal_manager_set_pitchyaw message into a struct
+ *
+ * @param msg The message to decode
+ * @param gimbal_manager_set_pitchyaw C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gimbal_manager_set_pitchyaw_decode(const mavlink_message_t* msg, mavlink_gimbal_manager_set_pitchyaw_t* gimbal_manager_set_pitchyaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gimbal_manager_set_pitchyaw->flags = mavlink_msg_gimbal_manager_set_pitchyaw_get_flags(msg);
+    gimbal_manager_set_pitchyaw->pitch = mavlink_msg_gimbal_manager_set_pitchyaw_get_pitch(msg);
+    gimbal_manager_set_pitchyaw->yaw = mavlink_msg_gimbal_manager_set_pitchyaw_get_yaw(msg);
+    gimbal_manager_set_pitchyaw->pitch_rate = mavlink_msg_gimbal_manager_set_pitchyaw_get_pitch_rate(msg);
+    gimbal_manager_set_pitchyaw->yaw_rate = mavlink_msg_gimbal_manager_set_pitchyaw_get_yaw_rate(msg);
+    gimbal_manager_set_pitchyaw->target_system = mavlink_msg_gimbal_manager_set_pitchyaw_get_target_system(msg);
+    gimbal_manager_set_pitchyaw->target_component = mavlink_msg_gimbal_manager_set_pitchyaw_get_target_component(msg);
+    gimbal_manager_set_pitchyaw->gimbal_device_id = mavlink_msg_gimbal_manager_set_pitchyaw_get_gimbal_device_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN? msg->len : MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN;
+        memset(gimbal_manager_set_pitchyaw, 0, MAVLINK_MSG_ID_GIMBAL_MANAGER_SET_PITCHYAW_LEN);
+    memcpy(gimbal_manager_set_pitchyaw, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 363 - 0
v2.0/common/mavlink_msg_gimbal_manager_status.h

@@ -0,0 +1,363 @@
+#pragma once
+// MESSAGE GIMBAL_MANAGER_STATUS PACKING
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS 281
+
+
+typedef struct __mavlink_gimbal_manager_status_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ uint32_t flags; /*<  High level gimbal manager flags currently applied.*/
+ uint8_t gimbal_device_id; /*<  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).*/
+ uint8_t primary_control_sysid; /*<  System ID of MAVLink component with primary control, 0 for none.*/
+ uint8_t primary_control_compid; /*<  Component ID of MAVLink component with primary control, 0 for none.*/
+ uint8_t secondary_control_sysid; /*<  System ID of MAVLink component with secondary control, 0 for none.*/
+ uint8_t secondary_control_compid; /*<  Component ID of MAVLink component with secondary control, 0 for none.*/
+} mavlink_gimbal_manager_status_t;
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN 13
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_MIN_LEN 13
+#define MAVLINK_MSG_ID_281_LEN 13
+#define MAVLINK_MSG_ID_281_MIN_LEN 13
+
+#define MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_CRC 48
+#define MAVLINK_MSG_ID_281_CRC 48
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_STATUS { \
+    281, \
+    "GIMBAL_MANAGER_STATUS", \
+    7, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_status_t, time_boot_ms) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_gimbal_manager_status_t, flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_gimbal_manager_status_t, gimbal_device_id) }, \
+         { "primary_control_sysid", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_gimbal_manager_status_t, primary_control_sysid) }, \
+         { "primary_control_compid", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_gimbal_manager_status_t, primary_control_compid) }, \
+         { "secondary_control_sysid", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_gimbal_manager_status_t, secondary_control_sysid) }, \
+         { "secondary_control_compid", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_gimbal_manager_status_t, secondary_control_compid) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GIMBAL_MANAGER_STATUS { \
+    "GIMBAL_MANAGER_STATUS", \
+    7, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gimbal_manager_status_t, time_boot_ms) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_gimbal_manager_status_t, flags) }, \
+         { "gimbal_device_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 8, offsetof(mavlink_gimbal_manager_status_t, gimbal_device_id) }, \
+         { "primary_control_sysid", NULL, MAVLINK_TYPE_UINT8_T, 0, 9, offsetof(mavlink_gimbal_manager_status_t, primary_control_sysid) }, \
+         { "primary_control_compid", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_gimbal_manager_status_t, primary_control_compid) }, \
+         { "secondary_control_sysid", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_gimbal_manager_status_t, secondary_control_sysid) }, \
+         { "secondary_control_compid", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_gimbal_manager_status_t, secondary_control_compid) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gimbal_manager_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param flags  High level gimbal manager flags currently applied.
+ * @param gimbal_device_id  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).
+ * @param primary_control_sysid  System ID of MAVLink component with primary control, 0 for none.
+ * @param primary_control_compid  Component ID of MAVLink component with primary control, 0 for none.
+ * @param secondary_control_sysid  System ID of MAVLink component with secondary control, 0 for none.
+ * @param secondary_control_compid  Component ID of MAVLink component with secondary control, 0 for none.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, uint32_t flags, uint8_t gimbal_device_id, uint8_t primary_control_sysid, uint8_t primary_control_compid, uint8_t secondary_control_sysid, uint8_t secondary_control_compid)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, flags);
+    _mav_put_uint8_t(buf, 8, gimbal_device_id);
+    _mav_put_uint8_t(buf, 9, primary_control_sysid);
+    _mav_put_uint8_t(buf, 10, primary_control_compid);
+    _mav_put_uint8_t(buf, 11, secondary_control_sysid);
+    _mav_put_uint8_t(buf, 12, secondary_control_compid);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN);
+#else
+    mavlink_gimbal_manager_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.flags = flags;
+    packet.gimbal_device_id = gimbal_device_id;
+    packet.primary_control_sysid = primary_control_sysid;
+    packet.primary_control_compid = primary_control_compid;
+    packet.secondary_control_sysid = secondary_control_sysid;
+    packet.secondary_control_compid = secondary_control_compid;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a gimbal_manager_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param flags  High level gimbal manager flags currently applied.
+ * @param gimbal_device_id  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).
+ * @param primary_control_sysid  System ID of MAVLink component with primary control, 0 for none.
+ * @param primary_control_compid  Component ID of MAVLink component with primary control, 0 for none.
+ * @param secondary_control_sysid  System ID of MAVLink component with secondary control, 0 for none.
+ * @param secondary_control_compid  Component ID of MAVLink component with secondary control, 0 for none.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,uint32_t flags,uint8_t gimbal_device_id,uint8_t primary_control_sysid,uint8_t primary_control_compid,uint8_t secondary_control_sysid,uint8_t secondary_control_compid)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, flags);
+    _mav_put_uint8_t(buf, 8, gimbal_device_id);
+    _mav_put_uint8_t(buf, 9, primary_control_sysid);
+    _mav_put_uint8_t(buf, 10, primary_control_compid);
+    _mav_put_uint8_t(buf, 11, secondary_control_sysid);
+    _mav_put_uint8_t(buf, 12, secondary_control_compid);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN);
+#else
+    mavlink_gimbal_manager_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.flags = flags;
+    packet.gimbal_device_id = gimbal_device_id;
+    packet.primary_control_sysid = primary_control_sysid;
+    packet.primary_control_compid = primary_control_compid;
+    packet.secondary_control_sysid = secondary_control_sysid;
+    packet.secondary_control_compid = secondary_control_compid;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a gimbal_manager_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gimbal_manager_status_t* gimbal_manager_status)
+{
+    return mavlink_msg_gimbal_manager_status_pack(system_id, component_id, msg, gimbal_manager_status->time_boot_ms, gimbal_manager_status->flags, gimbal_manager_status->gimbal_device_id, gimbal_manager_status->primary_control_sysid, gimbal_manager_status->primary_control_compid, gimbal_manager_status->secondary_control_sysid, gimbal_manager_status->secondary_control_compid);
+}
+
+/**
+ * @brief Encode a gimbal_manager_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gimbal_manager_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gimbal_manager_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gimbal_manager_status_t* gimbal_manager_status)
+{
+    return mavlink_msg_gimbal_manager_status_pack_chan(system_id, component_id, chan, msg, gimbal_manager_status->time_boot_ms, gimbal_manager_status->flags, gimbal_manager_status->gimbal_device_id, gimbal_manager_status->primary_control_sysid, gimbal_manager_status->primary_control_compid, gimbal_manager_status->secondary_control_sysid, gimbal_manager_status->secondary_control_compid);
+}
+
+/**
+ * @brief Send a gimbal_manager_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param flags  High level gimbal manager flags currently applied.
+ * @param gimbal_device_id  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).
+ * @param primary_control_sysid  System ID of MAVLink component with primary control, 0 for none.
+ * @param primary_control_compid  Component ID of MAVLink component with primary control, 0 for none.
+ * @param secondary_control_sysid  System ID of MAVLink component with secondary control, 0 for none.
+ * @param secondary_control_compid  Component ID of MAVLink component with secondary control, 0 for none.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gimbal_manager_status_send(mavlink_channel_t chan, uint32_t time_boot_ms, uint32_t flags, uint8_t gimbal_device_id, uint8_t primary_control_sysid, uint8_t primary_control_compid, uint8_t secondary_control_sysid, uint8_t secondary_control_compid)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, flags);
+    _mav_put_uint8_t(buf, 8, gimbal_device_id);
+    _mav_put_uint8_t(buf, 9, primary_control_sysid);
+    _mav_put_uint8_t(buf, 10, primary_control_compid);
+    _mav_put_uint8_t(buf, 11, secondary_control_sysid);
+    _mav_put_uint8_t(buf, 12, secondary_control_compid);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_CRC);
+#else
+    mavlink_gimbal_manager_status_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.flags = flags;
+    packet.gimbal_device_id = gimbal_device_id;
+    packet.primary_control_sysid = primary_control_sysid;
+    packet.primary_control_compid = primary_control_compid;
+    packet.secondary_control_sysid = secondary_control_sysid;
+    packet.secondary_control_compid = secondary_control_compid;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS, (const char *)&packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gimbal_manager_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gimbal_manager_status_send_struct(mavlink_channel_t chan, const mavlink_gimbal_manager_status_t* gimbal_manager_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gimbal_manager_status_send(chan, gimbal_manager_status->time_boot_ms, gimbal_manager_status->flags, gimbal_manager_status->gimbal_device_id, gimbal_manager_status->primary_control_sysid, gimbal_manager_status->primary_control_compid, gimbal_manager_status->secondary_control_sysid, gimbal_manager_status->secondary_control_compid);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS, (const char *)gimbal_manager_status, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gimbal_manager_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, uint32_t flags, uint8_t gimbal_device_id, uint8_t primary_control_sysid, uint8_t primary_control_compid, uint8_t secondary_control_sysid, uint8_t secondary_control_compid)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_uint32_t(buf, 4, flags);
+    _mav_put_uint8_t(buf, 8, gimbal_device_id);
+    _mav_put_uint8_t(buf, 9, primary_control_sysid);
+    _mav_put_uint8_t(buf, 10, primary_control_compid);
+    _mav_put_uint8_t(buf, 11, secondary_control_sysid);
+    _mav_put_uint8_t(buf, 12, secondary_control_compid);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS, buf, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_CRC);
+#else
+    mavlink_gimbal_manager_status_t *packet = (mavlink_gimbal_manager_status_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->flags = flags;
+    packet->gimbal_device_id = gimbal_device_id;
+    packet->primary_control_sysid = primary_control_sysid;
+    packet->primary_control_compid = primary_control_compid;
+    packet->secondary_control_sysid = secondary_control_sysid;
+    packet->secondary_control_compid = secondary_control_compid;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS, (const char *)packet, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_MIN_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GIMBAL_MANAGER_STATUS UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from gimbal_manager_status message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_gimbal_manager_status_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field flags from gimbal_manager_status message
+ *
+ * @return  High level gimbal manager flags currently applied.
+ */
+static inline uint32_t mavlink_msg_gimbal_manager_status_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field gimbal_device_id from gimbal_manager_status message
+ *
+ * @return  Gimbal device ID that this gimbal manager is responsible for. Component ID of gimbal device (or 1-6 for non-MAVLink gimbal).
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_status_get_gimbal_device_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  8);
+}
+
+/**
+ * @brief Get field primary_control_sysid from gimbal_manager_status message
+ *
+ * @return  System ID of MAVLink component with primary control, 0 for none.
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_status_get_primary_control_sysid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  9);
+}
+
+/**
+ * @brief Get field primary_control_compid from gimbal_manager_status message
+ *
+ * @return  Component ID of MAVLink component with primary control, 0 for none.
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_status_get_primary_control_compid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  10);
+}
+
+/**
+ * @brief Get field secondary_control_sysid from gimbal_manager_status message
+ *
+ * @return  System ID of MAVLink component with secondary control, 0 for none.
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_status_get_secondary_control_sysid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  11);
+}
+
+/**
+ * @brief Get field secondary_control_compid from gimbal_manager_status message
+ *
+ * @return  Component ID of MAVLink component with secondary control, 0 for none.
+ */
+static inline uint8_t mavlink_msg_gimbal_manager_status_get_secondary_control_compid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  12);
+}
+
+/**
+ * @brief Decode a gimbal_manager_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param gimbal_manager_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gimbal_manager_status_decode(const mavlink_message_t* msg, mavlink_gimbal_manager_status_t* gimbal_manager_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gimbal_manager_status->time_boot_ms = mavlink_msg_gimbal_manager_status_get_time_boot_ms(msg);
+    gimbal_manager_status->flags = mavlink_msg_gimbal_manager_status_get_flags(msg);
+    gimbal_manager_status->gimbal_device_id = mavlink_msg_gimbal_manager_status_get_gimbal_device_id(msg);
+    gimbal_manager_status->primary_control_sysid = mavlink_msg_gimbal_manager_status_get_primary_control_sysid(msg);
+    gimbal_manager_status->primary_control_compid = mavlink_msg_gimbal_manager_status_get_primary_control_compid(msg);
+    gimbal_manager_status->secondary_control_sysid = mavlink_msg_gimbal_manager_status_get_secondary_control_sysid(msg);
+    gimbal_manager_status->secondary_control_compid = mavlink_msg_gimbal_manager_status_get_secondary_control_compid(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN? msg->len : MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN;
+        memset(gimbal_manager_status, 0, MAVLINK_MSG_ID_GIMBAL_MANAGER_STATUS_LEN);
+    memcpy(gimbal_manager_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 413 - 0
v2.0/common/mavlink_msg_global_position_int.h

@@ -0,0 +1,413 @@
+#pragma once
+// MESSAGE GLOBAL_POSITION_INT PACKING
+
+#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT 33
+
+
+typedef struct __mavlink_global_position_int_t {
+ uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
+ int32_t lat; /*< [degE7] Latitude, expressed*/
+ int32_t lon; /*< [degE7] Longitude, expressed*/
+ int32_t alt; /*< [mm] Altitude (MSL). Note that virtually all GPS modules provide both WGS84 and MSL.*/
+ int32_t relative_alt; /*< [mm] Altitude above ground*/
+ int16_t vx; /*< [cm/s] Ground X Speed (Latitude, positive north)*/
+ int16_t vy; /*< [cm/s] Ground Y Speed (Longitude, positive east)*/
+ int16_t vz; /*< [cm/s] Ground Z Speed (Altitude, positive down)*/
+ uint16_t hdg; /*< [cdeg] Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX*/
+} mavlink_global_position_int_t;
+
+#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN 28
+#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_MIN_LEN 28
+#define MAVLINK_MSG_ID_33_LEN 28
+#define MAVLINK_MSG_ID_33_MIN_LEN 28
+
+#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_CRC 104
+#define MAVLINK_MSG_ID_33_CRC 104
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT { \
+    33, \
+    "GLOBAL_POSITION_INT", \
+    9, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_global_position_int_t, time_boot_ms) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_global_position_int_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_global_position_int_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_global_position_int_t, alt) }, \
+         { "relative_alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_global_position_int_t, relative_alt) }, \
+         { "vx", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_global_position_int_t, vx) }, \
+         { "vy", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_global_position_int_t, vy) }, \
+         { "vz", NULL, MAVLINK_TYPE_INT16_T, 0, 24, offsetof(mavlink_global_position_int_t, vz) }, \
+         { "hdg", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_global_position_int_t, hdg) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT { \
+    "GLOBAL_POSITION_INT", \
+    9, \
+    {  { "time_boot_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_global_position_int_t, time_boot_ms) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_global_position_int_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_global_position_int_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_global_position_int_t, alt) }, \
+         { "relative_alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_global_position_int_t, relative_alt) }, \
+         { "vx", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_global_position_int_t, vx) }, \
+         { "vy", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_global_position_int_t, vy) }, \
+         { "vz", NULL, MAVLINK_TYPE_INT16_T, 0, 24, offsetof(mavlink_global_position_int_t, vz) }, \
+         { "hdg", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_global_position_int_t, hdg) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a global_position_int message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param lat [degE7] Latitude, expressed
+ * @param lon [degE7] Longitude, expressed
+ * @param alt [mm] Altitude (MSL). Note that virtually all GPS modules provide both WGS84 and MSL.
+ * @param relative_alt [mm] Altitude above ground
+ * @param vx [cm/s] Ground X Speed (Latitude, positive north)
+ * @param vy [cm/s] Ground Y Speed (Longitude, positive east)
+ * @param vz [cm/s] Ground Z Speed (Altitude, positive down)
+ * @param hdg [cdeg] Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_global_position_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_boot_ms, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, int16_t vx, int16_t vy, int16_t vz, uint16_t hdg)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_int32_t(buf, 12, alt);
+    _mav_put_int32_t(buf, 16, relative_alt);
+    _mav_put_int16_t(buf, 20, vx);
+    _mav_put_int16_t(buf, 22, vy);
+    _mav_put_int16_t(buf, 24, vz);
+    _mav_put_uint16_t(buf, 26, hdg);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN);
+#else
+    mavlink_global_position_int_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.hdg = hdg;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_INT;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_CRC);
+}
+
+/**
+ * @brief Pack a global_position_int message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param lat [degE7] Latitude, expressed
+ * @param lon [degE7] Longitude, expressed
+ * @param alt [mm] Altitude (MSL). Note that virtually all GPS modules provide both WGS84 and MSL.
+ * @param relative_alt [mm] Altitude above ground
+ * @param vx [cm/s] Ground X Speed (Latitude, positive north)
+ * @param vy [cm/s] Ground Y Speed (Longitude, positive east)
+ * @param vz [cm/s] Ground Z Speed (Altitude, positive down)
+ * @param hdg [cdeg] Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_global_position_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_boot_ms,int32_t lat,int32_t lon,int32_t alt,int32_t relative_alt,int16_t vx,int16_t vy,int16_t vz,uint16_t hdg)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_int32_t(buf, 12, alt);
+    _mav_put_int32_t(buf, 16, relative_alt);
+    _mav_put_int16_t(buf, 20, vx);
+    _mav_put_int16_t(buf, 22, vy);
+    _mav_put_int16_t(buf, 24, vz);
+    _mav_put_uint16_t(buf, 26, hdg);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN);
+#else
+    mavlink_global_position_int_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.hdg = hdg;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_INT;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_CRC);
+}
+
+/**
+ * @brief Encode a global_position_int struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param global_position_int C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_global_position_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_global_position_int_t* global_position_int)
+{
+    return mavlink_msg_global_position_int_pack(system_id, component_id, msg, global_position_int->time_boot_ms, global_position_int->lat, global_position_int->lon, global_position_int->alt, global_position_int->relative_alt, global_position_int->vx, global_position_int->vy, global_position_int->vz, global_position_int->hdg);
+}
+
+/**
+ * @brief Encode a global_position_int struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param global_position_int C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_global_position_int_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_global_position_int_t* global_position_int)
+{
+    return mavlink_msg_global_position_int_pack_chan(system_id, component_id, chan, msg, global_position_int->time_boot_ms, global_position_int->lat, global_position_int->lon, global_position_int->alt, global_position_int->relative_alt, global_position_int->vx, global_position_int->vy, global_position_int->vz, global_position_int->hdg);
+}
+
+/**
+ * @brief Send a global_position_int message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_boot_ms [ms] Timestamp (time since system boot).
+ * @param lat [degE7] Latitude, expressed
+ * @param lon [degE7] Longitude, expressed
+ * @param alt [mm] Altitude (MSL). Note that virtually all GPS modules provide both WGS84 and MSL.
+ * @param relative_alt [mm] Altitude above ground
+ * @param vx [cm/s] Ground X Speed (Latitude, positive north)
+ * @param vy [cm/s] Ground Y Speed (Longitude, positive east)
+ * @param vz [cm/s] Ground Z Speed (Altitude, positive down)
+ * @param hdg [cdeg] Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_global_position_int_send(mavlink_channel_t chan, uint32_t time_boot_ms, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, int16_t vx, int16_t vy, int16_t vz, uint16_t hdg)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN];
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_int32_t(buf, 12, alt);
+    _mav_put_int32_t(buf, 16, relative_alt);
+    _mav_put_int16_t(buf, 20, vx);
+    _mav_put_int16_t(buf, 22, vy);
+    _mav_put_int16_t(buf, 24, vz);
+    _mav_put_uint16_t(buf, 26, hdg);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, buf, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_CRC);
+#else
+    mavlink_global_position_int_t packet;
+    packet.time_boot_ms = time_boot_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.hdg = hdg;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, (const char *)&packet, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_CRC);
+#endif
+}
+
+/**
+ * @brief Send a global_position_int message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_global_position_int_send_struct(mavlink_channel_t chan, const mavlink_global_position_int_t* global_position_int)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_global_position_int_send(chan, global_position_int->time_boot_ms, global_position_int->lat, global_position_int->lon, global_position_int->alt, global_position_int->relative_alt, global_position_int->vx, global_position_int->vy, global_position_int->vz, global_position_int->hdg);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, (const char *)global_position_int, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_global_position_int_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_boot_ms, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, int16_t vx, int16_t vy, int16_t vz, uint16_t hdg)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_boot_ms);
+    _mav_put_int32_t(buf, 4, lat);
+    _mav_put_int32_t(buf, 8, lon);
+    _mav_put_int32_t(buf, 12, alt);
+    _mav_put_int32_t(buf, 16, relative_alt);
+    _mav_put_int16_t(buf, 20, vx);
+    _mav_put_int16_t(buf, 22, vy);
+    _mav_put_int16_t(buf, 24, vz);
+    _mav_put_uint16_t(buf, 26, hdg);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, buf, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_CRC);
+#else
+    mavlink_global_position_int_t *packet = (mavlink_global_position_int_t *)msgbuf;
+    packet->time_boot_ms = time_boot_ms;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->relative_alt = relative_alt;
+    packet->vx = vx;
+    packet->vy = vy;
+    packet->vz = vz;
+    packet->hdg = hdg;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT, (const char *)packet, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GLOBAL_POSITION_INT UNPACKING
+
+
+/**
+ * @brief Get field time_boot_ms from global_position_int message
+ *
+ * @return [ms] Timestamp (time since system boot).
+ */
+static inline uint32_t mavlink_msg_global_position_int_get_time_boot_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field lat from global_position_int message
+ *
+ * @return [degE7] Latitude, expressed
+ */
+static inline int32_t mavlink_msg_global_position_int_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field lon from global_position_int message
+ *
+ * @return [degE7] Longitude, expressed
+ */
+static inline int32_t mavlink_msg_global_position_int_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field alt from global_position_int message
+ *
+ * @return [mm] Altitude (MSL). Note that virtually all GPS modules provide both WGS84 and MSL.
+ */
+static inline int32_t mavlink_msg_global_position_int_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field relative_alt from global_position_int message
+ *
+ * @return [mm] Altitude above ground
+ */
+static inline int32_t mavlink_msg_global_position_int_get_relative_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field vx from global_position_int message
+ *
+ * @return [cm/s] Ground X Speed (Latitude, positive north)
+ */
+static inline int16_t mavlink_msg_global_position_int_get_vx(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  20);
+}
+
+/**
+ * @brief Get field vy from global_position_int message
+ *
+ * @return [cm/s] Ground Y Speed (Longitude, positive east)
+ */
+static inline int16_t mavlink_msg_global_position_int_get_vy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  22);
+}
+
+/**
+ * @brief Get field vz from global_position_int message
+ *
+ * @return [cm/s] Ground Z Speed (Altitude, positive down)
+ */
+static inline int16_t mavlink_msg_global_position_int_get_vz(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  24);
+}
+
+/**
+ * @brief Get field hdg from global_position_int message
+ *
+ * @return [cdeg] Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_global_position_int_get_hdg(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  26);
+}
+
+/**
+ * @brief Decode a global_position_int message into a struct
+ *
+ * @param msg The message to decode
+ * @param global_position_int C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_global_position_int_decode(const mavlink_message_t* msg, mavlink_global_position_int_t* global_position_int)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    global_position_int->time_boot_ms = mavlink_msg_global_position_int_get_time_boot_ms(msg);
+    global_position_int->lat = mavlink_msg_global_position_int_get_lat(msg);
+    global_position_int->lon = mavlink_msg_global_position_int_get_lon(msg);
+    global_position_int->alt = mavlink_msg_global_position_int_get_alt(msg);
+    global_position_int->relative_alt = mavlink_msg_global_position_int_get_relative_alt(msg);
+    global_position_int->vx = mavlink_msg_global_position_int_get_vx(msg);
+    global_position_int->vy = mavlink_msg_global_position_int_get_vy(msg);
+    global_position_int->vz = mavlink_msg_global_position_int_get_vz(msg);
+    global_position_int->hdg = mavlink_msg_global_position_int_get_hdg(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN? msg->len : MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN;
+        memset(global_position_int, 0, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN);
+    memcpy(global_position_int, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 430 - 0
v2.0/common/mavlink_msg_global_position_int_cov.h

@@ -0,0 +1,430 @@
+#pragma once
+// MESSAGE GLOBAL_POSITION_INT_COV PACKING
+
+#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV 63
+
+
+typedef struct __mavlink_global_position_int_cov_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ int32_t lat; /*< [degE7] Latitude*/
+ int32_t lon; /*< [degE7] Longitude*/
+ int32_t alt; /*< [mm] Altitude in meters above MSL*/
+ int32_t relative_alt; /*< [mm] Altitude above ground*/
+ float vx; /*< [m/s] Ground X Speed (Latitude)*/
+ float vy; /*< [m/s] Ground Y Speed (Longitude)*/
+ float vz; /*< [m/s] Ground Z Speed (Altitude)*/
+ float covariance[36]; /*<  Row-major representation of a 6x6 position and velocity 6x6 cross-covariance matrix (states: lat, lon, alt, vx, vy, vz; first six entries are the first ROW, next six entries are the second row, etc.). If unknown, assign NaN value to first element in the array.*/
+ uint8_t estimator_type; /*<  Class id of the estimator this estimate originated from.*/
+} mavlink_global_position_int_cov_t;
+
+#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN 181
+#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_MIN_LEN 181
+#define MAVLINK_MSG_ID_63_LEN 181
+#define MAVLINK_MSG_ID_63_MIN_LEN 181
+
+#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_CRC 119
+#define MAVLINK_MSG_ID_63_CRC 119
+
+#define MAVLINK_MSG_GLOBAL_POSITION_INT_COV_FIELD_COVARIANCE_LEN 36
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT_COV { \
+    63, \
+    "GLOBAL_POSITION_INT_COV", \
+    10, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_global_position_int_cov_t, time_usec) }, \
+         { "estimator_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 180, offsetof(mavlink_global_position_int_cov_t, estimator_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_global_position_int_cov_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_global_position_int_cov_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_global_position_int_cov_t, alt) }, \
+         { "relative_alt", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_global_position_int_cov_t, relative_alt) }, \
+         { "vx", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_global_position_int_cov_t, vx) }, \
+         { "vy", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_global_position_int_cov_t, vy) }, \
+         { "vz", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_global_position_int_cov_t, vz) }, \
+         { "covariance", NULL, MAVLINK_TYPE_FLOAT, 36, 36, offsetof(mavlink_global_position_int_cov_t, covariance) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GLOBAL_POSITION_INT_COV { \
+    "GLOBAL_POSITION_INT_COV", \
+    10, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_global_position_int_cov_t, time_usec) }, \
+         { "estimator_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 180, offsetof(mavlink_global_position_int_cov_t, estimator_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_global_position_int_cov_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_global_position_int_cov_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_global_position_int_cov_t, alt) }, \
+         { "relative_alt", NULL, MAVLINK_TYPE_INT32_T, 0, 20, offsetof(mavlink_global_position_int_cov_t, relative_alt) }, \
+         { "vx", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_global_position_int_cov_t, vx) }, \
+         { "vy", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_global_position_int_cov_t, vy) }, \
+         { "vz", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_global_position_int_cov_t, vz) }, \
+         { "covariance", NULL, MAVLINK_TYPE_FLOAT, 36, 36, offsetof(mavlink_global_position_int_cov_t, covariance) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a global_position_int_cov message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param estimator_type  Class id of the estimator this estimate originated from.
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param alt [mm] Altitude in meters above MSL
+ * @param relative_alt [mm] Altitude above ground
+ * @param vx [m/s] Ground X Speed (Latitude)
+ * @param vy [m/s] Ground Y Speed (Longitude)
+ * @param vz [m/s] Ground Z Speed (Altitude)
+ * @param covariance  Row-major representation of a 6x6 position and velocity 6x6 cross-covariance matrix (states: lat, lon, alt, vx, vy, vz; first six entries are the first ROW, next six entries are the second row, etc.). If unknown, assign NaN value to first element in the array.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_global_position_int_cov_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint8_t estimator_type, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, float vx, float vy, float vz, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_int32_t(buf, 20, relative_alt);
+    _mav_put_float(buf, 24, vx);
+    _mav_put_float(buf, 28, vy);
+    _mav_put_float(buf, 32, vz);
+    _mav_put_uint8_t(buf, 180, estimator_type);
+    _mav_put_float_array(buf, 36, covariance, 36);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN);
+#else
+    mavlink_global_position_int_cov_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.estimator_type = estimator_type;
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*36);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_CRC);
+}
+
+/**
+ * @brief Pack a global_position_int_cov message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param estimator_type  Class id of the estimator this estimate originated from.
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param alt [mm] Altitude in meters above MSL
+ * @param relative_alt [mm] Altitude above ground
+ * @param vx [m/s] Ground X Speed (Latitude)
+ * @param vy [m/s] Ground Y Speed (Longitude)
+ * @param vz [m/s] Ground Z Speed (Altitude)
+ * @param covariance  Row-major representation of a 6x6 position and velocity 6x6 cross-covariance matrix (states: lat, lon, alt, vx, vy, vz; first six entries are the first ROW, next six entries are the second row, etc.). If unknown, assign NaN value to first element in the array.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_global_position_int_cov_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint8_t estimator_type,int32_t lat,int32_t lon,int32_t alt,int32_t relative_alt,float vx,float vy,float vz,const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_int32_t(buf, 20, relative_alt);
+    _mav_put_float(buf, 24, vx);
+    _mav_put_float(buf, 28, vy);
+    _mav_put_float(buf, 32, vz);
+    _mav_put_uint8_t(buf, 180, estimator_type);
+    _mav_put_float_array(buf, 36, covariance, 36);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN);
+#else
+    mavlink_global_position_int_cov_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.estimator_type = estimator_type;
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*36);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_CRC);
+}
+
+/**
+ * @brief Encode a global_position_int_cov struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param global_position_int_cov C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_global_position_int_cov_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_global_position_int_cov_t* global_position_int_cov)
+{
+    return mavlink_msg_global_position_int_cov_pack(system_id, component_id, msg, global_position_int_cov->time_usec, global_position_int_cov->estimator_type, global_position_int_cov->lat, global_position_int_cov->lon, global_position_int_cov->alt, global_position_int_cov->relative_alt, global_position_int_cov->vx, global_position_int_cov->vy, global_position_int_cov->vz, global_position_int_cov->covariance);
+}
+
+/**
+ * @brief Encode a global_position_int_cov struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param global_position_int_cov C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_global_position_int_cov_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_global_position_int_cov_t* global_position_int_cov)
+{
+    return mavlink_msg_global_position_int_cov_pack_chan(system_id, component_id, chan, msg, global_position_int_cov->time_usec, global_position_int_cov->estimator_type, global_position_int_cov->lat, global_position_int_cov->lon, global_position_int_cov->alt, global_position_int_cov->relative_alt, global_position_int_cov->vx, global_position_int_cov->vy, global_position_int_cov->vz, global_position_int_cov->covariance);
+}
+
+/**
+ * @brief Send a global_position_int_cov message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param estimator_type  Class id of the estimator this estimate originated from.
+ * @param lat [degE7] Latitude
+ * @param lon [degE7] Longitude
+ * @param alt [mm] Altitude in meters above MSL
+ * @param relative_alt [mm] Altitude above ground
+ * @param vx [m/s] Ground X Speed (Latitude)
+ * @param vy [m/s] Ground Y Speed (Longitude)
+ * @param vz [m/s] Ground Z Speed (Altitude)
+ * @param covariance  Row-major representation of a 6x6 position and velocity 6x6 cross-covariance matrix (states: lat, lon, alt, vx, vy, vz; first six entries are the first ROW, next six entries are the second row, etc.). If unknown, assign NaN value to first element in the array.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_global_position_int_cov_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t estimator_type, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, float vx, float vy, float vz, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_int32_t(buf, 20, relative_alt);
+    _mav_put_float(buf, 24, vx);
+    _mav_put_float(buf, 28, vy);
+    _mav_put_float(buf, 32, vz);
+    _mav_put_uint8_t(buf, 180, estimator_type);
+    _mav_put_float_array(buf, 36, covariance, 36);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV, buf, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_CRC);
+#else
+    mavlink_global_position_int_cov_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.relative_alt = relative_alt;
+    packet.vx = vx;
+    packet.vy = vy;
+    packet.vz = vz;
+    packet.estimator_type = estimator_type;
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*36);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV, (const char *)&packet, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_CRC);
+#endif
+}
+
+/**
+ * @brief Send a global_position_int_cov message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_global_position_int_cov_send_struct(mavlink_channel_t chan, const mavlink_global_position_int_cov_t* global_position_int_cov)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_global_position_int_cov_send(chan, global_position_int_cov->time_usec, global_position_int_cov->estimator_type, global_position_int_cov->lat, global_position_int_cov->lon, global_position_int_cov->alt, global_position_int_cov->relative_alt, global_position_int_cov->vx, global_position_int_cov->vy, global_position_int_cov->vz, global_position_int_cov->covariance);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV, (const char *)global_position_int_cov, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_global_position_int_cov_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint8_t estimator_type, int32_t lat, int32_t lon, int32_t alt, int32_t relative_alt, float vx, float vy, float vz, const float *covariance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_int32_t(buf, 20, relative_alt);
+    _mav_put_float(buf, 24, vx);
+    _mav_put_float(buf, 28, vy);
+    _mav_put_float(buf, 32, vz);
+    _mav_put_uint8_t(buf, 180, estimator_type);
+    _mav_put_float_array(buf, 36, covariance, 36);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV, buf, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_CRC);
+#else
+    mavlink_global_position_int_cov_t *packet = (mavlink_global_position_int_cov_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->relative_alt = relative_alt;
+    packet->vx = vx;
+    packet->vy = vy;
+    packet->vz = vz;
+    packet->estimator_type = estimator_type;
+    mav_array_memcpy(packet->covariance, covariance, sizeof(float)*36);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV, (const char *)packet, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GLOBAL_POSITION_INT_COV UNPACKING
+
+
+/**
+ * @brief Get field time_usec from global_position_int_cov message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_global_position_int_cov_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field estimator_type from global_position_int_cov message
+ *
+ * @return  Class id of the estimator this estimate originated from.
+ */
+static inline uint8_t mavlink_msg_global_position_int_cov_get_estimator_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  180);
+}
+
+/**
+ * @brief Get field lat from global_position_int_cov message
+ *
+ * @return [degE7] Latitude
+ */
+static inline int32_t mavlink_msg_global_position_int_cov_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field lon from global_position_int_cov message
+ *
+ * @return [degE7] Longitude
+ */
+static inline int32_t mavlink_msg_global_position_int_cov_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field alt from global_position_int_cov message
+ *
+ * @return [mm] Altitude in meters above MSL
+ */
+static inline int32_t mavlink_msg_global_position_int_cov_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field relative_alt from global_position_int_cov message
+ *
+ * @return [mm] Altitude above ground
+ */
+static inline int32_t mavlink_msg_global_position_int_cov_get_relative_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  20);
+}
+
+/**
+ * @brief Get field vx from global_position_int_cov message
+ *
+ * @return [m/s] Ground X Speed (Latitude)
+ */
+static inline float mavlink_msg_global_position_int_cov_get_vx(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field vy from global_position_int_cov message
+ *
+ * @return [m/s] Ground Y Speed (Longitude)
+ */
+static inline float mavlink_msg_global_position_int_cov_get_vy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field vz from global_position_int_cov message
+ *
+ * @return [m/s] Ground Z Speed (Altitude)
+ */
+static inline float mavlink_msg_global_position_int_cov_get_vz(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field covariance from global_position_int_cov message
+ *
+ * @return  Row-major representation of a 6x6 position and velocity 6x6 cross-covariance matrix (states: lat, lon, alt, vx, vy, vz; first six entries are the first ROW, next six entries are the second row, etc.). If unknown, assign NaN value to first element in the array.
+ */
+static inline uint16_t mavlink_msg_global_position_int_cov_get_covariance(const mavlink_message_t* msg, float *covariance)
+{
+    return _MAV_RETURN_float_array(msg, covariance, 36,  36);
+}
+
+/**
+ * @brief Decode a global_position_int_cov message into a struct
+ *
+ * @param msg The message to decode
+ * @param global_position_int_cov C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_global_position_int_cov_decode(const mavlink_message_t* msg, mavlink_global_position_int_cov_t* global_position_int_cov)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    global_position_int_cov->time_usec = mavlink_msg_global_position_int_cov_get_time_usec(msg);
+    global_position_int_cov->lat = mavlink_msg_global_position_int_cov_get_lat(msg);
+    global_position_int_cov->lon = mavlink_msg_global_position_int_cov_get_lon(msg);
+    global_position_int_cov->alt = mavlink_msg_global_position_int_cov_get_alt(msg);
+    global_position_int_cov->relative_alt = mavlink_msg_global_position_int_cov_get_relative_alt(msg);
+    global_position_int_cov->vx = mavlink_msg_global_position_int_cov_get_vx(msg);
+    global_position_int_cov->vy = mavlink_msg_global_position_int_cov_get_vy(msg);
+    global_position_int_cov->vz = mavlink_msg_global_position_int_cov_get_vz(msg);
+    mavlink_msg_global_position_int_cov_get_covariance(msg, global_position_int_cov->covariance);
+    global_position_int_cov->estimator_type = mavlink_msg_global_position_int_cov_get_estimator_type(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN? msg->len : MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN;
+        memset(global_position_int_cov, 0, MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV_LEN);
+    memcpy(global_position_int_cov, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 405 - 0
v2.0/common/mavlink_msg_global_vision_position_estimate.h

@@ -0,0 +1,405 @@
+#pragma once
+// MESSAGE GLOBAL_VISION_POSITION_ESTIMATE PACKING
+
+#define MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE 101
+
+
+typedef struct __mavlink_global_vision_position_estimate_t {
+ uint64_t usec; /*< [us] Timestamp (UNIX time or since system boot)*/
+ float x; /*< [m] Global X position*/
+ float y; /*< [m] Global Y position*/
+ float z; /*< [m] Global Z position*/
+ float roll; /*< [rad] Roll angle*/
+ float pitch; /*< [rad] Pitch angle*/
+ float yaw; /*< [rad] Yaw angle*/
+ float covariance[21]; /*<  Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x_global, y_global, z_global, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.*/
+ uint8_t reset_counter; /*<  Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.*/
+} mavlink_global_vision_position_estimate_t;
+
+#define MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN 117
+#define MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_MIN_LEN 32
+#define MAVLINK_MSG_ID_101_LEN 117
+#define MAVLINK_MSG_ID_101_MIN_LEN 32
+
+#define MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_CRC 102
+#define MAVLINK_MSG_ID_101_CRC 102
+
+#define MAVLINK_MSG_GLOBAL_VISION_POSITION_ESTIMATE_FIELD_COVARIANCE_LEN 21
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GLOBAL_VISION_POSITION_ESTIMATE { \
+    101, \
+    "GLOBAL_VISION_POSITION_ESTIMATE", \
+    9, \
+    {  { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_global_vision_position_estimate_t, usec) }, \
+         { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_global_vision_position_estimate_t, x) }, \
+         { "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_global_vision_position_estimate_t, y) }, \
+         { "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_global_vision_position_estimate_t, z) }, \
+         { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_global_vision_position_estimate_t, roll) }, \
+         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_global_vision_position_estimate_t, pitch) }, \
+         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_global_vision_position_estimate_t, yaw) }, \
+         { "covariance", NULL, MAVLINK_TYPE_FLOAT, 21, 32, offsetof(mavlink_global_vision_position_estimate_t, covariance) }, \
+         { "reset_counter", NULL, MAVLINK_TYPE_UINT8_T, 0, 116, offsetof(mavlink_global_vision_position_estimate_t, reset_counter) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GLOBAL_VISION_POSITION_ESTIMATE { \
+    "GLOBAL_VISION_POSITION_ESTIMATE", \
+    9, \
+    {  { "usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_global_vision_position_estimate_t, usec) }, \
+         { "x", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_global_vision_position_estimate_t, x) }, \
+         { "y", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_global_vision_position_estimate_t, y) }, \
+         { "z", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_global_vision_position_estimate_t, z) }, \
+         { "roll", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_global_vision_position_estimate_t, roll) }, \
+         { "pitch", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_global_vision_position_estimate_t, pitch) }, \
+         { "yaw", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_global_vision_position_estimate_t, yaw) }, \
+         { "covariance", NULL, MAVLINK_TYPE_FLOAT, 21, 32, offsetof(mavlink_global_vision_position_estimate_t, covariance) }, \
+         { "reset_counter", NULL, MAVLINK_TYPE_UINT8_T, 0, 116, offsetof(mavlink_global_vision_position_estimate_t, reset_counter) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a global_vision_position_estimate message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param usec [us] Timestamp (UNIX time or since system boot)
+ * @param x [m] Global X position
+ * @param y [m] Global Y position
+ * @param z [m] Global Z position
+ * @param roll [rad] Roll angle
+ * @param pitch [rad] Pitch angle
+ * @param yaw [rad] Yaw angle
+ * @param covariance  Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x_global, y_global, z_global, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.
+ * @param reset_counter  Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_global_vision_position_estimate_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw, const float *covariance, uint8_t reset_counter)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN];
+    _mav_put_uint64_t(buf, 0, usec);
+    _mav_put_float(buf, 8, x);
+    _mav_put_float(buf, 12, y);
+    _mav_put_float(buf, 16, z);
+    _mav_put_float(buf, 20, roll);
+    _mav_put_float(buf, 24, pitch);
+    _mav_put_float(buf, 28, yaw);
+    _mav_put_uint8_t(buf, 116, reset_counter);
+    _mav_put_float_array(buf, 32, covariance, 21);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN);
+#else
+    mavlink_global_vision_position_estimate_t packet;
+    packet.usec = usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.reset_counter = reset_counter;
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*21);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_CRC);
+}
+
+/**
+ * @brief Pack a global_vision_position_estimate message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param usec [us] Timestamp (UNIX time or since system boot)
+ * @param x [m] Global X position
+ * @param y [m] Global Y position
+ * @param z [m] Global Z position
+ * @param roll [rad] Roll angle
+ * @param pitch [rad] Pitch angle
+ * @param yaw [rad] Yaw angle
+ * @param covariance  Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x_global, y_global, z_global, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.
+ * @param reset_counter  Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_global_vision_position_estimate_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t usec,float x,float y,float z,float roll,float pitch,float yaw,const float *covariance,uint8_t reset_counter)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN];
+    _mav_put_uint64_t(buf, 0, usec);
+    _mav_put_float(buf, 8, x);
+    _mav_put_float(buf, 12, y);
+    _mav_put_float(buf, 16, z);
+    _mav_put_float(buf, 20, roll);
+    _mav_put_float(buf, 24, pitch);
+    _mav_put_float(buf, 28, yaw);
+    _mav_put_uint8_t(buf, 116, reset_counter);
+    _mav_put_float_array(buf, 32, covariance, 21);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN);
+#else
+    mavlink_global_vision_position_estimate_t packet;
+    packet.usec = usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.reset_counter = reset_counter;
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*21);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_CRC);
+}
+
+/**
+ * @brief Encode a global_vision_position_estimate struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param global_vision_position_estimate C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_global_vision_position_estimate_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_global_vision_position_estimate_t* global_vision_position_estimate)
+{
+    return mavlink_msg_global_vision_position_estimate_pack(system_id, component_id, msg, global_vision_position_estimate->usec, global_vision_position_estimate->x, global_vision_position_estimate->y, global_vision_position_estimate->z, global_vision_position_estimate->roll, global_vision_position_estimate->pitch, global_vision_position_estimate->yaw, global_vision_position_estimate->covariance, global_vision_position_estimate->reset_counter);
+}
+
+/**
+ * @brief Encode a global_vision_position_estimate struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param global_vision_position_estimate C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_global_vision_position_estimate_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_global_vision_position_estimate_t* global_vision_position_estimate)
+{
+    return mavlink_msg_global_vision_position_estimate_pack_chan(system_id, component_id, chan, msg, global_vision_position_estimate->usec, global_vision_position_estimate->x, global_vision_position_estimate->y, global_vision_position_estimate->z, global_vision_position_estimate->roll, global_vision_position_estimate->pitch, global_vision_position_estimate->yaw, global_vision_position_estimate->covariance, global_vision_position_estimate->reset_counter);
+}
+
+/**
+ * @brief Send a global_vision_position_estimate message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param usec [us] Timestamp (UNIX time or since system boot)
+ * @param x [m] Global X position
+ * @param y [m] Global Y position
+ * @param z [m] Global Z position
+ * @param roll [rad] Roll angle
+ * @param pitch [rad] Pitch angle
+ * @param yaw [rad] Yaw angle
+ * @param covariance  Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x_global, y_global, z_global, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.
+ * @param reset_counter  Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_global_vision_position_estimate_send(mavlink_channel_t chan, uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw, const float *covariance, uint8_t reset_counter)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN];
+    _mav_put_uint64_t(buf, 0, usec);
+    _mav_put_float(buf, 8, x);
+    _mav_put_float(buf, 12, y);
+    _mav_put_float(buf, 16, z);
+    _mav_put_float(buf, 20, roll);
+    _mav_put_float(buf, 24, pitch);
+    _mav_put_float(buf, 28, yaw);
+    _mav_put_uint8_t(buf, 116, reset_counter);
+    _mav_put_float_array(buf, 32, covariance, 21);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE, buf, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_CRC);
+#else
+    mavlink_global_vision_position_estimate_t packet;
+    packet.usec = usec;
+    packet.x = x;
+    packet.y = y;
+    packet.z = z;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.yaw = yaw;
+    packet.reset_counter = reset_counter;
+    mav_array_memcpy(packet.covariance, covariance, sizeof(float)*21);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE, (const char *)&packet, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a global_vision_position_estimate message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_global_vision_position_estimate_send_struct(mavlink_channel_t chan, const mavlink_global_vision_position_estimate_t* global_vision_position_estimate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_global_vision_position_estimate_send(chan, global_vision_position_estimate->usec, global_vision_position_estimate->x, global_vision_position_estimate->y, global_vision_position_estimate->z, global_vision_position_estimate->roll, global_vision_position_estimate->pitch, global_vision_position_estimate->yaw, global_vision_position_estimate->covariance, global_vision_position_estimate->reset_counter);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE, (const char *)global_vision_position_estimate, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_global_vision_position_estimate_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t usec, float x, float y, float z, float roll, float pitch, float yaw, const float *covariance, uint8_t reset_counter)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, usec);
+    _mav_put_float(buf, 8, x);
+    _mav_put_float(buf, 12, y);
+    _mav_put_float(buf, 16, z);
+    _mav_put_float(buf, 20, roll);
+    _mav_put_float(buf, 24, pitch);
+    _mav_put_float(buf, 28, yaw);
+    _mav_put_uint8_t(buf, 116, reset_counter);
+    _mav_put_float_array(buf, 32, covariance, 21);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE, buf, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_CRC);
+#else
+    mavlink_global_vision_position_estimate_t *packet = (mavlink_global_vision_position_estimate_t *)msgbuf;
+    packet->usec = usec;
+    packet->x = x;
+    packet->y = y;
+    packet->z = z;
+    packet->roll = roll;
+    packet->pitch = pitch;
+    packet->yaw = yaw;
+    packet->reset_counter = reset_counter;
+    mav_array_memcpy(packet->covariance, covariance, sizeof(float)*21);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE, (const char *)packet, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_MIN_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GLOBAL_VISION_POSITION_ESTIMATE UNPACKING
+
+
+/**
+ * @brief Get field usec from global_vision_position_estimate message
+ *
+ * @return [us] Timestamp (UNIX time or since system boot)
+ */
+static inline uint64_t mavlink_msg_global_vision_position_estimate_get_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field x from global_vision_position_estimate message
+ *
+ * @return [m] Global X position
+ */
+static inline float mavlink_msg_global_vision_position_estimate_get_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field y from global_vision_position_estimate message
+ *
+ * @return [m] Global Y position
+ */
+static inline float mavlink_msg_global_vision_position_estimate_get_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field z from global_vision_position_estimate message
+ *
+ * @return [m] Global Z position
+ */
+static inline float mavlink_msg_global_vision_position_estimate_get_z(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field roll from global_vision_position_estimate message
+ *
+ * @return [rad] Roll angle
+ */
+static inline float mavlink_msg_global_vision_position_estimate_get_roll(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field pitch from global_vision_position_estimate message
+ *
+ * @return [rad] Pitch angle
+ */
+static inline float mavlink_msg_global_vision_position_estimate_get_pitch(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field yaw from global_vision_position_estimate message
+ *
+ * @return [rad] Yaw angle
+ */
+static inline float mavlink_msg_global_vision_position_estimate_get_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field covariance from global_vision_position_estimate message
+ *
+ * @return  Row-major representation of pose 6x6 cross-covariance matrix upper right triangle (states: x_global, y_global, z_global, roll, pitch, yaw; first six entries are the first ROW, next five entries are the second ROW, etc.). If unknown, assign NaN value to first element in the array.
+ */
+static inline uint16_t mavlink_msg_global_vision_position_estimate_get_covariance(const mavlink_message_t* msg, float *covariance)
+{
+    return _MAV_RETURN_float_array(msg, covariance, 21,  32);
+}
+
+/**
+ * @brief Get field reset_counter from global_vision_position_estimate message
+ *
+ * @return  Estimate reset counter. This should be incremented when the estimate resets in any of the dimensions (position, velocity, attitude, angular speed). This is designed to be used when e.g an external SLAM system detects a loop-closure and the estimate jumps.
+ */
+static inline uint8_t mavlink_msg_global_vision_position_estimate_get_reset_counter(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  116);
+}
+
+/**
+ * @brief Decode a global_vision_position_estimate message into a struct
+ *
+ * @param msg The message to decode
+ * @param global_vision_position_estimate C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_global_vision_position_estimate_decode(const mavlink_message_t* msg, mavlink_global_vision_position_estimate_t* global_vision_position_estimate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    global_vision_position_estimate->usec = mavlink_msg_global_vision_position_estimate_get_usec(msg);
+    global_vision_position_estimate->x = mavlink_msg_global_vision_position_estimate_get_x(msg);
+    global_vision_position_estimate->y = mavlink_msg_global_vision_position_estimate_get_y(msg);
+    global_vision_position_estimate->z = mavlink_msg_global_vision_position_estimate_get_z(msg);
+    global_vision_position_estimate->roll = mavlink_msg_global_vision_position_estimate_get_roll(msg);
+    global_vision_position_estimate->pitch = mavlink_msg_global_vision_position_estimate_get_pitch(msg);
+    global_vision_position_estimate->yaw = mavlink_msg_global_vision_position_estimate_get_yaw(msg);
+    mavlink_msg_global_vision_position_estimate_get_covariance(msg, global_vision_position_estimate->covariance);
+    global_vision_position_estimate->reset_counter = mavlink_msg_global_vision_position_estimate_get_reset_counter(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN? msg->len : MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN;
+        memset(global_vision_position_estimate, 0, MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN);
+    memcpy(global_vision_position_estimate, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 638 - 0
v2.0/common/mavlink_msg_gps2_raw.h

@@ -0,0 +1,638 @@
+#pragma once
+// MESSAGE GPS2_RAW PACKING
+
+#define MAVLINK_MSG_ID_GPS2_RAW 124
+
+MAVPACKED(
+typedef struct __mavlink_gps2_raw_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ int32_t lat; /*< [degE7] Latitude (WGS84)*/
+ int32_t lon; /*< [degE7] Longitude (WGS84)*/
+ int32_t alt; /*< [mm] Altitude (MSL). Positive for up.*/
+ uint32_t dgps_age; /*< [ms] Age of DGPS info*/
+ uint16_t eph; /*<  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
+ uint16_t epv; /*<  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
+ uint16_t vel; /*< [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX*/
+ uint16_t cog; /*< [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX*/
+ uint8_t fix_type; /*<  GPS fix type.*/
+ uint8_t satellites_visible; /*<  Number of satellites visible. If unknown, set to UINT8_MAX*/
+ uint8_t dgps_numch; /*<  Number of DGPS satellites*/
+ uint16_t yaw; /*< [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.*/
+ int32_t alt_ellipsoid; /*< [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.*/
+ uint32_t h_acc; /*< [mm] Position uncertainty.*/
+ uint32_t v_acc; /*< [mm] Altitude uncertainty.*/
+ uint32_t vel_acc; /*< [mm] Speed uncertainty.*/
+ uint32_t hdg_acc; /*< [degE5] Heading / track uncertainty*/
+}) mavlink_gps2_raw_t;
+
+#define MAVLINK_MSG_ID_GPS2_RAW_LEN 57
+#define MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN 35
+#define MAVLINK_MSG_ID_124_LEN 57
+#define MAVLINK_MSG_ID_124_MIN_LEN 35
+
+#define MAVLINK_MSG_ID_GPS2_RAW_CRC 87
+#define MAVLINK_MSG_ID_124_CRC 87
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS2_RAW { \
+    124, \
+    "GPS2_RAW", \
+    18, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps2_raw_t, time_usec) }, \
+         { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gps2_raw_t, fix_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps2_raw_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps2_raw_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps2_raw_t, alt) }, \
+         { "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_gps2_raw_t, eph) }, \
+         { "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_gps2_raw_t, epv) }, \
+         { "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gps2_raw_t, vel) }, \
+         { "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 30, offsetof(mavlink_gps2_raw_t, cog) }, \
+         { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gps2_raw_t, satellites_visible) }, \
+         { "dgps_numch", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gps2_raw_t, dgps_numch) }, \
+         { "dgps_age", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_gps2_raw_t, dgps_age) }, \
+         { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 35, offsetof(mavlink_gps2_raw_t, yaw) }, \
+         { "alt_ellipsoid", NULL, MAVLINK_TYPE_INT32_T, 0, 37, offsetof(mavlink_gps2_raw_t, alt_ellipsoid) }, \
+         { "h_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 41, offsetof(mavlink_gps2_raw_t, h_acc) }, \
+         { "v_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 45, offsetof(mavlink_gps2_raw_t, v_acc) }, \
+         { "vel_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 49, offsetof(mavlink_gps2_raw_t, vel_acc) }, \
+         { "hdg_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 53, offsetof(mavlink_gps2_raw_t, hdg_acc) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS2_RAW { \
+    "GPS2_RAW", \
+    18, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps2_raw_t, time_usec) }, \
+         { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gps2_raw_t, fix_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps2_raw_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps2_raw_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps2_raw_t, alt) }, \
+         { "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_gps2_raw_t, eph) }, \
+         { "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_gps2_raw_t, epv) }, \
+         { "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gps2_raw_t, vel) }, \
+         { "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 30, offsetof(mavlink_gps2_raw_t, cog) }, \
+         { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gps2_raw_t, satellites_visible) }, \
+         { "dgps_numch", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gps2_raw_t, dgps_numch) }, \
+         { "dgps_age", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_gps2_raw_t, dgps_age) }, \
+         { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 35, offsetof(mavlink_gps2_raw_t, yaw) }, \
+         { "alt_ellipsoid", NULL, MAVLINK_TYPE_INT32_T, 0, 37, offsetof(mavlink_gps2_raw_t, alt_ellipsoid) }, \
+         { "h_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 41, offsetof(mavlink_gps2_raw_t, h_acc) }, \
+         { "v_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 45, offsetof(mavlink_gps2_raw_t, v_acc) }, \
+         { "vel_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 49, offsetof(mavlink_gps2_raw_t, vel_acc) }, \
+         { "hdg_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 53, offsetof(mavlink_gps2_raw_t, hdg_acc) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps2_raw message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  GPS fix type.
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [mm] Altitude (MSL). Positive for up.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param dgps_numch  Number of DGPS satellites
+ * @param dgps_age [ms] Age of DGPS info
+ * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
+ * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
+ * @param h_acc [mm] Position uncertainty.
+ * @param v_acc [mm] Altitude uncertainty.
+ * @param vel_acc [mm] Speed uncertainty.
+ * @param hdg_acc [degE5] Heading / track uncertainty
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps2_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, uint8_t dgps_numch, uint32_t dgps_age, uint16_t yaw, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS2_RAW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint32_t(buf, 20, dgps_age);
+    _mav_put_uint16_t(buf, 24, eph);
+    _mav_put_uint16_t(buf, 26, epv);
+    _mav_put_uint16_t(buf, 28, vel);
+    _mav_put_uint16_t(buf, 30, cog);
+    _mav_put_uint8_t(buf, 32, fix_type);
+    _mav_put_uint8_t(buf, 33, satellites_visible);
+    _mav_put_uint8_t(buf, 34, dgps_numch);
+    _mav_put_uint16_t(buf, 35, yaw);
+    _mav_put_int32_t(buf, 37, alt_ellipsoid);
+    _mav_put_uint32_t(buf, 41, h_acc);
+    _mav_put_uint32_t(buf, 45, v_acc);
+    _mav_put_uint32_t(buf, 49, vel_acc);
+    _mav_put_uint32_t(buf, 53, hdg_acc);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS2_RAW_LEN);
+#else
+    mavlink_gps2_raw_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.dgps_age = dgps_age;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.dgps_numch = dgps_numch;
+    packet.yaw = yaw;
+    packet.alt_ellipsoid = alt_ellipsoid;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_acc = vel_acc;
+    packet.hdg_acc = hdg_acc;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS2_RAW_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS2_RAW;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
+}
+
+/**
+ * @brief Pack a gps2_raw message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  GPS fix type.
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [mm] Altitude (MSL). Positive for up.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param dgps_numch  Number of DGPS satellites
+ * @param dgps_age [ms] Age of DGPS info
+ * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
+ * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
+ * @param h_acc [mm] Position uncertainty.
+ * @param v_acc [mm] Altitude uncertainty.
+ * @param vel_acc [mm] Speed uncertainty.
+ * @param hdg_acc [degE5] Heading / track uncertainty
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps2_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint8_t fix_type,int32_t lat,int32_t lon,int32_t alt,uint16_t eph,uint16_t epv,uint16_t vel,uint16_t cog,uint8_t satellites_visible,uint8_t dgps_numch,uint32_t dgps_age,uint16_t yaw,int32_t alt_ellipsoid,uint32_t h_acc,uint32_t v_acc,uint32_t vel_acc,uint32_t hdg_acc)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS2_RAW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint32_t(buf, 20, dgps_age);
+    _mav_put_uint16_t(buf, 24, eph);
+    _mav_put_uint16_t(buf, 26, epv);
+    _mav_put_uint16_t(buf, 28, vel);
+    _mav_put_uint16_t(buf, 30, cog);
+    _mav_put_uint8_t(buf, 32, fix_type);
+    _mav_put_uint8_t(buf, 33, satellites_visible);
+    _mav_put_uint8_t(buf, 34, dgps_numch);
+    _mav_put_uint16_t(buf, 35, yaw);
+    _mav_put_int32_t(buf, 37, alt_ellipsoid);
+    _mav_put_uint32_t(buf, 41, h_acc);
+    _mav_put_uint32_t(buf, 45, v_acc);
+    _mav_put_uint32_t(buf, 49, vel_acc);
+    _mav_put_uint32_t(buf, 53, hdg_acc);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS2_RAW_LEN);
+#else
+    mavlink_gps2_raw_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.dgps_age = dgps_age;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.dgps_numch = dgps_numch;
+    packet.yaw = yaw;
+    packet.alt_ellipsoid = alt_ellipsoid;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_acc = vel_acc;
+    packet.hdg_acc = hdg_acc;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS2_RAW_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS2_RAW;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
+}
+
+/**
+ * @brief Encode a gps2_raw struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps2_raw C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps2_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps2_raw_t* gps2_raw)
+{
+    return mavlink_msg_gps2_raw_pack(system_id, component_id, msg, gps2_raw->time_usec, gps2_raw->fix_type, gps2_raw->lat, gps2_raw->lon, gps2_raw->alt, gps2_raw->eph, gps2_raw->epv, gps2_raw->vel, gps2_raw->cog, gps2_raw->satellites_visible, gps2_raw->dgps_numch, gps2_raw->dgps_age, gps2_raw->yaw, gps2_raw->alt_ellipsoid, gps2_raw->h_acc, gps2_raw->v_acc, gps2_raw->vel_acc, gps2_raw->hdg_acc);
+}
+
+/**
+ * @brief Encode a gps2_raw struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps2_raw C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps2_raw_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps2_raw_t* gps2_raw)
+{
+    return mavlink_msg_gps2_raw_pack_chan(system_id, component_id, chan, msg, gps2_raw->time_usec, gps2_raw->fix_type, gps2_raw->lat, gps2_raw->lon, gps2_raw->alt, gps2_raw->eph, gps2_raw->epv, gps2_raw->vel, gps2_raw->cog, gps2_raw->satellites_visible, gps2_raw->dgps_numch, gps2_raw->dgps_age, gps2_raw->yaw, gps2_raw->alt_ellipsoid, gps2_raw->h_acc, gps2_raw->v_acc, gps2_raw->vel_acc, gps2_raw->hdg_acc);
+}
+
+/**
+ * @brief Send a gps2_raw message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  GPS fix type.
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [mm] Altitude (MSL). Positive for up.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param dgps_numch  Number of DGPS satellites
+ * @param dgps_age [ms] Age of DGPS info
+ * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
+ * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
+ * @param h_acc [mm] Position uncertainty.
+ * @param v_acc [mm] Altitude uncertainty.
+ * @param vel_acc [mm] Speed uncertainty.
+ * @param hdg_acc [degE5] Heading / track uncertainty
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps2_raw_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, uint8_t dgps_numch, uint32_t dgps_age, uint16_t yaw, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS2_RAW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint32_t(buf, 20, dgps_age);
+    _mav_put_uint16_t(buf, 24, eph);
+    _mav_put_uint16_t(buf, 26, epv);
+    _mav_put_uint16_t(buf, 28, vel);
+    _mav_put_uint16_t(buf, 30, cog);
+    _mav_put_uint8_t(buf, 32, fix_type);
+    _mav_put_uint8_t(buf, 33, satellites_visible);
+    _mav_put_uint8_t(buf, 34, dgps_numch);
+    _mav_put_uint16_t(buf, 35, yaw);
+    _mav_put_int32_t(buf, 37, alt_ellipsoid);
+    _mav_put_uint32_t(buf, 41, h_acc);
+    _mav_put_uint32_t(buf, 45, v_acc);
+    _mav_put_uint32_t(buf, 49, vel_acc);
+    _mav_put_uint32_t(buf, 53, hdg_acc);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, buf, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
+#else
+    mavlink_gps2_raw_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.dgps_age = dgps_age;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.dgps_numch = dgps_numch;
+    packet.yaw = yaw;
+    packet.alt_ellipsoid = alt_ellipsoid;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_acc = vel_acc;
+    packet.hdg_acc = hdg_acc;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, (const char *)&packet, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps2_raw message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps2_raw_send_struct(mavlink_channel_t chan, const mavlink_gps2_raw_t* gps2_raw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps2_raw_send(chan, gps2_raw->time_usec, gps2_raw->fix_type, gps2_raw->lat, gps2_raw->lon, gps2_raw->alt, gps2_raw->eph, gps2_raw->epv, gps2_raw->vel, gps2_raw->cog, gps2_raw->satellites_visible, gps2_raw->dgps_numch, gps2_raw->dgps_age, gps2_raw->yaw, gps2_raw->alt_ellipsoid, gps2_raw->h_acc, gps2_raw->v_acc, gps2_raw->vel_acc, gps2_raw->hdg_acc);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, (const char *)gps2_raw, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS2_RAW_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps2_raw_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, uint8_t dgps_numch, uint32_t dgps_age, uint16_t yaw, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint32_t(buf, 20, dgps_age);
+    _mav_put_uint16_t(buf, 24, eph);
+    _mav_put_uint16_t(buf, 26, epv);
+    _mav_put_uint16_t(buf, 28, vel);
+    _mav_put_uint16_t(buf, 30, cog);
+    _mav_put_uint8_t(buf, 32, fix_type);
+    _mav_put_uint8_t(buf, 33, satellites_visible);
+    _mav_put_uint8_t(buf, 34, dgps_numch);
+    _mav_put_uint16_t(buf, 35, yaw);
+    _mav_put_int32_t(buf, 37, alt_ellipsoid);
+    _mav_put_uint32_t(buf, 41, h_acc);
+    _mav_put_uint32_t(buf, 45, v_acc);
+    _mav_put_uint32_t(buf, 49, vel_acc);
+    _mav_put_uint32_t(buf, 53, hdg_acc);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, buf, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
+#else
+    mavlink_gps2_raw_t *packet = (mavlink_gps2_raw_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->dgps_age = dgps_age;
+    packet->eph = eph;
+    packet->epv = epv;
+    packet->vel = vel;
+    packet->cog = cog;
+    packet->fix_type = fix_type;
+    packet->satellites_visible = satellites_visible;
+    packet->dgps_numch = dgps_numch;
+    packet->yaw = yaw;
+    packet->alt_ellipsoid = alt_ellipsoid;
+    packet->h_acc = h_acc;
+    packet->v_acc = v_acc;
+    packet->vel_acc = vel_acc;
+    packet->hdg_acc = hdg_acc;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, (const char *)packet, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS2_RAW UNPACKING
+
+
+/**
+ * @brief Get field time_usec from gps2_raw message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_gps2_raw_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field fix_type from gps2_raw message
+ *
+ * @return  GPS fix type.
+ */
+static inline uint8_t mavlink_msg_gps2_raw_get_fix_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field lat from gps2_raw message
+ *
+ * @return [degE7] Latitude (WGS84)
+ */
+static inline int32_t mavlink_msg_gps2_raw_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field lon from gps2_raw message
+ *
+ * @return [degE7] Longitude (WGS84)
+ */
+static inline int32_t mavlink_msg_gps2_raw_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field alt from gps2_raw message
+ *
+ * @return [mm] Altitude (MSL). Positive for up.
+ */
+static inline int32_t mavlink_msg_gps2_raw_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field eph from gps2_raw message
+ *
+ * @return  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_gps2_raw_get_eph(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Get field epv from gps2_raw message
+ *
+ * @return  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_gps2_raw_get_epv(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  26);
+}
+
+/**
+ * @brief Get field vel from gps2_raw message
+ *
+ * @return [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_gps2_raw_get_vel(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  28);
+}
+
+/**
+ * @brief Get field cog from gps2_raw message
+ *
+ * @return [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_gps2_raw_get_cog(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  30);
+}
+
+/**
+ * @brief Get field satellites_visible from gps2_raw message
+ *
+ * @return  Number of satellites visible. If unknown, set to UINT8_MAX
+ */
+static inline uint8_t mavlink_msg_gps2_raw_get_satellites_visible(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field dgps_numch from gps2_raw message
+ *
+ * @return  Number of DGPS satellites
+ */
+static inline uint8_t mavlink_msg_gps2_raw_get_dgps_numch(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field dgps_age from gps2_raw message
+ *
+ * @return [ms] Age of DGPS info
+ */
+static inline uint32_t mavlink_msg_gps2_raw_get_dgps_age(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  20);
+}
+
+/**
+ * @brief Get field yaw from gps2_raw message
+ *
+ * @return [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
+ */
+static inline uint16_t mavlink_msg_gps2_raw_get_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  35);
+}
+
+/**
+ * @brief Get field alt_ellipsoid from gps2_raw message
+ *
+ * @return [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
+ */
+static inline int32_t mavlink_msg_gps2_raw_get_alt_ellipsoid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  37);
+}
+
+/**
+ * @brief Get field h_acc from gps2_raw message
+ *
+ * @return [mm] Position uncertainty.
+ */
+static inline uint32_t mavlink_msg_gps2_raw_get_h_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  41);
+}
+
+/**
+ * @brief Get field v_acc from gps2_raw message
+ *
+ * @return [mm] Altitude uncertainty.
+ */
+static inline uint32_t mavlink_msg_gps2_raw_get_v_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  45);
+}
+
+/**
+ * @brief Get field vel_acc from gps2_raw message
+ *
+ * @return [mm] Speed uncertainty.
+ */
+static inline uint32_t mavlink_msg_gps2_raw_get_vel_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  49);
+}
+
+/**
+ * @brief Get field hdg_acc from gps2_raw message
+ *
+ * @return [degE5] Heading / track uncertainty
+ */
+static inline uint32_t mavlink_msg_gps2_raw_get_hdg_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  53);
+}
+
+/**
+ * @brief Decode a gps2_raw message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps2_raw C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps2_raw_decode(const mavlink_message_t* msg, mavlink_gps2_raw_t* gps2_raw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps2_raw->time_usec = mavlink_msg_gps2_raw_get_time_usec(msg);
+    gps2_raw->lat = mavlink_msg_gps2_raw_get_lat(msg);
+    gps2_raw->lon = mavlink_msg_gps2_raw_get_lon(msg);
+    gps2_raw->alt = mavlink_msg_gps2_raw_get_alt(msg);
+    gps2_raw->dgps_age = mavlink_msg_gps2_raw_get_dgps_age(msg);
+    gps2_raw->eph = mavlink_msg_gps2_raw_get_eph(msg);
+    gps2_raw->epv = mavlink_msg_gps2_raw_get_epv(msg);
+    gps2_raw->vel = mavlink_msg_gps2_raw_get_vel(msg);
+    gps2_raw->cog = mavlink_msg_gps2_raw_get_cog(msg);
+    gps2_raw->fix_type = mavlink_msg_gps2_raw_get_fix_type(msg);
+    gps2_raw->satellites_visible = mavlink_msg_gps2_raw_get_satellites_visible(msg);
+    gps2_raw->dgps_numch = mavlink_msg_gps2_raw_get_dgps_numch(msg);
+    gps2_raw->yaw = mavlink_msg_gps2_raw_get_yaw(msg);
+    gps2_raw->alt_ellipsoid = mavlink_msg_gps2_raw_get_alt_ellipsoid(msg);
+    gps2_raw->h_acc = mavlink_msg_gps2_raw_get_h_acc(msg);
+    gps2_raw->v_acc = mavlink_msg_gps2_raw_get_v_acc(msg);
+    gps2_raw->vel_acc = mavlink_msg_gps2_raw_get_vel_acc(msg);
+    gps2_raw->hdg_acc = mavlink_msg_gps2_raw_get_hdg_acc(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS2_RAW_LEN? msg->len : MAVLINK_MSG_ID_GPS2_RAW_LEN;
+        memset(gps2_raw, 0, MAVLINK_MSG_ID_GPS2_RAW_LEN);
+    memcpy(gps2_raw, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 513 - 0
v2.0/common/mavlink_msg_gps2_rtk.h

@@ -0,0 +1,513 @@
+#pragma once
+// MESSAGE GPS2_RTK PACKING
+
+#define MAVLINK_MSG_ID_GPS2_RTK 128
+
+
+typedef struct __mavlink_gps2_rtk_t {
+ uint32_t time_last_baseline_ms; /*< [ms] Time since boot of last baseline message received.*/
+ uint32_t tow; /*< [ms] GPS Time of Week of last baseline*/
+ int32_t baseline_a_mm; /*< [mm] Current baseline in ECEF x or NED north component.*/
+ int32_t baseline_b_mm; /*< [mm] Current baseline in ECEF y or NED east component.*/
+ int32_t baseline_c_mm; /*< [mm] Current baseline in ECEF z or NED down component.*/
+ uint32_t accuracy; /*<  Current estimate of baseline accuracy.*/
+ int32_t iar_num_hypotheses; /*<  Current number of integer ambiguity hypotheses.*/
+ uint16_t wn; /*<  GPS Week Number of last baseline*/
+ uint8_t rtk_receiver_id; /*<  Identification of connected RTK receiver.*/
+ uint8_t rtk_health; /*<  GPS-specific health report for RTK data.*/
+ uint8_t rtk_rate; /*< [Hz] Rate of baseline messages being received by GPS*/
+ uint8_t nsats; /*<  Current number of sats used for RTK calculation.*/
+ uint8_t baseline_coords_type; /*<  Coordinate system of baseline*/
+} mavlink_gps2_rtk_t;
+
+#define MAVLINK_MSG_ID_GPS2_RTK_LEN 35
+#define MAVLINK_MSG_ID_GPS2_RTK_MIN_LEN 35
+#define MAVLINK_MSG_ID_128_LEN 35
+#define MAVLINK_MSG_ID_128_MIN_LEN 35
+
+#define MAVLINK_MSG_ID_GPS2_RTK_CRC 226
+#define MAVLINK_MSG_ID_128_CRC 226
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS2_RTK { \
+    128, \
+    "GPS2_RTK", \
+    13, \
+    {  { "time_last_baseline_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gps2_rtk_t, time_last_baseline_ms) }, \
+         { "rtk_receiver_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_gps2_rtk_t, rtk_receiver_id) }, \
+         { "wn", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gps2_rtk_t, wn) }, \
+         { "tow", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_gps2_rtk_t, tow) }, \
+         { "rtk_health", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_gps2_rtk_t, rtk_health) }, \
+         { "rtk_rate", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gps2_rtk_t, rtk_rate) }, \
+         { "nsats", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gps2_rtk_t, nsats) }, \
+         { "baseline_coords_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gps2_rtk_t, baseline_coords_type) }, \
+         { "baseline_a_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps2_rtk_t, baseline_a_mm) }, \
+         { "baseline_b_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps2_rtk_t, baseline_b_mm) }, \
+         { "baseline_c_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps2_rtk_t, baseline_c_mm) }, \
+         { "accuracy", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_gps2_rtk_t, accuracy) }, \
+         { "iar_num_hypotheses", NULL, MAVLINK_TYPE_INT32_T, 0, 24, offsetof(mavlink_gps2_rtk_t, iar_num_hypotheses) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS2_RTK { \
+    "GPS2_RTK", \
+    13, \
+    {  { "time_last_baseline_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gps2_rtk_t, time_last_baseline_ms) }, \
+         { "rtk_receiver_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_gps2_rtk_t, rtk_receiver_id) }, \
+         { "wn", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gps2_rtk_t, wn) }, \
+         { "tow", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_gps2_rtk_t, tow) }, \
+         { "rtk_health", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_gps2_rtk_t, rtk_health) }, \
+         { "rtk_rate", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gps2_rtk_t, rtk_rate) }, \
+         { "nsats", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gps2_rtk_t, nsats) }, \
+         { "baseline_coords_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gps2_rtk_t, baseline_coords_type) }, \
+         { "baseline_a_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps2_rtk_t, baseline_a_mm) }, \
+         { "baseline_b_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps2_rtk_t, baseline_b_mm) }, \
+         { "baseline_c_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps2_rtk_t, baseline_c_mm) }, \
+         { "accuracy", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_gps2_rtk_t, accuracy) }, \
+         { "iar_num_hypotheses", NULL, MAVLINK_TYPE_INT32_T, 0, 24, offsetof(mavlink_gps2_rtk_t, iar_num_hypotheses) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps2_rtk message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_last_baseline_ms [ms] Time since boot of last baseline message received.
+ * @param rtk_receiver_id  Identification of connected RTK receiver.
+ * @param wn  GPS Week Number of last baseline
+ * @param tow [ms] GPS Time of Week of last baseline
+ * @param rtk_health  GPS-specific health report for RTK data.
+ * @param rtk_rate [Hz] Rate of baseline messages being received by GPS
+ * @param nsats  Current number of sats used for RTK calculation.
+ * @param baseline_coords_type  Coordinate system of baseline
+ * @param baseline_a_mm [mm] Current baseline in ECEF x or NED north component.
+ * @param baseline_b_mm [mm] Current baseline in ECEF y or NED east component.
+ * @param baseline_c_mm [mm] Current baseline in ECEF z or NED down component.
+ * @param accuracy  Current estimate of baseline accuracy.
+ * @param iar_num_hypotheses  Current number of integer ambiguity hypotheses.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps2_rtk_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_last_baseline_ms, uint8_t rtk_receiver_id, uint16_t wn, uint32_t tow, uint8_t rtk_health, uint8_t rtk_rate, uint8_t nsats, uint8_t baseline_coords_type, int32_t baseline_a_mm, int32_t baseline_b_mm, int32_t baseline_c_mm, uint32_t accuracy, int32_t iar_num_hypotheses)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS2_RTK_LEN];
+    _mav_put_uint32_t(buf, 0, time_last_baseline_ms);
+    _mav_put_uint32_t(buf, 4, tow);
+    _mav_put_int32_t(buf, 8, baseline_a_mm);
+    _mav_put_int32_t(buf, 12, baseline_b_mm);
+    _mav_put_int32_t(buf, 16, baseline_c_mm);
+    _mav_put_uint32_t(buf, 20, accuracy);
+    _mav_put_int32_t(buf, 24, iar_num_hypotheses);
+    _mav_put_uint16_t(buf, 28, wn);
+    _mav_put_uint8_t(buf, 30, rtk_receiver_id);
+    _mav_put_uint8_t(buf, 31, rtk_health);
+    _mav_put_uint8_t(buf, 32, rtk_rate);
+    _mav_put_uint8_t(buf, 33, nsats);
+    _mav_put_uint8_t(buf, 34, baseline_coords_type);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS2_RTK_LEN);
+#else
+    mavlink_gps2_rtk_t packet;
+    packet.time_last_baseline_ms = time_last_baseline_ms;
+    packet.tow = tow;
+    packet.baseline_a_mm = baseline_a_mm;
+    packet.baseline_b_mm = baseline_b_mm;
+    packet.baseline_c_mm = baseline_c_mm;
+    packet.accuracy = accuracy;
+    packet.iar_num_hypotheses = iar_num_hypotheses;
+    packet.wn = wn;
+    packet.rtk_receiver_id = rtk_receiver_id;
+    packet.rtk_health = rtk_health;
+    packet.rtk_rate = rtk_rate;
+    packet.nsats = nsats;
+    packet.baseline_coords_type = baseline_coords_type;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS2_RTK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS2_RTK;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS2_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS2_RTK_LEN, MAVLINK_MSG_ID_GPS2_RTK_CRC);
+}
+
+/**
+ * @brief Pack a gps2_rtk message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_last_baseline_ms [ms] Time since boot of last baseline message received.
+ * @param rtk_receiver_id  Identification of connected RTK receiver.
+ * @param wn  GPS Week Number of last baseline
+ * @param tow [ms] GPS Time of Week of last baseline
+ * @param rtk_health  GPS-specific health report for RTK data.
+ * @param rtk_rate [Hz] Rate of baseline messages being received by GPS
+ * @param nsats  Current number of sats used for RTK calculation.
+ * @param baseline_coords_type  Coordinate system of baseline
+ * @param baseline_a_mm [mm] Current baseline in ECEF x or NED north component.
+ * @param baseline_b_mm [mm] Current baseline in ECEF y or NED east component.
+ * @param baseline_c_mm [mm] Current baseline in ECEF z or NED down component.
+ * @param accuracy  Current estimate of baseline accuracy.
+ * @param iar_num_hypotheses  Current number of integer ambiguity hypotheses.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps2_rtk_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_last_baseline_ms,uint8_t rtk_receiver_id,uint16_t wn,uint32_t tow,uint8_t rtk_health,uint8_t rtk_rate,uint8_t nsats,uint8_t baseline_coords_type,int32_t baseline_a_mm,int32_t baseline_b_mm,int32_t baseline_c_mm,uint32_t accuracy,int32_t iar_num_hypotheses)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS2_RTK_LEN];
+    _mav_put_uint32_t(buf, 0, time_last_baseline_ms);
+    _mav_put_uint32_t(buf, 4, tow);
+    _mav_put_int32_t(buf, 8, baseline_a_mm);
+    _mav_put_int32_t(buf, 12, baseline_b_mm);
+    _mav_put_int32_t(buf, 16, baseline_c_mm);
+    _mav_put_uint32_t(buf, 20, accuracy);
+    _mav_put_int32_t(buf, 24, iar_num_hypotheses);
+    _mav_put_uint16_t(buf, 28, wn);
+    _mav_put_uint8_t(buf, 30, rtk_receiver_id);
+    _mav_put_uint8_t(buf, 31, rtk_health);
+    _mav_put_uint8_t(buf, 32, rtk_rate);
+    _mav_put_uint8_t(buf, 33, nsats);
+    _mav_put_uint8_t(buf, 34, baseline_coords_type);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS2_RTK_LEN);
+#else
+    mavlink_gps2_rtk_t packet;
+    packet.time_last_baseline_ms = time_last_baseline_ms;
+    packet.tow = tow;
+    packet.baseline_a_mm = baseline_a_mm;
+    packet.baseline_b_mm = baseline_b_mm;
+    packet.baseline_c_mm = baseline_c_mm;
+    packet.accuracy = accuracy;
+    packet.iar_num_hypotheses = iar_num_hypotheses;
+    packet.wn = wn;
+    packet.rtk_receiver_id = rtk_receiver_id;
+    packet.rtk_health = rtk_health;
+    packet.rtk_rate = rtk_rate;
+    packet.nsats = nsats;
+    packet.baseline_coords_type = baseline_coords_type;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS2_RTK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS2_RTK;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS2_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS2_RTK_LEN, MAVLINK_MSG_ID_GPS2_RTK_CRC);
+}
+
+/**
+ * @brief Encode a gps2_rtk struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps2_rtk C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps2_rtk_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps2_rtk_t* gps2_rtk)
+{
+    return mavlink_msg_gps2_rtk_pack(system_id, component_id, msg, gps2_rtk->time_last_baseline_ms, gps2_rtk->rtk_receiver_id, gps2_rtk->wn, gps2_rtk->tow, gps2_rtk->rtk_health, gps2_rtk->rtk_rate, gps2_rtk->nsats, gps2_rtk->baseline_coords_type, gps2_rtk->baseline_a_mm, gps2_rtk->baseline_b_mm, gps2_rtk->baseline_c_mm, gps2_rtk->accuracy, gps2_rtk->iar_num_hypotheses);
+}
+
+/**
+ * @brief Encode a gps2_rtk struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps2_rtk C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps2_rtk_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps2_rtk_t* gps2_rtk)
+{
+    return mavlink_msg_gps2_rtk_pack_chan(system_id, component_id, chan, msg, gps2_rtk->time_last_baseline_ms, gps2_rtk->rtk_receiver_id, gps2_rtk->wn, gps2_rtk->tow, gps2_rtk->rtk_health, gps2_rtk->rtk_rate, gps2_rtk->nsats, gps2_rtk->baseline_coords_type, gps2_rtk->baseline_a_mm, gps2_rtk->baseline_b_mm, gps2_rtk->baseline_c_mm, gps2_rtk->accuracy, gps2_rtk->iar_num_hypotheses);
+}
+
+/**
+ * @brief Send a gps2_rtk message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_last_baseline_ms [ms] Time since boot of last baseline message received.
+ * @param rtk_receiver_id  Identification of connected RTK receiver.
+ * @param wn  GPS Week Number of last baseline
+ * @param tow [ms] GPS Time of Week of last baseline
+ * @param rtk_health  GPS-specific health report for RTK data.
+ * @param rtk_rate [Hz] Rate of baseline messages being received by GPS
+ * @param nsats  Current number of sats used for RTK calculation.
+ * @param baseline_coords_type  Coordinate system of baseline
+ * @param baseline_a_mm [mm] Current baseline in ECEF x or NED north component.
+ * @param baseline_b_mm [mm] Current baseline in ECEF y or NED east component.
+ * @param baseline_c_mm [mm] Current baseline in ECEF z or NED down component.
+ * @param accuracy  Current estimate of baseline accuracy.
+ * @param iar_num_hypotheses  Current number of integer ambiguity hypotheses.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps2_rtk_send(mavlink_channel_t chan, uint32_t time_last_baseline_ms, uint8_t rtk_receiver_id, uint16_t wn, uint32_t tow, uint8_t rtk_health, uint8_t rtk_rate, uint8_t nsats, uint8_t baseline_coords_type, int32_t baseline_a_mm, int32_t baseline_b_mm, int32_t baseline_c_mm, uint32_t accuracy, int32_t iar_num_hypotheses)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS2_RTK_LEN];
+    _mav_put_uint32_t(buf, 0, time_last_baseline_ms);
+    _mav_put_uint32_t(buf, 4, tow);
+    _mav_put_int32_t(buf, 8, baseline_a_mm);
+    _mav_put_int32_t(buf, 12, baseline_b_mm);
+    _mav_put_int32_t(buf, 16, baseline_c_mm);
+    _mav_put_uint32_t(buf, 20, accuracy);
+    _mav_put_int32_t(buf, 24, iar_num_hypotheses);
+    _mav_put_uint16_t(buf, 28, wn);
+    _mav_put_uint8_t(buf, 30, rtk_receiver_id);
+    _mav_put_uint8_t(buf, 31, rtk_health);
+    _mav_put_uint8_t(buf, 32, rtk_rate);
+    _mav_put_uint8_t(buf, 33, nsats);
+    _mav_put_uint8_t(buf, 34, baseline_coords_type);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RTK, buf, MAVLINK_MSG_ID_GPS2_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS2_RTK_LEN, MAVLINK_MSG_ID_GPS2_RTK_CRC);
+#else
+    mavlink_gps2_rtk_t packet;
+    packet.time_last_baseline_ms = time_last_baseline_ms;
+    packet.tow = tow;
+    packet.baseline_a_mm = baseline_a_mm;
+    packet.baseline_b_mm = baseline_b_mm;
+    packet.baseline_c_mm = baseline_c_mm;
+    packet.accuracy = accuracy;
+    packet.iar_num_hypotheses = iar_num_hypotheses;
+    packet.wn = wn;
+    packet.rtk_receiver_id = rtk_receiver_id;
+    packet.rtk_health = rtk_health;
+    packet.rtk_rate = rtk_rate;
+    packet.nsats = nsats;
+    packet.baseline_coords_type = baseline_coords_type;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RTK, (const char *)&packet, MAVLINK_MSG_ID_GPS2_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS2_RTK_LEN, MAVLINK_MSG_ID_GPS2_RTK_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps2_rtk message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps2_rtk_send_struct(mavlink_channel_t chan, const mavlink_gps2_rtk_t* gps2_rtk)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps2_rtk_send(chan, gps2_rtk->time_last_baseline_ms, gps2_rtk->rtk_receiver_id, gps2_rtk->wn, gps2_rtk->tow, gps2_rtk->rtk_health, gps2_rtk->rtk_rate, gps2_rtk->nsats, gps2_rtk->baseline_coords_type, gps2_rtk->baseline_a_mm, gps2_rtk->baseline_b_mm, gps2_rtk->baseline_c_mm, gps2_rtk->accuracy, gps2_rtk->iar_num_hypotheses);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RTK, (const char *)gps2_rtk, MAVLINK_MSG_ID_GPS2_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS2_RTK_LEN, MAVLINK_MSG_ID_GPS2_RTK_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS2_RTK_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps2_rtk_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_last_baseline_ms, uint8_t rtk_receiver_id, uint16_t wn, uint32_t tow, uint8_t rtk_health, uint8_t rtk_rate, uint8_t nsats, uint8_t baseline_coords_type, int32_t baseline_a_mm, int32_t baseline_b_mm, int32_t baseline_c_mm, uint32_t accuracy, int32_t iar_num_hypotheses)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_last_baseline_ms);
+    _mav_put_uint32_t(buf, 4, tow);
+    _mav_put_int32_t(buf, 8, baseline_a_mm);
+    _mav_put_int32_t(buf, 12, baseline_b_mm);
+    _mav_put_int32_t(buf, 16, baseline_c_mm);
+    _mav_put_uint32_t(buf, 20, accuracy);
+    _mav_put_int32_t(buf, 24, iar_num_hypotheses);
+    _mav_put_uint16_t(buf, 28, wn);
+    _mav_put_uint8_t(buf, 30, rtk_receiver_id);
+    _mav_put_uint8_t(buf, 31, rtk_health);
+    _mav_put_uint8_t(buf, 32, rtk_rate);
+    _mav_put_uint8_t(buf, 33, nsats);
+    _mav_put_uint8_t(buf, 34, baseline_coords_type);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RTK, buf, MAVLINK_MSG_ID_GPS2_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS2_RTK_LEN, MAVLINK_MSG_ID_GPS2_RTK_CRC);
+#else
+    mavlink_gps2_rtk_t *packet = (mavlink_gps2_rtk_t *)msgbuf;
+    packet->time_last_baseline_ms = time_last_baseline_ms;
+    packet->tow = tow;
+    packet->baseline_a_mm = baseline_a_mm;
+    packet->baseline_b_mm = baseline_b_mm;
+    packet->baseline_c_mm = baseline_c_mm;
+    packet->accuracy = accuracy;
+    packet->iar_num_hypotheses = iar_num_hypotheses;
+    packet->wn = wn;
+    packet->rtk_receiver_id = rtk_receiver_id;
+    packet->rtk_health = rtk_health;
+    packet->rtk_rate = rtk_rate;
+    packet->nsats = nsats;
+    packet->baseline_coords_type = baseline_coords_type;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RTK, (const char *)packet, MAVLINK_MSG_ID_GPS2_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS2_RTK_LEN, MAVLINK_MSG_ID_GPS2_RTK_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS2_RTK UNPACKING
+
+
+/**
+ * @brief Get field time_last_baseline_ms from gps2_rtk message
+ *
+ * @return [ms] Time since boot of last baseline message received.
+ */
+static inline uint32_t mavlink_msg_gps2_rtk_get_time_last_baseline_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field rtk_receiver_id from gps2_rtk message
+ *
+ * @return  Identification of connected RTK receiver.
+ */
+static inline uint8_t mavlink_msg_gps2_rtk_get_rtk_receiver_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field wn from gps2_rtk message
+ *
+ * @return  GPS Week Number of last baseline
+ */
+static inline uint16_t mavlink_msg_gps2_rtk_get_wn(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  28);
+}
+
+/**
+ * @brief Get field tow from gps2_rtk message
+ *
+ * @return [ms] GPS Time of Week of last baseline
+ */
+static inline uint32_t mavlink_msg_gps2_rtk_get_tow(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field rtk_health from gps2_rtk message
+ *
+ * @return  GPS-specific health report for RTK data.
+ */
+static inline uint8_t mavlink_msg_gps2_rtk_get_rtk_health(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  31);
+}
+
+/**
+ * @brief Get field rtk_rate from gps2_rtk message
+ *
+ * @return [Hz] Rate of baseline messages being received by GPS
+ */
+static inline uint8_t mavlink_msg_gps2_rtk_get_rtk_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field nsats from gps2_rtk message
+ *
+ * @return  Current number of sats used for RTK calculation.
+ */
+static inline uint8_t mavlink_msg_gps2_rtk_get_nsats(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field baseline_coords_type from gps2_rtk message
+ *
+ * @return  Coordinate system of baseline
+ */
+static inline uint8_t mavlink_msg_gps2_rtk_get_baseline_coords_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field baseline_a_mm from gps2_rtk message
+ *
+ * @return [mm] Current baseline in ECEF x or NED north component.
+ */
+static inline int32_t mavlink_msg_gps2_rtk_get_baseline_a_mm(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field baseline_b_mm from gps2_rtk message
+ *
+ * @return [mm] Current baseline in ECEF y or NED east component.
+ */
+static inline int32_t mavlink_msg_gps2_rtk_get_baseline_b_mm(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field baseline_c_mm from gps2_rtk message
+ *
+ * @return [mm] Current baseline in ECEF z or NED down component.
+ */
+static inline int32_t mavlink_msg_gps2_rtk_get_baseline_c_mm(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field accuracy from gps2_rtk message
+ *
+ * @return  Current estimate of baseline accuracy.
+ */
+static inline uint32_t mavlink_msg_gps2_rtk_get_accuracy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  20);
+}
+
+/**
+ * @brief Get field iar_num_hypotheses from gps2_rtk message
+ *
+ * @return  Current number of integer ambiguity hypotheses.
+ */
+static inline int32_t mavlink_msg_gps2_rtk_get_iar_num_hypotheses(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  24);
+}
+
+/**
+ * @brief Decode a gps2_rtk message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps2_rtk C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps2_rtk_decode(const mavlink_message_t* msg, mavlink_gps2_rtk_t* gps2_rtk)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps2_rtk->time_last_baseline_ms = mavlink_msg_gps2_rtk_get_time_last_baseline_ms(msg);
+    gps2_rtk->tow = mavlink_msg_gps2_rtk_get_tow(msg);
+    gps2_rtk->baseline_a_mm = mavlink_msg_gps2_rtk_get_baseline_a_mm(msg);
+    gps2_rtk->baseline_b_mm = mavlink_msg_gps2_rtk_get_baseline_b_mm(msg);
+    gps2_rtk->baseline_c_mm = mavlink_msg_gps2_rtk_get_baseline_c_mm(msg);
+    gps2_rtk->accuracy = mavlink_msg_gps2_rtk_get_accuracy(msg);
+    gps2_rtk->iar_num_hypotheses = mavlink_msg_gps2_rtk_get_iar_num_hypotheses(msg);
+    gps2_rtk->wn = mavlink_msg_gps2_rtk_get_wn(msg);
+    gps2_rtk->rtk_receiver_id = mavlink_msg_gps2_rtk_get_rtk_receiver_id(msg);
+    gps2_rtk->rtk_health = mavlink_msg_gps2_rtk_get_rtk_health(msg);
+    gps2_rtk->rtk_rate = mavlink_msg_gps2_rtk_get_rtk_rate(msg);
+    gps2_rtk->nsats = mavlink_msg_gps2_rtk_get_nsats(msg);
+    gps2_rtk->baseline_coords_type = mavlink_msg_gps2_rtk_get_baseline_coords_type(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS2_RTK_LEN? msg->len : MAVLINK_MSG_ID_GPS2_RTK_LEN;
+        memset(gps2_rtk, 0, MAVLINK_MSG_ID_GPS2_RTK_LEN);
+    memcpy(gps2_rtk, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 288 - 0
v2.0/common/mavlink_msg_gps_global_origin.h

@@ -0,0 +1,288 @@
+#pragma once
+// MESSAGE GPS_GLOBAL_ORIGIN PACKING
+
+#define MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN 49
+
+MAVPACKED(
+typedef struct __mavlink_gps_global_origin_t {
+ int32_t latitude; /*< [degE7] Latitude (WGS84)*/
+ int32_t longitude; /*< [degE7] Longitude (WGS84)*/
+ int32_t altitude; /*< [mm] Altitude (MSL). Positive for up.*/
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+}) mavlink_gps_global_origin_t;
+
+#define MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN 20
+#define MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_MIN_LEN 12
+#define MAVLINK_MSG_ID_49_LEN 20
+#define MAVLINK_MSG_ID_49_MIN_LEN 12
+
+#define MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_CRC 39
+#define MAVLINK_MSG_ID_49_CRC 39
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS_GLOBAL_ORIGIN { \
+    49, \
+    "GPS_GLOBAL_ORIGIN", \
+    4, \
+    {  { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_gps_global_origin_t, latitude) }, \
+         { "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_gps_global_origin_t, longitude) }, \
+         { "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_global_origin_t, altitude) }, \
+         { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 12, offsetof(mavlink_gps_global_origin_t, time_usec) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS_GLOBAL_ORIGIN { \
+    "GPS_GLOBAL_ORIGIN", \
+    4, \
+    {  { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 0, offsetof(mavlink_gps_global_origin_t, latitude) }, \
+         { "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_gps_global_origin_t, longitude) }, \
+         { "altitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_global_origin_t, altitude) }, \
+         { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 12, offsetof(mavlink_gps_global_origin_t, time_usec) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps_global_origin message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param latitude [degE7] Latitude (WGS84)
+ * @param longitude [degE7] Longitude (WGS84)
+ * @param altitude [mm] Altitude (MSL). Positive for up.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_global_origin_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               int32_t latitude, int32_t longitude, int32_t altitude, uint64_t time_usec)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN];
+    _mav_put_int32_t(buf, 0, latitude);
+    _mav_put_int32_t(buf, 4, longitude);
+    _mav_put_int32_t(buf, 8, altitude);
+    _mav_put_uint64_t(buf, 12, time_usec);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN);
+#else
+    mavlink_gps_global_origin_t packet;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.altitude = altitude;
+    packet.time_usec = time_usec;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_MIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_CRC);
+}
+
+/**
+ * @brief Pack a gps_global_origin message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param latitude [degE7] Latitude (WGS84)
+ * @param longitude [degE7] Longitude (WGS84)
+ * @param altitude [mm] Altitude (MSL). Positive for up.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_global_origin_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   int32_t latitude,int32_t longitude,int32_t altitude,uint64_t time_usec)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN];
+    _mav_put_int32_t(buf, 0, latitude);
+    _mav_put_int32_t(buf, 4, longitude);
+    _mav_put_int32_t(buf, 8, altitude);
+    _mav_put_uint64_t(buf, 12, time_usec);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN);
+#else
+    mavlink_gps_global_origin_t packet;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.altitude = altitude;
+    packet.time_usec = time_usec;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_MIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_CRC);
+}
+
+/**
+ * @brief Encode a gps_global_origin struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_global_origin C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_global_origin_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_global_origin_t* gps_global_origin)
+{
+    return mavlink_msg_gps_global_origin_pack(system_id, component_id, msg, gps_global_origin->latitude, gps_global_origin->longitude, gps_global_origin->altitude, gps_global_origin->time_usec);
+}
+
+/**
+ * @brief Encode a gps_global_origin struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_global_origin C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_global_origin_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps_global_origin_t* gps_global_origin)
+{
+    return mavlink_msg_gps_global_origin_pack_chan(system_id, component_id, chan, msg, gps_global_origin->latitude, gps_global_origin->longitude, gps_global_origin->altitude, gps_global_origin->time_usec);
+}
+
+/**
+ * @brief Send a gps_global_origin message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param latitude [degE7] Latitude (WGS84)
+ * @param longitude [degE7] Longitude (WGS84)
+ * @param altitude [mm] Altitude (MSL). Positive for up.
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps_global_origin_send(mavlink_channel_t chan, int32_t latitude, int32_t longitude, int32_t altitude, uint64_t time_usec)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN];
+    _mav_put_int32_t(buf, 0, latitude);
+    _mav_put_int32_t(buf, 4, longitude);
+    _mav_put_int32_t(buf, 8, altitude);
+    _mav_put_uint64_t(buf, 12, time_usec);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN, buf, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_MIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_CRC);
+#else
+    mavlink_gps_global_origin_t packet;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.altitude = altitude;
+    packet.time_usec = time_usec;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN, (const char *)&packet, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_MIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps_global_origin message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps_global_origin_send_struct(mavlink_channel_t chan, const mavlink_gps_global_origin_t* gps_global_origin)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps_global_origin_send(chan, gps_global_origin->latitude, gps_global_origin->longitude, gps_global_origin->altitude, gps_global_origin->time_usec);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN, (const char *)gps_global_origin, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_MIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps_global_origin_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  int32_t latitude, int32_t longitude, int32_t altitude, uint64_t time_usec)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_int32_t(buf, 0, latitude);
+    _mav_put_int32_t(buf, 4, longitude);
+    _mav_put_int32_t(buf, 8, altitude);
+    _mav_put_uint64_t(buf, 12, time_usec);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN, buf, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_MIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_CRC);
+#else
+    mavlink_gps_global_origin_t *packet = (mavlink_gps_global_origin_t *)msgbuf;
+    packet->latitude = latitude;
+    packet->longitude = longitude;
+    packet->altitude = altitude;
+    packet->time_usec = time_usec;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN, (const char *)packet, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_MIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS_GLOBAL_ORIGIN UNPACKING
+
+
+/**
+ * @brief Get field latitude from gps_global_origin message
+ *
+ * @return [degE7] Latitude (WGS84)
+ */
+static inline int32_t mavlink_msg_gps_global_origin_get_latitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  0);
+}
+
+/**
+ * @brief Get field longitude from gps_global_origin message
+ *
+ * @return [degE7] Longitude (WGS84)
+ */
+static inline int32_t mavlink_msg_gps_global_origin_get_longitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field altitude from gps_global_origin message
+ *
+ * @return [mm] Altitude (MSL). Positive for up.
+ */
+static inline int32_t mavlink_msg_gps_global_origin_get_altitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field time_usec from gps_global_origin message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_gps_global_origin_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  12);
+}
+
+/**
+ * @brief Decode a gps_global_origin message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps_global_origin C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps_global_origin_decode(const mavlink_message_t* msg, mavlink_gps_global_origin_t* gps_global_origin)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps_global_origin->latitude = mavlink_msg_gps_global_origin_get_latitude(msg);
+    gps_global_origin->longitude = mavlink_msg_gps_global_origin_get_longitude(msg);
+    gps_global_origin->altitude = mavlink_msg_gps_global_origin_get_altitude(msg);
+    gps_global_origin->time_usec = mavlink_msg_gps_global_origin_get_time_usec(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN? msg->len : MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN;
+        memset(gps_global_origin, 0, MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN);
+    memcpy(gps_global_origin, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 280 - 0
v2.0/common/mavlink_msg_gps_inject_data.h

@@ -0,0 +1,280 @@
+#pragma once
+// MESSAGE GPS_INJECT_DATA PACKING
+
+#define MAVLINK_MSG_ID_GPS_INJECT_DATA 123
+
+
+typedef struct __mavlink_gps_inject_data_t {
+ uint8_t target_system; /*<  System ID*/
+ uint8_t target_component; /*<  Component ID*/
+ uint8_t len; /*< [bytes] Data length*/
+ uint8_t data[110]; /*<  Raw data (110 is enough for 12 satellites of RTCMv2)*/
+} mavlink_gps_inject_data_t;
+
+#define MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN 113
+#define MAVLINK_MSG_ID_GPS_INJECT_DATA_MIN_LEN 113
+#define MAVLINK_MSG_ID_123_LEN 113
+#define MAVLINK_MSG_ID_123_MIN_LEN 113
+
+#define MAVLINK_MSG_ID_GPS_INJECT_DATA_CRC 250
+#define MAVLINK_MSG_ID_123_CRC 250
+
+#define MAVLINK_MSG_GPS_INJECT_DATA_FIELD_DATA_LEN 110
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS_INJECT_DATA { \
+    123, \
+    "GPS_INJECT_DATA", \
+    4, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_inject_data_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_gps_inject_data_t, target_component) }, \
+         { "len", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_gps_inject_data_t, len) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 110, 3, offsetof(mavlink_gps_inject_data_t, data) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS_INJECT_DATA { \
+    "GPS_INJECT_DATA", \
+    4, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_inject_data_t, target_system) }, \
+         { "target_component", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_gps_inject_data_t, target_component) }, \
+         { "len", NULL, MAVLINK_TYPE_UINT8_T, 0, 2, offsetof(mavlink_gps_inject_data_t, len) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 110, 3, offsetof(mavlink_gps_inject_data_t, data) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps_inject_data message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param len [bytes] Data length
+ * @param data  Raw data (110 is enough for 12 satellites of RTCMv2)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_inject_data_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_component, uint8_t len, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, target_component);
+    _mav_put_uint8_t(buf, 2, len);
+    _mav_put_uint8_t_array(buf, 3, data, 110);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN);
+#else
+    mavlink_gps_inject_data_t packet;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*110);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_INJECT_DATA;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS_INJECT_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_CRC);
+}
+
+/**
+ * @brief Pack a gps_inject_data message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param len [bytes] Data length
+ * @param data  Raw data (110 is enough for 12 satellites of RTCMv2)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_inject_data_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_component,uint8_t len,const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, target_component);
+    _mav_put_uint8_t(buf, 2, len);
+    _mav_put_uint8_t_array(buf, 3, data, 110);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN);
+#else
+    mavlink_gps_inject_data_t packet;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*110);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_INJECT_DATA;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS_INJECT_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_CRC);
+}
+
+/**
+ * @brief Encode a gps_inject_data struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_inject_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_inject_data_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_inject_data_t* gps_inject_data)
+{
+    return mavlink_msg_gps_inject_data_pack(system_id, component_id, msg, gps_inject_data->target_system, gps_inject_data->target_component, gps_inject_data->len, gps_inject_data->data);
+}
+
+/**
+ * @brief Encode a gps_inject_data struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_inject_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_inject_data_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps_inject_data_t* gps_inject_data)
+{
+    return mavlink_msg_gps_inject_data_pack_chan(system_id, component_id, chan, msg, gps_inject_data->target_system, gps_inject_data->target_component, gps_inject_data->len, gps_inject_data->data);
+}
+
+/**
+ * @brief Send a gps_inject_data message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  System ID
+ * @param target_component  Component ID
+ * @param len [bytes] Data length
+ * @param data  Raw data (110 is enough for 12 satellites of RTCMv2)
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps_inject_data_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_component, uint8_t len, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, target_component);
+    _mav_put_uint8_t(buf, 2, len);
+    _mav_put_uint8_t_array(buf, 3, data, 110);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INJECT_DATA, buf, MAVLINK_MSG_ID_GPS_INJECT_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_CRC);
+#else
+    mavlink_gps_inject_data_t packet;
+    packet.target_system = target_system;
+    packet.target_component = target_component;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*110);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INJECT_DATA, (const char *)&packet, MAVLINK_MSG_ID_GPS_INJECT_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps_inject_data message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps_inject_data_send_struct(mavlink_channel_t chan, const mavlink_gps_inject_data_t* gps_inject_data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps_inject_data_send(chan, gps_inject_data->target_system, gps_inject_data->target_component, gps_inject_data->len, gps_inject_data->data);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INJECT_DATA, (const char *)gps_inject_data, MAVLINK_MSG_ID_GPS_INJECT_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps_inject_data_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_component, uint8_t len, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, target_component);
+    _mav_put_uint8_t(buf, 2, len);
+    _mav_put_uint8_t_array(buf, 3, data, 110);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INJECT_DATA, buf, MAVLINK_MSG_ID_GPS_INJECT_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_CRC);
+#else
+    mavlink_gps_inject_data_t *packet = (mavlink_gps_inject_data_t *)msgbuf;
+    packet->target_system = target_system;
+    packet->target_component = target_component;
+    packet->len = len;
+    mav_array_memcpy(packet->data, data, sizeof(uint8_t)*110);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INJECT_DATA, (const char *)packet, MAVLINK_MSG_ID_GPS_INJECT_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN, MAVLINK_MSG_ID_GPS_INJECT_DATA_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS_INJECT_DATA UNPACKING
+
+
+/**
+ * @brief Get field target_system from gps_inject_data message
+ *
+ * @return  System ID
+ */
+static inline uint8_t mavlink_msg_gps_inject_data_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field target_component from gps_inject_data message
+ *
+ * @return  Component ID
+ */
+static inline uint8_t mavlink_msg_gps_inject_data_get_target_component(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  1);
+}
+
+/**
+ * @brief Get field len from gps_inject_data message
+ *
+ * @return [bytes] Data length
+ */
+static inline uint8_t mavlink_msg_gps_inject_data_get_len(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  2);
+}
+
+/**
+ * @brief Get field data from gps_inject_data message
+ *
+ * @return  Raw data (110 is enough for 12 satellites of RTCMv2)
+ */
+static inline uint16_t mavlink_msg_gps_inject_data_get_data(const mavlink_message_t* msg, uint8_t *data)
+{
+    return _MAV_RETURN_uint8_t_array(msg, data, 110,  3);
+}
+
+/**
+ * @brief Decode a gps_inject_data message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps_inject_data C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps_inject_data_decode(const mavlink_message_t* msg, mavlink_gps_inject_data_t* gps_inject_data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps_inject_data->target_system = mavlink_msg_gps_inject_data_get_target_system(msg);
+    gps_inject_data->target_component = mavlink_msg_gps_inject_data_get_target_component(msg);
+    gps_inject_data->len = mavlink_msg_gps_inject_data_get_len(msg);
+    mavlink_msg_gps_inject_data_get_data(msg, gps_inject_data->data);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN? msg->len : MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN;
+        memset(gps_inject_data, 0, MAVLINK_MSG_ID_GPS_INJECT_DATA_LEN);
+    memcpy(gps_inject_data, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 663 - 0
v2.0/common/mavlink_msg_gps_input.h

@@ -0,0 +1,663 @@
+#pragma once
+// MESSAGE GPS_INPUT PACKING
+
+#define MAVLINK_MSG_ID_GPS_INPUT 232
+
+MAVPACKED(
+typedef struct __mavlink_gps_input_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ uint32_t time_week_ms; /*< [ms] GPS time (from start of GPS week)*/
+ int32_t lat; /*< [degE7] Latitude (WGS84)*/
+ int32_t lon; /*< [degE7] Longitude (WGS84)*/
+ float alt; /*< [m] Altitude (MSL). Positive for up.*/
+ float hdop; /*<  GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX*/
+ float vdop; /*<  GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX*/
+ float vn; /*< [m/s] GPS velocity in north direction in earth-fixed NED frame*/
+ float ve; /*< [m/s] GPS velocity in east direction in earth-fixed NED frame*/
+ float vd; /*< [m/s] GPS velocity in down direction in earth-fixed NED frame*/
+ float speed_accuracy; /*< [m/s] GPS speed accuracy*/
+ float horiz_accuracy; /*< [m] GPS horizontal accuracy*/
+ float vert_accuracy; /*< [m] GPS vertical accuracy*/
+ uint16_t ignore_flags; /*<  Bitmap indicating which GPS input flags fields to ignore.  All other fields must be provided.*/
+ uint16_t time_week; /*<  GPS week number*/
+ uint8_t gps_id; /*<  ID of the GPS for multiple GPS inputs*/
+ uint8_t fix_type; /*<  0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK*/
+ uint8_t satellites_visible; /*<  Number of satellites visible.*/
+ uint16_t yaw; /*< [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north*/
+}) mavlink_gps_input_t;
+
+#define MAVLINK_MSG_ID_GPS_INPUT_LEN 65
+#define MAVLINK_MSG_ID_GPS_INPUT_MIN_LEN 63
+#define MAVLINK_MSG_ID_232_LEN 65
+#define MAVLINK_MSG_ID_232_MIN_LEN 63
+
+#define MAVLINK_MSG_ID_GPS_INPUT_CRC 151
+#define MAVLINK_MSG_ID_232_CRC 151
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS_INPUT { \
+    232, \
+    "GPS_INPUT", \
+    19, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps_input_t, time_usec) }, \
+         { "gps_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 60, offsetof(mavlink_gps_input_t, gps_id) }, \
+         { "ignore_flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 56, offsetof(mavlink_gps_input_t, ignore_flags) }, \
+         { "time_week_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_gps_input_t, time_week_ms) }, \
+         { "time_week", NULL, MAVLINK_TYPE_UINT16_T, 0, 58, offsetof(mavlink_gps_input_t, time_week) }, \
+         { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 61, offsetof(mavlink_gps_input_t, fix_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps_input_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps_input_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gps_input_t, alt) }, \
+         { "hdop", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gps_input_t, hdop) }, \
+         { "vdop", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gps_input_t, vdop) }, \
+         { "vn", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_gps_input_t, vn) }, \
+         { "ve", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_gps_input_t, ve) }, \
+         { "vd", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_gps_input_t, vd) }, \
+         { "speed_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_gps_input_t, speed_accuracy) }, \
+         { "horiz_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_gps_input_t, horiz_accuracy) }, \
+         { "vert_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_gps_input_t, vert_accuracy) }, \
+         { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 62, offsetof(mavlink_gps_input_t, satellites_visible) }, \
+         { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 63, offsetof(mavlink_gps_input_t, yaw) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS_INPUT { \
+    "GPS_INPUT", \
+    19, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps_input_t, time_usec) }, \
+         { "gps_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 60, offsetof(mavlink_gps_input_t, gps_id) }, \
+         { "ignore_flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 56, offsetof(mavlink_gps_input_t, ignore_flags) }, \
+         { "time_week_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_gps_input_t, time_week_ms) }, \
+         { "time_week", NULL, MAVLINK_TYPE_UINT16_T, 0, 58, offsetof(mavlink_gps_input_t, time_week) }, \
+         { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 61, offsetof(mavlink_gps_input_t, fix_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps_input_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps_input_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_gps_input_t, alt) }, \
+         { "hdop", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_gps_input_t, hdop) }, \
+         { "vdop", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_gps_input_t, vdop) }, \
+         { "vn", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_gps_input_t, vn) }, \
+         { "ve", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_gps_input_t, ve) }, \
+         { "vd", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_gps_input_t, vd) }, \
+         { "speed_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_gps_input_t, speed_accuracy) }, \
+         { "horiz_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_gps_input_t, horiz_accuracy) }, \
+         { "vert_accuracy", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_gps_input_t, vert_accuracy) }, \
+         { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 62, offsetof(mavlink_gps_input_t, satellites_visible) }, \
+         { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 63, offsetof(mavlink_gps_input_t, yaw) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps_input message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param gps_id  ID of the GPS for multiple GPS inputs
+ * @param ignore_flags  Bitmap indicating which GPS input flags fields to ignore.  All other fields must be provided.
+ * @param time_week_ms [ms] GPS time (from start of GPS week)
+ * @param time_week  GPS week number
+ * @param fix_type  0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [m] Altitude (MSL). Positive for up.
+ * @param hdop  GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX
+ * @param vdop  GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX
+ * @param vn [m/s] GPS velocity in north direction in earth-fixed NED frame
+ * @param ve [m/s] GPS velocity in east direction in earth-fixed NED frame
+ * @param vd [m/s] GPS velocity in down direction in earth-fixed NED frame
+ * @param speed_accuracy [m/s] GPS speed accuracy
+ * @param horiz_accuracy [m] GPS horizontal accuracy
+ * @param vert_accuracy [m] GPS vertical accuracy
+ * @param satellites_visible  Number of satellites visible.
+ * @param yaw [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_input_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint8_t gps_id, uint16_t ignore_flags, uint32_t time_week_ms, uint16_t time_week, uint8_t fix_type, int32_t lat, int32_t lon, float alt, float hdop, float vdop, float vn, float ve, float vd, float speed_accuracy, float horiz_accuracy, float vert_accuracy, uint8_t satellites_visible, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_INPUT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, time_week_ms);
+    _mav_put_int32_t(buf, 12, lat);
+    _mav_put_int32_t(buf, 16, lon);
+    _mav_put_float(buf, 20, alt);
+    _mav_put_float(buf, 24, hdop);
+    _mav_put_float(buf, 28, vdop);
+    _mav_put_float(buf, 32, vn);
+    _mav_put_float(buf, 36, ve);
+    _mav_put_float(buf, 40, vd);
+    _mav_put_float(buf, 44, speed_accuracy);
+    _mav_put_float(buf, 48, horiz_accuracy);
+    _mav_put_float(buf, 52, vert_accuracy);
+    _mav_put_uint16_t(buf, 56, ignore_flags);
+    _mav_put_uint16_t(buf, 58, time_week);
+    _mav_put_uint8_t(buf, 60, gps_id);
+    _mav_put_uint8_t(buf, 61, fix_type);
+    _mav_put_uint8_t(buf, 62, satellites_visible);
+    _mav_put_uint16_t(buf, 63, yaw);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_INPUT_LEN);
+#else
+    mavlink_gps_input_t packet;
+    packet.time_usec = time_usec;
+    packet.time_week_ms = time_week_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.hdop = hdop;
+    packet.vdop = vdop;
+    packet.vn = vn;
+    packet.ve = ve;
+    packet.vd = vd;
+    packet.speed_accuracy = speed_accuracy;
+    packet.horiz_accuracy = horiz_accuracy;
+    packet.vert_accuracy = vert_accuracy;
+    packet.ignore_flags = ignore_flags;
+    packet.time_week = time_week;
+    packet.gps_id = gps_id;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.yaw = yaw;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_INPUT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_INPUT;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS_INPUT_MIN_LEN, MAVLINK_MSG_ID_GPS_INPUT_LEN, MAVLINK_MSG_ID_GPS_INPUT_CRC);
+}
+
+/**
+ * @brief Pack a gps_input message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param gps_id  ID of the GPS for multiple GPS inputs
+ * @param ignore_flags  Bitmap indicating which GPS input flags fields to ignore.  All other fields must be provided.
+ * @param time_week_ms [ms] GPS time (from start of GPS week)
+ * @param time_week  GPS week number
+ * @param fix_type  0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [m] Altitude (MSL). Positive for up.
+ * @param hdop  GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX
+ * @param vdop  GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX
+ * @param vn [m/s] GPS velocity in north direction in earth-fixed NED frame
+ * @param ve [m/s] GPS velocity in east direction in earth-fixed NED frame
+ * @param vd [m/s] GPS velocity in down direction in earth-fixed NED frame
+ * @param speed_accuracy [m/s] GPS speed accuracy
+ * @param horiz_accuracy [m] GPS horizontal accuracy
+ * @param vert_accuracy [m] GPS vertical accuracy
+ * @param satellites_visible  Number of satellites visible.
+ * @param yaw [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_input_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint8_t gps_id,uint16_t ignore_flags,uint32_t time_week_ms,uint16_t time_week,uint8_t fix_type,int32_t lat,int32_t lon,float alt,float hdop,float vdop,float vn,float ve,float vd,float speed_accuracy,float horiz_accuracy,float vert_accuracy,uint8_t satellites_visible,uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_INPUT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, time_week_ms);
+    _mav_put_int32_t(buf, 12, lat);
+    _mav_put_int32_t(buf, 16, lon);
+    _mav_put_float(buf, 20, alt);
+    _mav_put_float(buf, 24, hdop);
+    _mav_put_float(buf, 28, vdop);
+    _mav_put_float(buf, 32, vn);
+    _mav_put_float(buf, 36, ve);
+    _mav_put_float(buf, 40, vd);
+    _mav_put_float(buf, 44, speed_accuracy);
+    _mav_put_float(buf, 48, horiz_accuracy);
+    _mav_put_float(buf, 52, vert_accuracy);
+    _mav_put_uint16_t(buf, 56, ignore_flags);
+    _mav_put_uint16_t(buf, 58, time_week);
+    _mav_put_uint8_t(buf, 60, gps_id);
+    _mav_put_uint8_t(buf, 61, fix_type);
+    _mav_put_uint8_t(buf, 62, satellites_visible);
+    _mav_put_uint16_t(buf, 63, yaw);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_INPUT_LEN);
+#else
+    mavlink_gps_input_t packet;
+    packet.time_usec = time_usec;
+    packet.time_week_ms = time_week_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.hdop = hdop;
+    packet.vdop = vdop;
+    packet.vn = vn;
+    packet.ve = ve;
+    packet.vd = vd;
+    packet.speed_accuracy = speed_accuracy;
+    packet.horiz_accuracy = horiz_accuracy;
+    packet.vert_accuracy = vert_accuracy;
+    packet.ignore_flags = ignore_flags;
+    packet.time_week = time_week;
+    packet.gps_id = gps_id;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.yaw = yaw;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_INPUT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_INPUT;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS_INPUT_MIN_LEN, MAVLINK_MSG_ID_GPS_INPUT_LEN, MAVLINK_MSG_ID_GPS_INPUT_CRC);
+}
+
+/**
+ * @brief Encode a gps_input struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_input C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_input_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_input_t* gps_input)
+{
+    return mavlink_msg_gps_input_pack(system_id, component_id, msg, gps_input->time_usec, gps_input->gps_id, gps_input->ignore_flags, gps_input->time_week_ms, gps_input->time_week, gps_input->fix_type, gps_input->lat, gps_input->lon, gps_input->alt, gps_input->hdop, gps_input->vdop, gps_input->vn, gps_input->ve, gps_input->vd, gps_input->speed_accuracy, gps_input->horiz_accuracy, gps_input->vert_accuracy, gps_input->satellites_visible, gps_input->yaw);
+}
+
+/**
+ * @brief Encode a gps_input struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_input C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_input_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps_input_t* gps_input)
+{
+    return mavlink_msg_gps_input_pack_chan(system_id, component_id, chan, msg, gps_input->time_usec, gps_input->gps_id, gps_input->ignore_flags, gps_input->time_week_ms, gps_input->time_week, gps_input->fix_type, gps_input->lat, gps_input->lon, gps_input->alt, gps_input->hdop, gps_input->vdop, gps_input->vn, gps_input->ve, gps_input->vd, gps_input->speed_accuracy, gps_input->horiz_accuracy, gps_input->vert_accuracy, gps_input->satellites_visible, gps_input->yaw);
+}
+
+/**
+ * @brief Send a gps_input message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param gps_id  ID of the GPS for multiple GPS inputs
+ * @param ignore_flags  Bitmap indicating which GPS input flags fields to ignore.  All other fields must be provided.
+ * @param time_week_ms [ms] GPS time (from start of GPS week)
+ * @param time_week  GPS week number
+ * @param fix_type  0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [m] Altitude (MSL). Positive for up.
+ * @param hdop  GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX
+ * @param vdop  GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX
+ * @param vn [m/s] GPS velocity in north direction in earth-fixed NED frame
+ * @param ve [m/s] GPS velocity in east direction in earth-fixed NED frame
+ * @param vd [m/s] GPS velocity in down direction in earth-fixed NED frame
+ * @param speed_accuracy [m/s] GPS speed accuracy
+ * @param horiz_accuracy [m] GPS horizontal accuracy
+ * @param vert_accuracy [m] GPS vertical accuracy
+ * @param satellites_visible  Number of satellites visible.
+ * @param yaw [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps_input_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t gps_id, uint16_t ignore_flags, uint32_t time_week_ms, uint16_t time_week, uint8_t fix_type, int32_t lat, int32_t lon, float alt, float hdop, float vdop, float vn, float ve, float vd, float speed_accuracy, float horiz_accuracy, float vert_accuracy, uint8_t satellites_visible, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_INPUT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, time_week_ms);
+    _mav_put_int32_t(buf, 12, lat);
+    _mav_put_int32_t(buf, 16, lon);
+    _mav_put_float(buf, 20, alt);
+    _mav_put_float(buf, 24, hdop);
+    _mav_put_float(buf, 28, vdop);
+    _mav_put_float(buf, 32, vn);
+    _mav_put_float(buf, 36, ve);
+    _mav_put_float(buf, 40, vd);
+    _mav_put_float(buf, 44, speed_accuracy);
+    _mav_put_float(buf, 48, horiz_accuracy);
+    _mav_put_float(buf, 52, vert_accuracy);
+    _mav_put_uint16_t(buf, 56, ignore_flags);
+    _mav_put_uint16_t(buf, 58, time_week);
+    _mav_put_uint8_t(buf, 60, gps_id);
+    _mav_put_uint8_t(buf, 61, fix_type);
+    _mav_put_uint8_t(buf, 62, satellites_visible);
+    _mav_put_uint16_t(buf, 63, yaw);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INPUT, buf, MAVLINK_MSG_ID_GPS_INPUT_MIN_LEN, MAVLINK_MSG_ID_GPS_INPUT_LEN, MAVLINK_MSG_ID_GPS_INPUT_CRC);
+#else
+    mavlink_gps_input_t packet;
+    packet.time_usec = time_usec;
+    packet.time_week_ms = time_week_ms;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.hdop = hdop;
+    packet.vdop = vdop;
+    packet.vn = vn;
+    packet.ve = ve;
+    packet.vd = vd;
+    packet.speed_accuracy = speed_accuracy;
+    packet.horiz_accuracy = horiz_accuracy;
+    packet.vert_accuracy = vert_accuracy;
+    packet.ignore_flags = ignore_flags;
+    packet.time_week = time_week;
+    packet.gps_id = gps_id;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.yaw = yaw;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INPUT, (const char *)&packet, MAVLINK_MSG_ID_GPS_INPUT_MIN_LEN, MAVLINK_MSG_ID_GPS_INPUT_LEN, MAVLINK_MSG_ID_GPS_INPUT_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps_input message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps_input_send_struct(mavlink_channel_t chan, const mavlink_gps_input_t* gps_input)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps_input_send(chan, gps_input->time_usec, gps_input->gps_id, gps_input->ignore_flags, gps_input->time_week_ms, gps_input->time_week, gps_input->fix_type, gps_input->lat, gps_input->lon, gps_input->alt, gps_input->hdop, gps_input->vdop, gps_input->vn, gps_input->ve, gps_input->vd, gps_input->speed_accuracy, gps_input->horiz_accuracy, gps_input->vert_accuracy, gps_input->satellites_visible, gps_input->yaw);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INPUT, (const char *)gps_input, MAVLINK_MSG_ID_GPS_INPUT_MIN_LEN, MAVLINK_MSG_ID_GPS_INPUT_LEN, MAVLINK_MSG_ID_GPS_INPUT_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS_INPUT_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps_input_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint8_t gps_id, uint16_t ignore_flags, uint32_t time_week_ms, uint16_t time_week, uint8_t fix_type, int32_t lat, int32_t lon, float alt, float hdop, float vdop, float vn, float ve, float vd, float speed_accuracy, float horiz_accuracy, float vert_accuracy, uint8_t satellites_visible, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, time_week_ms);
+    _mav_put_int32_t(buf, 12, lat);
+    _mav_put_int32_t(buf, 16, lon);
+    _mav_put_float(buf, 20, alt);
+    _mav_put_float(buf, 24, hdop);
+    _mav_put_float(buf, 28, vdop);
+    _mav_put_float(buf, 32, vn);
+    _mav_put_float(buf, 36, ve);
+    _mav_put_float(buf, 40, vd);
+    _mav_put_float(buf, 44, speed_accuracy);
+    _mav_put_float(buf, 48, horiz_accuracy);
+    _mav_put_float(buf, 52, vert_accuracy);
+    _mav_put_uint16_t(buf, 56, ignore_flags);
+    _mav_put_uint16_t(buf, 58, time_week);
+    _mav_put_uint8_t(buf, 60, gps_id);
+    _mav_put_uint8_t(buf, 61, fix_type);
+    _mav_put_uint8_t(buf, 62, satellites_visible);
+    _mav_put_uint16_t(buf, 63, yaw);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INPUT, buf, MAVLINK_MSG_ID_GPS_INPUT_MIN_LEN, MAVLINK_MSG_ID_GPS_INPUT_LEN, MAVLINK_MSG_ID_GPS_INPUT_CRC);
+#else
+    mavlink_gps_input_t *packet = (mavlink_gps_input_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->time_week_ms = time_week_ms;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->hdop = hdop;
+    packet->vdop = vdop;
+    packet->vn = vn;
+    packet->ve = ve;
+    packet->vd = vd;
+    packet->speed_accuracy = speed_accuracy;
+    packet->horiz_accuracy = horiz_accuracy;
+    packet->vert_accuracy = vert_accuracy;
+    packet->ignore_flags = ignore_flags;
+    packet->time_week = time_week;
+    packet->gps_id = gps_id;
+    packet->fix_type = fix_type;
+    packet->satellites_visible = satellites_visible;
+    packet->yaw = yaw;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_INPUT, (const char *)packet, MAVLINK_MSG_ID_GPS_INPUT_MIN_LEN, MAVLINK_MSG_ID_GPS_INPUT_LEN, MAVLINK_MSG_ID_GPS_INPUT_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS_INPUT UNPACKING
+
+
+/**
+ * @brief Get field time_usec from gps_input message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_gps_input_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field gps_id from gps_input message
+ *
+ * @return  ID of the GPS for multiple GPS inputs
+ */
+static inline uint8_t mavlink_msg_gps_input_get_gps_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  60);
+}
+
+/**
+ * @brief Get field ignore_flags from gps_input message
+ *
+ * @return  Bitmap indicating which GPS input flags fields to ignore.  All other fields must be provided.
+ */
+static inline uint16_t mavlink_msg_gps_input_get_ignore_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  56);
+}
+
+/**
+ * @brief Get field time_week_ms from gps_input message
+ *
+ * @return [ms] GPS time (from start of GPS week)
+ */
+static inline uint32_t mavlink_msg_gps_input_get_time_week_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  8);
+}
+
+/**
+ * @brief Get field time_week from gps_input message
+ *
+ * @return  GPS week number
+ */
+static inline uint16_t mavlink_msg_gps_input_get_time_week(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  58);
+}
+
+/**
+ * @brief Get field fix_type from gps_input message
+ *
+ * @return  0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK
+ */
+static inline uint8_t mavlink_msg_gps_input_get_fix_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  61);
+}
+
+/**
+ * @brief Get field lat from gps_input message
+ *
+ * @return [degE7] Latitude (WGS84)
+ */
+static inline int32_t mavlink_msg_gps_input_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field lon from gps_input message
+ *
+ * @return [degE7] Longitude (WGS84)
+ */
+static inline int32_t mavlink_msg_gps_input_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field alt from gps_input message
+ *
+ * @return [m] Altitude (MSL). Positive for up.
+ */
+static inline float mavlink_msg_gps_input_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field hdop from gps_input message
+ *
+ * @return  GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX
+ */
+static inline float mavlink_msg_gps_input_get_hdop(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field vdop from gps_input message
+ *
+ * @return  GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX
+ */
+static inline float mavlink_msg_gps_input_get_vdop(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field vn from gps_input message
+ *
+ * @return [m/s] GPS velocity in north direction in earth-fixed NED frame
+ */
+static inline float mavlink_msg_gps_input_get_vn(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field ve from gps_input message
+ *
+ * @return [m/s] GPS velocity in east direction in earth-fixed NED frame
+ */
+static inline float mavlink_msg_gps_input_get_ve(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field vd from gps_input message
+ *
+ * @return [m/s] GPS velocity in down direction in earth-fixed NED frame
+ */
+static inline float mavlink_msg_gps_input_get_vd(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  40);
+}
+
+/**
+ * @brief Get field speed_accuracy from gps_input message
+ *
+ * @return [m/s] GPS speed accuracy
+ */
+static inline float mavlink_msg_gps_input_get_speed_accuracy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Get field horiz_accuracy from gps_input message
+ *
+ * @return [m] GPS horizontal accuracy
+ */
+static inline float mavlink_msg_gps_input_get_horiz_accuracy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  48);
+}
+
+/**
+ * @brief Get field vert_accuracy from gps_input message
+ *
+ * @return [m] GPS vertical accuracy
+ */
+static inline float mavlink_msg_gps_input_get_vert_accuracy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  52);
+}
+
+/**
+ * @brief Get field satellites_visible from gps_input message
+ *
+ * @return  Number of satellites visible.
+ */
+static inline uint8_t mavlink_msg_gps_input_get_satellites_visible(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  62);
+}
+
+/**
+ * @brief Get field yaw from gps_input message
+ *
+ * @return [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north
+ */
+static inline uint16_t mavlink_msg_gps_input_get_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  63);
+}
+
+/**
+ * @brief Decode a gps_input message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps_input C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps_input_decode(const mavlink_message_t* msg, mavlink_gps_input_t* gps_input)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps_input->time_usec = mavlink_msg_gps_input_get_time_usec(msg);
+    gps_input->time_week_ms = mavlink_msg_gps_input_get_time_week_ms(msg);
+    gps_input->lat = mavlink_msg_gps_input_get_lat(msg);
+    gps_input->lon = mavlink_msg_gps_input_get_lon(msg);
+    gps_input->alt = mavlink_msg_gps_input_get_alt(msg);
+    gps_input->hdop = mavlink_msg_gps_input_get_hdop(msg);
+    gps_input->vdop = mavlink_msg_gps_input_get_vdop(msg);
+    gps_input->vn = mavlink_msg_gps_input_get_vn(msg);
+    gps_input->ve = mavlink_msg_gps_input_get_ve(msg);
+    gps_input->vd = mavlink_msg_gps_input_get_vd(msg);
+    gps_input->speed_accuracy = mavlink_msg_gps_input_get_speed_accuracy(msg);
+    gps_input->horiz_accuracy = mavlink_msg_gps_input_get_horiz_accuracy(msg);
+    gps_input->vert_accuracy = mavlink_msg_gps_input_get_vert_accuracy(msg);
+    gps_input->ignore_flags = mavlink_msg_gps_input_get_ignore_flags(msg);
+    gps_input->time_week = mavlink_msg_gps_input_get_time_week(msg);
+    gps_input->gps_id = mavlink_msg_gps_input_get_gps_id(msg);
+    gps_input->fix_type = mavlink_msg_gps_input_get_fix_type(msg);
+    gps_input->satellites_visible = mavlink_msg_gps_input_get_satellites_visible(msg);
+    gps_input->yaw = mavlink_msg_gps_input_get_yaw(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS_INPUT_LEN? msg->len : MAVLINK_MSG_ID_GPS_INPUT_LEN;
+        memset(gps_input, 0, MAVLINK_MSG_ID_GPS_INPUT_LEN);
+    memcpy(gps_input, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 588 - 0
v2.0/common/mavlink_msg_gps_raw_int.h

@@ -0,0 +1,588 @@
+#pragma once
+// MESSAGE GPS_RAW_INT PACKING
+
+#define MAVLINK_MSG_ID_GPS_RAW_INT 24
+
+MAVPACKED(
+typedef struct __mavlink_gps_raw_int_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ int32_t lat; /*< [degE7] Latitude (WGS84, EGM96 ellipsoid)*/
+ int32_t lon; /*< [degE7] Longitude (WGS84, EGM96 ellipsoid)*/
+ int32_t alt; /*< [mm] Altitude (MSL). Positive for up. Note that virtually all GPS modules provide the MSL altitude in addition to the WGS84 altitude.*/
+ uint16_t eph; /*<  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
+ uint16_t epv; /*<  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
+ uint16_t vel; /*< [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX*/
+ uint16_t cog; /*< [cdeg] Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX*/
+ uint8_t fix_type; /*<  GPS fix type.*/
+ uint8_t satellites_visible; /*<  Number of satellites visible. If unknown, set to UINT8_MAX*/
+ int32_t alt_ellipsoid; /*< [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.*/
+ uint32_t h_acc; /*< [mm] Position uncertainty.*/
+ uint32_t v_acc; /*< [mm] Altitude uncertainty.*/
+ uint32_t vel_acc; /*< [mm] Speed uncertainty.*/
+ uint32_t hdg_acc; /*< [degE5] Heading / track uncertainty*/
+ uint16_t yaw; /*< [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.*/
+}) mavlink_gps_raw_int_t;
+
+#define MAVLINK_MSG_ID_GPS_RAW_INT_LEN 52
+#define MAVLINK_MSG_ID_GPS_RAW_INT_MIN_LEN 30
+#define MAVLINK_MSG_ID_24_LEN 52
+#define MAVLINK_MSG_ID_24_MIN_LEN 30
+
+#define MAVLINK_MSG_ID_GPS_RAW_INT_CRC 24
+#define MAVLINK_MSG_ID_24_CRC 24
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS_RAW_INT { \
+    24, \
+    "GPS_RAW_INT", \
+    16, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps_raw_int_t, time_usec) }, \
+         { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_gps_raw_int_t, fix_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_raw_int_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps_raw_int_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps_raw_int_t, alt) }, \
+         { "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_gps_raw_int_t, eph) }, \
+         { "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_gps_raw_int_t, epv) }, \
+         { "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_gps_raw_int_t, vel) }, \
+         { "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_gps_raw_int_t, cog) }, \
+         { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_gps_raw_int_t, satellites_visible) }, \
+         { "alt_ellipsoid", NULL, MAVLINK_TYPE_INT32_T, 0, 30, offsetof(mavlink_gps_raw_int_t, alt_ellipsoid) }, \
+         { "h_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 34, offsetof(mavlink_gps_raw_int_t, h_acc) }, \
+         { "v_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 38, offsetof(mavlink_gps_raw_int_t, v_acc) }, \
+         { "vel_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 42, offsetof(mavlink_gps_raw_int_t, vel_acc) }, \
+         { "hdg_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 46, offsetof(mavlink_gps_raw_int_t, hdg_acc) }, \
+         { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 50, offsetof(mavlink_gps_raw_int_t, yaw) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS_RAW_INT { \
+    "GPS_RAW_INT", \
+    16, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps_raw_int_t, time_usec) }, \
+         { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_gps_raw_int_t, fix_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_raw_int_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps_raw_int_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps_raw_int_t, alt) }, \
+         { "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_gps_raw_int_t, eph) }, \
+         { "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_gps_raw_int_t, epv) }, \
+         { "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_gps_raw_int_t, vel) }, \
+         { "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_gps_raw_int_t, cog) }, \
+         { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_gps_raw_int_t, satellites_visible) }, \
+         { "alt_ellipsoid", NULL, MAVLINK_TYPE_INT32_T, 0, 30, offsetof(mavlink_gps_raw_int_t, alt_ellipsoid) }, \
+         { "h_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 34, offsetof(mavlink_gps_raw_int_t, h_acc) }, \
+         { "v_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 38, offsetof(mavlink_gps_raw_int_t, v_acc) }, \
+         { "vel_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 42, offsetof(mavlink_gps_raw_int_t, vel_acc) }, \
+         { "hdg_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 46, offsetof(mavlink_gps_raw_int_t, hdg_acc) }, \
+         { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 50, offsetof(mavlink_gps_raw_int_t, yaw) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps_raw_int message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  GPS fix type.
+ * @param lat [degE7] Latitude (WGS84, EGM96 ellipsoid)
+ * @param lon [degE7] Longitude (WGS84, EGM96 ellipsoid)
+ * @param alt [mm] Altitude (MSL). Positive for up. Note that virtually all GPS modules provide the MSL altitude in addition to the WGS84 altitude.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
+ * @param h_acc [mm] Position uncertainty.
+ * @param v_acc [mm] Altitude uncertainty.
+ * @param vel_acc [mm] Speed uncertainty.
+ * @param hdg_acc [degE5] Heading / track uncertainty
+ * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RAW_INT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint16_t(buf, 20, eph);
+    _mav_put_uint16_t(buf, 22, epv);
+    _mav_put_uint16_t(buf, 24, vel);
+    _mav_put_uint16_t(buf, 26, cog);
+    _mav_put_uint8_t(buf, 28, fix_type);
+    _mav_put_uint8_t(buf, 29, satellites_visible);
+    _mav_put_int32_t(buf, 30, alt_ellipsoid);
+    _mav_put_uint32_t(buf, 34, h_acc);
+    _mav_put_uint32_t(buf, 38, v_acc);
+    _mav_put_uint32_t(buf, 42, vel_acc);
+    _mav_put_uint32_t(buf, 46, hdg_acc);
+    _mav_put_uint16_t(buf, 50, yaw);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_RAW_INT_LEN);
+#else
+    mavlink_gps_raw_int_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.alt_ellipsoid = alt_ellipsoid;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_acc = vel_acc;
+    packet.hdg_acc = hdg_acc;
+    packet.yaw = yaw;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_RAW_INT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_RAW_INT;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS_RAW_INT_MIN_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_CRC);
+}
+
+/**
+ * @brief Pack a gps_raw_int message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  GPS fix type.
+ * @param lat [degE7] Latitude (WGS84, EGM96 ellipsoid)
+ * @param lon [degE7] Longitude (WGS84, EGM96 ellipsoid)
+ * @param alt [mm] Altitude (MSL). Positive for up. Note that virtually all GPS modules provide the MSL altitude in addition to the WGS84 altitude.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
+ * @param h_acc [mm] Position uncertainty.
+ * @param v_acc [mm] Altitude uncertainty.
+ * @param vel_acc [mm] Speed uncertainty.
+ * @param hdg_acc [degE5] Heading / track uncertainty
+ * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint8_t fix_type,int32_t lat,int32_t lon,int32_t alt,uint16_t eph,uint16_t epv,uint16_t vel,uint16_t cog,uint8_t satellites_visible,int32_t alt_ellipsoid,uint32_t h_acc,uint32_t v_acc,uint32_t vel_acc,uint32_t hdg_acc,uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RAW_INT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint16_t(buf, 20, eph);
+    _mav_put_uint16_t(buf, 22, epv);
+    _mav_put_uint16_t(buf, 24, vel);
+    _mav_put_uint16_t(buf, 26, cog);
+    _mav_put_uint8_t(buf, 28, fix_type);
+    _mav_put_uint8_t(buf, 29, satellites_visible);
+    _mav_put_int32_t(buf, 30, alt_ellipsoid);
+    _mav_put_uint32_t(buf, 34, h_acc);
+    _mav_put_uint32_t(buf, 38, v_acc);
+    _mav_put_uint32_t(buf, 42, vel_acc);
+    _mav_put_uint32_t(buf, 46, hdg_acc);
+    _mav_put_uint16_t(buf, 50, yaw);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_RAW_INT_LEN);
+#else
+    mavlink_gps_raw_int_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.alt_ellipsoid = alt_ellipsoid;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_acc = vel_acc;
+    packet.hdg_acc = hdg_acc;
+    packet.yaw = yaw;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_RAW_INT_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_RAW_INT;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS_RAW_INT_MIN_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_CRC);
+}
+
+/**
+ * @brief Encode a gps_raw_int struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_raw_int C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_raw_int_t* gps_raw_int)
+{
+    return mavlink_msg_gps_raw_int_pack(system_id, component_id, msg, gps_raw_int->time_usec, gps_raw_int->fix_type, gps_raw_int->lat, gps_raw_int->lon, gps_raw_int->alt, gps_raw_int->eph, gps_raw_int->epv, gps_raw_int->vel, gps_raw_int->cog, gps_raw_int->satellites_visible, gps_raw_int->alt_ellipsoid, gps_raw_int->h_acc, gps_raw_int->v_acc, gps_raw_int->vel_acc, gps_raw_int->hdg_acc, gps_raw_int->yaw);
+}
+
+/**
+ * @brief Encode a gps_raw_int struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_raw_int C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps_raw_int_t* gps_raw_int)
+{
+    return mavlink_msg_gps_raw_int_pack_chan(system_id, component_id, chan, msg, gps_raw_int->time_usec, gps_raw_int->fix_type, gps_raw_int->lat, gps_raw_int->lon, gps_raw_int->alt, gps_raw_int->eph, gps_raw_int->epv, gps_raw_int->vel, gps_raw_int->cog, gps_raw_int->satellites_visible, gps_raw_int->alt_ellipsoid, gps_raw_int->h_acc, gps_raw_int->v_acc, gps_raw_int->vel_acc, gps_raw_int->hdg_acc, gps_raw_int->yaw);
+}
+
+/**
+ * @brief Send a gps_raw_int message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  GPS fix type.
+ * @param lat [degE7] Latitude (WGS84, EGM96 ellipsoid)
+ * @param lon [degE7] Longitude (WGS84, EGM96 ellipsoid)
+ * @param alt [mm] Altitude (MSL). Positive for up. Note that virtually all GPS modules provide the MSL altitude in addition to the WGS84 altitude.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
+ * @param h_acc [mm] Position uncertainty.
+ * @param v_acc [mm] Altitude uncertainty.
+ * @param vel_acc [mm] Speed uncertainty.
+ * @param hdg_acc [degE5] Heading / track uncertainty
+ * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps_raw_int_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RAW_INT_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint16_t(buf, 20, eph);
+    _mav_put_uint16_t(buf, 22, epv);
+    _mav_put_uint16_t(buf, 24, vel);
+    _mav_put_uint16_t(buf, 26, cog);
+    _mav_put_uint8_t(buf, 28, fix_type);
+    _mav_put_uint8_t(buf, 29, satellites_visible);
+    _mav_put_int32_t(buf, 30, alt_ellipsoid);
+    _mav_put_uint32_t(buf, 34, h_acc);
+    _mav_put_uint32_t(buf, 38, v_acc);
+    _mav_put_uint32_t(buf, 42, vel_acc);
+    _mav_put_uint32_t(buf, 46, hdg_acc);
+    _mav_put_uint16_t(buf, 50, yaw);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, buf, MAVLINK_MSG_ID_GPS_RAW_INT_MIN_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_CRC);
+#else
+    mavlink_gps_raw_int_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.alt_ellipsoid = alt_ellipsoid;
+    packet.h_acc = h_acc;
+    packet.v_acc = v_acc;
+    packet.vel_acc = vel_acc;
+    packet.hdg_acc = hdg_acc;
+    packet.yaw = yaw;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, (const char *)&packet, MAVLINK_MSG_ID_GPS_RAW_INT_MIN_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps_raw_int message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps_raw_int_send_struct(mavlink_channel_t chan, const mavlink_gps_raw_int_t* gps_raw_int)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps_raw_int_send(chan, gps_raw_int->time_usec, gps_raw_int->fix_type, gps_raw_int->lat, gps_raw_int->lon, gps_raw_int->alt, gps_raw_int->eph, gps_raw_int->epv, gps_raw_int->vel, gps_raw_int->cog, gps_raw_int->satellites_visible, gps_raw_int->alt_ellipsoid, gps_raw_int->h_acc, gps_raw_int->v_acc, gps_raw_int->vel_acc, gps_raw_int->hdg_acc, gps_raw_int->yaw);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, (const char *)gps_raw_int, MAVLINK_MSG_ID_GPS_RAW_INT_MIN_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS_RAW_INT_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps_raw_int_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint16_t(buf, 20, eph);
+    _mav_put_uint16_t(buf, 22, epv);
+    _mav_put_uint16_t(buf, 24, vel);
+    _mav_put_uint16_t(buf, 26, cog);
+    _mav_put_uint8_t(buf, 28, fix_type);
+    _mav_put_uint8_t(buf, 29, satellites_visible);
+    _mav_put_int32_t(buf, 30, alt_ellipsoid);
+    _mav_put_uint32_t(buf, 34, h_acc);
+    _mav_put_uint32_t(buf, 38, v_acc);
+    _mav_put_uint32_t(buf, 42, vel_acc);
+    _mav_put_uint32_t(buf, 46, hdg_acc);
+    _mav_put_uint16_t(buf, 50, yaw);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, buf, MAVLINK_MSG_ID_GPS_RAW_INT_MIN_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_CRC);
+#else
+    mavlink_gps_raw_int_t *packet = (mavlink_gps_raw_int_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->eph = eph;
+    packet->epv = epv;
+    packet->vel = vel;
+    packet->cog = cog;
+    packet->fix_type = fix_type;
+    packet->satellites_visible = satellites_visible;
+    packet->alt_ellipsoid = alt_ellipsoid;
+    packet->h_acc = h_acc;
+    packet->v_acc = v_acc;
+    packet->vel_acc = vel_acc;
+    packet->hdg_acc = hdg_acc;
+    packet->yaw = yaw;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RAW_INT, (const char *)packet, MAVLINK_MSG_ID_GPS_RAW_INT_MIN_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_LEN, MAVLINK_MSG_ID_GPS_RAW_INT_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS_RAW_INT UNPACKING
+
+
+/**
+ * @brief Get field time_usec from gps_raw_int message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_gps_raw_int_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field fix_type from gps_raw_int message
+ *
+ * @return  GPS fix type.
+ */
+static inline uint8_t mavlink_msg_gps_raw_int_get_fix_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  28);
+}
+
+/**
+ * @brief Get field lat from gps_raw_int message
+ *
+ * @return [degE7] Latitude (WGS84, EGM96 ellipsoid)
+ */
+static inline int32_t mavlink_msg_gps_raw_int_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field lon from gps_raw_int message
+ *
+ * @return [degE7] Longitude (WGS84, EGM96 ellipsoid)
+ */
+static inline int32_t mavlink_msg_gps_raw_int_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field alt from gps_raw_int message
+ *
+ * @return [mm] Altitude (MSL). Positive for up. Note that virtually all GPS modules provide the MSL altitude in addition to the WGS84 altitude.
+ */
+static inline int32_t mavlink_msg_gps_raw_int_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field eph from gps_raw_int message
+ *
+ * @return  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_get_eph(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  20);
+}
+
+/**
+ * @brief Get field epv from gps_raw_int message
+ *
+ * @return  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_get_epv(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  22);
+}
+
+/**
+ * @brief Get field vel from gps_raw_int message
+ *
+ * @return [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_get_vel(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Get field cog from gps_raw_int message
+ *
+ * @return [cdeg] Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_get_cog(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  26);
+}
+
+/**
+ * @brief Get field satellites_visible from gps_raw_int message
+ *
+ * @return  Number of satellites visible. If unknown, set to UINT8_MAX
+ */
+static inline uint8_t mavlink_msg_gps_raw_int_get_satellites_visible(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  29);
+}
+
+/**
+ * @brief Get field alt_ellipsoid from gps_raw_int message
+ *
+ * @return [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
+ */
+static inline int32_t mavlink_msg_gps_raw_int_get_alt_ellipsoid(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  30);
+}
+
+/**
+ * @brief Get field h_acc from gps_raw_int message
+ *
+ * @return [mm] Position uncertainty.
+ */
+static inline uint32_t mavlink_msg_gps_raw_int_get_h_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  34);
+}
+
+/**
+ * @brief Get field v_acc from gps_raw_int message
+ *
+ * @return [mm] Altitude uncertainty.
+ */
+static inline uint32_t mavlink_msg_gps_raw_int_get_v_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  38);
+}
+
+/**
+ * @brief Get field vel_acc from gps_raw_int message
+ *
+ * @return [mm] Speed uncertainty.
+ */
+static inline uint32_t mavlink_msg_gps_raw_int_get_vel_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  42);
+}
+
+/**
+ * @brief Get field hdg_acc from gps_raw_int message
+ *
+ * @return [degE5] Heading / track uncertainty
+ */
+static inline uint32_t mavlink_msg_gps_raw_int_get_hdg_acc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  46);
+}
+
+/**
+ * @brief Get field yaw from gps_raw_int message
+ *
+ * @return [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
+ */
+static inline uint16_t mavlink_msg_gps_raw_int_get_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  50);
+}
+
+/**
+ * @brief Decode a gps_raw_int message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps_raw_int C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps_raw_int_decode(const mavlink_message_t* msg, mavlink_gps_raw_int_t* gps_raw_int)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps_raw_int->time_usec = mavlink_msg_gps_raw_int_get_time_usec(msg);
+    gps_raw_int->lat = mavlink_msg_gps_raw_int_get_lat(msg);
+    gps_raw_int->lon = mavlink_msg_gps_raw_int_get_lon(msg);
+    gps_raw_int->alt = mavlink_msg_gps_raw_int_get_alt(msg);
+    gps_raw_int->eph = mavlink_msg_gps_raw_int_get_eph(msg);
+    gps_raw_int->epv = mavlink_msg_gps_raw_int_get_epv(msg);
+    gps_raw_int->vel = mavlink_msg_gps_raw_int_get_vel(msg);
+    gps_raw_int->cog = mavlink_msg_gps_raw_int_get_cog(msg);
+    gps_raw_int->fix_type = mavlink_msg_gps_raw_int_get_fix_type(msg);
+    gps_raw_int->satellites_visible = mavlink_msg_gps_raw_int_get_satellites_visible(msg);
+    gps_raw_int->alt_ellipsoid = mavlink_msg_gps_raw_int_get_alt_ellipsoid(msg);
+    gps_raw_int->h_acc = mavlink_msg_gps_raw_int_get_h_acc(msg);
+    gps_raw_int->v_acc = mavlink_msg_gps_raw_int_get_v_acc(msg);
+    gps_raw_int->vel_acc = mavlink_msg_gps_raw_int_get_vel_acc(msg);
+    gps_raw_int->hdg_acc = mavlink_msg_gps_raw_int_get_hdg_acc(msg);
+    gps_raw_int->yaw = mavlink_msg_gps_raw_int_get_yaw(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS_RAW_INT_LEN? msg->len : MAVLINK_MSG_ID_GPS_RAW_INT_LEN;
+        memset(gps_raw_int, 0, MAVLINK_MSG_ID_GPS_RAW_INT_LEN);
+    memcpy(gps_raw_int, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 255 - 0
v2.0/common/mavlink_msg_gps_rtcm_data.h

@@ -0,0 +1,255 @@
+#pragma once
+// MESSAGE GPS_RTCM_DATA PACKING
+
+#define MAVLINK_MSG_ID_GPS_RTCM_DATA 233
+
+
+typedef struct __mavlink_gps_rtcm_data_t {
+ uint8_t flags; /*<  LSB: 1 means message is fragmented, next 2 bits are the fragment ID, the remaining 5 bits are used for the sequence ID. Messages are only to be flushed to the GPS when the entire message has been reconstructed on the autopilot. The fragment ID specifies which order the fragments should be assembled into a buffer, while the sequence ID is used to detect a mismatch between different buffers. The buffer is considered fully reconstructed when either all 4 fragments are present, or all the fragments before the first fragment with a non full payload is received. This management is used to ensure that normal GPS operation doesn't corrupt RTCM data, and to recover from a unreliable transport delivery order.*/
+ uint8_t len; /*< [bytes] data length*/
+ uint8_t data[180]; /*<  RTCM message (may be fragmented)*/
+} mavlink_gps_rtcm_data_t;
+
+#define MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN 182
+#define MAVLINK_MSG_ID_GPS_RTCM_DATA_MIN_LEN 182
+#define MAVLINK_MSG_ID_233_LEN 182
+#define MAVLINK_MSG_ID_233_MIN_LEN 182
+
+#define MAVLINK_MSG_ID_GPS_RTCM_DATA_CRC 35
+#define MAVLINK_MSG_ID_233_CRC 35
+
+#define MAVLINK_MSG_GPS_RTCM_DATA_FIELD_DATA_LEN 180
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS_RTCM_DATA { \
+    233, \
+    "GPS_RTCM_DATA", \
+    3, \
+    {  { "flags", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_rtcm_data_t, flags) }, \
+         { "len", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_gps_rtcm_data_t, len) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 180, 2, offsetof(mavlink_gps_rtcm_data_t, data) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS_RTCM_DATA { \
+    "GPS_RTCM_DATA", \
+    3, \
+    {  { "flags", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_rtcm_data_t, flags) }, \
+         { "len", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_gps_rtcm_data_t, len) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 180, 2, offsetof(mavlink_gps_rtcm_data_t, data) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps_rtcm_data message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param flags  LSB: 1 means message is fragmented, next 2 bits are the fragment ID, the remaining 5 bits are used for the sequence ID. Messages are only to be flushed to the GPS when the entire message has been reconstructed on the autopilot. The fragment ID specifies which order the fragments should be assembled into a buffer, while the sequence ID is used to detect a mismatch between different buffers. The buffer is considered fully reconstructed when either all 4 fragments are present, or all the fragments before the first fragment with a non full payload is received. This management is used to ensure that normal GPS operation doesn't corrupt RTCM data, and to recover from a unreliable transport delivery order.
+ * @param len [bytes] data length
+ * @param data  RTCM message (may be fragmented)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_rtcm_data_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t flags, uint8_t len, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN];
+    _mav_put_uint8_t(buf, 0, flags);
+    _mav_put_uint8_t(buf, 1, len);
+    _mav_put_uint8_t_array(buf, 2, data, 180);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN);
+#else
+    mavlink_gps_rtcm_data_t packet;
+    packet.flags = flags;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*180);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_RTCM_DATA;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS_RTCM_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_CRC);
+}
+
+/**
+ * @brief Pack a gps_rtcm_data message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param flags  LSB: 1 means message is fragmented, next 2 bits are the fragment ID, the remaining 5 bits are used for the sequence ID. Messages are only to be flushed to the GPS when the entire message has been reconstructed on the autopilot. The fragment ID specifies which order the fragments should be assembled into a buffer, while the sequence ID is used to detect a mismatch between different buffers. The buffer is considered fully reconstructed when either all 4 fragments are present, or all the fragments before the first fragment with a non full payload is received. This management is used to ensure that normal GPS operation doesn't corrupt RTCM data, and to recover from a unreliable transport delivery order.
+ * @param len [bytes] data length
+ * @param data  RTCM message (may be fragmented)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_rtcm_data_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t flags,uint8_t len,const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN];
+    _mav_put_uint8_t(buf, 0, flags);
+    _mav_put_uint8_t(buf, 1, len);
+    _mav_put_uint8_t_array(buf, 2, data, 180);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN);
+#else
+    mavlink_gps_rtcm_data_t packet;
+    packet.flags = flags;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*180);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_RTCM_DATA;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS_RTCM_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_CRC);
+}
+
+/**
+ * @brief Encode a gps_rtcm_data struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_rtcm_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_rtcm_data_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_rtcm_data_t* gps_rtcm_data)
+{
+    return mavlink_msg_gps_rtcm_data_pack(system_id, component_id, msg, gps_rtcm_data->flags, gps_rtcm_data->len, gps_rtcm_data->data);
+}
+
+/**
+ * @brief Encode a gps_rtcm_data struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_rtcm_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_rtcm_data_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps_rtcm_data_t* gps_rtcm_data)
+{
+    return mavlink_msg_gps_rtcm_data_pack_chan(system_id, component_id, chan, msg, gps_rtcm_data->flags, gps_rtcm_data->len, gps_rtcm_data->data);
+}
+
+/**
+ * @brief Send a gps_rtcm_data message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param flags  LSB: 1 means message is fragmented, next 2 bits are the fragment ID, the remaining 5 bits are used for the sequence ID. Messages are only to be flushed to the GPS when the entire message has been reconstructed on the autopilot. The fragment ID specifies which order the fragments should be assembled into a buffer, while the sequence ID is used to detect a mismatch between different buffers. The buffer is considered fully reconstructed when either all 4 fragments are present, or all the fragments before the first fragment with a non full payload is received. This management is used to ensure that normal GPS operation doesn't corrupt RTCM data, and to recover from a unreliable transport delivery order.
+ * @param len [bytes] data length
+ * @param data  RTCM message (may be fragmented)
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps_rtcm_data_send(mavlink_channel_t chan, uint8_t flags, uint8_t len, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN];
+    _mav_put_uint8_t(buf, 0, flags);
+    _mav_put_uint8_t(buf, 1, len);
+    _mav_put_uint8_t_array(buf, 2, data, 180);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTCM_DATA, buf, MAVLINK_MSG_ID_GPS_RTCM_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_CRC);
+#else
+    mavlink_gps_rtcm_data_t packet;
+    packet.flags = flags;
+    packet.len = len;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*180);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTCM_DATA, (const char *)&packet, MAVLINK_MSG_ID_GPS_RTCM_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps_rtcm_data message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps_rtcm_data_send_struct(mavlink_channel_t chan, const mavlink_gps_rtcm_data_t* gps_rtcm_data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps_rtcm_data_send(chan, gps_rtcm_data->flags, gps_rtcm_data->len, gps_rtcm_data->data);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTCM_DATA, (const char *)gps_rtcm_data, MAVLINK_MSG_ID_GPS_RTCM_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps_rtcm_data_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t flags, uint8_t len, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, flags);
+    _mav_put_uint8_t(buf, 1, len);
+    _mav_put_uint8_t_array(buf, 2, data, 180);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTCM_DATA, buf, MAVLINK_MSG_ID_GPS_RTCM_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_CRC);
+#else
+    mavlink_gps_rtcm_data_t *packet = (mavlink_gps_rtcm_data_t *)msgbuf;
+    packet->flags = flags;
+    packet->len = len;
+    mav_array_memcpy(packet->data, data, sizeof(uint8_t)*180);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTCM_DATA, (const char *)packet, MAVLINK_MSG_ID_GPS_RTCM_DATA_MIN_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN, MAVLINK_MSG_ID_GPS_RTCM_DATA_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS_RTCM_DATA UNPACKING
+
+
+/**
+ * @brief Get field flags from gps_rtcm_data message
+ *
+ * @return  LSB: 1 means message is fragmented, next 2 bits are the fragment ID, the remaining 5 bits are used for the sequence ID. Messages are only to be flushed to the GPS when the entire message has been reconstructed on the autopilot. The fragment ID specifies which order the fragments should be assembled into a buffer, while the sequence ID is used to detect a mismatch between different buffers. The buffer is considered fully reconstructed when either all 4 fragments are present, or all the fragments before the first fragment with a non full payload is received. This management is used to ensure that normal GPS operation doesn't corrupt RTCM data, and to recover from a unreliable transport delivery order.
+ */
+static inline uint8_t mavlink_msg_gps_rtcm_data_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field len from gps_rtcm_data message
+ *
+ * @return [bytes] data length
+ */
+static inline uint8_t mavlink_msg_gps_rtcm_data_get_len(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  1);
+}
+
+/**
+ * @brief Get field data from gps_rtcm_data message
+ *
+ * @return  RTCM message (may be fragmented)
+ */
+static inline uint16_t mavlink_msg_gps_rtcm_data_get_data(const mavlink_message_t* msg, uint8_t *data)
+{
+    return _MAV_RETURN_uint8_t_array(msg, data, 180,  2);
+}
+
+/**
+ * @brief Decode a gps_rtcm_data message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps_rtcm_data C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps_rtcm_data_decode(const mavlink_message_t* msg, mavlink_gps_rtcm_data_t* gps_rtcm_data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps_rtcm_data->flags = mavlink_msg_gps_rtcm_data_get_flags(msg);
+    gps_rtcm_data->len = mavlink_msg_gps_rtcm_data_get_len(msg);
+    mavlink_msg_gps_rtcm_data_get_data(msg, gps_rtcm_data->data);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN? msg->len : MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN;
+        memset(gps_rtcm_data, 0, MAVLINK_MSG_ID_GPS_RTCM_DATA_LEN);
+    memcpy(gps_rtcm_data, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 513 - 0
v2.0/common/mavlink_msg_gps_rtk.h

@@ -0,0 +1,513 @@
+#pragma once
+// MESSAGE GPS_RTK PACKING
+
+#define MAVLINK_MSG_ID_GPS_RTK 127
+
+
+typedef struct __mavlink_gps_rtk_t {
+ uint32_t time_last_baseline_ms; /*< [ms] Time since boot of last baseline message received.*/
+ uint32_t tow; /*< [ms] GPS Time of Week of last baseline*/
+ int32_t baseline_a_mm; /*< [mm] Current baseline in ECEF x or NED north component.*/
+ int32_t baseline_b_mm; /*< [mm] Current baseline in ECEF y or NED east component.*/
+ int32_t baseline_c_mm; /*< [mm] Current baseline in ECEF z or NED down component.*/
+ uint32_t accuracy; /*<  Current estimate of baseline accuracy.*/
+ int32_t iar_num_hypotheses; /*<  Current number of integer ambiguity hypotheses.*/
+ uint16_t wn; /*<  GPS Week Number of last baseline*/
+ uint8_t rtk_receiver_id; /*<  Identification of connected RTK receiver.*/
+ uint8_t rtk_health; /*<  GPS-specific health report for RTK data.*/
+ uint8_t rtk_rate; /*< [Hz] Rate of baseline messages being received by GPS*/
+ uint8_t nsats; /*<  Current number of sats used for RTK calculation.*/
+ uint8_t baseline_coords_type; /*<  Coordinate system of baseline*/
+} mavlink_gps_rtk_t;
+
+#define MAVLINK_MSG_ID_GPS_RTK_LEN 35
+#define MAVLINK_MSG_ID_GPS_RTK_MIN_LEN 35
+#define MAVLINK_MSG_ID_127_LEN 35
+#define MAVLINK_MSG_ID_127_MIN_LEN 35
+
+#define MAVLINK_MSG_ID_GPS_RTK_CRC 25
+#define MAVLINK_MSG_ID_127_CRC 25
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS_RTK { \
+    127, \
+    "GPS_RTK", \
+    13, \
+    {  { "time_last_baseline_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gps_rtk_t, time_last_baseline_ms) }, \
+         { "rtk_receiver_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_gps_rtk_t, rtk_receiver_id) }, \
+         { "wn", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gps_rtk_t, wn) }, \
+         { "tow", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_gps_rtk_t, tow) }, \
+         { "rtk_health", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_gps_rtk_t, rtk_health) }, \
+         { "rtk_rate", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gps_rtk_t, rtk_rate) }, \
+         { "nsats", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gps_rtk_t, nsats) }, \
+         { "baseline_coords_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gps_rtk_t, baseline_coords_type) }, \
+         { "baseline_a_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_rtk_t, baseline_a_mm) }, \
+         { "baseline_b_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps_rtk_t, baseline_b_mm) }, \
+         { "baseline_c_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps_rtk_t, baseline_c_mm) }, \
+         { "accuracy", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_gps_rtk_t, accuracy) }, \
+         { "iar_num_hypotheses", NULL, MAVLINK_TYPE_INT32_T, 0, 24, offsetof(mavlink_gps_rtk_t, iar_num_hypotheses) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS_RTK { \
+    "GPS_RTK", \
+    13, \
+    {  { "time_last_baseline_ms", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_gps_rtk_t, time_last_baseline_ms) }, \
+         { "rtk_receiver_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_gps_rtk_t, rtk_receiver_id) }, \
+         { "wn", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gps_rtk_t, wn) }, \
+         { "tow", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_gps_rtk_t, tow) }, \
+         { "rtk_health", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_gps_rtk_t, rtk_health) }, \
+         { "rtk_rate", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gps_rtk_t, rtk_rate) }, \
+         { "nsats", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gps_rtk_t, nsats) }, \
+         { "baseline_coords_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gps_rtk_t, baseline_coords_type) }, \
+         { "baseline_a_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps_rtk_t, baseline_a_mm) }, \
+         { "baseline_b_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps_rtk_t, baseline_b_mm) }, \
+         { "baseline_c_mm", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps_rtk_t, baseline_c_mm) }, \
+         { "accuracy", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_gps_rtk_t, accuracy) }, \
+         { "iar_num_hypotheses", NULL, MAVLINK_TYPE_INT32_T, 0, 24, offsetof(mavlink_gps_rtk_t, iar_num_hypotheses) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps_rtk message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_last_baseline_ms [ms] Time since boot of last baseline message received.
+ * @param rtk_receiver_id  Identification of connected RTK receiver.
+ * @param wn  GPS Week Number of last baseline
+ * @param tow [ms] GPS Time of Week of last baseline
+ * @param rtk_health  GPS-specific health report for RTK data.
+ * @param rtk_rate [Hz] Rate of baseline messages being received by GPS
+ * @param nsats  Current number of sats used for RTK calculation.
+ * @param baseline_coords_type  Coordinate system of baseline
+ * @param baseline_a_mm [mm] Current baseline in ECEF x or NED north component.
+ * @param baseline_b_mm [mm] Current baseline in ECEF y or NED east component.
+ * @param baseline_c_mm [mm] Current baseline in ECEF z or NED down component.
+ * @param accuracy  Current estimate of baseline accuracy.
+ * @param iar_num_hypotheses  Current number of integer ambiguity hypotheses.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_rtk_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t time_last_baseline_ms, uint8_t rtk_receiver_id, uint16_t wn, uint32_t tow, uint8_t rtk_health, uint8_t rtk_rate, uint8_t nsats, uint8_t baseline_coords_type, int32_t baseline_a_mm, int32_t baseline_b_mm, int32_t baseline_c_mm, uint32_t accuracy, int32_t iar_num_hypotheses)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RTK_LEN];
+    _mav_put_uint32_t(buf, 0, time_last_baseline_ms);
+    _mav_put_uint32_t(buf, 4, tow);
+    _mav_put_int32_t(buf, 8, baseline_a_mm);
+    _mav_put_int32_t(buf, 12, baseline_b_mm);
+    _mav_put_int32_t(buf, 16, baseline_c_mm);
+    _mav_put_uint32_t(buf, 20, accuracy);
+    _mav_put_int32_t(buf, 24, iar_num_hypotheses);
+    _mav_put_uint16_t(buf, 28, wn);
+    _mav_put_uint8_t(buf, 30, rtk_receiver_id);
+    _mav_put_uint8_t(buf, 31, rtk_health);
+    _mav_put_uint8_t(buf, 32, rtk_rate);
+    _mav_put_uint8_t(buf, 33, nsats);
+    _mav_put_uint8_t(buf, 34, baseline_coords_type);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_RTK_LEN);
+#else
+    mavlink_gps_rtk_t packet;
+    packet.time_last_baseline_ms = time_last_baseline_ms;
+    packet.tow = tow;
+    packet.baseline_a_mm = baseline_a_mm;
+    packet.baseline_b_mm = baseline_b_mm;
+    packet.baseline_c_mm = baseline_c_mm;
+    packet.accuracy = accuracy;
+    packet.iar_num_hypotheses = iar_num_hypotheses;
+    packet.wn = wn;
+    packet.rtk_receiver_id = rtk_receiver_id;
+    packet.rtk_health = rtk_health;
+    packet.rtk_rate = rtk_rate;
+    packet.nsats = nsats;
+    packet.baseline_coords_type = baseline_coords_type;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_RTK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_RTK;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS_RTK_LEN, MAVLINK_MSG_ID_GPS_RTK_CRC);
+}
+
+/**
+ * @brief Pack a gps_rtk message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_last_baseline_ms [ms] Time since boot of last baseline message received.
+ * @param rtk_receiver_id  Identification of connected RTK receiver.
+ * @param wn  GPS Week Number of last baseline
+ * @param tow [ms] GPS Time of Week of last baseline
+ * @param rtk_health  GPS-specific health report for RTK data.
+ * @param rtk_rate [Hz] Rate of baseline messages being received by GPS
+ * @param nsats  Current number of sats used for RTK calculation.
+ * @param baseline_coords_type  Coordinate system of baseline
+ * @param baseline_a_mm [mm] Current baseline in ECEF x or NED north component.
+ * @param baseline_b_mm [mm] Current baseline in ECEF y or NED east component.
+ * @param baseline_c_mm [mm] Current baseline in ECEF z or NED down component.
+ * @param accuracy  Current estimate of baseline accuracy.
+ * @param iar_num_hypotheses  Current number of integer ambiguity hypotheses.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_rtk_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t time_last_baseline_ms,uint8_t rtk_receiver_id,uint16_t wn,uint32_t tow,uint8_t rtk_health,uint8_t rtk_rate,uint8_t nsats,uint8_t baseline_coords_type,int32_t baseline_a_mm,int32_t baseline_b_mm,int32_t baseline_c_mm,uint32_t accuracy,int32_t iar_num_hypotheses)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RTK_LEN];
+    _mav_put_uint32_t(buf, 0, time_last_baseline_ms);
+    _mav_put_uint32_t(buf, 4, tow);
+    _mav_put_int32_t(buf, 8, baseline_a_mm);
+    _mav_put_int32_t(buf, 12, baseline_b_mm);
+    _mav_put_int32_t(buf, 16, baseline_c_mm);
+    _mav_put_uint32_t(buf, 20, accuracy);
+    _mav_put_int32_t(buf, 24, iar_num_hypotheses);
+    _mav_put_uint16_t(buf, 28, wn);
+    _mav_put_uint8_t(buf, 30, rtk_receiver_id);
+    _mav_put_uint8_t(buf, 31, rtk_health);
+    _mav_put_uint8_t(buf, 32, rtk_rate);
+    _mav_put_uint8_t(buf, 33, nsats);
+    _mav_put_uint8_t(buf, 34, baseline_coords_type);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_RTK_LEN);
+#else
+    mavlink_gps_rtk_t packet;
+    packet.time_last_baseline_ms = time_last_baseline_ms;
+    packet.tow = tow;
+    packet.baseline_a_mm = baseline_a_mm;
+    packet.baseline_b_mm = baseline_b_mm;
+    packet.baseline_c_mm = baseline_c_mm;
+    packet.accuracy = accuracy;
+    packet.iar_num_hypotheses = iar_num_hypotheses;
+    packet.wn = wn;
+    packet.rtk_receiver_id = rtk_receiver_id;
+    packet.rtk_health = rtk_health;
+    packet.rtk_rate = rtk_rate;
+    packet.nsats = nsats;
+    packet.baseline_coords_type = baseline_coords_type;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_RTK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_RTK;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS_RTK_LEN, MAVLINK_MSG_ID_GPS_RTK_CRC);
+}
+
+/**
+ * @brief Encode a gps_rtk struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_rtk C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_rtk_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_rtk_t* gps_rtk)
+{
+    return mavlink_msg_gps_rtk_pack(system_id, component_id, msg, gps_rtk->time_last_baseline_ms, gps_rtk->rtk_receiver_id, gps_rtk->wn, gps_rtk->tow, gps_rtk->rtk_health, gps_rtk->rtk_rate, gps_rtk->nsats, gps_rtk->baseline_coords_type, gps_rtk->baseline_a_mm, gps_rtk->baseline_b_mm, gps_rtk->baseline_c_mm, gps_rtk->accuracy, gps_rtk->iar_num_hypotheses);
+}
+
+/**
+ * @brief Encode a gps_rtk struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_rtk C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_rtk_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps_rtk_t* gps_rtk)
+{
+    return mavlink_msg_gps_rtk_pack_chan(system_id, component_id, chan, msg, gps_rtk->time_last_baseline_ms, gps_rtk->rtk_receiver_id, gps_rtk->wn, gps_rtk->tow, gps_rtk->rtk_health, gps_rtk->rtk_rate, gps_rtk->nsats, gps_rtk->baseline_coords_type, gps_rtk->baseline_a_mm, gps_rtk->baseline_b_mm, gps_rtk->baseline_c_mm, gps_rtk->accuracy, gps_rtk->iar_num_hypotheses);
+}
+
+/**
+ * @brief Send a gps_rtk message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_last_baseline_ms [ms] Time since boot of last baseline message received.
+ * @param rtk_receiver_id  Identification of connected RTK receiver.
+ * @param wn  GPS Week Number of last baseline
+ * @param tow [ms] GPS Time of Week of last baseline
+ * @param rtk_health  GPS-specific health report for RTK data.
+ * @param rtk_rate [Hz] Rate of baseline messages being received by GPS
+ * @param nsats  Current number of sats used for RTK calculation.
+ * @param baseline_coords_type  Coordinate system of baseline
+ * @param baseline_a_mm [mm] Current baseline in ECEF x or NED north component.
+ * @param baseline_b_mm [mm] Current baseline in ECEF y or NED east component.
+ * @param baseline_c_mm [mm] Current baseline in ECEF z or NED down component.
+ * @param accuracy  Current estimate of baseline accuracy.
+ * @param iar_num_hypotheses  Current number of integer ambiguity hypotheses.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps_rtk_send(mavlink_channel_t chan, uint32_t time_last_baseline_ms, uint8_t rtk_receiver_id, uint16_t wn, uint32_t tow, uint8_t rtk_health, uint8_t rtk_rate, uint8_t nsats, uint8_t baseline_coords_type, int32_t baseline_a_mm, int32_t baseline_b_mm, int32_t baseline_c_mm, uint32_t accuracy, int32_t iar_num_hypotheses)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_RTK_LEN];
+    _mav_put_uint32_t(buf, 0, time_last_baseline_ms);
+    _mav_put_uint32_t(buf, 4, tow);
+    _mav_put_int32_t(buf, 8, baseline_a_mm);
+    _mav_put_int32_t(buf, 12, baseline_b_mm);
+    _mav_put_int32_t(buf, 16, baseline_c_mm);
+    _mav_put_uint32_t(buf, 20, accuracy);
+    _mav_put_int32_t(buf, 24, iar_num_hypotheses);
+    _mav_put_uint16_t(buf, 28, wn);
+    _mav_put_uint8_t(buf, 30, rtk_receiver_id);
+    _mav_put_uint8_t(buf, 31, rtk_health);
+    _mav_put_uint8_t(buf, 32, rtk_rate);
+    _mav_put_uint8_t(buf, 33, nsats);
+    _mav_put_uint8_t(buf, 34, baseline_coords_type);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTK, buf, MAVLINK_MSG_ID_GPS_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS_RTK_LEN, MAVLINK_MSG_ID_GPS_RTK_CRC);
+#else
+    mavlink_gps_rtk_t packet;
+    packet.time_last_baseline_ms = time_last_baseline_ms;
+    packet.tow = tow;
+    packet.baseline_a_mm = baseline_a_mm;
+    packet.baseline_b_mm = baseline_b_mm;
+    packet.baseline_c_mm = baseline_c_mm;
+    packet.accuracy = accuracy;
+    packet.iar_num_hypotheses = iar_num_hypotheses;
+    packet.wn = wn;
+    packet.rtk_receiver_id = rtk_receiver_id;
+    packet.rtk_health = rtk_health;
+    packet.rtk_rate = rtk_rate;
+    packet.nsats = nsats;
+    packet.baseline_coords_type = baseline_coords_type;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTK, (const char *)&packet, MAVLINK_MSG_ID_GPS_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS_RTK_LEN, MAVLINK_MSG_ID_GPS_RTK_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps_rtk message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps_rtk_send_struct(mavlink_channel_t chan, const mavlink_gps_rtk_t* gps_rtk)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps_rtk_send(chan, gps_rtk->time_last_baseline_ms, gps_rtk->rtk_receiver_id, gps_rtk->wn, gps_rtk->tow, gps_rtk->rtk_health, gps_rtk->rtk_rate, gps_rtk->nsats, gps_rtk->baseline_coords_type, gps_rtk->baseline_a_mm, gps_rtk->baseline_b_mm, gps_rtk->baseline_c_mm, gps_rtk->accuracy, gps_rtk->iar_num_hypotheses);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTK, (const char *)gps_rtk, MAVLINK_MSG_ID_GPS_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS_RTK_LEN, MAVLINK_MSG_ID_GPS_RTK_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS_RTK_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps_rtk_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t time_last_baseline_ms, uint8_t rtk_receiver_id, uint16_t wn, uint32_t tow, uint8_t rtk_health, uint8_t rtk_rate, uint8_t nsats, uint8_t baseline_coords_type, int32_t baseline_a_mm, int32_t baseline_b_mm, int32_t baseline_c_mm, uint32_t accuracy, int32_t iar_num_hypotheses)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, time_last_baseline_ms);
+    _mav_put_uint32_t(buf, 4, tow);
+    _mav_put_int32_t(buf, 8, baseline_a_mm);
+    _mav_put_int32_t(buf, 12, baseline_b_mm);
+    _mav_put_int32_t(buf, 16, baseline_c_mm);
+    _mav_put_uint32_t(buf, 20, accuracy);
+    _mav_put_int32_t(buf, 24, iar_num_hypotheses);
+    _mav_put_uint16_t(buf, 28, wn);
+    _mav_put_uint8_t(buf, 30, rtk_receiver_id);
+    _mav_put_uint8_t(buf, 31, rtk_health);
+    _mav_put_uint8_t(buf, 32, rtk_rate);
+    _mav_put_uint8_t(buf, 33, nsats);
+    _mav_put_uint8_t(buf, 34, baseline_coords_type);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTK, buf, MAVLINK_MSG_ID_GPS_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS_RTK_LEN, MAVLINK_MSG_ID_GPS_RTK_CRC);
+#else
+    mavlink_gps_rtk_t *packet = (mavlink_gps_rtk_t *)msgbuf;
+    packet->time_last_baseline_ms = time_last_baseline_ms;
+    packet->tow = tow;
+    packet->baseline_a_mm = baseline_a_mm;
+    packet->baseline_b_mm = baseline_b_mm;
+    packet->baseline_c_mm = baseline_c_mm;
+    packet->accuracy = accuracy;
+    packet->iar_num_hypotheses = iar_num_hypotheses;
+    packet->wn = wn;
+    packet->rtk_receiver_id = rtk_receiver_id;
+    packet->rtk_health = rtk_health;
+    packet->rtk_rate = rtk_rate;
+    packet->nsats = nsats;
+    packet->baseline_coords_type = baseline_coords_type;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_RTK, (const char *)packet, MAVLINK_MSG_ID_GPS_RTK_MIN_LEN, MAVLINK_MSG_ID_GPS_RTK_LEN, MAVLINK_MSG_ID_GPS_RTK_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS_RTK UNPACKING
+
+
+/**
+ * @brief Get field time_last_baseline_ms from gps_rtk message
+ *
+ * @return [ms] Time since boot of last baseline message received.
+ */
+static inline uint32_t mavlink_msg_gps_rtk_get_time_last_baseline_ms(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field rtk_receiver_id from gps_rtk message
+ *
+ * @return  Identification of connected RTK receiver.
+ */
+static inline uint8_t mavlink_msg_gps_rtk_get_rtk_receiver_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field wn from gps_rtk message
+ *
+ * @return  GPS Week Number of last baseline
+ */
+static inline uint16_t mavlink_msg_gps_rtk_get_wn(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  28);
+}
+
+/**
+ * @brief Get field tow from gps_rtk message
+ *
+ * @return [ms] GPS Time of Week of last baseline
+ */
+static inline uint32_t mavlink_msg_gps_rtk_get_tow(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field rtk_health from gps_rtk message
+ *
+ * @return  GPS-specific health report for RTK data.
+ */
+static inline uint8_t mavlink_msg_gps_rtk_get_rtk_health(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  31);
+}
+
+/**
+ * @brief Get field rtk_rate from gps_rtk message
+ *
+ * @return [Hz] Rate of baseline messages being received by GPS
+ */
+static inline uint8_t mavlink_msg_gps_rtk_get_rtk_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field nsats from gps_rtk message
+ *
+ * @return  Current number of sats used for RTK calculation.
+ */
+static inline uint8_t mavlink_msg_gps_rtk_get_nsats(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field baseline_coords_type from gps_rtk message
+ *
+ * @return  Coordinate system of baseline
+ */
+static inline uint8_t mavlink_msg_gps_rtk_get_baseline_coords_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field baseline_a_mm from gps_rtk message
+ *
+ * @return [mm] Current baseline in ECEF x or NED north component.
+ */
+static inline int32_t mavlink_msg_gps_rtk_get_baseline_a_mm(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field baseline_b_mm from gps_rtk message
+ *
+ * @return [mm] Current baseline in ECEF y or NED east component.
+ */
+static inline int32_t mavlink_msg_gps_rtk_get_baseline_b_mm(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field baseline_c_mm from gps_rtk message
+ *
+ * @return [mm] Current baseline in ECEF z or NED down component.
+ */
+static inline int32_t mavlink_msg_gps_rtk_get_baseline_c_mm(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field accuracy from gps_rtk message
+ *
+ * @return  Current estimate of baseline accuracy.
+ */
+static inline uint32_t mavlink_msg_gps_rtk_get_accuracy(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  20);
+}
+
+/**
+ * @brief Get field iar_num_hypotheses from gps_rtk message
+ *
+ * @return  Current number of integer ambiguity hypotheses.
+ */
+static inline int32_t mavlink_msg_gps_rtk_get_iar_num_hypotheses(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  24);
+}
+
+/**
+ * @brief Decode a gps_rtk message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps_rtk C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps_rtk_decode(const mavlink_message_t* msg, mavlink_gps_rtk_t* gps_rtk)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps_rtk->time_last_baseline_ms = mavlink_msg_gps_rtk_get_time_last_baseline_ms(msg);
+    gps_rtk->tow = mavlink_msg_gps_rtk_get_tow(msg);
+    gps_rtk->baseline_a_mm = mavlink_msg_gps_rtk_get_baseline_a_mm(msg);
+    gps_rtk->baseline_b_mm = mavlink_msg_gps_rtk_get_baseline_b_mm(msg);
+    gps_rtk->baseline_c_mm = mavlink_msg_gps_rtk_get_baseline_c_mm(msg);
+    gps_rtk->accuracy = mavlink_msg_gps_rtk_get_accuracy(msg);
+    gps_rtk->iar_num_hypotheses = mavlink_msg_gps_rtk_get_iar_num_hypotheses(msg);
+    gps_rtk->wn = mavlink_msg_gps_rtk_get_wn(msg);
+    gps_rtk->rtk_receiver_id = mavlink_msg_gps_rtk_get_rtk_receiver_id(msg);
+    gps_rtk->rtk_health = mavlink_msg_gps_rtk_get_rtk_health(msg);
+    gps_rtk->rtk_rate = mavlink_msg_gps_rtk_get_rtk_rate(msg);
+    gps_rtk->nsats = mavlink_msg_gps_rtk_get_nsats(msg);
+    gps_rtk->baseline_coords_type = mavlink_msg_gps_rtk_get_baseline_coords_type(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS_RTK_LEN? msg->len : MAVLINK_MSG_ID_GPS_RTK_LEN;
+        memset(gps_rtk, 0, MAVLINK_MSG_ID_GPS_RTK_LEN);
+    memcpy(gps_rtk, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 334 - 0
v2.0/common/mavlink_msg_gps_status.h

@@ -0,0 +1,334 @@
+#pragma once
+// MESSAGE GPS_STATUS PACKING
+
+#define MAVLINK_MSG_ID_GPS_STATUS 25
+
+
+typedef struct __mavlink_gps_status_t {
+ uint8_t satellites_visible; /*<  Number of satellites visible*/
+ uint8_t satellite_prn[20]; /*<  Global satellite ID*/
+ uint8_t satellite_used[20]; /*<  0: Satellite not used, 1: used for localization*/
+ uint8_t satellite_elevation[20]; /*< [deg] Elevation (0: right on top of receiver, 90: on the horizon) of satellite*/
+ uint8_t satellite_azimuth[20]; /*< [deg] Direction of satellite, 0: 0 deg, 255: 360 deg.*/
+ uint8_t satellite_snr[20]; /*< [dB] Signal to noise ratio of satellite*/
+} mavlink_gps_status_t;
+
+#define MAVLINK_MSG_ID_GPS_STATUS_LEN 101
+#define MAVLINK_MSG_ID_GPS_STATUS_MIN_LEN 101
+#define MAVLINK_MSG_ID_25_LEN 101
+#define MAVLINK_MSG_ID_25_MIN_LEN 101
+
+#define MAVLINK_MSG_ID_GPS_STATUS_CRC 23
+#define MAVLINK_MSG_ID_25_CRC 23
+
+#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_PRN_LEN 20
+#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_USED_LEN 20
+#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_ELEVATION_LEN 20
+#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_AZIMUTH_LEN 20
+#define MAVLINK_MSG_GPS_STATUS_FIELD_SATELLITE_SNR_LEN 20
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_GPS_STATUS { \
+    25, \
+    "GPS_STATUS", \
+    6, \
+    {  { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_status_t, satellites_visible) }, \
+         { "satellite_prn", NULL, MAVLINK_TYPE_UINT8_T, 20, 1, offsetof(mavlink_gps_status_t, satellite_prn) }, \
+         { "satellite_used", NULL, MAVLINK_TYPE_UINT8_T, 20, 21, offsetof(mavlink_gps_status_t, satellite_used) }, \
+         { "satellite_elevation", NULL, MAVLINK_TYPE_UINT8_T, 20, 41, offsetof(mavlink_gps_status_t, satellite_elevation) }, \
+         { "satellite_azimuth", NULL, MAVLINK_TYPE_UINT8_T, 20, 61, offsetof(mavlink_gps_status_t, satellite_azimuth) }, \
+         { "satellite_snr", NULL, MAVLINK_TYPE_UINT8_T, 20, 81, offsetof(mavlink_gps_status_t, satellite_snr) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_GPS_STATUS { \
+    "GPS_STATUS", \
+    6, \
+    {  { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_gps_status_t, satellites_visible) }, \
+         { "satellite_prn", NULL, MAVLINK_TYPE_UINT8_T, 20, 1, offsetof(mavlink_gps_status_t, satellite_prn) }, \
+         { "satellite_used", NULL, MAVLINK_TYPE_UINT8_T, 20, 21, offsetof(mavlink_gps_status_t, satellite_used) }, \
+         { "satellite_elevation", NULL, MAVLINK_TYPE_UINT8_T, 20, 41, offsetof(mavlink_gps_status_t, satellite_elevation) }, \
+         { "satellite_azimuth", NULL, MAVLINK_TYPE_UINT8_T, 20, 61, offsetof(mavlink_gps_status_t, satellite_azimuth) }, \
+         { "satellite_snr", NULL, MAVLINK_TYPE_UINT8_T, 20, 81, offsetof(mavlink_gps_status_t, satellite_snr) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a gps_status message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param satellites_visible  Number of satellites visible
+ * @param satellite_prn  Global satellite ID
+ * @param satellite_used  0: Satellite not used, 1: used for localization
+ * @param satellite_elevation [deg] Elevation (0: right on top of receiver, 90: on the horizon) of satellite
+ * @param satellite_azimuth [deg] Direction of satellite, 0: 0 deg, 255: 360 deg.
+ * @param satellite_snr [dB] Signal to noise ratio of satellite
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t satellites_visible, const uint8_t *satellite_prn, const uint8_t *satellite_used, const uint8_t *satellite_elevation, const uint8_t *satellite_azimuth, const uint8_t *satellite_snr)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_STATUS_LEN];
+    _mav_put_uint8_t(buf, 0, satellites_visible);
+    _mav_put_uint8_t_array(buf, 1, satellite_prn, 20);
+    _mav_put_uint8_t_array(buf, 21, satellite_used, 20);
+    _mav_put_uint8_t_array(buf, 41, satellite_elevation, 20);
+    _mav_put_uint8_t_array(buf, 61, satellite_azimuth, 20);
+    _mav_put_uint8_t_array(buf, 81, satellite_snr, 20);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_STATUS_LEN);
+#else
+    mavlink_gps_status_t packet;
+    packet.satellites_visible = satellites_visible;
+    mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(uint8_t)*20);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS_STATUS_MIN_LEN, MAVLINK_MSG_ID_GPS_STATUS_LEN, MAVLINK_MSG_ID_GPS_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a gps_status message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param satellites_visible  Number of satellites visible
+ * @param satellite_prn  Global satellite ID
+ * @param satellite_used  0: Satellite not used, 1: used for localization
+ * @param satellite_elevation [deg] Elevation (0: right on top of receiver, 90: on the horizon) of satellite
+ * @param satellite_azimuth [deg] Direction of satellite, 0: 0 deg, 255: 360 deg.
+ * @param satellite_snr [dB] Signal to noise ratio of satellite
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_gps_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t satellites_visible,const uint8_t *satellite_prn,const uint8_t *satellite_used,const uint8_t *satellite_elevation,const uint8_t *satellite_azimuth,const uint8_t *satellite_snr)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_STATUS_LEN];
+    _mav_put_uint8_t(buf, 0, satellites_visible);
+    _mav_put_uint8_t_array(buf, 1, satellite_prn, 20);
+    _mav_put_uint8_t_array(buf, 21, satellite_used, 20);
+    _mav_put_uint8_t_array(buf, 41, satellite_elevation, 20);
+    _mav_put_uint8_t_array(buf, 61, satellite_azimuth, 20);
+    _mav_put_uint8_t_array(buf, 81, satellite_snr, 20);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS_STATUS_LEN);
+#else
+    mavlink_gps_status_t packet;
+    packet.satellites_visible = satellites_visible;
+    mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(uint8_t)*20);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_GPS_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS_STATUS_MIN_LEN, MAVLINK_MSG_ID_GPS_STATUS_LEN, MAVLINK_MSG_ID_GPS_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a gps_status struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps_status_t* gps_status)
+{
+    return mavlink_msg_gps_status_pack(system_id, component_id, msg, gps_status->satellites_visible, gps_status->satellite_prn, gps_status->satellite_used, gps_status->satellite_elevation, gps_status->satellite_azimuth, gps_status->satellite_snr);
+}
+
+/**
+ * @brief Encode a gps_status struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param gps_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_gps_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps_status_t* gps_status)
+{
+    return mavlink_msg_gps_status_pack_chan(system_id, component_id, chan, msg, gps_status->satellites_visible, gps_status->satellite_prn, gps_status->satellite_used, gps_status->satellite_elevation, gps_status->satellite_azimuth, gps_status->satellite_snr);
+}
+
+/**
+ * @brief Send a gps_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param satellites_visible  Number of satellites visible
+ * @param satellite_prn  Global satellite ID
+ * @param satellite_used  0: Satellite not used, 1: used for localization
+ * @param satellite_elevation [deg] Elevation (0: right on top of receiver, 90: on the horizon) of satellite
+ * @param satellite_azimuth [deg] Direction of satellite, 0: 0 deg, 255: 360 deg.
+ * @param satellite_snr [dB] Signal to noise ratio of satellite
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_gps_status_send(mavlink_channel_t chan, uint8_t satellites_visible, const uint8_t *satellite_prn, const uint8_t *satellite_used, const uint8_t *satellite_elevation, const uint8_t *satellite_azimuth, const uint8_t *satellite_snr)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_GPS_STATUS_LEN];
+    _mav_put_uint8_t(buf, 0, satellites_visible);
+    _mav_put_uint8_t_array(buf, 1, satellite_prn, 20);
+    _mav_put_uint8_t_array(buf, 21, satellite_used, 20);
+    _mav_put_uint8_t_array(buf, 41, satellite_elevation, 20);
+    _mav_put_uint8_t_array(buf, 61, satellite_azimuth, 20);
+    _mav_put_uint8_t_array(buf, 81, satellite_snr, 20);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, buf, MAVLINK_MSG_ID_GPS_STATUS_MIN_LEN, MAVLINK_MSG_ID_GPS_STATUS_LEN, MAVLINK_MSG_ID_GPS_STATUS_CRC);
+#else
+    mavlink_gps_status_t packet;
+    packet.satellites_visible = satellites_visible;
+    mav_array_memcpy(packet.satellite_prn, satellite_prn, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_used, satellite_used, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_elevation, satellite_elevation, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_azimuth, satellite_azimuth, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet.satellite_snr, satellite_snr, sizeof(uint8_t)*20);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, (const char *)&packet, MAVLINK_MSG_ID_GPS_STATUS_MIN_LEN, MAVLINK_MSG_ID_GPS_STATUS_LEN, MAVLINK_MSG_ID_GPS_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a gps_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_gps_status_send_struct(mavlink_channel_t chan, const mavlink_gps_status_t* gps_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_gps_status_send(chan, gps_status->satellites_visible, gps_status->satellite_prn, gps_status->satellite_used, gps_status->satellite_elevation, gps_status->satellite_azimuth, gps_status->satellite_snr);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, (const char *)gps_status, MAVLINK_MSG_ID_GPS_STATUS_MIN_LEN, MAVLINK_MSG_ID_GPS_STATUS_LEN, MAVLINK_MSG_ID_GPS_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_GPS_STATUS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_gps_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t satellites_visible, const uint8_t *satellite_prn, const uint8_t *satellite_used, const uint8_t *satellite_elevation, const uint8_t *satellite_azimuth, const uint8_t *satellite_snr)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, satellites_visible);
+    _mav_put_uint8_t_array(buf, 1, satellite_prn, 20);
+    _mav_put_uint8_t_array(buf, 21, satellite_used, 20);
+    _mav_put_uint8_t_array(buf, 41, satellite_elevation, 20);
+    _mav_put_uint8_t_array(buf, 61, satellite_azimuth, 20);
+    _mav_put_uint8_t_array(buf, 81, satellite_snr, 20);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, buf, MAVLINK_MSG_ID_GPS_STATUS_MIN_LEN, MAVLINK_MSG_ID_GPS_STATUS_LEN, MAVLINK_MSG_ID_GPS_STATUS_CRC);
+#else
+    mavlink_gps_status_t *packet = (mavlink_gps_status_t *)msgbuf;
+    packet->satellites_visible = satellites_visible;
+    mav_array_memcpy(packet->satellite_prn, satellite_prn, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet->satellite_used, satellite_used, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet->satellite_elevation, satellite_elevation, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet->satellite_azimuth, satellite_azimuth, sizeof(uint8_t)*20);
+    mav_array_memcpy(packet->satellite_snr, satellite_snr, sizeof(uint8_t)*20);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS_STATUS, (const char *)packet, MAVLINK_MSG_ID_GPS_STATUS_MIN_LEN, MAVLINK_MSG_ID_GPS_STATUS_LEN, MAVLINK_MSG_ID_GPS_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE GPS_STATUS UNPACKING
+
+
+/**
+ * @brief Get field satellites_visible from gps_status message
+ *
+ * @return  Number of satellites visible
+ */
+static inline uint8_t mavlink_msg_gps_status_get_satellites_visible(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field satellite_prn from gps_status message
+ *
+ * @return  Global satellite ID
+ */
+static inline uint16_t mavlink_msg_gps_status_get_satellite_prn(const mavlink_message_t* msg, uint8_t *satellite_prn)
+{
+    return _MAV_RETURN_uint8_t_array(msg, satellite_prn, 20,  1);
+}
+
+/**
+ * @brief Get field satellite_used from gps_status message
+ *
+ * @return  0: Satellite not used, 1: used for localization
+ */
+static inline uint16_t mavlink_msg_gps_status_get_satellite_used(const mavlink_message_t* msg, uint8_t *satellite_used)
+{
+    return _MAV_RETURN_uint8_t_array(msg, satellite_used, 20,  21);
+}
+
+/**
+ * @brief Get field satellite_elevation from gps_status message
+ *
+ * @return [deg] Elevation (0: right on top of receiver, 90: on the horizon) of satellite
+ */
+static inline uint16_t mavlink_msg_gps_status_get_satellite_elevation(const mavlink_message_t* msg, uint8_t *satellite_elevation)
+{
+    return _MAV_RETURN_uint8_t_array(msg, satellite_elevation, 20,  41);
+}
+
+/**
+ * @brief Get field satellite_azimuth from gps_status message
+ *
+ * @return [deg] Direction of satellite, 0: 0 deg, 255: 360 deg.
+ */
+static inline uint16_t mavlink_msg_gps_status_get_satellite_azimuth(const mavlink_message_t* msg, uint8_t *satellite_azimuth)
+{
+    return _MAV_RETURN_uint8_t_array(msg, satellite_azimuth, 20,  61);
+}
+
+/**
+ * @brief Get field satellite_snr from gps_status message
+ *
+ * @return [dB] Signal to noise ratio of satellite
+ */
+static inline uint16_t mavlink_msg_gps_status_get_satellite_snr(const mavlink_message_t* msg, uint8_t *satellite_snr)
+{
+    return _MAV_RETURN_uint8_t_array(msg, satellite_snr, 20,  81);
+}
+
+/**
+ * @brief Decode a gps_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param gps_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_gps_status_decode(const mavlink_message_t* msg, mavlink_gps_status_t* gps_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    gps_status->satellites_visible = mavlink_msg_gps_status_get_satellites_visible(msg);
+    mavlink_msg_gps_status_get_satellite_prn(msg, gps_status->satellite_prn);
+    mavlink_msg_gps_status_get_satellite_used(msg, gps_status->satellite_used);
+    mavlink_msg_gps_status_get_satellite_elevation(msg, gps_status->satellite_elevation);
+    mavlink_msg_gps_status_get_satellite_azimuth(msg, gps_status->satellite_azimuth);
+    mavlink_msg_gps_status_get_satellite_snr(msg, gps_status->satellite_snr);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_GPS_STATUS_LEN? msg->len : MAVLINK_MSG_ID_GPS_STATUS_LEN;
+        memset(gps_status, 0, MAVLINK_MSG_ID_GPS_STATUS_LEN);
+    memcpy(gps_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 788 - 0
v2.0/common/mavlink_msg_high_latency.h

@@ -0,0 +1,788 @@
+#pragma once
+// MESSAGE HIGH_LATENCY PACKING
+
+#define MAVLINK_MSG_ID_HIGH_LATENCY 234
+
+
+typedef struct __mavlink_high_latency_t {
+ uint32_t custom_mode; /*<  A bitfield for use for autopilot-specific flags.*/
+ int32_t latitude; /*< [degE7] Latitude*/
+ int32_t longitude; /*< [degE7] Longitude*/
+ int16_t roll; /*< [cdeg] roll*/
+ int16_t pitch; /*< [cdeg] pitch*/
+ uint16_t heading; /*< [cdeg] heading*/
+ int16_t heading_sp; /*< [cdeg] heading setpoint*/
+ int16_t altitude_amsl; /*< [m] Altitude above mean sea level*/
+ int16_t altitude_sp; /*< [m] Altitude setpoint relative to the home position*/
+ uint16_t wp_distance; /*< [m] distance to target*/
+ uint8_t base_mode; /*<  Bitmap of enabled system modes.*/
+ uint8_t landed_state; /*<  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.*/
+ int8_t throttle; /*< [%] throttle (percentage)*/
+ uint8_t airspeed; /*< [m/s] airspeed*/
+ uint8_t airspeed_sp; /*< [m/s] airspeed setpoint*/
+ uint8_t groundspeed; /*< [m/s] groundspeed*/
+ int8_t climb_rate; /*< [m/s] climb rate*/
+ uint8_t gps_nsat; /*<  Number of satellites visible. If unknown, set to UINT8_MAX*/
+ uint8_t gps_fix_type; /*<  GPS Fix type.*/
+ uint8_t battery_remaining; /*< [%] Remaining battery (percentage)*/
+ int8_t temperature; /*< [degC] Autopilot temperature (degrees C)*/
+ int8_t temperature_air; /*< [degC] Air temperature (degrees C) from airspeed sensor*/
+ uint8_t failsafe; /*<  failsafe (each bit represents a failsafe where 0=ok, 1=failsafe active (bit0:RC, bit1:batt, bit2:GPS, bit3:GCS, bit4:fence)*/
+ uint8_t wp_num; /*<  current waypoint number*/
+} mavlink_high_latency_t;
+
+#define MAVLINK_MSG_ID_HIGH_LATENCY_LEN 40
+#define MAVLINK_MSG_ID_HIGH_LATENCY_MIN_LEN 40
+#define MAVLINK_MSG_ID_234_LEN 40
+#define MAVLINK_MSG_ID_234_MIN_LEN 40
+
+#define MAVLINK_MSG_ID_HIGH_LATENCY_CRC 150
+#define MAVLINK_MSG_ID_234_CRC 150
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIGH_LATENCY { \
+    234, \
+    "HIGH_LATENCY", \
+    24, \
+    {  { "base_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_high_latency_t, base_mode) }, \
+         { "custom_mode", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_high_latency_t, custom_mode) }, \
+         { "landed_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_high_latency_t, landed_state) }, \
+         { "roll", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_high_latency_t, roll) }, \
+         { "pitch", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_high_latency_t, pitch) }, \
+         { "heading", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_high_latency_t, heading) }, \
+         { "throttle", NULL, MAVLINK_TYPE_INT8_T, 0, 28, offsetof(mavlink_high_latency_t, throttle) }, \
+         { "heading_sp", NULL, MAVLINK_TYPE_INT16_T, 0, 18, offsetof(mavlink_high_latency_t, heading_sp) }, \
+         { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_high_latency_t, latitude) }, \
+         { "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_high_latency_t, longitude) }, \
+         { "altitude_amsl", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_high_latency_t, altitude_amsl) }, \
+         { "altitude_sp", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_high_latency_t, altitude_sp) }, \
+         { "airspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_high_latency_t, airspeed) }, \
+         { "airspeed_sp", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_high_latency_t, airspeed_sp) }, \
+         { "groundspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_high_latency_t, groundspeed) }, \
+         { "climb_rate", NULL, MAVLINK_TYPE_INT8_T, 0, 32, offsetof(mavlink_high_latency_t, climb_rate) }, \
+         { "gps_nsat", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_high_latency_t, gps_nsat) }, \
+         { "gps_fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_high_latency_t, gps_fix_type) }, \
+         { "battery_remaining", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_high_latency_t, battery_remaining) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT8_T, 0, 36, offsetof(mavlink_high_latency_t, temperature) }, \
+         { "temperature_air", NULL, MAVLINK_TYPE_INT8_T, 0, 37, offsetof(mavlink_high_latency_t, temperature_air) }, \
+         { "failsafe", NULL, MAVLINK_TYPE_UINT8_T, 0, 38, offsetof(mavlink_high_latency_t, failsafe) }, \
+         { "wp_num", NULL, MAVLINK_TYPE_UINT8_T, 0, 39, offsetof(mavlink_high_latency_t, wp_num) }, \
+         { "wp_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_high_latency_t, wp_distance) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIGH_LATENCY { \
+    "HIGH_LATENCY", \
+    24, \
+    {  { "base_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_high_latency_t, base_mode) }, \
+         { "custom_mode", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_high_latency_t, custom_mode) }, \
+         { "landed_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_high_latency_t, landed_state) }, \
+         { "roll", NULL, MAVLINK_TYPE_INT16_T, 0, 12, offsetof(mavlink_high_latency_t, roll) }, \
+         { "pitch", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_high_latency_t, pitch) }, \
+         { "heading", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_high_latency_t, heading) }, \
+         { "throttle", NULL, MAVLINK_TYPE_INT8_T, 0, 28, offsetof(mavlink_high_latency_t, throttle) }, \
+         { "heading_sp", NULL, MAVLINK_TYPE_INT16_T, 0, 18, offsetof(mavlink_high_latency_t, heading_sp) }, \
+         { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_high_latency_t, latitude) }, \
+         { "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_high_latency_t, longitude) }, \
+         { "altitude_amsl", NULL, MAVLINK_TYPE_INT16_T, 0, 20, offsetof(mavlink_high_latency_t, altitude_amsl) }, \
+         { "altitude_sp", NULL, MAVLINK_TYPE_INT16_T, 0, 22, offsetof(mavlink_high_latency_t, altitude_sp) }, \
+         { "airspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_high_latency_t, airspeed) }, \
+         { "airspeed_sp", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_high_latency_t, airspeed_sp) }, \
+         { "groundspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_high_latency_t, groundspeed) }, \
+         { "climb_rate", NULL, MAVLINK_TYPE_INT8_T, 0, 32, offsetof(mavlink_high_latency_t, climb_rate) }, \
+         { "gps_nsat", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_high_latency_t, gps_nsat) }, \
+         { "gps_fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_high_latency_t, gps_fix_type) }, \
+         { "battery_remaining", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_high_latency_t, battery_remaining) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT8_T, 0, 36, offsetof(mavlink_high_latency_t, temperature) }, \
+         { "temperature_air", NULL, MAVLINK_TYPE_INT8_T, 0, 37, offsetof(mavlink_high_latency_t, temperature_air) }, \
+         { "failsafe", NULL, MAVLINK_TYPE_UINT8_T, 0, 38, offsetof(mavlink_high_latency_t, failsafe) }, \
+         { "wp_num", NULL, MAVLINK_TYPE_UINT8_T, 0, 39, offsetof(mavlink_high_latency_t, wp_num) }, \
+         { "wp_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_high_latency_t, wp_distance) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a high_latency message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param base_mode  Bitmap of enabled system modes.
+ * @param custom_mode  A bitfield for use for autopilot-specific flags.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ * @param roll [cdeg] roll
+ * @param pitch [cdeg] pitch
+ * @param heading [cdeg] heading
+ * @param throttle [%] throttle (percentage)
+ * @param heading_sp [cdeg] heading setpoint
+ * @param latitude [degE7] Latitude
+ * @param longitude [degE7] Longitude
+ * @param altitude_amsl [m] Altitude above mean sea level
+ * @param altitude_sp [m] Altitude setpoint relative to the home position
+ * @param airspeed [m/s] airspeed
+ * @param airspeed_sp [m/s] airspeed setpoint
+ * @param groundspeed [m/s] groundspeed
+ * @param climb_rate [m/s] climb rate
+ * @param gps_nsat  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param gps_fix_type  GPS Fix type.
+ * @param battery_remaining [%] Remaining battery (percentage)
+ * @param temperature [degC] Autopilot temperature (degrees C)
+ * @param temperature_air [degC] Air temperature (degrees C) from airspeed sensor
+ * @param failsafe  failsafe (each bit represents a failsafe where 0=ok, 1=failsafe active (bit0:RC, bit1:batt, bit2:GPS, bit3:GCS, bit4:fence)
+ * @param wp_num  current waypoint number
+ * @param wp_distance [m] distance to target
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_high_latency_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t base_mode, uint32_t custom_mode, uint8_t landed_state, int16_t roll, int16_t pitch, uint16_t heading, int8_t throttle, int16_t heading_sp, int32_t latitude, int32_t longitude, int16_t altitude_amsl, int16_t altitude_sp, uint8_t airspeed, uint8_t airspeed_sp, uint8_t groundspeed, int8_t climb_rate, uint8_t gps_nsat, uint8_t gps_fix_type, uint8_t battery_remaining, int8_t temperature, int8_t temperature_air, uint8_t failsafe, uint8_t wp_num, uint16_t wp_distance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGH_LATENCY_LEN];
+    _mav_put_uint32_t(buf, 0, custom_mode);
+    _mav_put_int32_t(buf, 4, latitude);
+    _mav_put_int32_t(buf, 8, longitude);
+    _mav_put_int16_t(buf, 12, roll);
+    _mav_put_int16_t(buf, 14, pitch);
+    _mav_put_uint16_t(buf, 16, heading);
+    _mav_put_int16_t(buf, 18, heading_sp);
+    _mav_put_int16_t(buf, 20, altitude_amsl);
+    _mav_put_int16_t(buf, 22, altitude_sp);
+    _mav_put_uint16_t(buf, 24, wp_distance);
+    _mav_put_uint8_t(buf, 26, base_mode);
+    _mav_put_uint8_t(buf, 27, landed_state);
+    _mav_put_int8_t(buf, 28, throttle);
+    _mav_put_uint8_t(buf, 29, airspeed);
+    _mav_put_uint8_t(buf, 30, airspeed_sp);
+    _mav_put_uint8_t(buf, 31, groundspeed);
+    _mav_put_int8_t(buf, 32, climb_rate);
+    _mav_put_uint8_t(buf, 33, gps_nsat);
+    _mav_put_uint8_t(buf, 34, gps_fix_type);
+    _mav_put_uint8_t(buf, 35, battery_remaining);
+    _mav_put_int8_t(buf, 36, temperature);
+    _mav_put_int8_t(buf, 37, temperature_air);
+    _mav_put_uint8_t(buf, 38, failsafe);
+    _mav_put_uint8_t(buf, 39, wp_num);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIGH_LATENCY_LEN);
+#else
+    mavlink_high_latency_t packet;
+    packet.custom_mode = custom_mode;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.heading = heading;
+    packet.heading_sp = heading_sp;
+    packet.altitude_amsl = altitude_amsl;
+    packet.altitude_sp = altitude_sp;
+    packet.wp_distance = wp_distance;
+    packet.base_mode = base_mode;
+    packet.landed_state = landed_state;
+    packet.throttle = throttle;
+    packet.airspeed = airspeed;
+    packet.airspeed_sp = airspeed_sp;
+    packet.groundspeed = groundspeed;
+    packet.climb_rate = climb_rate;
+    packet.gps_nsat = gps_nsat;
+    packet.gps_fix_type = gps_fix_type;
+    packet.battery_remaining = battery_remaining;
+    packet.temperature = temperature;
+    packet.temperature_air = temperature_air;
+    packet.failsafe = failsafe;
+    packet.wp_num = wp_num;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIGH_LATENCY_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIGH_LATENCY;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIGH_LATENCY_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_CRC);
+}
+
+/**
+ * @brief Pack a high_latency message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param base_mode  Bitmap of enabled system modes.
+ * @param custom_mode  A bitfield for use for autopilot-specific flags.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ * @param roll [cdeg] roll
+ * @param pitch [cdeg] pitch
+ * @param heading [cdeg] heading
+ * @param throttle [%] throttle (percentage)
+ * @param heading_sp [cdeg] heading setpoint
+ * @param latitude [degE7] Latitude
+ * @param longitude [degE7] Longitude
+ * @param altitude_amsl [m] Altitude above mean sea level
+ * @param altitude_sp [m] Altitude setpoint relative to the home position
+ * @param airspeed [m/s] airspeed
+ * @param airspeed_sp [m/s] airspeed setpoint
+ * @param groundspeed [m/s] groundspeed
+ * @param climb_rate [m/s] climb rate
+ * @param gps_nsat  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param gps_fix_type  GPS Fix type.
+ * @param battery_remaining [%] Remaining battery (percentage)
+ * @param temperature [degC] Autopilot temperature (degrees C)
+ * @param temperature_air [degC] Air temperature (degrees C) from airspeed sensor
+ * @param failsafe  failsafe (each bit represents a failsafe where 0=ok, 1=failsafe active (bit0:RC, bit1:batt, bit2:GPS, bit3:GCS, bit4:fence)
+ * @param wp_num  current waypoint number
+ * @param wp_distance [m] distance to target
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_high_latency_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t base_mode,uint32_t custom_mode,uint8_t landed_state,int16_t roll,int16_t pitch,uint16_t heading,int8_t throttle,int16_t heading_sp,int32_t latitude,int32_t longitude,int16_t altitude_amsl,int16_t altitude_sp,uint8_t airspeed,uint8_t airspeed_sp,uint8_t groundspeed,int8_t climb_rate,uint8_t gps_nsat,uint8_t gps_fix_type,uint8_t battery_remaining,int8_t temperature,int8_t temperature_air,uint8_t failsafe,uint8_t wp_num,uint16_t wp_distance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGH_LATENCY_LEN];
+    _mav_put_uint32_t(buf, 0, custom_mode);
+    _mav_put_int32_t(buf, 4, latitude);
+    _mav_put_int32_t(buf, 8, longitude);
+    _mav_put_int16_t(buf, 12, roll);
+    _mav_put_int16_t(buf, 14, pitch);
+    _mav_put_uint16_t(buf, 16, heading);
+    _mav_put_int16_t(buf, 18, heading_sp);
+    _mav_put_int16_t(buf, 20, altitude_amsl);
+    _mav_put_int16_t(buf, 22, altitude_sp);
+    _mav_put_uint16_t(buf, 24, wp_distance);
+    _mav_put_uint8_t(buf, 26, base_mode);
+    _mav_put_uint8_t(buf, 27, landed_state);
+    _mav_put_int8_t(buf, 28, throttle);
+    _mav_put_uint8_t(buf, 29, airspeed);
+    _mav_put_uint8_t(buf, 30, airspeed_sp);
+    _mav_put_uint8_t(buf, 31, groundspeed);
+    _mav_put_int8_t(buf, 32, climb_rate);
+    _mav_put_uint8_t(buf, 33, gps_nsat);
+    _mav_put_uint8_t(buf, 34, gps_fix_type);
+    _mav_put_uint8_t(buf, 35, battery_remaining);
+    _mav_put_int8_t(buf, 36, temperature);
+    _mav_put_int8_t(buf, 37, temperature_air);
+    _mav_put_uint8_t(buf, 38, failsafe);
+    _mav_put_uint8_t(buf, 39, wp_num);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIGH_LATENCY_LEN);
+#else
+    mavlink_high_latency_t packet;
+    packet.custom_mode = custom_mode;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.heading = heading;
+    packet.heading_sp = heading_sp;
+    packet.altitude_amsl = altitude_amsl;
+    packet.altitude_sp = altitude_sp;
+    packet.wp_distance = wp_distance;
+    packet.base_mode = base_mode;
+    packet.landed_state = landed_state;
+    packet.throttle = throttle;
+    packet.airspeed = airspeed;
+    packet.airspeed_sp = airspeed_sp;
+    packet.groundspeed = groundspeed;
+    packet.climb_rate = climb_rate;
+    packet.gps_nsat = gps_nsat;
+    packet.gps_fix_type = gps_fix_type;
+    packet.battery_remaining = battery_remaining;
+    packet.temperature = temperature;
+    packet.temperature_air = temperature_air;
+    packet.failsafe = failsafe;
+    packet.wp_num = wp_num;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIGH_LATENCY_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIGH_LATENCY;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIGH_LATENCY_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_CRC);
+}
+
+/**
+ * @brief Encode a high_latency struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param high_latency C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_high_latency_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_high_latency_t* high_latency)
+{
+    return mavlink_msg_high_latency_pack(system_id, component_id, msg, high_latency->base_mode, high_latency->custom_mode, high_latency->landed_state, high_latency->roll, high_latency->pitch, high_latency->heading, high_latency->throttle, high_latency->heading_sp, high_latency->latitude, high_latency->longitude, high_latency->altitude_amsl, high_latency->altitude_sp, high_latency->airspeed, high_latency->airspeed_sp, high_latency->groundspeed, high_latency->climb_rate, high_latency->gps_nsat, high_latency->gps_fix_type, high_latency->battery_remaining, high_latency->temperature, high_latency->temperature_air, high_latency->failsafe, high_latency->wp_num, high_latency->wp_distance);
+}
+
+/**
+ * @brief Encode a high_latency struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param high_latency C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_high_latency_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_high_latency_t* high_latency)
+{
+    return mavlink_msg_high_latency_pack_chan(system_id, component_id, chan, msg, high_latency->base_mode, high_latency->custom_mode, high_latency->landed_state, high_latency->roll, high_latency->pitch, high_latency->heading, high_latency->throttle, high_latency->heading_sp, high_latency->latitude, high_latency->longitude, high_latency->altitude_amsl, high_latency->altitude_sp, high_latency->airspeed, high_latency->airspeed_sp, high_latency->groundspeed, high_latency->climb_rate, high_latency->gps_nsat, high_latency->gps_fix_type, high_latency->battery_remaining, high_latency->temperature, high_latency->temperature_air, high_latency->failsafe, high_latency->wp_num, high_latency->wp_distance);
+}
+
+/**
+ * @brief Send a high_latency message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param base_mode  Bitmap of enabled system modes.
+ * @param custom_mode  A bitfield for use for autopilot-specific flags.
+ * @param landed_state  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ * @param roll [cdeg] roll
+ * @param pitch [cdeg] pitch
+ * @param heading [cdeg] heading
+ * @param throttle [%] throttle (percentage)
+ * @param heading_sp [cdeg] heading setpoint
+ * @param latitude [degE7] Latitude
+ * @param longitude [degE7] Longitude
+ * @param altitude_amsl [m] Altitude above mean sea level
+ * @param altitude_sp [m] Altitude setpoint relative to the home position
+ * @param airspeed [m/s] airspeed
+ * @param airspeed_sp [m/s] airspeed setpoint
+ * @param groundspeed [m/s] groundspeed
+ * @param climb_rate [m/s] climb rate
+ * @param gps_nsat  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param gps_fix_type  GPS Fix type.
+ * @param battery_remaining [%] Remaining battery (percentage)
+ * @param temperature [degC] Autopilot temperature (degrees C)
+ * @param temperature_air [degC] Air temperature (degrees C) from airspeed sensor
+ * @param failsafe  failsafe (each bit represents a failsafe where 0=ok, 1=failsafe active (bit0:RC, bit1:batt, bit2:GPS, bit3:GCS, bit4:fence)
+ * @param wp_num  current waypoint number
+ * @param wp_distance [m] distance to target
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_high_latency_send(mavlink_channel_t chan, uint8_t base_mode, uint32_t custom_mode, uint8_t landed_state, int16_t roll, int16_t pitch, uint16_t heading, int8_t throttle, int16_t heading_sp, int32_t latitude, int32_t longitude, int16_t altitude_amsl, int16_t altitude_sp, uint8_t airspeed, uint8_t airspeed_sp, uint8_t groundspeed, int8_t climb_rate, uint8_t gps_nsat, uint8_t gps_fix_type, uint8_t battery_remaining, int8_t temperature, int8_t temperature_air, uint8_t failsafe, uint8_t wp_num, uint16_t wp_distance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGH_LATENCY_LEN];
+    _mav_put_uint32_t(buf, 0, custom_mode);
+    _mav_put_int32_t(buf, 4, latitude);
+    _mav_put_int32_t(buf, 8, longitude);
+    _mav_put_int16_t(buf, 12, roll);
+    _mav_put_int16_t(buf, 14, pitch);
+    _mav_put_uint16_t(buf, 16, heading);
+    _mav_put_int16_t(buf, 18, heading_sp);
+    _mav_put_int16_t(buf, 20, altitude_amsl);
+    _mav_put_int16_t(buf, 22, altitude_sp);
+    _mav_put_uint16_t(buf, 24, wp_distance);
+    _mav_put_uint8_t(buf, 26, base_mode);
+    _mav_put_uint8_t(buf, 27, landed_state);
+    _mav_put_int8_t(buf, 28, throttle);
+    _mav_put_uint8_t(buf, 29, airspeed);
+    _mav_put_uint8_t(buf, 30, airspeed_sp);
+    _mav_put_uint8_t(buf, 31, groundspeed);
+    _mav_put_int8_t(buf, 32, climb_rate);
+    _mav_put_uint8_t(buf, 33, gps_nsat);
+    _mav_put_uint8_t(buf, 34, gps_fix_type);
+    _mav_put_uint8_t(buf, 35, battery_remaining);
+    _mav_put_int8_t(buf, 36, temperature);
+    _mav_put_int8_t(buf, 37, temperature_air);
+    _mav_put_uint8_t(buf, 38, failsafe);
+    _mav_put_uint8_t(buf, 39, wp_num);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY, buf, MAVLINK_MSG_ID_HIGH_LATENCY_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_CRC);
+#else
+    mavlink_high_latency_t packet;
+    packet.custom_mode = custom_mode;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.roll = roll;
+    packet.pitch = pitch;
+    packet.heading = heading;
+    packet.heading_sp = heading_sp;
+    packet.altitude_amsl = altitude_amsl;
+    packet.altitude_sp = altitude_sp;
+    packet.wp_distance = wp_distance;
+    packet.base_mode = base_mode;
+    packet.landed_state = landed_state;
+    packet.throttle = throttle;
+    packet.airspeed = airspeed;
+    packet.airspeed_sp = airspeed_sp;
+    packet.groundspeed = groundspeed;
+    packet.climb_rate = climb_rate;
+    packet.gps_nsat = gps_nsat;
+    packet.gps_fix_type = gps_fix_type;
+    packet.battery_remaining = battery_remaining;
+    packet.temperature = temperature;
+    packet.temperature_air = temperature_air;
+    packet.failsafe = failsafe;
+    packet.wp_num = wp_num;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY, (const char *)&packet, MAVLINK_MSG_ID_HIGH_LATENCY_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_CRC);
+#endif
+}
+
+/**
+ * @brief Send a high_latency message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_high_latency_send_struct(mavlink_channel_t chan, const mavlink_high_latency_t* high_latency)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_high_latency_send(chan, high_latency->base_mode, high_latency->custom_mode, high_latency->landed_state, high_latency->roll, high_latency->pitch, high_latency->heading, high_latency->throttle, high_latency->heading_sp, high_latency->latitude, high_latency->longitude, high_latency->altitude_amsl, high_latency->altitude_sp, high_latency->airspeed, high_latency->airspeed_sp, high_latency->groundspeed, high_latency->climb_rate, high_latency->gps_nsat, high_latency->gps_fix_type, high_latency->battery_remaining, high_latency->temperature, high_latency->temperature_air, high_latency->failsafe, high_latency->wp_num, high_latency->wp_distance);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY, (const char *)high_latency, MAVLINK_MSG_ID_HIGH_LATENCY_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIGH_LATENCY_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_high_latency_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t base_mode, uint32_t custom_mode, uint8_t landed_state, int16_t roll, int16_t pitch, uint16_t heading, int8_t throttle, int16_t heading_sp, int32_t latitude, int32_t longitude, int16_t altitude_amsl, int16_t altitude_sp, uint8_t airspeed, uint8_t airspeed_sp, uint8_t groundspeed, int8_t climb_rate, uint8_t gps_nsat, uint8_t gps_fix_type, uint8_t battery_remaining, int8_t temperature, int8_t temperature_air, uint8_t failsafe, uint8_t wp_num, uint16_t wp_distance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, custom_mode);
+    _mav_put_int32_t(buf, 4, latitude);
+    _mav_put_int32_t(buf, 8, longitude);
+    _mav_put_int16_t(buf, 12, roll);
+    _mav_put_int16_t(buf, 14, pitch);
+    _mav_put_uint16_t(buf, 16, heading);
+    _mav_put_int16_t(buf, 18, heading_sp);
+    _mav_put_int16_t(buf, 20, altitude_amsl);
+    _mav_put_int16_t(buf, 22, altitude_sp);
+    _mav_put_uint16_t(buf, 24, wp_distance);
+    _mav_put_uint8_t(buf, 26, base_mode);
+    _mav_put_uint8_t(buf, 27, landed_state);
+    _mav_put_int8_t(buf, 28, throttle);
+    _mav_put_uint8_t(buf, 29, airspeed);
+    _mav_put_uint8_t(buf, 30, airspeed_sp);
+    _mav_put_uint8_t(buf, 31, groundspeed);
+    _mav_put_int8_t(buf, 32, climb_rate);
+    _mav_put_uint8_t(buf, 33, gps_nsat);
+    _mav_put_uint8_t(buf, 34, gps_fix_type);
+    _mav_put_uint8_t(buf, 35, battery_remaining);
+    _mav_put_int8_t(buf, 36, temperature);
+    _mav_put_int8_t(buf, 37, temperature_air);
+    _mav_put_uint8_t(buf, 38, failsafe);
+    _mav_put_uint8_t(buf, 39, wp_num);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY, buf, MAVLINK_MSG_ID_HIGH_LATENCY_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_CRC);
+#else
+    mavlink_high_latency_t *packet = (mavlink_high_latency_t *)msgbuf;
+    packet->custom_mode = custom_mode;
+    packet->latitude = latitude;
+    packet->longitude = longitude;
+    packet->roll = roll;
+    packet->pitch = pitch;
+    packet->heading = heading;
+    packet->heading_sp = heading_sp;
+    packet->altitude_amsl = altitude_amsl;
+    packet->altitude_sp = altitude_sp;
+    packet->wp_distance = wp_distance;
+    packet->base_mode = base_mode;
+    packet->landed_state = landed_state;
+    packet->throttle = throttle;
+    packet->airspeed = airspeed;
+    packet->airspeed_sp = airspeed_sp;
+    packet->groundspeed = groundspeed;
+    packet->climb_rate = climb_rate;
+    packet->gps_nsat = gps_nsat;
+    packet->gps_fix_type = gps_fix_type;
+    packet->battery_remaining = battery_remaining;
+    packet->temperature = temperature;
+    packet->temperature_air = temperature_air;
+    packet->failsafe = failsafe;
+    packet->wp_num = wp_num;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY, (const char *)packet, MAVLINK_MSG_ID_HIGH_LATENCY_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_LEN, MAVLINK_MSG_ID_HIGH_LATENCY_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIGH_LATENCY UNPACKING
+
+
+/**
+ * @brief Get field base_mode from high_latency message
+ *
+ * @return  Bitmap of enabled system modes.
+ */
+static inline uint8_t mavlink_msg_high_latency_get_base_mode(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  26);
+}
+
+/**
+ * @brief Get field custom_mode from high_latency message
+ *
+ * @return  A bitfield for use for autopilot-specific flags.
+ */
+static inline uint32_t mavlink_msg_high_latency_get_custom_mode(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field landed_state from high_latency message
+ *
+ * @return  The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown.
+ */
+static inline uint8_t mavlink_msg_high_latency_get_landed_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  27);
+}
+
+/**
+ * @brief Get field roll from high_latency message
+ *
+ * @return [cdeg] roll
+ */
+static inline int16_t mavlink_msg_high_latency_get_roll(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  12);
+}
+
+/**
+ * @brief Get field pitch from high_latency message
+ *
+ * @return [cdeg] pitch
+ */
+static inline int16_t mavlink_msg_high_latency_get_pitch(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  14);
+}
+
+/**
+ * @brief Get field heading from high_latency message
+ *
+ * @return [cdeg] heading
+ */
+static inline uint16_t mavlink_msg_high_latency_get_heading(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  16);
+}
+
+/**
+ * @brief Get field throttle from high_latency message
+ *
+ * @return [%] throttle (percentage)
+ */
+static inline int8_t mavlink_msg_high_latency_get_throttle(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  28);
+}
+
+/**
+ * @brief Get field heading_sp from high_latency message
+ *
+ * @return [cdeg] heading setpoint
+ */
+static inline int16_t mavlink_msg_high_latency_get_heading_sp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  18);
+}
+
+/**
+ * @brief Get field latitude from high_latency message
+ *
+ * @return [degE7] Latitude
+ */
+static inline int32_t mavlink_msg_high_latency_get_latitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field longitude from high_latency message
+ *
+ * @return [degE7] Longitude
+ */
+static inline int32_t mavlink_msg_high_latency_get_longitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field altitude_amsl from high_latency message
+ *
+ * @return [m] Altitude above mean sea level
+ */
+static inline int16_t mavlink_msg_high_latency_get_altitude_amsl(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  20);
+}
+
+/**
+ * @brief Get field altitude_sp from high_latency message
+ *
+ * @return [m] Altitude setpoint relative to the home position
+ */
+static inline int16_t mavlink_msg_high_latency_get_altitude_sp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  22);
+}
+
+/**
+ * @brief Get field airspeed from high_latency message
+ *
+ * @return [m/s] airspeed
+ */
+static inline uint8_t mavlink_msg_high_latency_get_airspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  29);
+}
+
+/**
+ * @brief Get field airspeed_sp from high_latency message
+ *
+ * @return [m/s] airspeed setpoint
+ */
+static inline uint8_t mavlink_msg_high_latency_get_airspeed_sp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field groundspeed from high_latency message
+ *
+ * @return [m/s] groundspeed
+ */
+static inline uint8_t mavlink_msg_high_latency_get_groundspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  31);
+}
+
+/**
+ * @brief Get field climb_rate from high_latency message
+ *
+ * @return [m/s] climb rate
+ */
+static inline int8_t mavlink_msg_high_latency_get_climb_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  32);
+}
+
+/**
+ * @brief Get field gps_nsat from high_latency message
+ *
+ * @return  Number of satellites visible. If unknown, set to UINT8_MAX
+ */
+static inline uint8_t mavlink_msg_high_latency_get_gps_nsat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field gps_fix_type from high_latency message
+ *
+ * @return  GPS Fix type.
+ */
+static inline uint8_t mavlink_msg_high_latency_get_gps_fix_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field battery_remaining from high_latency message
+ *
+ * @return [%] Remaining battery (percentage)
+ */
+static inline uint8_t mavlink_msg_high_latency_get_battery_remaining(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  35);
+}
+
+/**
+ * @brief Get field temperature from high_latency message
+ *
+ * @return [degC] Autopilot temperature (degrees C)
+ */
+static inline int8_t mavlink_msg_high_latency_get_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  36);
+}
+
+/**
+ * @brief Get field temperature_air from high_latency message
+ *
+ * @return [degC] Air temperature (degrees C) from airspeed sensor
+ */
+static inline int8_t mavlink_msg_high_latency_get_temperature_air(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  37);
+}
+
+/**
+ * @brief Get field failsafe from high_latency message
+ *
+ * @return  failsafe (each bit represents a failsafe where 0=ok, 1=failsafe active (bit0:RC, bit1:batt, bit2:GPS, bit3:GCS, bit4:fence)
+ */
+static inline uint8_t mavlink_msg_high_latency_get_failsafe(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  38);
+}
+
+/**
+ * @brief Get field wp_num from high_latency message
+ *
+ * @return  current waypoint number
+ */
+static inline uint8_t mavlink_msg_high_latency_get_wp_num(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  39);
+}
+
+/**
+ * @brief Get field wp_distance from high_latency message
+ *
+ * @return [m] distance to target
+ */
+static inline uint16_t mavlink_msg_high_latency_get_wp_distance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Decode a high_latency message into a struct
+ *
+ * @param msg The message to decode
+ * @param high_latency C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_high_latency_decode(const mavlink_message_t* msg, mavlink_high_latency_t* high_latency)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    high_latency->custom_mode = mavlink_msg_high_latency_get_custom_mode(msg);
+    high_latency->latitude = mavlink_msg_high_latency_get_latitude(msg);
+    high_latency->longitude = mavlink_msg_high_latency_get_longitude(msg);
+    high_latency->roll = mavlink_msg_high_latency_get_roll(msg);
+    high_latency->pitch = mavlink_msg_high_latency_get_pitch(msg);
+    high_latency->heading = mavlink_msg_high_latency_get_heading(msg);
+    high_latency->heading_sp = mavlink_msg_high_latency_get_heading_sp(msg);
+    high_latency->altitude_amsl = mavlink_msg_high_latency_get_altitude_amsl(msg);
+    high_latency->altitude_sp = mavlink_msg_high_latency_get_altitude_sp(msg);
+    high_latency->wp_distance = mavlink_msg_high_latency_get_wp_distance(msg);
+    high_latency->base_mode = mavlink_msg_high_latency_get_base_mode(msg);
+    high_latency->landed_state = mavlink_msg_high_latency_get_landed_state(msg);
+    high_latency->throttle = mavlink_msg_high_latency_get_throttle(msg);
+    high_latency->airspeed = mavlink_msg_high_latency_get_airspeed(msg);
+    high_latency->airspeed_sp = mavlink_msg_high_latency_get_airspeed_sp(msg);
+    high_latency->groundspeed = mavlink_msg_high_latency_get_groundspeed(msg);
+    high_latency->climb_rate = mavlink_msg_high_latency_get_climb_rate(msg);
+    high_latency->gps_nsat = mavlink_msg_high_latency_get_gps_nsat(msg);
+    high_latency->gps_fix_type = mavlink_msg_high_latency_get_gps_fix_type(msg);
+    high_latency->battery_remaining = mavlink_msg_high_latency_get_battery_remaining(msg);
+    high_latency->temperature = mavlink_msg_high_latency_get_temperature(msg);
+    high_latency->temperature_air = mavlink_msg_high_latency_get_temperature_air(msg);
+    high_latency->failsafe = mavlink_msg_high_latency_get_failsafe(msg);
+    high_latency->wp_num = mavlink_msg_high_latency_get_wp_num(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIGH_LATENCY_LEN? msg->len : MAVLINK_MSG_ID_HIGH_LATENCY_LEN;
+        memset(high_latency, 0, MAVLINK_MSG_ID_HIGH_LATENCY_LEN);
+    memcpy(high_latency, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 863 - 0
v2.0/common/mavlink_msg_high_latency2.h

@@ -0,0 +1,863 @@
+#pragma once
+// MESSAGE HIGH_LATENCY2 PACKING
+
+#define MAVLINK_MSG_ID_HIGH_LATENCY2 235
+
+
+typedef struct __mavlink_high_latency2_t {
+ uint32_t timestamp; /*< [ms] Timestamp (milliseconds since boot or Unix epoch)*/
+ int32_t latitude; /*< [degE7] Latitude*/
+ int32_t longitude; /*< [degE7] Longitude*/
+ uint16_t custom_mode; /*<  A bitfield for use for autopilot-specific flags (2 byte version).*/
+ int16_t altitude; /*< [m] Altitude above mean sea level*/
+ int16_t target_altitude; /*< [m] Altitude setpoint*/
+ uint16_t target_distance; /*< [dam] Distance to target waypoint or position*/
+ uint16_t wp_num; /*<  Current waypoint number*/
+ uint16_t failure_flags; /*<  Bitmap of failure flags.*/
+ uint8_t type; /*<  Type of the MAV (quadrotor, helicopter, etc.)*/
+ uint8_t autopilot; /*<  Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.*/
+ uint8_t heading; /*< [deg/2] Heading*/
+ uint8_t target_heading; /*< [deg/2] Heading setpoint*/
+ uint8_t throttle; /*< [%] Throttle*/
+ uint8_t airspeed; /*< [m/s*5] Airspeed*/
+ uint8_t airspeed_sp; /*< [m/s*5] Airspeed setpoint*/
+ uint8_t groundspeed; /*< [m/s*5] Groundspeed*/
+ uint8_t windspeed; /*< [m/s*5] Windspeed*/
+ uint8_t wind_heading; /*< [deg/2] Wind heading*/
+ uint8_t eph; /*< [dm] Maximum error horizontal position since last message*/
+ uint8_t epv; /*< [dm] Maximum error vertical position since last message*/
+ int8_t temperature_air; /*< [degC] Air temperature from airspeed sensor*/
+ int8_t climb_rate; /*< [dm/s] Maximum climb rate magnitude since last message*/
+ int8_t battery; /*< [%] Battery level (-1 if field not provided).*/
+ int8_t custom0; /*<  Field for custom payload.*/
+ int8_t custom1; /*<  Field for custom payload.*/
+ int8_t custom2; /*<  Field for custom payload.*/
+} mavlink_high_latency2_t;
+
+#define MAVLINK_MSG_ID_HIGH_LATENCY2_LEN 42
+#define MAVLINK_MSG_ID_HIGH_LATENCY2_MIN_LEN 42
+#define MAVLINK_MSG_ID_235_LEN 42
+#define MAVLINK_MSG_ID_235_MIN_LEN 42
+
+#define MAVLINK_MSG_ID_HIGH_LATENCY2_CRC 179
+#define MAVLINK_MSG_ID_235_CRC 179
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIGH_LATENCY2 { \
+    235, \
+    "HIGH_LATENCY2", \
+    27, \
+    {  { "timestamp", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_high_latency2_t, timestamp) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 24, offsetof(mavlink_high_latency2_t, type) }, \
+         { "autopilot", NULL, MAVLINK_TYPE_UINT8_T, 0, 25, offsetof(mavlink_high_latency2_t, autopilot) }, \
+         { "custom_mode", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_high_latency2_t, custom_mode) }, \
+         { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_high_latency2_t, latitude) }, \
+         { "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_high_latency2_t, longitude) }, \
+         { "altitude", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_high_latency2_t, altitude) }, \
+         { "target_altitude", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_high_latency2_t, target_altitude) }, \
+         { "heading", NULL, MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_high_latency2_t, heading) }, \
+         { "target_heading", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_high_latency2_t, target_heading) }, \
+         { "target_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_high_latency2_t, target_distance) }, \
+         { "throttle", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_high_latency2_t, throttle) }, \
+         { "airspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_high_latency2_t, airspeed) }, \
+         { "airspeed_sp", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_high_latency2_t, airspeed_sp) }, \
+         { "groundspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_high_latency2_t, groundspeed) }, \
+         { "windspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_high_latency2_t, windspeed) }, \
+         { "wind_heading", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_high_latency2_t, wind_heading) }, \
+         { "eph", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_high_latency2_t, eph) }, \
+         { "epv", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_high_latency2_t, epv) }, \
+         { "temperature_air", NULL, MAVLINK_TYPE_INT8_T, 0, 36, offsetof(mavlink_high_latency2_t, temperature_air) }, \
+         { "climb_rate", NULL, MAVLINK_TYPE_INT8_T, 0, 37, offsetof(mavlink_high_latency2_t, climb_rate) }, \
+         { "battery", NULL, MAVLINK_TYPE_INT8_T, 0, 38, offsetof(mavlink_high_latency2_t, battery) }, \
+         { "wp_num", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_high_latency2_t, wp_num) }, \
+         { "failure_flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_high_latency2_t, failure_flags) }, \
+         { "custom0", NULL, MAVLINK_TYPE_INT8_T, 0, 39, offsetof(mavlink_high_latency2_t, custom0) }, \
+         { "custom1", NULL, MAVLINK_TYPE_INT8_T, 0, 40, offsetof(mavlink_high_latency2_t, custom1) }, \
+         { "custom2", NULL, MAVLINK_TYPE_INT8_T, 0, 41, offsetof(mavlink_high_latency2_t, custom2) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIGH_LATENCY2 { \
+    "HIGH_LATENCY2", \
+    27, \
+    {  { "timestamp", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_high_latency2_t, timestamp) }, \
+         { "type", NULL, MAVLINK_TYPE_UINT8_T, 0, 24, offsetof(mavlink_high_latency2_t, type) }, \
+         { "autopilot", NULL, MAVLINK_TYPE_UINT8_T, 0, 25, offsetof(mavlink_high_latency2_t, autopilot) }, \
+         { "custom_mode", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_high_latency2_t, custom_mode) }, \
+         { "latitude", NULL, MAVLINK_TYPE_INT32_T, 0, 4, offsetof(mavlink_high_latency2_t, latitude) }, \
+         { "longitude", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_high_latency2_t, longitude) }, \
+         { "altitude", NULL, MAVLINK_TYPE_INT16_T, 0, 14, offsetof(mavlink_high_latency2_t, altitude) }, \
+         { "target_altitude", NULL, MAVLINK_TYPE_INT16_T, 0, 16, offsetof(mavlink_high_latency2_t, target_altitude) }, \
+         { "heading", NULL, MAVLINK_TYPE_UINT8_T, 0, 26, offsetof(mavlink_high_latency2_t, heading) }, \
+         { "target_heading", NULL, MAVLINK_TYPE_UINT8_T, 0, 27, offsetof(mavlink_high_latency2_t, target_heading) }, \
+         { "target_distance", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_high_latency2_t, target_distance) }, \
+         { "throttle", NULL, MAVLINK_TYPE_UINT8_T, 0, 28, offsetof(mavlink_high_latency2_t, throttle) }, \
+         { "airspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 29, offsetof(mavlink_high_latency2_t, airspeed) }, \
+         { "airspeed_sp", NULL, MAVLINK_TYPE_UINT8_T, 0, 30, offsetof(mavlink_high_latency2_t, airspeed_sp) }, \
+         { "groundspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 31, offsetof(mavlink_high_latency2_t, groundspeed) }, \
+         { "windspeed", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_high_latency2_t, windspeed) }, \
+         { "wind_heading", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_high_latency2_t, wind_heading) }, \
+         { "eph", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_high_latency2_t, eph) }, \
+         { "epv", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_high_latency2_t, epv) }, \
+         { "temperature_air", NULL, MAVLINK_TYPE_INT8_T, 0, 36, offsetof(mavlink_high_latency2_t, temperature_air) }, \
+         { "climb_rate", NULL, MAVLINK_TYPE_INT8_T, 0, 37, offsetof(mavlink_high_latency2_t, climb_rate) }, \
+         { "battery", NULL, MAVLINK_TYPE_INT8_T, 0, 38, offsetof(mavlink_high_latency2_t, battery) }, \
+         { "wp_num", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_high_latency2_t, wp_num) }, \
+         { "failure_flags", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_high_latency2_t, failure_flags) }, \
+         { "custom0", NULL, MAVLINK_TYPE_INT8_T, 0, 39, offsetof(mavlink_high_latency2_t, custom0) }, \
+         { "custom1", NULL, MAVLINK_TYPE_INT8_T, 0, 40, offsetof(mavlink_high_latency2_t, custom1) }, \
+         { "custom2", NULL, MAVLINK_TYPE_INT8_T, 0, 41, offsetof(mavlink_high_latency2_t, custom2) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a high_latency2 message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param timestamp [ms] Timestamp (milliseconds since boot or Unix epoch)
+ * @param type  Type of the MAV (quadrotor, helicopter, etc.)
+ * @param autopilot  Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.
+ * @param custom_mode  A bitfield for use for autopilot-specific flags (2 byte version).
+ * @param latitude [degE7] Latitude
+ * @param longitude [degE7] Longitude
+ * @param altitude [m] Altitude above mean sea level
+ * @param target_altitude [m] Altitude setpoint
+ * @param heading [deg/2] Heading
+ * @param target_heading [deg/2] Heading setpoint
+ * @param target_distance [dam] Distance to target waypoint or position
+ * @param throttle [%] Throttle
+ * @param airspeed [m/s*5] Airspeed
+ * @param airspeed_sp [m/s*5] Airspeed setpoint
+ * @param groundspeed [m/s*5] Groundspeed
+ * @param windspeed [m/s*5] Windspeed
+ * @param wind_heading [deg/2] Wind heading
+ * @param eph [dm] Maximum error horizontal position since last message
+ * @param epv [dm] Maximum error vertical position since last message
+ * @param temperature_air [degC] Air temperature from airspeed sensor
+ * @param climb_rate [dm/s] Maximum climb rate magnitude since last message
+ * @param battery [%] Battery level (-1 if field not provided).
+ * @param wp_num  Current waypoint number
+ * @param failure_flags  Bitmap of failure flags.
+ * @param custom0  Field for custom payload.
+ * @param custom1  Field for custom payload.
+ * @param custom2  Field for custom payload.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_high_latency2_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t timestamp, uint8_t type, uint8_t autopilot, uint16_t custom_mode, int32_t latitude, int32_t longitude, int16_t altitude, int16_t target_altitude, uint8_t heading, uint8_t target_heading, uint16_t target_distance, uint8_t throttle, uint8_t airspeed, uint8_t airspeed_sp, uint8_t groundspeed, uint8_t windspeed, uint8_t wind_heading, uint8_t eph, uint8_t epv, int8_t temperature_air, int8_t climb_rate, int8_t battery, uint16_t wp_num, uint16_t failure_flags, int8_t custom0, int8_t custom1, int8_t custom2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGH_LATENCY2_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_int32_t(buf, 4, latitude);
+    _mav_put_int32_t(buf, 8, longitude);
+    _mav_put_uint16_t(buf, 12, custom_mode);
+    _mav_put_int16_t(buf, 14, altitude);
+    _mav_put_int16_t(buf, 16, target_altitude);
+    _mav_put_uint16_t(buf, 18, target_distance);
+    _mav_put_uint16_t(buf, 20, wp_num);
+    _mav_put_uint16_t(buf, 22, failure_flags);
+    _mav_put_uint8_t(buf, 24, type);
+    _mav_put_uint8_t(buf, 25, autopilot);
+    _mav_put_uint8_t(buf, 26, heading);
+    _mav_put_uint8_t(buf, 27, target_heading);
+    _mav_put_uint8_t(buf, 28, throttle);
+    _mav_put_uint8_t(buf, 29, airspeed);
+    _mav_put_uint8_t(buf, 30, airspeed_sp);
+    _mav_put_uint8_t(buf, 31, groundspeed);
+    _mav_put_uint8_t(buf, 32, windspeed);
+    _mav_put_uint8_t(buf, 33, wind_heading);
+    _mav_put_uint8_t(buf, 34, eph);
+    _mav_put_uint8_t(buf, 35, epv);
+    _mav_put_int8_t(buf, 36, temperature_air);
+    _mav_put_int8_t(buf, 37, climb_rate);
+    _mav_put_int8_t(buf, 38, battery);
+    _mav_put_int8_t(buf, 39, custom0);
+    _mav_put_int8_t(buf, 40, custom1);
+    _mav_put_int8_t(buf, 41, custom2);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN);
+#else
+    mavlink_high_latency2_t packet;
+    packet.timestamp = timestamp;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.custom_mode = custom_mode;
+    packet.altitude = altitude;
+    packet.target_altitude = target_altitude;
+    packet.target_distance = target_distance;
+    packet.wp_num = wp_num;
+    packet.failure_flags = failure_flags;
+    packet.type = type;
+    packet.autopilot = autopilot;
+    packet.heading = heading;
+    packet.target_heading = target_heading;
+    packet.throttle = throttle;
+    packet.airspeed = airspeed;
+    packet.airspeed_sp = airspeed_sp;
+    packet.groundspeed = groundspeed;
+    packet.windspeed = windspeed;
+    packet.wind_heading = wind_heading;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.temperature_air = temperature_air;
+    packet.climb_rate = climb_rate;
+    packet.battery = battery;
+    packet.custom0 = custom0;
+    packet.custom1 = custom1;
+    packet.custom2 = custom2;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIGH_LATENCY2;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIGH_LATENCY2_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_CRC);
+}
+
+/**
+ * @brief Pack a high_latency2 message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param timestamp [ms] Timestamp (milliseconds since boot or Unix epoch)
+ * @param type  Type of the MAV (quadrotor, helicopter, etc.)
+ * @param autopilot  Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.
+ * @param custom_mode  A bitfield for use for autopilot-specific flags (2 byte version).
+ * @param latitude [degE7] Latitude
+ * @param longitude [degE7] Longitude
+ * @param altitude [m] Altitude above mean sea level
+ * @param target_altitude [m] Altitude setpoint
+ * @param heading [deg/2] Heading
+ * @param target_heading [deg/2] Heading setpoint
+ * @param target_distance [dam] Distance to target waypoint or position
+ * @param throttle [%] Throttle
+ * @param airspeed [m/s*5] Airspeed
+ * @param airspeed_sp [m/s*5] Airspeed setpoint
+ * @param groundspeed [m/s*5] Groundspeed
+ * @param windspeed [m/s*5] Windspeed
+ * @param wind_heading [deg/2] Wind heading
+ * @param eph [dm] Maximum error horizontal position since last message
+ * @param epv [dm] Maximum error vertical position since last message
+ * @param temperature_air [degC] Air temperature from airspeed sensor
+ * @param climb_rate [dm/s] Maximum climb rate magnitude since last message
+ * @param battery [%] Battery level (-1 if field not provided).
+ * @param wp_num  Current waypoint number
+ * @param failure_flags  Bitmap of failure flags.
+ * @param custom0  Field for custom payload.
+ * @param custom1  Field for custom payload.
+ * @param custom2  Field for custom payload.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_high_latency2_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t timestamp,uint8_t type,uint8_t autopilot,uint16_t custom_mode,int32_t latitude,int32_t longitude,int16_t altitude,int16_t target_altitude,uint8_t heading,uint8_t target_heading,uint16_t target_distance,uint8_t throttle,uint8_t airspeed,uint8_t airspeed_sp,uint8_t groundspeed,uint8_t windspeed,uint8_t wind_heading,uint8_t eph,uint8_t epv,int8_t temperature_air,int8_t climb_rate,int8_t battery,uint16_t wp_num,uint16_t failure_flags,int8_t custom0,int8_t custom1,int8_t custom2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGH_LATENCY2_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_int32_t(buf, 4, latitude);
+    _mav_put_int32_t(buf, 8, longitude);
+    _mav_put_uint16_t(buf, 12, custom_mode);
+    _mav_put_int16_t(buf, 14, altitude);
+    _mav_put_int16_t(buf, 16, target_altitude);
+    _mav_put_uint16_t(buf, 18, target_distance);
+    _mav_put_uint16_t(buf, 20, wp_num);
+    _mav_put_uint16_t(buf, 22, failure_flags);
+    _mav_put_uint8_t(buf, 24, type);
+    _mav_put_uint8_t(buf, 25, autopilot);
+    _mav_put_uint8_t(buf, 26, heading);
+    _mav_put_uint8_t(buf, 27, target_heading);
+    _mav_put_uint8_t(buf, 28, throttle);
+    _mav_put_uint8_t(buf, 29, airspeed);
+    _mav_put_uint8_t(buf, 30, airspeed_sp);
+    _mav_put_uint8_t(buf, 31, groundspeed);
+    _mav_put_uint8_t(buf, 32, windspeed);
+    _mav_put_uint8_t(buf, 33, wind_heading);
+    _mav_put_uint8_t(buf, 34, eph);
+    _mav_put_uint8_t(buf, 35, epv);
+    _mav_put_int8_t(buf, 36, temperature_air);
+    _mav_put_int8_t(buf, 37, climb_rate);
+    _mav_put_int8_t(buf, 38, battery);
+    _mav_put_int8_t(buf, 39, custom0);
+    _mav_put_int8_t(buf, 40, custom1);
+    _mav_put_int8_t(buf, 41, custom2);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN);
+#else
+    mavlink_high_latency2_t packet;
+    packet.timestamp = timestamp;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.custom_mode = custom_mode;
+    packet.altitude = altitude;
+    packet.target_altitude = target_altitude;
+    packet.target_distance = target_distance;
+    packet.wp_num = wp_num;
+    packet.failure_flags = failure_flags;
+    packet.type = type;
+    packet.autopilot = autopilot;
+    packet.heading = heading;
+    packet.target_heading = target_heading;
+    packet.throttle = throttle;
+    packet.airspeed = airspeed;
+    packet.airspeed_sp = airspeed_sp;
+    packet.groundspeed = groundspeed;
+    packet.windspeed = windspeed;
+    packet.wind_heading = wind_heading;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.temperature_air = temperature_air;
+    packet.climb_rate = climb_rate;
+    packet.battery = battery;
+    packet.custom0 = custom0;
+    packet.custom1 = custom1;
+    packet.custom2 = custom2;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIGH_LATENCY2;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIGH_LATENCY2_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_CRC);
+}
+
+/**
+ * @brief Encode a high_latency2 struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param high_latency2 C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_high_latency2_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_high_latency2_t* high_latency2)
+{
+    return mavlink_msg_high_latency2_pack(system_id, component_id, msg, high_latency2->timestamp, high_latency2->type, high_latency2->autopilot, high_latency2->custom_mode, high_latency2->latitude, high_latency2->longitude, high_latency2->altitude, high_latency2->target_altitude, high_latency2->heading, high_latency2->target_heading, high_latency2->target_distance, high_latency2->throttle, high_latency2->airspeed, high_latency2->airspeed_sp, high_latency2->groundspeed, high_latency2->windspeed, high_latency2->wind_heading, high_latency2->eph, high_latency2->epv, high_latency2->temperature_air, high_latency2->climb_rate, high_latency2->battery, high_latency2->wp_num, high_latency2->failure_flags, high_latency2->custom0, high_latency2->custom1, high_latency2->custom2);
+}
+
+/**
+ * @brief Encode a high_latency2 struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param high_latency2 C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_high_latency2_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_high_latency2_t* high_latency2)
+{
+    return mavlink_msg_high_latency2_pack_chan(system_id, component_id, chan, msg, high_latency2->timestamp, high_latency2->type, high_latency2->autopilot, high_latency2->custom_mode, high_latency2->latitude, high_latency2->longitude, high_latency2->altitude, high_latency2->target_altitude, high_latency2->heading, high_latency2->target_heading, high_latency2->target_distance, high_latency2->throttle, high_latency2->airspeed, high_latency2->airspeed_sp, high_latency2->groundspeed, high_latency2->windspeed, high_latency2->wind_heading, high_latency2->eph, high_latency2->epv, high_latency2->temperature_air, high_latency2->climb_rate, high_latency2->battery, high_latency2->wp_num, high_latency2->failure_flags, high_latency2->custom0, high_latency2->custom1, high_latency2->custom2);
+}
+
+/**
+ * @brief Send a high_latency2 message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param timestamp [ms] Timestamp (milliseconds since boot or Unix epoch)
+ * @param type  Type of the MAV (quadrotor, helicopter, etc.)
+ * @param autopilot  Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.
+ * @param custom_mode  A bitfield for use for autopilot-specific flags (2 byte version).
+ * @param latitude [degE7] Latitude
+ * @param longitude [degE7] Longitude
+ * @param altitude [m] Altitude above mean sea level
+ * @param target_altitude [m] Altitude setpoint
+ * @param heading [deg/2] Heading
+ * @param target_heading [deg/2] Heading setpoint
+ * @param target_distance [dam] Distance to target waypoint or position
+ * @param throttle [%] Throttle
+ * @param airspeed [m/s*5] Airspeed
+ * @param airspeed_sp [m/s*5] Airspeed setpoint
+ * @param groundspeed [m/s*5] Groundspeed
+ * @param windspeed [m/s*5] Windspeed
+ * @param wind_heading [deg/2] Wind heading
+ * @param eph [dm] Maximum error horizontal position since last message
+ * @param epv [dm] Maximum error vertical position since last message
+ * @param temperature_air [degC] Air temperature from airspeed sensor
+ * @param climb_rate [dm/s] Maximum climb rate magnitude since last message
+ * @param battery [%] Battery level (-1 if field not provided).
+ * @param wp_num  Current waypoint number
+ * @param failure_flags  Bitmap of failure flags.
+ * @param custom0  Field for custom payload.
+ * @param custom1  Field for custom payload.
+ * @param custom2  Field for custom payload.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_high_latency2_send(mavlink_channel_t chan, uint32_t timestamp, uint8_t type, uint8_t autopilot, uint16_t custom_mode, int32_t latitude, int32_t longitude, int16_t altitude, int16_t target_altitude, uint8_t heading, uint8_t target_heading, uint16_t target_distance, uint8_t throttle, uint8_t airspeed, uint8_t airspeed_sp, uint8_t groundspeed, uint8_t windspeed, uint8_t wind_heading, uint8_t eph, uint8_t epv, int8_t temperature_air, int8_t climb_rate, int8_t battery, uint16_t wp_num, uint16_t failure_flags, int8_t custom0, int8_t custom1, int8_t custom2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGH_LATENCY2_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_int32_t(buf, 4, latitude);
+    _mav_put_int32_t(buf, 8, longitude);
+    _mav_put_uint16_t(buf, 12, custom_mode);
+    _mav_put_int16_t(buf, 14, altitude);
+    _mav_put_int16_t(buf, 16, target_altitude);
+    _mav_put_uint16_t(buf, 18, target_distance);
+    _mav_put_uint16_t(buf, 20, wp_num);
+    _mav_put_uint16_t(buf, 22, failure_flags);
+    _mav_put_uint8_t(buf, 24, type);
+    _mav_put_uint8_t(buf, 25, autopilot);
+    _mav_put_uint8_t(buf, 26, heading);
+    _mav_put_uint8_t(buf, 27, target_heading);
+    _mav_put_uint8_t(buf, 28, throttle);
+    _mav_put_uint8_t(buf, 29, airspeed);
+    _mav_put_uint8_t(buf, 30, airspeed_sp);
+    _mav_put_uint8_t(buf, 31, groundspeed);
+    _mav_put_uint8_t(buf, 32, windspeed);
+    _mav_put_uint8_t(buf, 33, wind_heading);
+    _mav_put_uint8_t(buf, 34, eph);
+    _mav_put_uint8_t(buf, 35, epv);
+    _mav_put_int8_t(buf, 36, temperature_air);
+    _mav_put_int8_t(buf, 37, climb_rate);
+    _mav_put_int8_t(buf, 38, battery);
+    _mav_put_int8_t(buf, 39, custom0);
+    _mav_put_int8_t(buf, 40, custom1);
+    _mav_put_int8_t(buf, 41, custom2);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY2, buf, MAVLINK_MSG_ID_HIGH_LATENCY2_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_CRC);
+#else
+    mavlink_high_latency2_t packet;
+    packet.timestamp = timestamp;
+    packet.latitude = latitude;
+    packet.longitude = longitude;
+    packet.custom_mode = custom_mode;
+    packet.altitude = altitude;
+    packet.target_altitude = target_altitude;
+    packet.target_distance = target_distance;
+    packet.wp_num = wp_num;
+    packet.failure_flags = failure_flags;
+    packet.type = type;
+    packet.autopilot = autopilot;
+    packet.heading = heading;
+    packet.target_heading = target_heading;
+    packet.throttle = throttle;
+    packet.airspeed = airspeed;
+    packet.airspeed_sp = airspeed_sp;
+    packet.groundspeed = groundspeed;
+    packet.windspeed = windspeed;
+    packet.wind_heading = wind_heading;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.temperature_air = temperature_air;
+    packet.climb_rate = climb_rate;
+    packet.battery = battery;
+    packet.custom0 = custom0;
+    packet.custom1 = custom1;
+    packet.custom2 = custom2;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY2, (const char *)&packet, MAVLINK_MSG_ID_HIGH_LATENCY2_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_CRC);
+#endif
+}
+
+/**
+ * @brief Send a high_latency2 message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_high_latency2_send_struct(mavlink_channel_t chan, const mavlink_high_latency2_t* high_latency2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_high_latency2_send(chan, high_latency2->timestamp, high_latency2->type, high_latency2->autopilot, high_latency2->custom_mode, high_latency2->latitude, high_latency2->longitude, high_latency2->altitude, high_latency2->target_altitude, high_latency2->heading, high_latency2->target_heading, high_latency2->target_distance, high_latency2->throttle, high_latency2->airspeed, high_latency2->airspeed_sp, high_latency2->groundspeed, high_latency2->windspeed, high_latency2->wind_heading, high_latency2->eph, high_latency2->epv, high_latency2->temperature_air, high_latency2->climb_rate, high_latency2->battery, high_latency2->wp_num, high_latency2->failure_flags, high_latency2->custom0, high_latency2->custom1, high_latency2->custom2);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY2, (const char *)high_latency2, MAVLINK_MSG_ID_HIGH_LATENCY2_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIGH_LATENCY2_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_high_latency2_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t timestamp, uint8_t type, uint8_t autopilot, uint16_t custom_mode, int32_t latitude, int32_t longitude, int16_t altitude, int16_t target_altitude, uint8_t heading, uint8_t target_heading, uint16_t target_distance, uint8_t throttle, uint8_t airspeed, uint8_t airspeed_sp, uint8_t groundspeed, uint8_t windspeed, uint8_t wind_heading, uint8_t eph, uint8_t epv, int8_t temperature_air, int8_t climb_rate, int8_t battery, uint16_t wp_num, uint16_t failure_flags, int8_t custom0, int8_t custom1, int8_t custom2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_int32_t(buf, 4, latitude);
+    _mav_put_int32_t(buf, 8, longitude);
+    _mav_put_uint16_t(buf, 12, custom_mode);
+    _mav_put_int16_t(buf, 14, altitude);
+    _mav_put_int16_t(buf, 16, target_altitude);
+    _mav_put_uint16_t(buf, 18, target_distance);
+    _mav_put_uint16_t(buf, 20, wp_num);
+    _mav_put_uint16_t(buf, 22, failure_flags);
+    _mav_put_uint8_t(buf, 24, type);
+    _mav_put_uint8_t(buf, 25, autopilot);
+    _mav_put_uint8_t(buf, 26, heading);
+    _mav_put_uint8_t(buf, 27, target_heading);
+    _mav_put_uint8_t(buf, 28, throttle);
+    _mav_put_uint8_t(buf, 29, airspeed);
+    _mav_put_uint8_t(buf, 30, airspeed_sp);
+    _mav_put_uint8_t(buf, 31, groundspeed);
+    _mav_put_uint8_t(buf, 32, windspeed);
+    _mav_put_uint8_t(buf, 33, wind_heading);
+    _mav_put_uint8_t(buf, 34, eph);
+    _mav_put_uint8_t(buf, 35, epv);
+    _mav_put_int8_t(buf, 36, temperature_air);
+    _mav_put_int8_t(buf, 37, climb_rate);
+    _mav_put_int8_t(buf, 38, battery);
+    _mav_put_int8_t(buf, 39, custom0);
+    _mav_put_int8_t(buf, 40, custom1);
+    _mav_put_int8_t(buf, 41, custom2);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY2, buf, MAVLINK_MSG_ID_HIGH_LATENCY2_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_CRC);
+#else
+    mavlink_high_latency2_t *packet = (mavlink_high_latency2_t *)msgbuf;
+    packet->timestamp = timestamp;
+    packet->latitude = latitude;
+    packet->longitude = longitude;
+    packet->custom_mode = custom_mode;
+    packet->altitude = altitude;
+    packet->target_altitude = target_altitude;
+    packet->target_distance = target_distance;
+    packet->wp_num = wp_num;
+    packet->failure_flags = failure_flags;
+    packet->type = type;
+    packet->autopilot = autopilot;
+    packet->heading = heading;
+    packet->target_heading = target_heading;
+    packet->throttle = throttle;
+    packet->airspeed = airspeed;
+    packet->airspeed_sp = airspeed_sp;
+    packet->groundspeed = groundspeed;
+    packet->windspeed = windspeed;
+    packet->wind_heading = wind_heading;
+    packet->eph = eph;
+    packet->epv = epv;
+    packet->temperature_air = temperature_air;
+    packet->climb_rate = climb_rate;
+    packet->battery = battery;
+    packet->custom0 = custom0;
+    packet->custom1 = custom1;
+    packet->custom2 = custom2;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGH_LATENCY2, (const char *)packet, MAVLINK_MSG_ID_HIGH_LATENCY2_MIN_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN, MAVLINK_MSG_ID_HIGH_LATENCY2_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIGH_LATENCY2 UNPACKING
+
+
+/**
+ * @brief Get field timestamp from high_latency2 message
+ *
+ * @return [ms] Timestamp (milliseconds since boot or Unix epoch)
+ */
+static inline uint32_t mavlink_msg_high_latency2_get_timestamp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field type from high_latency2 message
+ *
+ * @return  Type of the MAV (quadrotor, helicopter, etc.)
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  24);
+}
+
+/**
+ * @brief Get field autopilot from high_latency2 message
+ *
+ * @return  Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_autopilot(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  25);
+}
+
+/**
+ * @brief Get field custom_mode from high_latency2 message
+ *
+ * @return  A bitfield for use for autopilot-specific flags (2 byte version).
+ */
+static inline uint16_t mavlink_msg_high_latency2_get_custom_mode(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  12);
+}
+
+/**
+ * @brief Get field latitude from high_latency2 message
+ *
+ * @return [degE7] Latitude
+ */
+static inline int32_t mavlink_msg_high_latency2_get_latitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  4);
+}
+
+/**
+ * @brief Get field longitude from high_latency2 message
+ *
+ * @return [degE7] Longitude
+ */
+static inline int32_t mavlink_msg_high_latency2_get_longitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field altitude from high_latency2 message
+ *
+ * @return [m] Altitude above mean sea level
+ */
+static inline int16_t mavlink_msg_high_latency2_get_altitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  14);
+}
+
+/**
+ * @brief Get field target_altitude from high_latency2 message
+ *
+ * @return [m] Altitude setpoint
+ */
+static inline int16_t mavlink_msg_high_latency2_get_target_altitude(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  16);
+}
+
+/**
+ * @brief Get field heading from high_latency2 message
+ *
+ * @return [deg/2] Heading
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_heading(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  26);
+}
+
+/**
+ * @brief Get field target_heading from high_latency2 message
+ *
+ * @return [deg/2] Heading setpoint
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_target_heading(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  27);
+}
+
+/**
+ * @brief Get field target_distance from high_latency2 message
+ *
+ * @return [dam] Distance to target waypoint or position
+ */
+static inline uint16_t mavlink_msg_high_latency2_get_target_distance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  18);
+}
+
+/**
+ * @brief Get field throttle from high_latency2 message
+ *
+ * @return [%] Throttle
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_throttle(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  28);
+}
+
+/**
+ * @brief Get field airspeed from high_latency2 message
+ *
+ * @return [m/s*5] Airspeed
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_airspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  29);
+}
+
+/**
+ * @brief Get field airspeed_sp from high_latency2 message
+ *
+ * @return [m/s*5] Airspeed setpoint
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_airspeed_sp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  30);
+}
+
+/**
+ * @brief Get field groundspeed from high_latency2 message
+ *
+ * @return [m/s*5] Groundspeed
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_groundspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  31);
+}
+
+/**
+ * @brief Get field windspeed from high_latency2 message
+ *
+ * @return [m/s*5] Windspeed
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_windspeed(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Get field wind_heading from high_latency2 message
+ *
+ * @return [deg/2] Wind heading
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_wind_heading(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  33);
+}
+
+/**
+ * @brief Get field eph from high_latency2 message
+ *
+ * @return [dm] Maximum error horizontal position since last message
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_eph(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field epv from high_latency2 message
+ *
+ * @return [dm] Maximum error vertical position since last message
+ */
+static inline uint8_t mavlink_msg_high_latency2_get_epv(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  35);
+}
+
+/**
+ * @brief Get field temperature_air from high_latency2 message
+ *
+ * @return [degC] Air temperature from airspeed sensor
+ */
+static inline int8_t mavlink_msg_high_latency2_get_temperature_air(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  36);
+}
+
+/**
+ * @brief Get field climb_rate from high_latency2 message
+ *
+ * @return [dm/s] Maximum climb rate magnitude since last message
+ */
+static inline int8_t mavlink_msg_high_latency2_get_climb_rate(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  37);
+}
+
+/**
+ * @brief Get field battery from high_latency2 message
+ *
+ * @return [%] Battery level (-1 if field not provided).
+ */
+static inline int8_t mavlink_msg_high_latency2_get_battery(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  38);
+}
+
+/**
+ * @brief Get field wp_num from high_latency2 message
+ *
+ * @return  Current waypoint number
+ */
+static inline uint16_t mavlink_msg_high_latency2_get_wp_num(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  20);
+}
+
+/**
+ * @brief Get field failure_flags from high_latency2 message
+ *
+ * @return  Bitmap of failure flags.
+ */
+static inline uint16_t mavlink_msg_high_latency2_get_failure_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  22);
+}
+
+/**
+ * @brief Get field custom0 from high_latency2 message
+ *
+ * @return  Field for custom payload.
+ */
+static inline int8_t mavlink_msg_high_latency2_get_custom0(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  39);
+}
+
+/**
+ * @brief Get field custom1 from high_latency2 message
+ *
+ * @return  Field for custom payload.
+ */
+static inline int8_t mavlink_msg_high_latency2_get_custom1(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  40);
+}
+
+/**
+ * @brief Get field custom2 from high_latency2 message
+ *
+ * @return  Field for custom payload.
+ */
+static inline int8_t mavlink_msg_high_latency2_get_custom2(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int8_t(msg,  41);
+}
+
+/**
+ * @brief Decode a high_latency2 message into a struct
+ *
+ * @param msg The message to decode
+ * @param high_latency2 C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_high_latency2_decode(const mavlink_message_t* msg, mavlink_high_latency2_t* high_latency2)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    high_latency2->timestamp = mavlink_msg_high_latency2_get_timestamp(msg);
+    high_latency2->latitude = mavlink_msg_high_latency2_get_latitude(msg);
+    high_latency2->longitude = mavlink_msg_high_latency2_get_longitude(msg);
+    high_latency2->custom_mode = mavlink_msg_high_latency2_get_custom_mode(msg);
+    high_latency2->altitude = mavlink_msg_high_latency2_get_altitude(msg);
+    high_latency2->target_altitude = mavlink_msg_high_latency2_get_target_altitude(msg);
+    high_latency2->target_distance = mavlink_msg_high_latency2_get_target_distance(msg);
+    high_latency2->wp_num = mavlink_msg_high_latency2_get_wp_num(msg);
+    high_latency2->failure_flags = mavlink_msg_high_latency2_get_failure_flags(msg);
+    high_latency2->type = mavlink_msg_high_latency2_get_type(msg);
+    high_latency2->autopilot = mavlink_msg_high_latency2_get_autopilot(msg);
+    high_latency2->heading = mavlink_msg_high_latency2_get_heading(msg);
+    high_latency2->target_heading = mavlink_msg_high_latency2_get_target_heading(msg);
+    high_latency2->throttle = mavlink_msg_high_latency2_get_throttle(msg);
+    high_latency2->airspeed = mavlink_msg_high_latency2_get_airspeed(msg);
+    high_latency2->airspeed_sp = mavlink_msg_high_latency2_get_airspeed_sp(msg);
+    high_latency2->groundspeed = mavlink_msg_high_latency2_get_groundspeed(msg);
+    high_latency2->windspeed = mavlink_msg_high_latency2_get_windspeed(msg);
+    high_latency2->wind_heading = mavlink_msg_high_latency2_get_wind_heading(msg);
+    high_latency2->eph = mavlink_msg_high_latency2_get_eph(msg);
+    high_latency2->epv = mavlink_msg_high_latency2_get_epv(msg);
+    high_latency2->temperature_air = mavlink_msg_high_latency2_get_temperature_air(msg);
+    high_latency2->climb_rate = mavlink_msg_high_latency2_get_climb_rate(msg);
+    high_latency2->battery = mavlink_msg_high_latency2_get_battery(msg);
+    high_latency2->custom0 = mavlink_msg_high_latency2_get_custom0(msg);
+    high_latency2->custom1 = mavlink_msg_high_latency2_get_custom1(msg);
+    high_latency2->custom2 = mavlink_msg_high_latency2_get_custom2(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIGH_LATENCY2_LEN? msg->len : MAVLINK_MSG_ID_HIGH_LATENCY2_LEN;
+        memset(high_latency2, 0, MAVLINK_MSG_ID_HIGH_LATENCY2_LEN);
+    memcpy(high_latency2, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 588 - 0
v2.0/common/mavlink_msg_highres_imu.h

@@ -0,0 +1,588 @@
+#pragma once
+// MESSAGE HIGHRES_IMU PACKING
+
+#define MAVLINK_MSG_ID_HIGHRES_IMU 105
+
+
+typedef struct __mavlink_highres_imu_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float xacc; /*< [m/s/s] X acceleration*/
+ float yacc; /*< [m/s/s] Y acceleration*/
+ float zacc; /*< [m/s/s] Z acceleration*/
+ float xgyro; /*< [rad/s] Angular speed around X axis*/
+ float ygyro; /*< [rad/s] Angular speed around Y axis*/
+ float zgyro; /*< [rad/s] Angular speed around Z axis*/
+ float xmag; /*< [gauss] X Magnetic field*/
+ float ymag; /*< [gauss] Y Magnetic field*/
+ float zmag; /*< [gauss] Z Magnetic field*/
+ float abs_pressure; /*< [hPa] Absolute pressure*/
+ float diff_pressure; /*< [hPa] Differential pressure*/
+ float pressure_alt; /*<  Altitude calculated from pressure*/
+ float temperature; /*< [degC] Temperature*/
+ uint16_t fields_updated; /*<  Bitmap for fields that have updated since last message*/
+ uint8_t id; /*<  Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)*/
+} mavlink_highres_imu_t;
+
+#define MAVLINK_MSG_ID_HIGHRES_IMU_LEN 63
+#define MAVLINK_MSG_ID_HIGHRES_IMU_MIN_LEN 62
+#define MAVLINK_MSG_ID_105_LEN 63
+#define MAVLINK_MSG_ID_105_MIN_LEN 62
+
+#define MAVLINK_MSG_ID_HIGHRES_IMU_CRC 93
+#define MAVLINK_MSG_ID_105_CRC 93
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIGHRES_IMU { \
+    105, \
+    "HIGHRES_IMU", \
+    16, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_highres_imu_t, time_usec) }, \
+         { "xacc", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_highres_imu_t, xacc) }, \
+         { "yacc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_highres_imu_t, yacc) }, \
+         { "zacc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_highres_imu_t, zacc) }, \
+         { "xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_highres_imu_t, xgyro) }, \
+         { "ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_highres_imu_t, ygyro) }, \
+         { "zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_highres_imu_t, zgyro) }, \
+         { "xmag", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_highres_imu_t, xmag) }, \
+         { "ymag", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_highres_imu_t, ymag) }, \
+         { "zmag", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_highres_imu_t, zmag) }, \
+         { "abs_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_highres_imu_t, abs_pressure) }, \
+         { "diff_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_highres_imu_t, diff_pressure) }, \
+         { "pressure_alt", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_highres_imu_t, pressure_alt) }, \
+         { "temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_highres_imu_t, temperature) }, \
+         { "fields_updated", NULL, MAVLINK_TYPE_UINT16_T, 0, 60, offsetof(mavlink_highres_imu_t, fields_updated) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 62, offsetof(mavlink_highres_imu_t, id) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIGHRES_IMU { \
+    "HIGHRES_IMU", \
+    16, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_highres_imu_t, time_usec) }, \
+         { "xacc", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_highres_imu_t, xacc) }, \
+         { "yacc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_highres_imu_t, yacc) }, \
+         { "zacc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_highres_imu_t, zacc) }, \
+         { "xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_highres_imu_t, xgyro) }, \
+         { "ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_highres_imu_t, ygyro) }, \
+         { "zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_highres_imu_t, zgyro) }, \
+         { "xmag", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_highres_imu_t, xmag) }, \
+         { "ymag", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_highres_imu_t, ymag) }, \
+         { "zmag", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_highres_imu_t, zmag) }, \
+         { "abs_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_highres_imu_t, abs_pressure) }, \
+         { "diff_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_highres_imu_t, diff_pressure) }, \
+         { "pressure_alt", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_highres_imu_t, pressure_alt) }, \
+         { "temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_highres_imu_t, temperature) }, \
+         { "fields_updated", NULL, MAVLINK_TYPE_UINT16_T, 0, 60, offsetof(mavlink_highres_imu_t, fields_updated) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 62, offsetof(mavlink_highres_imu_t, id) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a highres_imu message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param xacc [m/s/s] X acceleration
+ * @param yacc [m/s/s] Y acceleration
+ * @param zacc [m/s/s] Z acceleration
+ * @param xgyro [rad/s] Angular speed around X axis
+ * @param ygyro [rad/s] Angular speed around Y axis
+ * @param zgyro [rad/s] Angular speed around Z axis
+ * @param xmag [gauss] X Magnetic field
+ * @param ymag [gauss] Y Magnetic field
+ * @param zmag [gauss] Z Magnetic field
+ * @param abs_pressure [hPa] Absolute pressure
+ * @param diff_pressure [hPa] Differential pressure
+ * @param pressure_alt  Altitude calculated from pressure
+ * @param temperature [degC] Temperature
+ * @param fields_updated  Bitmap for fields that have updated since last message
+ * @param id  Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_highres_imu_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro, float xmag, float ymag, float zmag, float abs_pressure, float diff_pressure, float pressure_alt, float temperature, uint16_t fields_updated, uint8_t id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGHRES_IMU_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, xacc);
+    _mav_put_float(buf, 12, yacc);
+    _mav_put_float(buf, 16, zacc);
+    _mav_put_float(buf, 20, xgyro);
+    _mav_put_float(buf, 24, ygyro);
+    _mav_put_float(buf, 28, zgyro);
+    _mav_put_float(buf, 32, xmag);
+    _mav_put_float(buf, 36, ymag);
+    _mav_put_float(buf, 40, zmag);
+    _mav_put_float(buf, 44, abs_pressure);
+    _mav_put_float(buf, 48, diff_pressure);
+    _mav_put_float(buf, 52, pressure_alt);
+    _mav_put_float(buf, 56, temperature);
+    _mav_put_uint16_t(buf, 60, fields_updated);
+    _mav_put_uint8_t(buf, 62, id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIGHRES_IMU_LEN);
+#else
+    mavlink_highres_imu_t packet;
+    packet.time_usec = time_usec;
+    packet.xacc = xacc;
+    packet.yacc = yacc;
+    packet.zacc = zacc;
+    packet.xgyro = xgyro;
+    packet.ygyro = ygyro;
+    packet.zgyro = zgyro;
+    packet.xmag = xmag;
+    packet.ymag = ymag;
+    packet.zmag = zmag;
+    packet.abs_pressure = abs_pressure;
+    packet.diff_pressure = diff_pressure;
+    packet.pressure_alt = pressure_alt;
+    packet.temperature = temperature;
+    packet.fields_updated = fields_updated;
+    packet.id = id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIGHRES_IMU_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIGHRES_IMU;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIGHRES_IMU_MIN_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_CRC);
+}
+
+/**
+ * @brief Pack a highres_imu message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param xacc [m/s/s] X acceleration
+ * @param yacc [m/s/s] Y acceleration
+ * @param zacc [m/s/s] Z acceleration
+ * @param xgyro [rad/s] Angular speed around X axis
+ * @param ygyro [rad/s] Angular speed around Y axis
+ * @param zgyro [rad/s] Angular speed around Z axis
+ * @param xmag [gauss] X Magnetic field
+ * @param ymag [gauss] Y Magnetic field
+ * @param zmag [gauss] Z Magnetic field
+ * @param abs_pressure [hPa] Absolute pressure
+ * @param diff_pressure [hPa] Differential pressure
+ * @param pressure_alt  Altitude calculated from pressure
+ * @param temperature [degC] Temperature
+ * @param fields_updated  Bitmap for fields that have updated since last message
+ * @param id  Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_highres_imu_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,float xacc,float yacc,float zacc,float xgyro,float ygyro,float zgyro,float xmag,float ymag,float zmag,float abs_pressure,float diff_pressure,float pressure_alt,float temperature,uint16_t fields_updated,uint8_t id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGHRES_IMU_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, xacc);
+    _mav_put_float(buf, 12, yacc);
+    _mav_put_float(buf, 16, zacc);
+    _mav_put_float(buf, 20, xgyro);
+    _mav_put_float(buf, 24, ygyro);
+    _mav_put_float(buf, 28, zgyro);
+    _mav_put_float(buf, 32, xmag);
+    _mav_put_float(buf, 36, ymag);
+    _mav_put_float(buf, 40, zmag);
+    _mav_put_float(buf, 44, abs_pressure);
+    _mav_put_float(buf, 48, diff_pressure);
+    _mav_put_float(buf, 52, pressure_alt);
+    _mav_put_float(buf, 56, temperature);
+    _mav_put_uint16_t(buf, 60, fields_updated);
+    _mav_put_uint8_t(buf, 62, id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIGHRES_IMU_LEN);
+#else
+    mavlink_highres_imu_t packet;
+    packet.time_usec = time_usec;
+    packet.xacc = xacc;
+    packet.yacc = yacc;
+    packet.zacc = zacc;
+    packet.xgyro = xgyro;
+    packet.ygyro = ygyro;
+    packet.zgyro = zgyro;
+    packet.xmag = xmag;
+    packet.ymag = ymag;
+    packet.zmag = zmag;
+    packet.abs_pressure = abs_pressure;
+    packet.diff_pressure = diff_pressure;
+    packet.pressure_alt = pressure_alt;
+    packet.temperature = temperature;
+    packet.fields_updated = fields_updated;
+    packet.id = id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIGHRES_IMU_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIGHRES_IMU;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIGHRES_IMU_MIN_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_CRC);
+}
+
+/**
+ * @brief Encode a highres_imu struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param highres_imu C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_highres_imu_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_highres_imu_t* highres_imu)
+{
+    return mavlink_msg_highres_imu_pack(system_id, component_id, msg, highres_imu->time_usec, highres_imu->xacc, highres_imu->yacc, highres_imu->zacc, highres_imu->xgyro, highres_imu->ygyro, highres_imu->zgyro, highres_imu->xmag, highres_imu->ymag, highres_imu->zmag, highres_imu->abs_pressure, highres_imu->diff_pressure, highres_imu->pressure_alt, highres_imu->temperature, highres_imu->fields_updated, highres_imu->id);
+}
+
+/**
+ * @brief Encode a highres_imu struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param highres_imu C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_highres_imu_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_highres_imu_t* highres_imu)
+{
+    return mavlink_msg_highres_imu_pack_chan(system_id, component_id, chan, msg, highres_imu->time_usec, highres_imu->xacc, highres_imu->yacc, highres_imu->zacc, highres_imu->xgyro, highres_imu->ygyro, highres_imu->zgyro, highres_imu->xmag, highres_imu->ymag, highres_imu->zmag, highres_imu->abs_pressure, highres_imu->diff_pressure, highres_imu->pressure_alt, highres_imu->temperature, highres_imu->fields_updated, highres_imu->id);
+}
+
+/**
+ * @brief Send a highres_imu message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param xacc [m/s/s] X acceleration
+ * @param yacc [m/s/s] Y acceleration
+ * @param zacc [m/s/s] Z acceleration
+ * @param xgyro [rad/s] Angular speed around X axis
+ * @param ygyro [rad/s] Angular speed around Y axis
+ * @param zgyro [rad/s] Angular speed around Z axis
+ * @param xmag [gauss] X Magnetic field
+ * @param ymag [gauss] Y Magnetic field
+ * @param zmag [gauss] Z Magnetic field
+ * @param abs_pressure [hPa] Absolute pressure
+ * @param diff_pressure [hPa] Differential pressure
+ * @param pressure_alt  Altitude calculated from pressure
+ * @param temperature [degC] Temperature
+ * @param fields_updated  Bitmap for fields that have updated since last message
+ * @param id  Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_highres_imu_send(mavlink_channel_t chan, uint64_t time_usec, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro, float xmag, float ymag, float zmag, float abs_pressure, float diff_pressure, float pressure_alt, float temperature, uint16_t fields_updated, uint8_t id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIGHRES_IMU_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, xacc);
+    _mav_put_float(buf, 12, yacc);
+    _mav_put_float(buf, 16, zacc);
+    _mav_put_float(buf, 20, xgyro);
+    _mav_put_float(buf, 24, ygyro);
+    _mav_put_float(buf, 28, zgyro);
+    _mav_put_float(buf, 32, xmag);
+    _mav_put_float(buf, 36, ymag);
+    _mav_put_float(buf, 40, zmag);
+    _mav_put_float(buf, 44, abs_pressure);
+    _mav_put_float(buf, 48, diff_pressure);
+    _mav_put_float(buf, 52, pressure_alt);
+    _mav_put_float(buf, 56, temperature);
+    _mav_put_uint16_t(buf, 60, fields_updated);
+    _mav_put_uint8_t(buf, 62, id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGHRES_IMU, buf, MAVLINK_MSG_ID_HIGHRES_IMU_MIN_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_CRC);
+#else
+    mavlink_highres_imu_t packet;
+    packet.time_usec = time_usec;
+    packet.xacc = xacc;
+    packet.yacc = yacc;
+    packet.zacc = zacc;
+    packet.xgyro = xgyro;
+    packet.ygyro = ygyro;
+    packet.zgyro = zgyro;
+    packet.xmag = xmag;
+    packet.ymag = ymag;
+    packet.zmag = zmag;
+    packet.abs_pressure = abs_pressure;
+    packet.diff_pressure = diff_pressure;
+    packet.pressure_alt = pressure_alt;
+    packet.temperature = temperature;
+    packet.fields_updated = fields_updated;
+    packet.id = id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGHRES_IMU, (const char *)&packet, MAVLINK_MSG_ID_HIGHRES_IMU_MIN_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_CRC);
+#endif
+}
+
+/**
+ * @brief Send a highres_imu message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_highres_imu_send_struct(mavlink_channel_t chan, const mavlink_highres_imu_t* highres_imu)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_highres_imu_send(chan, highres_imu->time_usec, highres_imu->xacc, highres_imu->yacc, highres_imu->zacc, highres_imu->xgyro, highres_imu->ygyro, highres_imu->zgyro, highres_imu->xmag, highres_imu->ymag, highres_imu->zmag, highres_imu->abs_pressure, highres_imu->diff_pressure, highres_imu->pressure_alt, highres_imu->temperature, highres_imu->fields_updated, highres_imu->id);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGHRES_IMU, (const char *)highres_imu, MAVLINK_MSG_ID_HIGHRES_IMU_MIN_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIGHRES_IMU_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_highres_imu_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro, float xmag, float ymag, float zmag, float abs_pressure, float diff_pressure, float pressure_alt, float temperature, uint16_t fields_updated, uint8_t id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, xacc);
+    _mav_put_float(buf, 12, yacc);
+    _mav_put_float(buf, 16, zacc);
+    _mav_put_float(buf, 20, xgyro);
+    _mav_put_float(buf, 24, ygyro);
+    _mav_put_float(buf, 28, zgyro);
+    _mav_put_float(buf, 32, xmag);
+    _mav_put_float(buf, 36, ymag);
+    _mav_put_float(buf, 40, zmag);
+    _mav_put_float(buf, 44, abs_pressure);
+    _mav_put_float(buf, 48, diff_pressure);
+    _mav_put_float(buf, 52, pressure_alt);
+    _mav_put_float(buf, 56, temperature);
+    _mav_put_uint16_t(buf, 60, fields_updated);
+    _mav_put_uint8_t(buf, 62, id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGHRES_IMU, buf, MAVLINK_MSG_ID_HIGHRES_IMU_MIN_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_CRC);
+#else
+    mavlink_highres_imu_t *packet = (mavlink_highres_imu_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->xacc = xacc;
+    packet->yacc = yacc;
+    packet->zacc = zacc;
+    packet->xgyro = xgyro;
+    packet->ygyro = ygyro;
+    packet->zgyro = zgyro;
+    packet->xmag = xmag;
+    packet->ymag = ymag;
+    packet->zmag = zmag;
+    packet->abs_pressure = abs_pressure;
+    packet->diff_pressure = diff_pressure;
+    packet->pressure_alt = pressure_alt;
+    packet->temperature = temperature;
+    packet->fields_updated = fields_updated;
+    packet->id = id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIGHRES_IMU, (const char *)packet, MAVLINK_MSG_ID_HIGHRES_IMU_MIN_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_LEN, MAVLINK_MSG_ID_HIGHRES_IMU_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIGHRES_IMU UNPACKING
+
+
+/**
+ * @brief Get field time_usec from highres_imu message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_highres_imu_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field xacc from highres_imu message
+ *
+ * @return [m/s/s] X acceleration
+ */
+static inline float mavlink_msg_highres_imu_get_xacc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field yacc from highres_imu message
+ *
+ * @return [m/s/s] Y acceleration
+ */
+static inline float mavlink_msg_highres_imu_get_yacc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field zacc from highres_imu message
+ *
+ * @return [m/s/s] Z acceleration
+ */
+static inline float mavlink_msg_highres_imu_get_zacc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field xgyro from highres_imu message
+ *
+ * @return [rad/s] Angular speed around X axis
+ */
+static inline float mavlink_msg_highres_imu_get_xgyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field ygyro from highres_imu message
+ *
+ * @return [rad/s] Angular speed around Y axis
+ */
+static inline float mavlink_msg_highres_imu_get_ygyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field zgyro from highres_imu message
+ *
+ * @return [rad/s] Angular speed around Z axis
+ */
+static inline float mavlink_msg_highres_imu_get_zgyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field xmag from highres_imu message
+ *
+ * @return [gauss] X Magnetic field
+ */
+static inline float mavlink_msg_highres_imu_get_xmag(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field ymag from highres_imu message
+ *
+ * @return [gauss] Y Magnetic field
+ */
+static inline float mavlink_msg_highres_imu_get_ymag(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field zmag from highres_imu message
+ *
+ * @return [gauss] Z Magnetic field
+ */
+static inline float mavlink_msg_highres_imu_get_zmag(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  40);
+}
+
+/**
+ * @brief Get field abs_pressure from highres_imu message
+ *
+ * @return [hPa] Absolute pressure
+ */
+static inline float mavlink_msg_highres_imu_get_abs_pressure(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Get field diff_pressure from highres_imu message
+ *
+ * @return [hPa] Differential pressure
+ */
+static inline float mavlink_msg_highres_imu_get_diff_pressure(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  48);
+}
+
+/**
+ * @brief Get field pressure_alt from highres_imu message
+ *
+ * @return  Altitude calculated from pressure
+ */
+static inline float mavlink_msg_highres_imu_get_pressure_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  52);
+}
+
+/**
+ * @brief Get field temperature from highres_imu message
+ *
+ * @return [degC] Temperature
+ */
+static inline float mavlink_msg_highres_imu_get_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  56);
+}
+
+/**
+ * @brief Get field fields_updated from highres_imu message
+ *
+ * @return  Bitmap for fields that have updated since last message
+ */
+static inline uint16_t mavlink_msg_highres_imu_get_fields_updated(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  60);
+}
+
+/**
+ * @brief Get field id from highres_imu message
+ *
+ * @return  Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)
+ */
+static inline uint8_t mavlink_msg_highres_imu_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  62);
+}
+
+/**
+ * @brief Decode a highres_imu message into a struct
+ *
+ * @param msg The message to decode
+ * @param highres_imu C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_highres_imu_decode(const mavlink_message_t* msg, mavlink_highres_imu_t* highres_imu)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    highres_imu->time_usec = mavlink_msg_highres_imu_get_time_usec(msg);
+    highres_imu->xacc = mavlink_msg_highres_imu_get_xacc(msg);
+    highres_imu->yacc = mavlink_msg_highres_imu_get_yacc(msg);
+    highres_imu->zacc = mavlink_msg_highres_imu_get_zacc(msg);
+    highres_imu->xgyro = mavlink_msg_highres_imu_get_xgyro(msg);
+    highres_imu->ygyro = mavlink_msg_highres_imu_get_ygyro(msg);
+    highres_imu->zgyro = mavlink_msg_highres_imu_get_zgyro(msg);
+    highres_imu->xmag = mavlink_msg_highres_imu_get_xmag(msg);
+    highres_imu->ymag = mavlink_msg_highres_imu_get_ymag(msg);
+    highres_imu->zmag = mavlink_msg_highres_imu_get_zmag(msg);
+    highres_imu->abs_pressure = mavlink_msg_highres_imu_get_abs_pressure(msg);
+    highres_imu->diff_pressure = mavlink_msg_highres_imu_get_diff_pressure(msg);
+    highres_imu->pressure_alt = mavlink_msg_highres_imu_get_pressure_alt(msg);
+    highres_imu->temperature = mavlink_msg_highres_imu_get_temperature(msg);
+    highres_imu->fields_updated = mavlink_msg_highres_imu_get_fields_updated(msg);
+    highres_imu->id = mavlink_msg_highres_imu_get_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIGHRES_IMU_LEN? msg->len : MAVLINK_MSG_ID_HIGHRES_IMU_LEN;
+        memset(highres_imu, 0, MAVLINK_MSG_ID_HIGHRES_IMU_LEN);
+    memcpy(highres_imu, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 280 - 0
v2.0/common/mavlink_msg_hil_actuator_controls.h

@@ -0,0 +1,280 @@
+#pragma once
+// MESSAGE HIL_ACTUATOR_CONTROLS PACKING
+
+#define MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS 93
+
+
+typedef struct __mavlink_hil_actuator_controls_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ uint64_t flags; /*<  Flags as bitfield, 1: indicate simulation using lockstep.*/
+ float controls[16]; /*<  Control outputs -1 .. 1. Channel assignment depends on the simulated hardware.*/
+ uint8_t mode; /*<  System mode. Includes arming state.*/
+} mavlink_hil_actuator_controls_t;
+
+#define MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN 81
+#define MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_MIN_LEN 81
+#define MAVLINK_MSG_ID_93_LEN 81
+#define MAVLINK_MSG_ID_93_MIN_LEN 81
+
+#define MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_CRC 47
+#define MAVLINK_MSG_ID_93_CRC 47
+
+#define MAVLINK_MSG_HIL_ACTUATOR_CONTROLS_FIELD_CONTROLS_LEN 16
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIL_ACTUATOR_CONTROLS { \
+    93, \
+    "HIL_ACTUATOR_CONTROLS", \
+    4, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_actuator_controls_t, time_usec) }, \
+         { "controls", NULL, MAVLINK_TYPE_FLOAT, 16, 16, offsetof(mavlink_hil_actuator_controls_t, controls) }, \
+         { "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 80, offsetof(mavlink_hil_actuator_controls_t, mode) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT64_T, 0, 8, offsetof(mavlink_hil_actuator_controls_t, flags) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIL_ACTUATOR_CONTROLS { \
+    "HIL_ACTUATOR_CONTROLS", \
+    4, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_actuator_controls_t, time_usec) }, \
+         { "controls", NULL, MAVLINK_TYPE_FLOAT, 16, 16, offsetof(mavlink_hil_actuator_controls_t, controls) }, \
+         { "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 80, offsetof(mavlink_hil_actuator_controls_t, mode) }, \
+         { "flags", NULL, MAVLINK_TYPE_UINT64_T, 0, 8, offsetof(mavlink_hil_actuator_controls_t, flags) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a hil_actuator_controls message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param controls  Control outputs -1 .. 1. Channel assignment depends on the simulated hardware.
+ * @param mode  System mode. Includes arming state.
+ * @param flags  Flags as bitfield, 1: indicate simulation using lockstep.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_actuator_controls_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, const float *controls, uint8_t mode, uint64_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint64_t(buf, 8, flags);
+    _mav_put_uint8_t(buf, 80, mode);
+    _mav_put_float_array(buf, 16, controls, 16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN);
+#else
+    mavlink_hil_actuator_controls_t packet;
+    packet.time_usec = time_usec;
+    packet.flags = flags;
+    packet.mode = mode;
+    mav_array_memcpy(packet.controls, controls, sizeof(float)*16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_CRC);
+}
+
+/**
+ * @brief Pack a hil_actuator_controls message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param controls  Control outputs -1 .. 1. Channel assignment depends on the simulated hardware.
+ * @param mode  System mode. Includes arming state.
+ * @param flags  Flags as bitfield, 1: indicate simulation using lockstep.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_actuator_controls_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,const float *controls,uint8_t mode,uint64_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint64_t(buf, 8, flags);
+    _mav_put_uint8_t(buf, 80, mode);
+    _mav_put_float_array(buf, 16, controls, 16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN);
+#else
+    mavlink_hil_actuator_controls_t packet;
+    packet.time_usec = time_usec;
+    packet.flags = flags;
+    packet.mode = mode;
+    mav_array_memcpy(packet.controls, controls, sizeof(float)*16);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_CRC);
+}
+
+/**
+ * @brief Encode a hil_actuator_controls struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_actuator_controls C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_actuator_controls_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_actuator_controls_t* hil_actuator_controls)
+{
+    return mavlink_msg_hil_actuator_controls_pack(system_id, component_id, msg, hil_actuator_controls->time_usec, hil_actuator_controls->controls, hil_actuator_controls->mode, hil_actuator_controls->flags);
+}
+
+/**
+ * @brief Encode a hil_actuator_controls struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_actuator_controls C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_actuator_controls_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_hil_actuator_controls_t* hil_actuator_controls)
+{
+    return mavlink_msg_hil_actuator_controls_pack_chan(system_id, component_id, chan, msg, hil_actuator_controls->time_usec, hil_actuator_controls->controls, hil_actuator_controls->mode, hil_actuator_controls->flags);
+}
+
+/**
+ * @brief Send a hil_actuator_controls message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param controls  Control outputs -1 .. 1. Channel assignment depends on the simulated hardware.
+ * @param mode  System mode. Includes arming state.
+ * @param flags  Flags as bitfield, 1: indicate simulation using lockstep.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_hil_actuator_controls_send(mavlink_channel_t chan, uint64_t time_usec, const float *controls, uint8_t mode, uint64_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint64_t(buf, 8, flags);
+    _mav_put_uint8_t(buf, 80, mode);
+    _mav_put_float_array(buf, 16, controls, 16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS, buf, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_CRC);
+#else
+    mavlink_hil_actuator_controls_t packet;
+    packet.time_usec = time_usec;
+    packet.flags = flags;
+    packet.mode = mode;
+    mav_array_memcpy(packet.controls, controls, sizeof(float)*16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS, (const char *)&packet, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a hil_actuator_controls message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_hil_actuator_controls_send_struct(mavlink_channel_t chan, const mavlink_hil_actuator_controls_t* hil_actuator_controls)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_hil_actuator_controls_send(chan, hil_actuator_controls->time_usec, hil_actuator_controls->controls, hil_actuator_controls->mode, hil_actuator_controls->flags);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS, (const char *)hil_actuator_controls, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_hil_actuator_controls_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, const float *controls, uint8_t mode, uint64_t flags)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint64_t(buf, 8, flags);
+    _mav_put_uint8_t(buf, 80, mode);
+    _mav_put_float_array(buf, 16, controls, 16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS, buf, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_CRC);
+#else
+    mavlink_hil_actuator_controls_t *packet = (mavlink_hil_actuator_controls_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->flags = flags;
+    packet->mode = mode;
+    mav_array_memcpy(packet->controls, controls, sizeof(float)*16);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS, (const char *)packet, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIL_ACTUATOR_CONTROLS UNPACKING
+
+
+/**
+ * @brief Get field time_usec from hil_actuator_controls message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_hil_actuator_controls_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field controls from hil_actuator_controls message
+ *
+ * @return  Control outputs -1 .. 1. Channel assignment depends on the simulated hardware.
+ */
+static inline uint16_t mavlink_msg_hil_actuator_controls_get_controls(const mavlink_message_t* msg, float *controls)
+{
+    return _MAV_RETURN_float_array(msg, controls, 16,  16);
+}
+
+/**
+ * @brief Get field mode from hil_actuator_controls message
+ *
+ * @return  System mode. Includes arming state.
+ */
+static inline uint8_t mavlink_msg_hil_actuator_controls_get_mode(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  80);
+}
+
+/**
+ * @brief Get field flags from hil_actuator_controls message
+ *
+ * @return  Flags as bitfield, 1: indicate simulation using lockstep.
+ */
+static inline uint64_t mavlink_msg_hil_actuator_controls_get_flags(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  8);
+}
+
+/**
+ * @brief Decode a hil_actuator_controls message into a struct
+ *
+ * @param msg The message to decode
+ * @param hil_actuator_controls C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_hil_actuator_controls_decode(const mavlink_message_t* msg, mavlink_hil_actuator_controls_t* hil_actuator_controls)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    hil_actuator_controls->time_usec = mavlink_msg_hil_actuator_controls_get_time_usec(msg);
+    hil_actuator_controls->flags = mavlink_msg_hil_actuator_controls_get_flags(msg);
+    mavlink_msg_hil_actuator_controls_get_controls(msg, hil_actuator_controls->controls);
+    hil_actuator_controls->mode = mavlink_msg_hil_actuator_controls_get_mode(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN? msg->len : MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN;
+        memset(hil_actuator_controls, 0, MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS_LEN);
+    memcpy(hil_actuator_controls, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 463 - 0
v2.0/common/mavlink_msg_hil_controls.h

@@ -0,0 +1,463 @@
+#pragma once
+// MESSAGE HIL_CONTROLS PACKING
+
+#define MAVLINK_MSG_ID_HIL_CONTROLS 91
+
+
+typedef struct __mavlink_hil_controls_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float roll_ailerons; /*<  Control output -1 .. 1*/
+ float pitch_elevator; /*<  Control output -1 .. 1*/
+ float yaw_rudder; /*<  Control output -1 .. 1*/
+ float throttle; /*<  Throttle 0 .. 1*/
+ float aux1; /*<  Aux 1, -1 .. 1*/
+ float aux2; /*<  Aux 2, -1 .. 1*/
+ float aux3; /*<  Aux 3, -1 .. 1*/
+ float aux4; /*<  Aux 4, -1 .. 1*/
+ uint8_t mode; /*<  System mode.*/
+ uint8_t nav_mode; /*<  Navigation mode (MAV_NAV_MODE)*/
+} mavlink_hil_controls_t;
+
+#define MAVLINK_MSG_ID_HIL_CONTROLS_LEN 42
+#define MAVLINK_MSG_ID_HIL_CONTROLS_MIN_LEN 42
+#define MAVLINK_MSG_ID_91_LEN 42
+#define MAVLINK_MSG_ID_91_MIN_LEN 42
+
+#define MAVLINK_MSG_ID_HIL_CONTROLS_CRC 63
+#define MAVLINK_MSG_ID_91_CRC 63
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIL_CONTROLS { \
+    91, \
+    "HIL_CONTROLS", \
+    11, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_controls_t, time_usec) }, \
+         { "roll_ailerons", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_hil_controls_t, roll_ailerons) }, \
+         { "pitch_elevator", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_controls_t, pitch_elevator) }, \
+         { "yaw_rudder", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_controls_t, yaw_rudder) }, \
+         { "throttle", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_controls_t, throttle) }, \
+         { "aux1", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_controls_t, aux1) }, \
+         { "aux2", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_controls_t, aux2) }, \
+         { "aux3", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_hil_controls_t, aux3) }, \
+         { "aux4", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_hil_controls_t, aux4) }, \
+         { "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_hil_controls_t, mode) }, \
+         { "nav_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 41, offsetof(mavlink_hil_controls_t, nav_mode) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIL_CONTROLS { \
+    "HIL_CONTROLS", \
+    11, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_controls_t, time_usec) }, \
+         { "roll_ailerons", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_hil_controls_t, roll_ailerons) }, \
+         { "pitch_elevator", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_controls_t, pitch_elevator) }, \
+         { "yaw_rudder", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_controls_t, yaw_rudder) }, \
+         { "throttle", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_controls_t, throttle) }, \
+         { "aux1", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_controls_t, aux1) }, \
+         { "aux2", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_controls_t, aux2) }, \
+         { "aux3", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_hil_controls_t, aux3) }, \
+         { "aux4", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_hil_controls_t, aux4) }, \
+         { "mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_hil_controls_t, mode) }, \
+         { "nav_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 41, offsetof(mavlink_hil_controls_t, nav_mode) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a hil_controls message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param roll_ailerons  Control output -1 .. 1
+ * @param pitch_elevator  Control output -1 .. 1
+ * @param yaw_rudder  Control output -1 .. 1
+ * @param throttle  Throttle 0 .. 1
+ * @param aux1  Aux 1, -1 .. 1
+ * @param aux2  Aux 2, -1 .. 1
+ * @param aux3  Aux 3, -1 .. 1
+ * @param aux4  Aux 4, -1 .. 1
+ * @param mode  System mode.
+ * @param nav_mode  Navigation mode (MAV_NAV_MODE)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_controls_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, float roll_ailerons, float pitch_elevator, float yaw_rudder, float throttle, float aux1, float aux2, float aux3, float aux4, uint8_t mode, uint8_t nav_mode)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_CONTROLS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, roll_ailerons);
+    _mav_put_float(buf, 12, pitch_elevator);
+    _mav_put_float(buf, 16, yaw_rudder);
+    _mav_put_float(buf, 20, throttle);
+    _mav_put_float(buf, 24, aux1);
+    _mav_put_float(buf, 28, aux2);
+    _mav_put_float(buf, 32, aux3);
+    _mav_put_float(buf, 36, aux4);
+    _mav_put_uint8_t(buf, 40, mode);
+    _mav_put_uint8_t(buf, 41, nav_mode);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_CONTROLS_LEN);
+#else
+    mavlink_hil_controls_t packet;
+    packet.time_usec = time_usec;
+    packet.roll_ailerons = roll_ailerons;
+    packet.pitch_elevator = pitch_elevator;
+    packet.yaw_rudder = yaw_rudder;
+    packet.throttle = throttle;
+    packet.aux1 = aux1;
+    packet.aux2 = aux2;
+    packet.aux3 = aux3;
+    packet.aux4 = aux4;
+    packet.mode = mode;
+    packet.nav_mode = nav_mode;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_CONTROLS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_CONTROLS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIL_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_CRC);
+}
+
+/**
+ * @brief Pack a hil_controls message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param roll_ailerons  Control output -1 .. 1
+ * @param pitch_elevator  Control output -1 .. 1
+ * @param yaw_rudder  Control output -1 .. 1
+ * @param throttle  Throttle 0 .. 1
+ * @param aux1  Aux 1, -1 .. 1
+ * @param aux2  Aux 2, -1 .. 1
+ * @param aux3  Aux 3, -1 .. 1
+ * @param aux4  Aux 4, -1 .. 1
+ * @param mode  System mode.
+ * @param nav_mode  Navigation mode (MAV_NAV_MODE)
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_controls_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,float roll_ailerons,float pitch_elevator,float yaw_rudder,float throttle,float aux1,float aux2,float aux3,float aux4,uint8_t mode,uint8_t nav_mode)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_CONTROLS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, roll_ailerons);
+    _mav_put_float(buf, 12, pitch_elevator);
+    _mav_put_float(buf, 16, yaw_rudder);
+    _mav_put_float(buf, 20, throttle);
+    _mav_put_float(buf, 24, aux1);
+    _mav_put_float(buf, 28, aux2);
+    _mav_put_float(buf, 32, aux3);
+    _mav_put_float(buf, 36, aux4);
+    _mav_put_uint8_t(buf, 40, mode);
+    _mav_put_uint8_t(buf, 41, nav_mode);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_CONTROLS_LEN);
+#else
+    mavlink_hil_controls_t packet;
+    packet.time_usec = time_usec;
+    packet.roll_ailerons = roll_ailerons;
+    packet.pitch_elevator = pitch_elevator;
+    packet.yaw_rudder = yaw_rudder;
+    packet.throttle = throttle;
+    packet.aux1 = aux1;
+    packet.aux2 = aux2;
+    packet.aux3 = aux3;
+    packet.aux4 = aux4;
+    packet.mode = mode;
+    packet.nav_mode = nav_mode;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_CONTROLS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_CONTROLS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIL_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_CRC);
+}
+
+/**
+ * @brief Encode a hil_controls struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_controls C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_controls_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_controls_t* hil_controls)
+{
+    return mavlink_msg_hil_controls_pack(system_id, component_id, msg, hil_controls->time_usec, hil_controls->roll_ailerons, hil_controls->pitch_elevator, hil_controls->yaw_rudder, hil_controls->throttle, hil_controls->aux1, hil_controls->aux2, hil_controls->aux3, hil_controls->aux4, hil_controls->mode, hil_controls->nav_mode);
+}
+
+/**
+ * @brief Encode a hil_controls struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_controls C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_controls_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_hil_controls_t* hil_controls)
+{
+    return mavlink_msg_hil_controls_pack_chan(system_id, component_id, chan, msg, hil_controls->time_usec, hil_controls->roll_ailerons, hil_controls->pitch_elevator, hil_controls->yaw_rudder, hil_controls->throttle, hil_controls->aux1, hil_controls->aux2, hil_controls->aux3, hil_controls->aux4, hil_controls->mode, hil_controls->nav_mode);
+}
+
+/**
+ * @brief Send a hil_controls message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param roll_ailerons  Control output -1 .. 1
+ * @param pitch_elevator  Control output -1 .. 1
+ * @param yaw_rudder  Control output -1 .. 1
+ * @param throttle  Throttle 0 .. 1
+ * @param aux1  Aux 1, -1 .. 1
+ * @param aux2  Aux 2, -1 .. 1
+ * @param aux3  Aux 3, -1 .. 1
+ * @param aux4  Aux 4, -1 .. 1
+ * @param mode  System mode.
+ * @param nav_mode  Navigation mode (MAV_NAV_MODE)
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_hil_controls_send(mavlink_channel_t chan, uint64_t time_usec, float roll_ailerons, float pitch_elevator, float yaw_rudder, float throttle, float aux1, float aux2, float aux3, float aux4, uint8_t mode, uint8_t nav_mode)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_CONTROLS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, roll_ailerons);
+    _mav_put_float(buf, 12, pitch_elevator);
+    _mav_put_float(buf, 16, yaw_rudder);
+    _mav_put_float(buf, 20, throttle);
+    _mav_put_float(buf, 24, aux1);
+    _mav_put_float(buf, 28, aux2);
+    _mav_put_float(buf, 32, aux3);
+    _mav_put_float(buf, 36, aux4);
+    _mav_put_uint8_t(buf, 40, mode);
+    _mav_put_uint8_t(buf, 41, nav_mode);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, buf, MAVLINK_MSG_ID_HIL_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_CRC);
+#else
+    mavlink_hil_controls_t packet;
+    packet.time_usec = time_usec;
+    packet.roll_ailerons = roll_ailerons;
+    packet.pitch_elevator = pitch_elevator;
+    packet.yaw_rudder = yaw_rudder;
+    packet.throttle = throttle;
+    packet.aux1 = aux1;
+    packet.aux2 = aux2;
+    packet.aux3 = aux3;
+    packet.aux4 = aux4;
+    packet.mode = mode;
+    packet.nav_mode = nav_mode;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, (const char *)&packet, MAVLINK_MSG_ID_HIL_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a hil_controls message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_hil_controls_send_struct(mavlink_channel_t chan, const mavlink_hil_controls_t* hil_controls)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_hil_controls_send(chan, hil_controls->time_usec, hil_controls->roll_ailerons, hil_controls->pitch_elevator, hil_controls->yaw_rudder, hil_controls->throttle, hil_controls->aux1, hil_controls->aux2, hil_controls->aux3, hil_controls->aux4, hil_controls->mode, hil_controls->nav_mode);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, (const char *)hil_controls, MAVLINK_MSG_ID_HIL_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIL_CONTROLS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_hil_controls_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, float roll_ailerons, float pitch_elevator, float yaw_rudder, float throttle, float aux1, float aux2, float aux3, float aux4, uint8_t mode, uint8_t nav_mode)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, roll_ailerons);
+    _mav_put_float(buf, 12, pitch_elevator);
+    _mav_put_float(buf, 16, yaw_rudder);
+    _mav_put_float(buf, 20, throttle);
+    _mav_put_float(buf, 24, aux1);
+    _mav_put_float(buf, 28, aux2);
+    _mav_put_float(buf, 32, aux3);
+    _mav_put_float(buf, 36, aux4);
+    _mav_put_uint8_t(buf, 40, mode);
+    _mav_put_uint8_t(buf, 41, nav_mode);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, buf, MAVLINK_MSG_ID_HIL_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_CRC);
+#else
+    mavlink_hil_controls_t *packet = (mavlink_hil_controls_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->roll_ailerons = roll_ailerons;
+    packet->pitch_elevator = pitch_elevator;
+    packet->yaw_rudder = yaw_rudder;
+    packet->throttle = throttle;
+    packet->aux1 = aux1;
+    packet->aux2 = aux2;
+    packet->aux3 = aux3;
+    packet->aux4 = aux4;
+    packet->mode = mode;
+    packet->nav_mode = nav_mode;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_CONTROLS, (const char *)packet, MAVLINK_MSG_ID_HIL_CONTROLS_MIN_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_LEN, MAVLINK_MSG_ID_HIL_CONTROLS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIL_CONTROLS UNPACKING
+
+
+/**
+ * @brief Get field time_usec from hil_controls message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_hil_controls_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field roll_ailerons from hil_controls message
+ *
+ * @return  Control output -1 .. 1
+ */
+static inline float mavlink_msg_hil_controls_get_roll_ailerons(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field pitch_elevator from hil_controls message
+ *
+ * @return  Control output -1 .. 1
+ */
+static inline float mavlink_msg_hil_controls_get_pitch_elevator(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field yaw_rudder from hil_controls message
+ *
+ * @return  Control output -1 .. 1
+ */
+static inline float mavlink_msg_hil_controls_get_yaw_rudder(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field throttle from hil_controls message
+ *
+ * @return  Throttle 0 .. 1
+ */
+static inline float mavlink_msg_hil_controls_get_throttle(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field aux1 from hil_controls message
+ *
+ * @return  Aux 1, -1 .. 1
+ */
+static inline float mavlink_msg_hil_controls_get_aux1(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field aux2 from hil_controls message
+ *
+ * @return  Aux 2, -1 .. 1
+ */
+static inline float mavlink_msg_hil_controls_get_aux2(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field aux3 from hil_controls message
+ *
+ * @return  Aux 3, -1 .. 1
+ */
+static inline float mavlink_msg_hil_controls_get_aux3(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field aux4 from hil_controls message
+ *
+ * @return  Aux 4, -1 .. 1
+ */
+static inline float mavlink_msg_hil_controls_get_aux4(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field mode from hil_controls message
+ *
+ * @return  System mode.
+ */
+static inline uint8_t mavlink_msg_hil_controls_get_mode(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  40);
+}
+
+/**
+ * @brief Get field nav_mode from hil_controls message
+ *
+ * @return  Navigation mode (MAV_NAV_MODE)
+ */
+static inline uint8_t mavlink_msg_hil_controls_get_nav_mode(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  41);
+}
+
+/**
+ * @brief Decode a hil_controls message into a struct
+ *
+ * @param msg The message to decode
+ * @param hil_controls C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_hil_controls_decode(const mavlink_message_t* msg, mavlink_hil_controls_t* hil_controls)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    hil_controls->time_usec = mavlink_msg_hil_controls_get_time_usec(msg);
+    hil_controls->roll_ailerons = mavlink_msg_hil_controls_get_roll_ailerons(msg);
+    hil_controls->pitch_elevator = mavlink_msg_hil_controls_get_pitch_elevator(msg);
+    hil_controls->yaw_rudder = mavlink_msg_hil_controls_get_yaw_rudder(msg);
+    hil_controls->throttle = mavlink_msg_hil_controls_get_throttle(msg);
+    hil_controls->aux1 = mavlink_msg_hil_controls_get_aux1(msg);
+    hil_controls->aux2 = mavlink_msg_hil_controls_get_aux2(msg);
+    hil_controls->aux3 = mavlink_msg_hil_controls_get_aux3(msg);
+    hil_controls->aux4 = mavlink_msg_hil_controls_get_aux4(msg);
+    hil_controls->mode = mavlink_msg_hil_controls_get_mode(msg);
+    hil_controls->nav_mode = mavlink_msg_hil_controls_get_nav_mode(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIL_CONTROLS_LEN? msg->len : MAVLINK_MSG_ID_HIL_CONTROLS_LEN;
+        memset(hil_controls, 0, MAVLINK_MSG_ID_HIL_CONTROLS_LEN);
+    memcpy(hil_controls, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 563 - 0
v2.0/common/mavlink_msg_hil_gps.h

@@ -0,0 +1,563 @@
+#pragma once
+// MESSAGE HIL_GPS PACKING
+
+#define MAVLINK_MSG_ID_HIL_GPS 113
+
+MAVPACKED(
+typedef struct __mavlink_hil_gps_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ int32_t lat; /*< [degE7] Latitude (WGS84)*/
+ int32_t lon; /*< [degE7] Longitude (WGS84)*/
+ int32_t alt; /*< [mm] Altitude (MSL). Positive for up.*/
+ uint16_t eph; /*<  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
+ uint16_t epv; /*<  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
+ uint16_t vel; /*< [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX*/
+ int16_t vn; /*< [cm/s] GPS velocity in north direction in earth-fixed NED frame*/
+ int16_t ve; /*< [cm/s] GPS velocity in east direction in earth-fixed NED frame*/
+ int16_t vd; /*< [cm/s] GPS velocity in down direction in earth-fixed NED frame*/
+ uint16_t cog; /*< [cdeg] Course over ground (NOT heading, but direction of movement), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX*/
+ uint8_t fix_type; /*<  0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.*/
+ uint8_t satellites_visible; /*<  Number of satellites visible. If unknown, set to UINT8_MAX*/
+ uint8_t id; /*<  GPS ID (zero indexed). Used for multiple GPS inputs*/
+ uint16_t yaw; /*< [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north*/
+}) mavlink_hil_gps_t;
+
+#define MAVLINK_MSG_ID_HIL_GPS_LEN 39
+#define MAVLINK_MSG_ID_HIL_GPS_MIN_LEN 36
+#define MAVLINK_MSG_ID_113_LEN 39
+#define MAVLINK_MSG_ID_113_MIN_LEN 36
+
+#define MAVLINK_MSG_ID_HIL_GPS_CRC 124
+#define MAVLINK_MSG_ID_113_CRC 124
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIL_GPS { \
+    113, \
+    "HIL_GPS", \
+    15, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_gps_t, time_usec) }, \
+         { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_hil_gps_t, fix_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_hil_gps_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_hil_gps_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_hil_gps_t, alt) }, \
+         { "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_hil_gps_t, eph) }, \
+         { "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_hil_gps_t, epv) }, \
+         { "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_hil_gps_t, vel) }, \
+         { "vn", NULL, MAVLINK_TYPE_INT16_T, 0, 26, offsetof(mavlink_hil_gps_t, vn) }, \
+         { "ve", NULL, MAVLINK_TYPE_INT16_T, 0, 28, offsetof(mavlink_hil_gps_t, ve) }, \
+         { "vd", NULL, MAVLINK_TYPE_INT16_T, 0, 30, offsetof(mavlink_hil_gps_t, vd) }, \
+         { "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 32, offsetof(mavlink_hil_gps_t, cog) }, \
+         { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_hil_gps_t, satellites_visible) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_hil_gps_t, id) }, \
+         { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 37, offsetof(mavlink_hil_gps_t, yaw) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIL_GPS { \
+    "HIL_GPS", \
+    15, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_gps_t, time_usec) }, \
+         { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_hil_gps_t, fix_type) }, \
+         { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_hil_gps_t, lat) }, \
+         { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_hil_gps_t, lon) }, \
+         { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_hil_gps_t, alt) }, \
+         { "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_hil_gps_t, eph) }, \
+         { "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_hil_gps_t, epv) }, \
+         { "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_hil_gps_t, vel) }, \
+         { "vn", NULL, MAVLINK_TYPE_INT16_T, 0, 26, offsetof(mavlink_hil_gps_t, vn) }, \
+         { "ve", NULL, MAVLINK_TYPE_INT16_T, 0, 28, offsetof(mavlink_hil_gps_t, ve) }, \
+         { "vd", NULL, MAVLINK_TYPE_INT16_T, 0, 30, offsetof(mavlink_hil_gps_t, vd) }, \
+         { "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 32, offsetof(mavlink_hil_gps_t, cog) }, \
+         { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 35, offsetof(mavlink_hil_gps_t, satellites_visible) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 36, offsetof(mavlink_hil_gps_t, id) }, \
+         { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 37, offsetof(mavlink_hil_gps_t, yaw) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a hil_gps message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [mm] Altitude (MSL). Positive for up.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param vn [cm/s] GPS velocity in north direction in earth-fixed NED frame
+ * @param ve [cm/s] GPS velocity in east direction in earth-fixed NED frame
+ * @param vd [cm/s] GPS velocity in down direction in earth-fixed NED frame
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param id  GPS ID (zero indexed). Used for multiple GPS inputs
+ * @param yaw [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_gps_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, int16_t vn, int16_t ve, int16_t vd, uint16_t cog, uint8_t satellites_visible, uint8_t id, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_GPS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint16_t(buf, 20, eph);
+    _mav_put_uint16_t(buf, 22, epv);
+    _mav_put_uint16_t(buf, 24, vel);
+    _mav_put_int16_t(buf, 26, vn);
+    _mav_put_int16_t(buf, 28, ve);
+    _mav_put_int16_t(buf, 30, vd);
+    _mav_put_uint16_t(buf, 32, cog);
+    _mav_put_uint8_t(buf, 34, fix_type);
+    _mav_put_uint8_t(buf, 35, satellites_visible);
+    _mav_put_uint8_t(buf, 36, id);
+    _mav_put_uint16_t(buf, 37, yaw);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_GPS_LEN);
+#else
+    mavlink_hil_gps_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.vn = vn;
+    packet.ve = ve;
+    packet.vd = vd;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.id = id;
+    packet.yaw = yaw;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_GPS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_GPS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIL_GPS_MIN_LEN, MAVLINK_MSG_ID_HIL_GPS_LEN, MAVLINK_MSG_ID_HIL_GPS_CRC);
+}
+
+/**
+ * @brief Pack a hil_gps message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [mm] Altitude (MSL). Positive for up.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param vn [cm/s] GPS velocity in north direction in earth-fixed NED frame
+ * @param ve [cm/s] GPS velocity in east direction in earth-fixed NED frame
+ * @param vd [cm/s] GPS velocity in down direction in earth-fixed NED frame
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param id  GPS ID (zero indexed). Used for multiple GPS inputs
+ * @param yaw [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_gps_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint8_t fix_type,int32_t lat,int32_t lon,int32_t alt,uint16_t eph,uint16_t epv,uint16_t vel,int16_t vn,int16_t ve,int16_t vd,uint16_t cog,uint8_t satellites_visible,uint8_t id,uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_GPS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint16_t(buf, 20, eph);
+    _mav_put_uint16_t(buf, 22, epv);
+    _mav_put_uint16_t(buf, 24, vel);
+    _mav_put_int16_t(buf, 26, vn);
+    _mav_put_int16_t(buf, 28, ve);
+    _mav_put_int16_t(buf, 30, vd);
+    _mav_put_uint16_t(buf, 32, cog);
+    _mav_put_uint8_t(buf, 34, fix_type);
+    _mav_put_uint8_t(buf, 35, satellites_visible);
+    _mav_put_uint8_t(buf, 36, id);
+    _mav_put_uint16_t(buf, 37, yaw);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_GPS_LEN);
+#else
+    mavlink_hil_gps_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.vn = vn;
+    packet.ve = ve;
+    packet.vd = vd;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.id = id;
+    packet.yaw = yaw;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_GPS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_GPS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIL_GPS_MIN_LEN, MAVLINK_MSG_ID_HIL_GPS_LEN, MAVLINK_MSG_ID_HIL_GPS_CRC);
+}
+
+/**
+ * @brief Encode a hil_gps struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_gps C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_gps_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_gps_t* hil_gps)
+{
+    return mavlink_msg_hil_gps_pack(system_id, component_id, msg, hil_gps->time_usec, hil_gps->fix_type, hil_gps->lat, hil_gps->lon, hil_gps->alt, hil_gps->eph, hil_gps->epv, hil_gps->vel, hil_gps->vn, hil_gps->ve, hil_gps->vd, hil_gps->cog, hil_gps->satellites_visible, hil_gps->id, hil_gps->yaw);
+}
+
+/**
+ * @brief Encode a hil_gps struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_gps C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_gps_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_hil_gps_t* hil_gps)
+{
+    return mavlink_msg_hil_gps_pack_chan(system_id, component_id, chan, msg, hil_gps->time_usec, hil_gps->fix_type, hil_gps->lat, hil_gps->lon, hil_gps->alt, hil_gps->eph, hil_gps->epv, hil_gps->vel, hil_gps->vn, hil_gps->ve, hil_gps->vd, hil_gps->cog, hil_gps->satellites_visible, hil_gps->id, hil_gps->yaw);
+}
+
+/**
+ * @brief Send a hil_gps message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param fix_type  0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
+ * @param lat [degE7] Latitude (WGS84)
+ * @param lon [degE7] Longitude (WGS84)
+ * @param alt [mm] Altitude (MSL). Positive for up.
+ * @param eph  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param epv  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ * @param vn [cm/s] GPS velocity in north direction in earth-fixed NED frame
+ * @param ve [cm/s] GPS velocity in east direction in earth-fixed NED frame
+ * @param vd [cm/s] GPS velocity in down direction in earth-fixed NED frame
+ * @param cog [cdeg] Course over ground (NOT heading, but direction of movement), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ * @param satellites_visible  Number of satellites visible. If unknown, set to UINT8_MAX
+ * @param id  GPS ID (zero indexed). Used for multiple GPS inputs
+ * @param yaw [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_hil_gps_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, int16_t vn, int16_t ve, int16_t vd, uint16_t cog, uint8_t satellites_visible, uint8_t id, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_GPS_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint16_t(buf, 20, eph);
+    _mav_put_uint16_t(buf, 22, epv);
+    _mav_put_uint16_t(buf, 24, vel);
+    _mav_put_int16_t(buf, 26, vn);
+    _mav_put_int16_t(buf, 28, ve);
+    _mav_put_int16_t(buf, 30, vd);
+    _mav_put_uint16_t(buf, 32, cog);
+    _mav_put_uint8_t(buf, 34, fix_type);
+    _mav_put_uint8_t(buf, 35, satellites_visible);
+    _mav_put_uint8_t(buf, 36, id);
+    _mav_put_uint16_t(buf, 37, yaw);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_GPS, buf, MAVLINK_MSG_ID_HIL_GPS_MIN_LEN, MAVLINK_MSG_ID_HIL_GPS_LEN, MAVLINK_MSG_ID_HIL_GPS_CRC);
+#else
+    mavlink_hil_gps_t packet;
+    packet.time_usec = time_usec;
+    packet.lat = lat;
+    packet.lon = lon;
+    packet.alt = alt;
+    packet.eph = eph;
+    packet.epv = epv;
+    packet.vel = vel;
+    packet.vn = vn;
+    packet.ve = ve;
+    packet.vd = vd;
+    packet.cog = cog;
+    packet.fix_type = fix_type;
+    packet.satellites_visible = satellites_visible;
+    packet.id = id;
+    packet.yaw = yaw;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_GPS, (const char *)&packet, MAVLINK_MSG_ID_HIL_GPS_MIN_LEN, MAVLINK_MSG_ID_HIL_GPS_LEN, MAVLINK_MSG_ID_HIL_GPS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a hil_gps message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_hil_gps_send_struct(mavlink_channel_t chan, const mavlink_hil_gps_t* hil_gps)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_hil_gps_send(chan, hil_gps->time_usec, hil_gps->fix_type, hil_gps->lat, hil_gps->lon, hil_gps->alt, hil_gps->eph, hil_gps->epv, hil_gps->vel, hil_gps->vn, hil_gps->ve, hil_gps->vd, hil_gps->cog, hil_gps->satellites_visible, hil_gps->id, hil_gps->yaw);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_GPS, (const char *)hil_gps, MAVLINK_MSG_ID_HIL_GPS_MIN_LEN, MAVLINK_MSG_ID_HIL_GPS_LEN, MAVLINK_MSG_ID_HIL_GPS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIL_GPS_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_hil_gps_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, int16_t vn, int16_t ve, int16_t vd, uint16_t cog, uint8_t satellites_visible, uint8_t id, uint16_t yaw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_int32_t(buf, 8, lat);
+    _mav_put_int32_t(buf, 12, lon);
+    _mav_put_int32_t(buf, 16, alt);
+    _mav_put_uint16_t(buf, 20, eph);
+    _mav_put_uint16_t(buf, 22, epv);
+    _mav_put_uint16_t(buf, 24, vel);
+    _mav_put_int16_t(buf, 26, vn);
+    _mav_put_int16_t(buf, 28, ve);
+    _mav_put_int16_t(buf, 30, vd);
+    _mav_put_uint16_t(buf, 32, cog);
+    _mav_put_uint8_t(buf, 34, fix_type);
+    _mav_put_uint8_t(buf, 35, satellites_visible);
+    _mav_put_uint8_t(buf, 36, id);
+    _mav_put_uint16_t(buf, 37, yaw);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_GPS, buf, MAVLINK_MSG_ID_HIL_GPS_MIN_LEN, MAVLINK_MSG_ID_HIL_GPS_LEN, MAVLINK_MSG_ID_HIL_GPS_CRC);
+#else
+    mavlink_hil_gps_t *packet = (mavlink_hil_gps_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->lat = lat;
+    packet->lon = lon;
+    packet->alt = alt;
+    packet->eph = eph;
+    packet->epv = epv;
+    packet->vel = vel;
+    packet->vn = vn;
+    packet->ve = ve;
+    packet->vd = vd;
+    packet->cog = cog;
+    packet->fix_type = fix_type;
+    packet->satellites_visible = satellites_visible;
+    packet->id = id;
+    packet->yaw = yaw;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_GPS, (const char *)packet, MAVLINK_MSG_ID_HIL_GPS_MIN_LEN, MAVLINK_MSG_ID_HIL_GPS_LEN, MAVLINK_MSG_ID_HIL_GPS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIL_GPS UNPACKING
+
+
+/**
+ * @brief Get field time_usec from hil_gps message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_hil_gps_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field fix_type from hil_gps message
+ *
+ * @return  0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.
+ */
+static inline uint8_t mavlink_msg_hil_gps_get_fix_type(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  34);
+}
+
+/**
+ * @brief Get field lat from hil_gps message
+ *
+ * @return [degE7] Latitude (WGS84)
+ */
+static inline int32_t mavlink_msg_hil_gps_get_lat(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  8);
+}
+
+/**
+ * @brief Get field lon from hil_gps message
+ *
+ * @return [degE7] Longitude (WGS84)
+ */
+static inline int32_t mavlink_msg_hil_gps_get_lon(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  12);
+}
+
+/**
+ * @brief Get field alt from hil_gps message
+ *
+ * @return [mm] Altitude (MSL). Positive for up.
+ */
+static inline int32_t mavlink_msg_hil_gps_get_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int32_t(msg,  16);
+}
+
+/**
+ * @brief Get field eph from hil_gps message
+ *
+ * @return  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_hil_gps_get_eph(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  20);
+}
+
+/**
+ * @brief Get field epv from hil_gps message
+ *
+ * @return  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_hil_gps_get_epv(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  22);
+}
+
+/**
+ * @brief Get field vel from hil_gps message
+ *
+ * @return [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_hil_gps_get_vel(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Get field vn from hil_gps message
+ *
+ * @return [cm/s] GPS velocity in north direction in earth-fixed NED frame
+ */
+static inline int16_t mavlink_msg_hil_gps_get_vn(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  26);
+}
+
+/**
+ * @brief Get field ve from hil_gps message
+ *
+ * @return [cm/s] GPS velocity in east direction in earth-fixed NED frame
+ */
+static inline int16_t mavlink_msg_hil_gps_get_ve(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  28);
+}
+
+/**
+ * @brief Get field vd from hil_gps message
+ *
+ * @return [cm/s] GPS velocity in down direction in earth-fixed NED frame
+ */
+static inline int16_t mavlink_msg_hil_gps_get_vd(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  30);
+}
+
+/**
+ * @brief Get field cog from hil_gps message
+ *
+ * @return [cdeg] Course over ground (NOT heading, but direction of movement), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
+ */
+static inline uint16_t mavlink_msg_hil_gps_get_cog(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  32);
+}
+
+/**
+ * @brief Get field satellites_visible from hil_gps message
+ *
+ * @return  Number of satellites visible. If unknown, set to UINT8_MAX
+ */
+static inline uint8_t mavlink_msg_hil_gps_get_satellites_visible(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  35);
+}
+
+/**
+ * @brief Get field id from hil_gps message
+ *
+ * @return  GPS ID (zero indexed). Used for multiple GPS inputs
+ */
+static inline uint8_t mavlink_msg_hil_gps_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  36);
+}
+
+/**
+ * @brief Get field yaw from hil_gps message
+ *
+ * @return [cdeg] Yaw of vehicle relative to Earth's North, zero means not available, use 36000 for north
+ */
+static inline uint16_t mavlink_msg_hil_gps_get_yaw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  37);
+}
+
+/**
+ * @brief Decode a hil_gps message into a struct
+ *
+ * @param msg The message to decode
+ * @param hil_gps C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_hil_gps_decode(const mavlink_message_t* msg, mavlink_hil_gps_t* hil_gps)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    hil_gps->time_usec = mavlink_msg_hil_gps_get_time_usec(msg);
+    hil_gps->lat = mavlink_msg_hil_gps_get_lat(msg);
+    hil_gps->lon = mavlink_msg_hil_gps_get_lon(msg);
+    hil_gps->alt = mavlink_msg_hil_gps_get_alt(msg);
+    hil_gps->eph = mavlink_msg_hil_gps_get_eph(msg);
+    hil_gps->epv = mavlink_msg_hil_gps_get_epv(msg);
+    hil_gps->vel = mavlink_msg_hil_gps_get_vel(msg);
+    hil_gps->vn = mavlink_msg_hil_gps_get_vn(msg);
+    hil_gps->ve = mavlink_msg_hil_gps_get_ve(msg);
+    hil_gps->vd = mavlink_msg_hil_gps_get_vd(msg);
+    hil_gps->cog = mavlink_msg_hil_gps_get_cog(msg);
+    hil_gps->fix_type = mavlink_msg_hil_gps_get_fix_type(msg);
+    hil_gps->satellites_visible = mavlink_msg_hil_gps_get_satellites_visible(msg);
+    hil_gps->id = mavlink_msg_hil_gps_get_id(msg);
+    hil_gps->yaw = mavlink_msg_hil_gps_get_yaw(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIL_GPS_LEN? msg->len : MAVLINK_MSG_ID_HIL_GPS_LEN;
+        memset(hil_gps, 0, MAVLINK_MSG_ID_HIL_GPS_LEN);
+    memcpy(hil_gps, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 488 - 0
v2.0/common/mavlink_msg_hil_optical_flow.h

@@ -0,0 +1,488 @@
+#pragma once
+// MESSAGE HIL_OPTICAL_FLOW PACKING
+
+#define MAVLINK_MSG_ID_HIL_OPTICAL_FLOW 114
+
+
+typedef struct __mavlink_hil_optical_flow_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ uint32_t integration_time_us; /*< [us] Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.*/
+ float integrated_x; /*< [rad] Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)*/
+ float integrated_y; /*< [rad] Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)*/
+ float integrated_xgyro; /*< [rad] RH rotation around X axis*/
+ float integrated_ygyro; /*< [rad] RH rotation around Y axis*/
+ float integrated_zgyro; /*< [rad] RH rotation around Z axis*/
+ uint32_t time_delta_distance_us; /*< [us] Time since the distance was sampled.*/
+ float distance; /*< [m] Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance.*/
+ int16_t temperature; /*< [cdegC] Temperature*/
+ uint8_t sensor_id; /*<  Sensor ID*/
+ uint8_t quality; /*<  Optical flow quality / confidence. 0: no valid flow, 255: maximum quality*/
+} mavlink_hil_optical_flow_t;
+
+#define MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN 44
+#define MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_MIN_LEN 44
+#define MAVLINK_MSG_ID_114_LEN 44
+#define MAVLINK_MSG_ID_114_MIN_LEN 44
+
+#define MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_CRC 237
+#define MAVLINK_MSG_ID_114_CRC 237
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIL_OPTICAL_FLOW { \
+    114, \
+    "HIL_OPTICAL_FLOW", \
+    12, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_optical_flow_t, time_usec) }, \
+         { "sensor_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_hil_optical_flow_t, sensor_id) }, \
+         { "integration_time_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_hil_optical_flow_t, integration_time_us) }, \
+         { "integrated_x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_optical_flow_t, integrated_x) }, \
+         { "integrated_y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_optical_flow_t, integrated_y) }, \
+         { "integrated_xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_optical_flow_t, integrated_xgyro) }, \
+         { "integrated_ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_optical_flow_t, integrated_ygyro) }, \
+         { "integrated_zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_optical_flow_t, integrated_zgyro) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 40, offsetof(mavlink_hil_optical_flow_t, temperature) }, \
+         { "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_hil_optical_flow_t, quality) }, \
+         { "time_delta_distance_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 32, offsetof(mavlink_hil_optical_flow_t, time_delta_distance_us) }, \
+         { "distance", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_hil_optical_flow_t, distance) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIL_OPTICAL_FLOW { \
+    "HIL_OPTICAL_FLOW", \
+    12, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_optical_flow_t, time_usec) }, \
+         { "sensor_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_hil_optical_flow_t, sensor_id) }, \
+         { "integration_time_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_hil_optical_flow_t, integration_time_us) }, \
+         { "integrated_x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_optical_flow_t, integrated_x) }, \
+         { "integrated_y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_optical_flow_t, integrated_y) }, \
+         { "integrated_xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_optical_flow_t, integrated_xgyro) }, \
+         { "integrated_ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_optical_flow_t, integrated_ygyro) }, \
+         { "integrated_zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_optical_flow_t, integrated_zgyro) }, \
+         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 40, offsetof(mavlink_hil_optical_flow_t, temperature) }, \
+         { "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_hil_optical_flow_t, quality) }, \
+         { "time_delta_distance_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 32, offsetof(mavlink_hil_optical_flow_t, time_delta_distance_us) }, \
+         { "distance", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_hil_optical_flow_t, distance) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a hil_optical_flow message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param sensor_id  Sensor ID
+ * @param integration_time_us [us] Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.
+ * @param integrated_x [rad] Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)
+ * @param integrated_y [rad] Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)
+ * @param integrated_xgyro [rad] RH rotation around X axis
+ * @param integrated_ygyro [rad] RH rotation around Y axis
+ * @param integrated_zgyro [rad] RH rotation around Z axis
+ * @param temperature [cdegC] Temperature
+ * @param quality  Optical flow quality / confidence. 0: no valid flow, 255: maximum quality
+ * @param time_delta_distance_us [us] Time since the distance was sampled.
+ * @param distance [m] Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_optical_flow_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint8_t sensor_id, uint32_t integration_time_us, float integrated_x, float integrated_y, float integrated_xgyro, float integrated_ygyro, float integrated_zgyro, int16_t temperature, uint8_t quality, uint32_t time_delta_distance_us, float distance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, integration_time_us);
+    _mav_put_float(buf, 12, integrated_x);
+    _mav_put_float(buf, 16, integrated_y);
+    _mav_put_float(buf, 20, integrated_xgyro);
+    _mav_put_float(buf, 24, integrated_ygyro);
+    _mav_put_float(buf, 28, integrated_zgyro);
+    _mav_put_uint32_t(buf, 32, time_delta_distance_us);
+    _mav_put_float(buf, 36, distance);
+    _mav_put_int16_t(buf, 40, temperature);
+    _mav_put_uint8_t(buf, 42, sensor_id);
+    _mav_put_uint8_t(buf, 43, quality);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN);
+#else
+    mavlink_hil_optical_flow_t packet;
+    packet.time_usec = time_usec;
+    packet.integration_time_us = integration_time_us;
+    packet.integrated_x = integrated_x;
+    packet.integrated_y = integrated_y;
+    packet.integrated_xgyro = integrated_xgyro;
+    packet.integrated_ygyro = integrated_ygyro;
+    packet.integrated_zgyro = integrated_zgyro;
+    packet.time_delta_distance_us = time_delta_distance_us;
+    packet.distance = distance;
+    packet.temperature = temperature;
+    packet.sensor_id = sensor_id;
+    packet.quality = quality;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_OPTICAL_FLOW;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_MIN_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_CRC);
+}
+
+/**
+ * @brief Pack a hil_optical_flow message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param sensor_id  Sensor ID
+ * @param integration_time_us [us] Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.
+ * @param integrated_x [rad] Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)
+ * @param integrated_y [rad] Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)
+ * @param integrated_xgyro [rad] RH rotation around X axis
+ * @param integrated_ygyro [rad] RH rotation around Y axis
+ * @param integrated_zgyro [rad] RH rotation around Z axis
+ * @param temperature [cdegC] Temperature
+ * @param quality  Optical flow quality / confidence. 0: no valid flow, 255: maximum quality
+ * @param time_delta_distance_us [us] Time since the distance was sampled.
+ * @param distance [m] Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_optical_flow_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint8_t sensor_id,uint32_t integration_time_us,float integrated_x,float integrated_y,float integrated_xgyro,float integrated_ygyro,float integrated_zgyro,int16_t temperature,uint8_t quality,uint32_t time_delta_distance_us,float distance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, integration_time_us);
+    _mav_put_float(buf, 12, integrated_x);
+    _mav_put_float(buf, 16, integrated_y);
+    _mav_put_float(buf, 20, integrated_xgyro);
+    _mav_put_float(buf, 24, integrated_ygyro);
+    _mav_put_float(buf, 28, integrated_zgyro);
+    _mav_put_uint32_t(buf, 32, time_delta_distance_us);
+    _mav_put_float(buf, 36, distance);
+    _mav_put_int16_t(buf, 40, temperature);
+    _mav_put_uint8_t(buf, 42, sensor_id);
+    _mav_put_uint8_t(buf, 43, quality);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN);
+#else
+    mavlink_hil_optical_flow_t packet;
+    packet.time_usec = time_usec;
+    packet.integration_time_us = integration_time_us;
+    packet.integrated_x = integrated_x;
+    packet.integrated_y = integrated_y;
+    packet.integrated_xgyro = integrated_xgyro;
+    packet.integrated_ygyro = integrated_ygyro;
+    packet.integrated_zgyro = integrated_zgyro;
+    packet.time_delta_distance_us = time_delta_distance_us;
+    packet.distance = distance;
+    packet.temperature = temperature;
+    packet.sensor_id = sensor_id;
+    packet.quality = quality;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_OPTICAL_FLOW;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_MIN_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_CRC);
+}
+
+/**
+ * @brief Encode a hil_optical_flow struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_optical_flow C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_optical_flow_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_optical_flow_t* hil_optical_flow)
+{
+    return mavlink_msg_hil_optical_flow_pack(system_id, component_id, msg, hil_optical_flow->time_usec, hil_optical_flow->sensor_id, hil_optical_flow->integration_time_us, hil_optical_flow->integrated_x, hil_optical_flow->integrated_y, hil_optical_flow->integrated_xgyro, hil_optical_flow->integrated_ygyro, hil_optical_flow->integrated_zgyro, hil_optical_flow->temperature, hil_optical_flow->quality, hil_optical_flow->time_delta_distance_us, hil_optical_flow->distance);
+}
+
+/**
+ * @brief Encode a hil_optical_flow struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_optical_flow C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_optical_flow_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_hil_optical_flow_t* hil_optical_flow)
+{
+    return mavlink_msg_hil_optical_flow_pack_chan(system_id, component_id, chan, msg, hil_optical_flow->time_usec, hil_optical_flow->sensor_id, hil_optical_flow->integration_time_us, hil_optical_flow->integrated_x, hil_optical_flow->integrated_y, hil_optical_flow->integrated_xgyro, hil_optical_flow->integrated_ygyro, hil_optical_flow->integrated_zgyro, hil_optical_flow->temperature, hil_optical_flow->quality, hil_optical_flow->time_delta_distance_us, hil_optical_flow->distance);
+}
+
+/**
+ * @brief Send a hil_optical_flow message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param sensor_id  Sensor ID
+ * @param integration_time_us [us] Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.
+ * @param integrated_x [rad] Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)
+ * @param integrated_y [rad] Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)
+ * @param integrated_xgyro [rad] RH rotation around X axis
+ * @param integrated_ygyro [rad] RH rotation around Y axis
+ * @param integrated_zgyro [rad] RH rotation around Z axis
+ * @param temperature [cdegC] Temperature
+ * @param quality  Optical flow quality / confidence. 0: no valid flow, 255: maximum quality
+ * @param time_delta_distance_us [us] Time since the distance was sampled.
+ * @param distance [m] Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_hil_optical_flow_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t sensor_id, uint32_t integration_time_us, float integrated_x, float integrated_y, float integrated_xgyro, float integrated_ygyro, float integrated_zgyro, int16_t temperature, uint8_t quality, uint32_t time_delta_distance_us, float distance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, integration_time_us);
+    _mav_put_float(buf, 12, integrated_x);
+    _mav_put_float(buf, 16, integrated_y);
+    _mav_put_float(buf, 20, integrated_xgyro);
+    _mav_put_float(buf, 24, integrated_ygyro);
+    _mav_put_float(buf, 28, integrated_zgyro);
+    _mav_put_uint32_t(buf, 32, time_delta_distance_us);
+    _mav_put_float(buf, 36, distance);
+    _mav_put_int16_t(buf, 40, temperature);
+    _mav_put_uint8_t(buf, 42, sensor_id);
+    _mav_put_uint8_t(buf, 43, quality);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW, buf, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_MIN_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_CRC);
+#else
+    mavlink_hil_optical_flow_t packet;
+    packet.time_usec = time_usec;
+    packet.integration_time_us = integration_time_us;
+    packet.integrated_x = integrated_x;
+    packet.integrated_y = integrated_y;
+    packet.integrated_xgyro = integrated_xgyro;
+    packet.integrated_ygyro = integrated_ygyro;
+    packet.integrated_zgyro = integrated_zgyro;
+    packet.time_delta_distance_us = time_delta_distance_us;
+    packet.distance = distance;
+    packet.temperature = temperature;
+    packet.sensor_id = sensor_id;
+    packet.quality = quality;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW, (const char *)&packet, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_MIN_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_CRC);
+#endif
+}
+
+/**
+ * @brief Send a hil_optical_flow message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_hil_optical_flow_send_struct(mavlink_channel_t chan, const mavlink_hil_optical_flow_t* hil_optical_flow)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_hil_optical_flow_send(chan, hil_optical_flow->time_usec, hil_optical_flow->sensor_id, hil_optical_flow->integration_time_us, hil_optical_flow->integrated_x, hil_optical_flow->integrated_y, hil_optical_flow->integrated_xgyro, hil_optical_flow->integrated_ygyro, hil_optical_flow->integrated_zgyro, hil_optical_flow->temperature, hil_optical_flow->quality, hil_optical_flow->time_delta_distance_us, hil_optical_flow->distance);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW, (const char *)hil_optical_flow, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_MIN_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_hil_optical_flow_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint8_t sensor_id, uint32_t integration_time_us, float integrated_x, float integrated_y, float integrated_xgyro, float integrated_ygyro, float integrated_zgyro, int16_t temperature, uint8_t quality, uint32_t time_delta_distance_us, float distance)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint32_t(buf, 8, integration_time_us);
+    _mav_put_float(buf, 12, integrated_x);
+    _mav_put_float(buf, 16, integrated_y);
+    _mav_put_float(buf, 20, integrated_xgyro);
+    _mav_put_float(buf, 24, integrated_ygyro);
+    _mav_put_float(buf, 28, integrated_zgyro);
+    _mav_put_uint32_t(buf, 32, time_delta_distance_us);
+    _mav_put_float(buf, 36, distance);
+    _mav_put_int16_t(buf, 40, temperature);
+    _mav_put_uint8_t(buf, 42, sensor_id);
+    _mav_put_uint8_t(buf, 43, quality);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW, buf, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_MIN_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_CRC);
+#else
+    mavlink_hil_optical_flow_t *packet = (mavlink_hil_optical_flow_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->integration_time_us = integration_time_us;
+    packet->integrated_x = integrated_x;
+    packet->integrated_y = integrated_y;
+    packet->integrated_xgyro = integrated_xgyro;
+    packet->integrated_ygyro = integrated_ygyro;
+    packet->integrated_zgyro = integrated_zgyro;
+    packet->time_delta_distance_us = time_delta_distance_us;
+    packet->distance = distance;
+    packet->temperature = temperature;
+    packet->sensor_id = sensor_id;
+    packet->quality = quality;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW, (const char *)packet, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_MIN_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIL_OPTICAL_FLOW UNPACKING
+
+
+/**
+ * @brief Get field time_usec from hil_optical_flow message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_hil_optical_flow_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field sensor_id from hil_optical_flow message
+ *
+ * @return  Sensor ID
+ */
+static inline uint8_t mavlink_msg_hil_optical_flow_get_sensor_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  42);
+}
+
+/**
+ * @brief Get field integration_time_us from hil_optical_flow message
+ *
+ * @return [us] Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.
+ */
+static inline uint32_t mavlink_msg_hil_optical_flow_get_integration_time_us(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  8);
+}
+
+/**
+ * @brief Get field integrated_x from hil_optical_flow message
+ *
+ * @return [rad] Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)
+ */
+static inline float mavlink_msg_hil_optical_flow_get_integrated_x(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field integrated_y from hil_optical_flow message
+ *
+ * @return [rad] Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)
+ */
+static inline float mavlink_msg_hil_optical_flow_get_integrated_y(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field integrated_xgyro from hil_optical_flow message
+ *
+ * @return [rad] RH rotation around X axis
+ */
+static inline float mavlink_msg_hil_optical_flow_get_integrated_xgyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field integrated_ygyro from hil_optical_flow message
+ *
+ * @return [rad] RH rotation around Y axis
+ */
+static inline float mavlink_msg_hil_optical_flow_get_integrated_ygyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field integrated_zgyro from hil_optical_flow message
+ *
+ * @return [rad] RH rotation around Z axis
+ */
+static inline float mavlink_msg_hil_optical_flow_get_integrated_zgyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field temperature from hil_optical_flow message
+ *
+ * @return [cdegC] Temperature
+ */
+static inline int16_t mavlink_msg_hil_optical_flow_get_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_int16_t(msg,  40);
+}
+
+/**
+ * @brief Get field quality from hil_optical_flow message
+ *
+ * @return  Optical flow quality / confidence. 0: no valid flow, 255: maximum quality
+ */
+static inline uint8_t mavlink_msg_hil_optical_flow_get_quality(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  43);
+}
+
+/**
+ * @brief Get field time_delta_distance_us from hil_optical_flow message
+ *
+ * @return [us] Time since the distance was sampled.
+ */
+static inline uint32_t mavlink_msg_hil_optical_flow_get_time_delta_distance_us(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  32);
+}
+
+/**
+ * @brief Get field distance from hil_optical_flow message
+ *
+ * @return [m] Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance.
+ */
+static inline float mavlink_msg_hil_optical_flow_get_distance(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Decode a hil_optical_flow message into a struct
+ *
+ * @param msg The message to decode
+ * @param hil_optical_flow C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_hil_optical_flow_decode(const mavlink_message_t* msg, mavlink_hil_optical_flow_t* hil_optical_flow)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    hil_optical_flow->time_usec = mavlink_msg_hil_optical_flow_get_time_usec(msg);
+    hil_optical_flow->integration_time_us = mavlink_msg_hil_optical_flow_get_integration_time_us(msg);
+    hil_optical_flow->integrated_x = mavlink_msg_hil_optical_flow_get_integrated_x(msg);
+    hil_optical_flow->integrated_y = mavlink_msg_hil_optical_flow_get_integrated_y(msg);
+    hil_optical_flow->integrated_xgyro = mavlink_msg_hil_optical_flow_get_integrated_xgyro(msg);
+    hil_optical_flow->integrated_ygyro = mavlink_msg_hil_optical_flow_get_integrated_ygyro(msg);
+    hil_optical_flow->integrated_zgyro = mavlink_msg_hil_optical_flow_get_integrated_zgyro(msg);
+    hil_optical_flow->time_delta_distance_us = mavlink_msg_hil_optical_flow_get_time_delta_distance_us(msg);
+    hil_optical_flow->distance = mavlink_msg_hil_optical_flow_get_distance(msg);
+    hil_optical_flow->temperature = mavlink_msg_hil_optical_flow_get_temperature(msg);
+    hil_optical_flow->sensor_id = mavlink_msg_hil_optical_flow_get_sensor_id(msg);
+    hil_optical_flow->quality = mavlink_msg_hil_optical_flow_get_quality(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN? msg->len : MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN;
+        memset(hil_optical_flow, 0, MAVLINK_MSG_ID_HIL_OPTICAL_FLOW_LEN);
+    memcpy(hil_optical_flow, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 538 - 0
v2.0/common/mavlink_msg_hil_rc_inputs_raw.h

@@ -0,0 +1,538 @@
+#pragma once
+// MESSAGE HIL_RC_INPUTS_RAW PACKING
+
+#define MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW 92
+
+
+typedef struct __mavlink_hil_rc_inputs_raw_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ uint16_t chan1_raw; /*< [us] RC channel 1 value*/
+ uint16_t chan2_raw; /*< [us] RC channel 2 value*/
+ uint16_t chan3_raw; /*< [us] RC channel 3 value*/
+ uint16_t chan4_raw; /*< [us] RC channel 4 value*/
+ uint16_t chan5_raw; /*< [us] RC channel 5 value*/
+ uint16_t chan6_raw; /*< [us] RC channel 6 value*/
+ uint16_t chan7_raw; /*< [us] RC channel 7 value*/
+ uint16_t chan8_raw; /*< [us] RC channel 8 value*/
+ uint16_t chan9_raw; /*< [us] RC channel 9 value*/
+ uint16_t chan10_raw; /*< [us] RC channel 10 value*/
+ uint16_t chan11_raw; /*< [us] RC channel 11 value*/
+ uint16_t chan12_raw; /*< [us] RC channel 12 value*/
+ uint8_t rssi; /*<  Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.*/
+} mavlink_hil_rc_inputs_raw_t;
+
+#define MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN 33
+#define MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_MIN_LEN 33
+#define MAVLINK_MSG_ID_92_LEN 33
+#define MAVLINK_MSG_ID_92_MIN_LEN 33
+
+#define MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_CRC 54
+#define MAVLINK_MSG_ID_92_CRC 54
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIL_RC_INPUTS_RAW { \
+    92, \
+    "HIL_RC_INPUTS_RAW", \
+    14, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_rc_inputs_raw_t, time_usec) }, \
+         { "chan1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_hil_rc_inputs_raw_t, chan1_raw) }, \
+         { "chan2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_hil_rc_inputs_raw_t, chan2_raw) }, \
+         { "chan3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_hil_rc_inputs_raw_t, chan3_raw) }, \
+         { "chan4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_hil_rc_inputs_raw_t, chan4_raw) }, \
+         { "chan5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_hil_rc_inputs_raw_t, chan5_raw) }, \
+         { "chan6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_hil_rc_inputs_raw_t, chan6_raw) }, \
+         { "chan7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_hil_rc_inputs_raw_t, chan7_raw) }, \
+         { "chan8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_hil_rc_inputs_raw_t, chan8_raw) }, \
+         { "chan9_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_hil_rc_inputs_raw_t, chan9_raw) }, \
+         { "chan10_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_hil_rc_inputs_raw_t, chan10_raw) }, \
+         { "chan11_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_hil_rc_inputs_raw_t, chan11_raw) }, \
+         { "chan12_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 30, offsetof(mavlink_hil_rc_inputs_raw_t, chan12_raw) }, \
+         { "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_hil_rc_inputs_raw_t, rssi) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIL_RC_INPUTS_RAW { \
+    "HIL_RC_INPUTS_RAW", \
+    14, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_rc_inputs_raw_t, time_usec) }, \
+         { "chan1_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_hil_rc_inputs_raw_t, chan1_raw) }, \
+         { "chan2_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 10, offsetof(mavlink_hil_rc_inputs_raw_t, chan2_raw) }, \
+         { "chan3_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 12, offsetof(mavlink_hil_rc_inputs_raw_t, chan3_raw) }, \
+         { "chan4_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 14, offsetof(mavlink_hil_rc_inputs_raw_t, chan4_raw) }, \
+         { "chan5_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 16, offsetof(mavlink_hil_rc_inputs_raw_t, chan5_raw) }, \
+         { "chan6_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 18, offsetof(mavlink_hil_rc_inputs_raw_t, chan6_raw) }, \
+         { "chan7_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 20, offsetof(mavlink_hil_rc_inputs_raw_t, chan7_raw) }, \
+         { "chan8_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 22, offsetof(mavlink_hil_rc_inputs_raw_t, chan8_raw) }, \
+         { "chan9_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_hil_rc_inputs_raw_t, chan9_raw) }, \
+         { "chan10_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_hil_rc_inputs_raw_t, chan10_raw) }, \
+         { "chan11_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_hil_rc_inputs_raw_t, chan11_raw) }, \
+         { "chan12_raw", NULL, MAVLINK_TYPE_UINT16_T, 0, 30, offsetof(mavlink_hil_rc_inputs_raw_t, chan12_raw) }, \
+         { "rssi", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_hil_rc_inputs_raw_t, rssi) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a hil_rc_inputs_raw message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param chan1_raw [us] RC channel 1 value
+ * @param chan2_raw [us] RC channel 2 value
+ * @param chan3_raw [us] RC channel 3 value
+ * @param chan4_raw [us] RC channel 4 value
+ * @param chan5_raw [us] RC channel 5 value
+ * @param chan6_raw [us] RC channel 6 value
+ * @param chan7_raw [us] RC channel 7 value
+ * @param chan8_raw [us] RC channel 8 value
+ * @param chan9_raw [us] RC channel 9 value
+ * @param chan10_raw [us] RC channel 10 value
+ * @param chan11_raw [us] RC channel 11 value
+ * @param chan12_raw [us] RC channel 12 value
+ * @param rssi  Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint16_t chan9_raw, uint16_t chan10_raw, uint16_t chan11_raw, uint16_t chan12_raw, uint8_t rssi)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 8, chan1_raw);
+    _mav_put_uint16_t(buf, 10, chan2_raw);
+    _mav_put_uint16_t(buf, 12, chan3_raw);
+    _mav_put_uint16_t(buf, 14, chan4_raw);
+    _mav_put_uint16_t(buf, 16, chan5_raw);
+    _mav_put_uint16_t(buf, 18, chan6_raw);
+    _mav_put_uint16_t(buf, 20, chan7_raw);
+    _mav_put_uint16_t(buf, 22, chan8_raw);
+    _mav_put_uint16_t(buf, 24, chan9_raw);
+    _mav_put_uint16_t(buf, 26, chan10_raw);
+    _mav_put_uint16_t(buf, 28, chan11_raw);
+    _mav_put_uint16_t(buf, 30, chan12_raw);
+    _mav_put_uint8_t(buf, 32, rssi);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN);
+#else
+    mavlink_hil_rc_inputs_raw_t packet;
+    packet.time_usec = time_usec;
+    packet.chan1_raw = chan1_raw;
+    packet.chan2_raw = chan2_raw;
+    packet.chan3_raw = chan3_raw;
+    packet.chan4_raw = chan4_raw;
+    packet.chan5_raw = chan5_raw;
+    packet.chan6_raw = chan6_raw;
+    packet.chan7_raw = chan7_raw;
+    packet.chan8_raw = chan8_raw;
+    packet.chan9_raw = chan9_raw;
+    packet.chan10_raw = chan10_raw;
+    packet.chan11_raw = chan11_raw;
+    packet.chan12_raw = chan12_raw;
+    packet.rssi = rssi;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_MIN_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_CRC);
+}
+
+/**
+ * @brief Pack a hil_rc_inputs_raw message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param chan1_raw [us] RC channel 1 value
+ * @param chan2_raw [us] RC channel 2 value
+ * @param chan3_raw [us] RC channel 3 value
+ * @param chan4_raw [us] RC channel 4 value
+ * @param chan5_raw [us] RC channel 5 value
+ * @param chan6_raw [us] RC channel 6 value
+ * @param chan7_raw [us] RC channel 7 value
+ * @param chan8_raw [us] RC channel 8 value
+ * @param chan9_raw [us] RC channel 9 value
+ * @param chan10_raw [us] RC channel 10 value
+ * @param chan11_raw [us] RC channel 11 value
+ * @param chan12_raw [us] RC channel 12 value
+ * @param rssi  Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,uint16_t chan1_raw,uint16_t chan2_raw,uint16_t chan3_raw,uint16_t chan4_raw,uint16_t chan5_raw,uint16_t chan6_raw,uint16_t chan7_raw,uint16_t chan8_raw,uint16_t chan9_raw,uint16_t chan10_raw,uint16_t chan11_raw,uint16_t chan12_raw,uint8_t rssi)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 8, chan1_raw);
+    _mav_put_uint16_t(buf, 10, chan2_raw);
+    _mav_put_uint16_t(buf, 12, chan3_raw);
+    _mav_put_uint16_t(buf, 14, chan4_raw);
+    _mav_put_uint16_t(buf, 16, chan5_raw);
+    _mav_put_uint16_t(buf, 18, chan6_raw);
+    _mav_put_uint16_t(buf, 20, chan7_raw);
+    _mav_put_uint16_t(buf, 22, chan8_raw);
+    _mav_put_uint16_t(buf, 24, chan9_raw);
+    _mav_put_uint16_t(buf, 26, chan10_raw);
+    _mav_put_uint16_t(buf, 28, chan11_raw);
+    _mav_put_uint16_t(buf, 30, chan12_raw);
+    _mav_put_uint8_t(buf, 32, rssi);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN);
+#else
+    mavlink_hil_rc_inputs_raw_t packet;
+    packet.time_usec = time_usec;
+    packet.chan1_raw = chan1_raw;
+    packet.chan2_raw = chan2_raw;
+    packet.chan3_raw = chan3_raw;
+    packet.chan4_raw = chan4_raw;
+    packet.chan5_raw = chan5_raw;
+    packet.chan6_raw = chan6_raw;
+    packet.chan7_raw = chan7_raw;
+    packet.chan8_raw = chan8_raw;
+    packet.chan9_raw = chan9_raw;
+    packet.chan10_raw = chan10_raw;
+    packet.chan11_raw = chan11_raw;
+    packet.chan12_raw = chan12_raw;
+    packet.rssi = rssi;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_MIN_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_CRC);
+}
+
+/**
+ * @brief Encode a hil_rc_inputs_raw struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_rc_inputs_raw C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_rc_inputs_raw_t* hil_rc_inputs_raw)
+{
+    return mavlink_msg_hil_rc_inputs_raw_pack(system_id, component_id, msg, hil_rc_inputs_raw->time_usec, hil_rc_inputs_raw->chan1_raw, hil_rc_inputs_raw->chan2_raw, hil_rc_inputs_raw->chan3_raw, hil_rc_inputs_raw->chan4_raw, hil_rc_inputs_raw->chan5_raw, hil_rc_inputs_raw->chan6_raw, hil_rc_inputs_raw->chan7_raw, hil_rc_inputs_raw->chan8_raw, hil_rc_inputs_raw->chan9_raw, hil_rc_inputs_raw->chan10_raw, hil_rc_inputs_raw->chan11_raw, hil_rc_inputs_raw->chan12_raw, hil_rc_inputs_raw->rssi);
+}
+
+/**
+ * @brief Encode a hil_rc_inputs_raw struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_rc_inputs_raw C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_hil_rc_inputs_raw_t* hil_rc_inputs_raw)
+{
+    return mavlink_msg_hil_rc_inputs_raw_pack_chan(system_id, component_id, chan, msg, hil_rc_inputs_raw->time_usec, hil_rc_inputs_raw->chan1_raw, hil_rc_inputs_raw->chan2_raw, hil_rc_inputs_raw->chan3_raw, hil_rc_inputs_raw->chan4_raw, hil_rc_inputs_raw->chan5_raw, hil_rc_inputs_raw->chan6_raw, hil_rc_inputs_raw->chan7_raw, hil_rc_inputs_raw->chan8_raw, hil_rc_inputs_raw->chan9_raw, hil_rc_inputs_raw->chan10_raw, hil_rc_inputs_raw->chan11_raw, hil_rc_inputs_raw->chan12_raw, hil_rc_inputs_raw->rssi);
+}
+
+/**
+ * @brief Send a hil_rc_inputs_raw message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param chan1_raw [us] RC channel 1 value
+ * @param chan2_raw [us] RC channel 2 value
+ * @param chan3_raw [us] RC channel 3 value
+ * @param chan4_raw [us] RC channel 4 value
+ * @param chan5_raw [us] RC channel 5 value
+ * @param chan6_raw [us] RC channel 6 value
+ * @param chan7_raw [us] RC channel 7 value
+ * @param chan8_raw [us] RC channel 8 value
+ * @param chan9_raw [us] RC channel 9 value
+ * @param chan10_raw [us] RC channel 10 value
+ * @param chan11_raw [us] RC channel 11 value
+ * @param chan12_raw [us] RC channel 12 value
+ * @param rssi  Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_hil_rc_inputs_raw_send(mavlink_channel_t chan, uint64_t time_usec, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint16_t chan9_raw, uint16_t chan10_raw, uint16_t chan11_raw, uint16_t chan12_raw, uint8_t rssi)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 8, chan1_raw);
+    _mav_put_uint16_t(buf, 10, chan2_raw);
+    _mav_put_uint16_t(buf, 12, chan3_raw);
+    _mav_put_uint16_t(buf, 14, chan4_raw);
+    _mav_put_uint16_t(buf, 16, chan5_raw);
+    _mav_put_uint16_t(buf, 18, chan6_raw);
+    _mav_put_uint16_t(buf, 20, chan7_raw);
+    _mav_put_uint16_t(buf, 22, chan8_raw);
+    _mav_put_uint16_t(buf, 24, chan9_raw);
+    _mav_put_uint16_t(buf, 26, chan10_raw);
+    _mav_put_uint16_t(buf, 28, chan11_raw);
+    _mav_put_uint16_t(buf, 30, chan12_raw);
+    _mav_put_uint8_t(buf, 32, rssi);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW, buf, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_MIN_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_CRC);
+#else
+    mavlink_hil_rc_inputs_raw_t packet;
+    packet.time_usec = time_usec;
+    packet.chan1_raw = chan1_raw;
+    packet.chan2_raw = chan2_raw;
+    packet.chan3_raw = chan3_raw;
+    packet.chan4_raw = chan4_raw;
+    packet.chan5_raw = chan5_raw;
+    packet.chan6_raw = chan6_raw;
+    packet.chan7_raw = chan7_raw;
+    packet.chan8_raw = chan8_raw;
+    packet.chan9_raw = chan9_raw;
+    packet.chan10_raw = chan10_raw;
+    packet.chan11_raw = chan11_raw;
+    packet.chan12_raw = chan12_raw;
+    packet.rssi = rssi;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW, (const char *)&packet, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_MIN_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_CRC);
+#endif
+}
+
+/**
+ * @brief Send a hil_rc_inputs_raw message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_hil_rc_inputs_raw_send_struct(mavlink_channel_t chan, const mavlink_hil_rc_inputs_raw_t* hil_rc_inputs_raw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_hil_rc_inputs_raw_send(chan, hil_rc_inputs_raw->time_usec, hil_rc_inputs_raw->chan1_raw, hil_rc_inputs_raw->chan2_raw, hil_rc_inputs_raw->chan3_raw, hil_rc_inputs_raw->chan4_raw, hil_rc_inputs_raw->chan5_raw, hil_rc_inputs_raw->chan6_raw, hil_rc_inputs_raw->chan7_raw, hil_rc_inputs_raw->chan8_raw, hil_rc_inputs_raw->chan9_raw, hil_rc_inputs_raw->chan10_raw, hil_rc_inputs_raw->chan11_raw, hil_rc_inputs_raw->chan12_raw, hil_rc_inputs_raw->rssi);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW, (const char *)hil_rc_inputs_raw, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_MIN_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_hil_rc_inputs_raw_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint16_t chan1_raw, uint16_t chan2_raw, uint16_t chan3_raw, uint16_t chan4_raw, uint16_t chan5_raw, uint16_t chan6_raw, uint16_t chan7_raw, uint16_t chan8_raw, uint16_t chan9_raw, uint16_t chan10_raw, uint16_t chan11_raw, uint16_t chan12_raw, uint8_t rssi)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_uint16_t(buf, 8, chan1_raw);
+    _mav_put_uint16_t(buf, 10, chan2_raw);
+    _mav_put_uint16_t(buf, 12, chan3_raw);
+    _mav_put_uint16_t(buf, 14, chan4_raw);
+    _mav_put_uint16_t(buf, 16, chan5_raw);
+    _mav_put_uint16_t(buf, 18, chan6_raw);
+    _mav_put_uint16_t(buf, 20, chan7_raw);
+    _mav_put_uint16_t(buf, 22, chan8_raw);
+    _mav_put_uint16_t(buf, 24, chan9_raw);
+    _mav_put_uint16_t(buf, 26, chan10_raw);
+    _mav_put_uint16_t(buf, 28, chan11_raw);
+    _mav_put_uint16_t(buf, 30, chan12_raw);
+    _mav_put_uint8_t(buf, 32, rssi);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW, buf, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_MIN_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_CRC);
+#else
+    mavlink_hil_rc_inputs_raw_t *packet = (mavlink_hil_rc_inputs_raw_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->chan1_raw = chan1_raw;
+    packet->chan2_raw = chan2_raw;
+    packet->chan3_raw = chan3_raw;
+    packet->chan4_raw = chan4_raw;
+    packet->chan5_raw = chan5_raw;
+    packet->chan6_raw = chan6_raw;
+    packet->chan7_raw = chan7_raw;
+    packet->chan8_raw = chan8_raw;
+    packet->chan9_raw = chan9_raw;
+    packet->chan10_raw = chan10_raw;
+    packet->chan11_raw = chan11_raw;
+    packet->chan12_raw = chan12_raw;
+    packet->rssi = rssi;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW, (const char *)packet, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_MIN_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIL_RC_INPUTS_RAW UNPACKING
+
+
+/**
+ * @brief Get field time_usec from hil_rc_inputs_raw message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_hil_rc_inputs_raw_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field chan1_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 1 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan1_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  8);
+}
+
+/**
+ * @brief Get field chan2_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 2 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan2_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  10);
+}
+
+/**
+ * @brief Get field chan3_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 3 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan3_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  12);
+}
+
+/**
+ * @brief Get field chan4_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 4 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan4_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  14);
+}
+
+/**
+ * @brief Get field chan5_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 5 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan5_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  16);
+}
+
+/**
+ * @brief Get field chan6_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 6 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan6_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  18);
+}
+
+/**
+ * @brief Get field chan7_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 7 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan7_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  20);
+}
+
+/**
+ * @brief Get field chan8_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 8 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan8_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  22);
+}
+
+/**
+ * @brief Get field chan9_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 9 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan9_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  24);
+}
+
+/**
+ * @brief Get field chan10_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 10 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan10_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  26);
+}
+
+/**
+ * @brief Get field chan11_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 11 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan11_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  28);
+}
+
+/**
+ * @brief Get field chan12_raw from hil_rc_inputs_raw message
+ *
+ * @return [us] RC channel 12 value
+ */
+static inline uint16_t mavlink_msg_hil_rc_inputs_raw_get_chan12_raw(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  30);
+}
+
+/**
+ * @brief Get field rssi from hil_rc_inputs_raw message
+ *
+ * @return  Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.
+ */
+static inline uint8_t mavlink_msg_hil_rc_inputs_raw_get_rssi(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  32);
+}
+
+/**
+ * @brief Decode a hil_rc_inputs_raw message into a struct
+ *
+ * @param msg The message to decode
+ * @param hil_rc_inputs_raw C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_hil_rc_inputs_raw_decode(const mavlink_message_t* msg, mavlink_hil_rc_inputs_raw_t* hil_rc_inputs_raw)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    hil_rc_inputs_raw->time_usec = mavlink_msg_hil_rc_inputs_raw_get_time_usec(msg);
+    hil_rc_inputs_raw->chan1_raw = mavlink_msg_hil_rc_inputs_raw_get_chan1_raw(msg);
+    hil_rc_inputs_raw->chan2_raw = mavlink_msg_hil_rc_inputs_raw_get_chan2_raw(msg);
+    hil_rc_inputs_raw->chan3_raw = mavlink_msg_hil_rc_inputs_raw_get_chan3_raw(msg);
+    hil_rc_inputs_raw->chan4_raw = mavlink_msg_hil_rc_inputs_raw_get_chan4_raw(msg);
+    hil_rc_inputs_raw->chan5_raw = mavlink_msg_hil_rc_inputs_raw_get_chan5_raw(msg);
+    hil_rc_inputs_raw->chan6_raw = mavlink_msg_hil_rc_inputs_raw_get_chan6_raw(msg);
+    hil_rc_inputs_raw->chan7_raw = mavlink_msg_hil_rc_inputs_raw_get_chan7_raw(msg);
+    hil_rc_inputs_raw->chan8_raw = mavlink_msg_hil_rc_inputs_raw_get_chan8_raw(msg);
+    hil_rc_inputs_raw->chan9_raw = mavlink_msg_hil_rc_inputs_raw_get_chan9_raw(msg);
+    hil_rc_inputs_raw->chan10_raw = mavlink_msg_hil_rc_inputs_raw_get_chan10_raw(msg);
+    hil_rc_inputs_raw->chan11_raw = mavlink_msg_hil_rc_inputs_raw_get_chan11_raw(msg);
+    hil_rc_inputs_raw->chan12_raw = mavlink_msg_hil_rc_inputs_raw_get_chan12_raw(msg);
+    hil_rc_inputs_raw->rssi = mavlink_msg_hil_rc_inputs_raw_get_rssi(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN? msg->len : MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN;
+        memset(hil_rc_inputs_raw, 0, MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN);
+    memcpy(hil_rc_inputs_raw, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 588 - 0
v2.0/common/mavlink_msg_hil_sensor.h

@@ -0,0 +1,588 @@
+#pragma once
+// MESSAGE HIL_SENSOR PACKING
+
+#define MAVLINK_MSG_ID_HIL_SENSOR 107
+
+
+typedef struct __mavlink_hil_sensor_t {
+ uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
+ float xacc; /*< [m/s/s] X acceleration*/
+ float yacc; /*< [m/s/s] Y acceleration*/
+ float zacc; /*< [m/s/s] Z acceleration*/
+ float xgyro; /*< [rad/s] Angular speed around X axis in body frame*/
+ float ygyro; /*< [rad/s] Angular speed around Y axis in body frame*/
+ float zgyro; /*< [rad/s] Angular speed around Z axis in body frame*/
+ float xmag; /*< [gauss] X Magnetic field*/
+ float ymag; /*< [gauss] Y Magnetic field*/
+ float zmag; /*< [gauss] Z Magnetic field*/
+ float abs_pressure; /*< [hPa] Absolute pressure*/
+ float diff_pressure; /*< [hPa] Differential pressure (airspeed)*/
+ float pressure_alt; /*<  Altitude calculated from pressure*/
+ float temperature; /*< [degC] Temperature*/
+ uint32_t fields_updated; /*<  Bitmap for fields that have updated since last message*/
+ uint8_t id; /*<  Sensor ID (zero indexed). Used for multiple sensor inputs*/
+} mavlink_hil_sensor_t;
+
+#define MAVLINK_MSG_ID_HIL_SENSOR_LEN 65
+#define MAVLINK_MSG_ID_HIL_SENSOR_MIN_LEN 64
+#define MAVLINK_MSG_ID_107_LEN 65
+#define MAVLINK_MSG_ID_107_MIN_LEN 64
+
+#define MAVLINK_MSG_ID_HIL_SENSOR_CRC 108
+#define MAVLINK_MSG_ID_107_CRC 108
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_HIL_SENSOR { \
+    107, \
+    "HIL_SENSOR", \
+    16, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_sensor_t, time_usec) }, \
+         { "xacc", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_hil_sensor_t, xacc) }, \
+         { "yacc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_sensor_t, yacc) }, \
+         { "zacc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_sensor_t, zacc) }, \
+         { "xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_sensor_t, xgyro) }, \
+         { "ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_sensor_t, ygyro) }, \
+         { "zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_sensor_t, zgyro) }, \
+         { "xmag", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_hil_sensor_t, xmag) }, \
+         { "ymag", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_hil_sensor_t, ymag) }, \
+         { "zmag", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_hil_sensor_t, zmag) }, \
+         { "abs_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_hil_sensor_t, abs_pressure) }, \
+         { "diff_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_hil_sensor_t, diff_pressure) }, \
+         { "pressure_alt", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_hil_sensor_t, pressure_alt) }, \
+         { "temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_hil_sensor_t, temperature) }, \
+         { "fields_updated", NULL, MAVLINK_TYPE_UINT32_T, 0, 60, offsetof(mavlink_hil_sensor_t, fields_updated) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 64, offsetof(mavlink_hil_sensor_t, id) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_HIL_SENSOR { \
+    "HIL_SENSOR", \
+    16, \
+    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_hil_sensor_t, time_usec) }, \
+         { "xacc", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_hil_sensor_t, xacc) }, \
+         { "yacc", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_hil_sensor_t, yacc) }, \
+         { "zacc", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_hil_sensor_t, zacc) }, \
+         { "xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_hil_sensor_t, xgyro) }, \
+         { "ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_hil_sensor_t, ygyro) }, \
+         { "zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_hil_sensor_t, zgyro) }, \
+         { "xmag", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_hil_sensor_t, xmag) }, \
+         { "ymag", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_hil_sensor_t, ymag) }, \
+         { "zmag", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_hil_sensor_t, zmag) }, \
+         { "abs_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_hil_sensor_t, abs_pressure) }, \
+         { "diff_pressure", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_hil_sensor_t, diff_pressure) }, \
+         { "pressure_alt", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_hil_sensor_t, pressure_alt) }, \
+         { "temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_hil_sensor_t, temperature) }, \
+         { "fields_updated", NULL, MAVLINK_TYPE_UINT32_T, 0, 60, offsetof(mavlink_hil_sensor_t, fields_updated) }, \
+         { "id", NULL, MAVLINK_TYPE_UINT8_T, 0, 64, offsetof(mavlink_hil_sensor_t, id) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a hil_sensor message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param xacc [m/s/s] X acceleration
+ * @param yacc [m/s/s] Y acceleration
+ * @param zacc [m/s/s] Z acceleration
+ * @param xgyro [rad/s] Angular speed around X axis in body frame
+ * @param ygyro [rad/s] Angular speed around Y axis in body frame
+ * @param zgyro [rad/s] Angular speed around Z axis in body frame
+ * @param xmag [gauss] X Magnetic field
+ * @param ymag [gauss] Y Magnetic field
+ * @param zmag [gauss] Z Magnetic field
+ * @param abs_pressure [hPa] Absolute pressure
+ * @param diff_pressure [hPa] Differential pressure (airspeed)
+ * @param pressure_alt  Altitude calculated from pressure
+ * @param temperature [degC] Temperature
+ * @param fields_updated  Bitmap for fields that have updated since last message
+ * @param id  Sensor ID (zero indexed). Used for multiple sensor inputs
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_sensor_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint64_t time_usec, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro, float xmag, float ymag, float zmag, float abs_pressure, float diff_pressure, float pressure_alt, float temperature, uint32_t fields_updated, uint8_t id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_SENSOR_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, xacc);
+    _mav_put_float(buf, 12, yacc);
+    _mav_put_float(buf, 16, zacc);
+    _mav_put_float(buf, 20, xgyro);
+    _mav_put_float(buf, 24, ygyro);
+    _mav_put_float(buf, 28, zgyro);
+    _mav_put_float(buf, 32, xmag);
+    _mav_put_float(buf, 36, ymag);
+    _mav_put_float(buf, 40, zmag);
+    _mav_put_float(buf, 44, abs_pressure);
+    _mav_put_float(buf, 48, diff_pressure);
+    _mav_put_float(buf, 52, pressure_alt);
+    _mav_put_float(buf, 56, temperature);
+    _mav_put_uint32_t(buf, 60, fields_updated);
+    _mav_put_uint8_t(buf, 64, id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_SENSOR_LEN);
+#else
+    mavlink_hil_sensor_t packet;
+    packet.time_usec = time_usec;
+    packet.xacc = xacc;
+    packet.yacc = yacc;
+    packet.zacc = zacc;
+    packet.xgyro = xgyro;
+    packet.ygyro = ygyro;
+    packet.zgyro = zgyro;
+    packet.xmag = xmag;
+    packet.ymag = ymag;
+    packet.zmag = zmag;
+    packet.abs_pressure = abs_pressure;
+    packet.diff_pressure = diff_pressure;
+    packet.pressure_alt = pressure_alt;
+    packet.temperature = temperature;
+    packet.fields_updated = fields_updated;
+    packet.id = id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_SENSOR_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_SENSOR;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_HIL_SENSOR_MIN_LEN, MAVLINK_MSG_ID_HIL_SENSOR_LEN, MAVLINK_MSG_ID_HIL_SENSOR_CRC);
+}
+
+/**
+ * @brief Pack a hil_sensor message on a channel
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param xacc [m/s/s] X acceleration
+ * @param yacc [m/s/s] Y acceleration
+ * @param zacc [m/s/s] Z acceleration
+ * @param xgyro [rad/s] Angular speed around X axis in body frame
+ * @param ygyro [rad/s] Angular speed around Y axis in body frame
+ * @param zgyro [rad/s] Angular speed around Z axis in body frame
+ * @param xmag [gauss] X Magnetic field
+ * @param ymag [gauss] Y Magnetic field
+ * @param zmag [gauss] Z Magnetic field
+ * @param abs_pressure [hPa] Absolute pressure
+ * @param diff_pressure [hPa] Differential pressure (airspeed)
+ * @param pressure_alt  Altitude calculated from pressure
+ * @param temperature [degC] Temperature
+ * @param fields_updated  Bitmap for fields that have updated since last message
+ * @param id  Sensor ID (zero indexed). Used for multiple sensor inputs
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_hil_sensor_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint64_t time_usec,float xacc,float yacc,float zacc,float xgyro,float ygyro,float zgyro,float xmag,float ymag,float zmag,float abs_pressure,float diff_pressure,float pressure_alt,float temperature,uint32_t fields_updated,uint8_t id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_SENSOR_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, xacc);
+    _mav_put_float(buf, 12, yacc);
+    _mav_put_float(buf, 16, zacc);
+    _mav_put_float(buf, 20, xgyro);
+    _mav_put_float(buf, 24, ygyro);
+    _mav_put_float(buf, 28, zgyro);
+    _mav_put_float(buf, 32, xmag);
+    _mav_put_float(buf, 36, ymag);
+    _mav_put_float(buf, 40, zmag);
+    _mav_put_float(buf, 44, abs_pressure);
+    _mav_put_float(buf, 48, diff_pressure);
+    _mav_put_float(buf, 52, pressure_alt);
+    _mav_put_float(buf, 56, temperature);
+    _mav_put_uint32_t(buf, 60, fields_updated);
+    _mav_put_uint8_t(buf, 64, id);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_HIL_SENSOR_LEN);
+#else
+    mavlink_hil_sensor_t packet;
+    packet.time_usec = time_usec;
+    packet.xacc = xacc;
+    packet.yacc = yacc;
+    packet.zacc = zacc;
+    packet.xgyro = xgyro;
+    packet.ygyro = ygyro;
+    packet.zgyro = zgyro;
+    packet.xmag = xmag;
+    packet.ymag = ymag;
+    packet.zmag = zmag;
+    packet.abs_pressure = abs_pressure;
+    packet.diff_pressure = diff_pressure;
+    packet.pressure_alt = pressure_alt;
+    packet.temperature = temperature;
+    packet.fields_updated = fields_updated;
+    packet.id = id;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_HIL_SENSOR_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_HIL_SENSOR;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_HIL_SENSOR_MIN_LEN, MAVLINK_MSG_ID_HIL_SENSOR_LEN, MAVLINK_MSG_ID_HIL_SENSOR_CRC);
+}
+
+/**
+ * @brief Encode a hil_sensor struct
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_sensor C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_sensor_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_hil_sensor_t* hil_sensor)
+{
+    return mavlink_msg_hil_sensor_pack(system_id, component_id, msg, hil_sensor->time_usec, hil_sensor->xacc, hil_sensor->yacc, hil_sensor->zacc, hil_sensor->xgyro, hil_sensor->ygyro, hil_sensor->zgyro, hil_sensor->xmag, hil_sensor->ymag, hil_sensor->zmag, hil_sensor->abs_pressure, hil_sensor->diff_pressure, hil_sensor->pressure_alt, hil_sensor->temperature, hil_sensor->fields_updated, hil_sensor->id);
+}
+
+/**
+ * @brief Encode a hil_sensor struct on a channel
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param chan The MAVLink channel this message will be sent over
+ * @param msg The MAVLink message to compress the data into
+ * @param hil_sensor C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_hil_sensor_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_hil_sensor_t* hil_sensor)
+{
+    return mavlink_msg_hil_sensor_pack_chan(system_id, component_id, chan, msg, hil_sensor->time_usec, hil_sensor->xacc, hil_sensor->yacc, hil_sensor->zacc, hil_sensor->xgyro, hil_sensor->ygyro, hil_sensor->zgyro, hil_sensor->xmag, hil_sensor->ymag, hil_sensor->zmag, hil_sensor->abs_pressure, hil_sensor->diff_pressure, hil_sensor->pressure_alt, hil_sensor->temperature, hil_sensor->fields_updated, hil_sensor->id);
+}
+
+/**
+ * @brief Send a hil_sensor message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ * @param xacc [m/s/s] X acceleration
+ * @param yacc [m/s/s] Y acceleration
+ * @param zacc [m/s/s] Z acceleration
+ * @param xgyro [rad/s] Angular speed around X axis in body frame
+ * @param ygyro [rad/s] Angular speed around Y axis in body frame
+ * @param zgyro [rad/s] Angular speed around Z axis in body frame
+ * @param xmag [gauss] X Magnetic field
+ * @param ymag [gauss] Y Magnetic field
+ * @param zmag [gauss] Z Magnetic field
+ * @param abs_pressure [hPa] Absolute pressure
+ * @param diff_pressure [hPa] Differential pressure (airspeed)
+ * @param pressure_alt  Altitude calculated from pressure
+ * @param temperature [degC] Temperature
+ * @param fields_updated  Bitmap for fields that have updated since last message
+ * @param id  Sensor ID (zero indexed). Used for multiple sensor inputs
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_hil_sensor_send(mavlink_channel_t chan, uint64_t time_usec, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro, float xmag, float ymag, float zmag, float abs_pressure, float diff_pressure, float pressure_alt, float temperature, uint32_t fields_updated, uint8_t id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_HIL_SENSOR_LEN];
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, xacc);
+    _mav_put_float(buf, 12, yacc);
+    _mav_put_float(buf, 16, zacc);
+    _mav_put_float(buf, 20, xgyro);
+    _mav_put_float(buf, 24, ygyro);
+    _mav_put_float(buf, 28, zgyro);
+    _mav_put_float(buf, 32, xmag);
+    _mav_put_float(buf, 36, ymag);
+    _mav_put_float(buf, 40, zmag);
+    _mav_put_float(buf, 44, abs_pressure);
+    _mav_put_float(buf, 48, diff_pressure);
+    _mav_put_float(buf, 52, pressure_alt);
+    _mav_put_float(buf, 56, temperature);
+    _mav_put_uint32_t(buf, 60, fields_updated);
+    _mav_put_uint8_t(buf, 64, id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_SENSOR, buf, MAVLINK_MSG_ID_HIL_SENSOR_MIN_LEN, MAVLINK_MSG_ID_HIL_SENSOR_LEN, MAVLINK_MSG_ID_HIL_SENSOR_CRC);
+#else
+    mavlink_hil_sensor_t packet;
+    packet.time_usec = time_usec;
+    packet.xacc = xacc;
+    packet.yacc = yacc;
+    packet.zacc = zacc;
+    packet.xgyro = xgyro;
+    packet.ygyro = ygyro;
+    packet.zgyro = zgyro;
+    packet.xmag = xmag;
+    packet.ymag = ymag;
+    packet.zmag = zmag;
+    packet.abs_pressure = abs_pressure;
+    packet.diff_pressure = diff_pressure;
+    packet.pressure_alt = pressure_alt;
+    packet.temperature = temperature;
+    packet.fields_updated = fields_updated;
+    packet.id = id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_SENSOR, (const char *)&packet, MAVLINK_MSG_ID_HIL_SENSOR_MIN_LEN, MAVLINK_MSG_ID_HIL_SENSOR_LEN, MAVLINK_MSG_ID_HIL_SENSOR_CRC);
+#endif
+}
+
+/**
+ * @brief Send a hil_sensor message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_hil_sensor_send_struct(mavlink_channel_t chan, const mavlink_hil_sensor_t* hil_sensor)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_hil_sensor_send(chan, hil_sensor->time_usec, hil_sensor->xacc, hil_sensor->yacc, hil_sensor->zacc, hil_sensor->xgyro, hil_sensor->ygyro, hil_sensor->zgyro, hil_sensor->xmag, hil_sensor->ymag, hil_sensor->zmag, hil_sensor->abs_pressure, hil_sensor->diff_pressure, hil_sensor->pressure_alt, hil_sensor->temperature, hil_sensor->fields_updated, hil_sensor->id);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_SENSOR, (const char *)hil_sensor, MAVLINK_MSG_ID_HIL_SENSOR_MIN_LEN, MAVLINK_MSG_ID_HIL_SENSOR_LEN, MAVLINK_MSG_ID_HIL_SENSOR_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_HIL_SENSOR_LEN <= MAVLINK_MAX_PAYLOAD_LEN
+/*
+  This variant of _send() can be used to save stack space by re-using
+  memory from the receive buffer.  The caller provides a
+  mavlink_message_t which is the size of a full mavlink message. This
+  is usually the receive buffer for the channel, and allows a reply to an
+  incoming message with minimum stack space usage.
+ */
+static inline void mavlink_msg_hil_sensor_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, float xacc, float yacc, float zacc, float xgyro, float ygyro, float zgyro, float xmag, float ymag, float zmag, float abs_pressure, float diff_pressure, float pressure_alt, float temperature, uint32_t fields_updated, uint8_t id)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint64_t(buf, 0, time_usec);
+    _mav_put_float(buf, 8, xacc);
+    _mav_put_float(buf, 12, yacc);
+    _mav_put_float(buf, 16, zacc);
+    _mav_put_float(buf, 20, xgyro);
+    _mav_put_float(buf, 24, ygyro);
+    _mav_put_float(buf, 28, zgyro);
+    _mav_put_float(buf, 32, xmag);
+    _mav_put_float(buf, 36, ymag);
+    _mav_put_float(buf, 40, zmag);
+    _mav_put_float(buf, 44, abs_pressure);
+    _mav_put_float(buf, 48, diff_pressure);
+    _mav_put_float(buf, 52, pressure_alt);
+    _mav_put_float(buf, 56, temperature);
+    _mav_put_uint32_t(buf, 60, fields_updated);
+    _mav_put_uint8_t(buf, 64, id);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_SENSOR, buf, MAVLINK_MSG_ID_HIL_SENSOR_MIN_LEN, MAVLINK_MSG_ID_HIL_SENSOR_LEN, MAVLINK_MSG_ID_HIL_SENSOR_CRC);
+#else
+    mavlink_hil_sensor_t *packet = (mavlink_hil_sensor_t *)msgbuf;
+    packet->time_usec = time_usec;
+    packet->xacc = xacc;
+    packet->yacc = yacc;
+    packet->zacc = zacc;
+    packet->xgyro = xgyro;
+    packet->ygyro = ygyro;
+    packet->zgyro = zgyro;
+    packet->xmag = xmag;
+    packet->ymag = ymag;
+    packet->zmag = zmag;
+    packet->abs_pressure = abs_pressure;
+    packet->diff_pressure = diff_pressure;
+    packet->pressure_alt = pressure_alt;
+    packet->temperature = temperature;
+    packet->fields_updated = fields_updated;
+    packet->id = id;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_HIL_SENSOR, (const char *)packet, MAVLINK_MSG_ID_HIL_SENSOR_MIN_LEN, MAVLINK_MSG_ID_HIL_SENSOR_LEN, MAVLINK_MSG_ID_HIL_SENSOR_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE HIL_SENSOR UNPACKING
+
+
+/**
+ * @brief Get field time_usec from hil_sensor message
+ *
+ * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
+ */
+static inline uint64_t mavlink_msg_hil_sensor_get_time_usec(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint64_t(msg,  0);
+}
+
+/**
+ * @brief Get field xacc from hil_sensor message
+ *
+ * @return [m/s/s] X acceleration
+ */
+static inline float mavlink_msg_hil_sensor_get_xacc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  8);
+}
+
+/**
+ * @brief Get field yacc from hil_sensor message
+ *
+ * @return [m/s/s] Y acceleration
+ */
+static inline float mavlink_msg_hil_sensor_get_yacc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  12);
+}
+
+/**
+ * @brief Get field zacc from hil_sensor message
+ *
+ * @return [m/s/s] Z acceleration
+ */
+static inline float mavlink_msg_hil_sensor_get_zacc(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  16);
+}
+
+/**
+ * @brief Get field xgyro from hil_sensor message
+ *
+ * @return [rad/s] Angular speed around X axis in body frame
+ */
+static inline float mavlink_msg_hil_sensor_get_xgyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  20);
+}
+
+/**
+ * @brief Get field ygyro from hil_sensor message
+ *
+ * @return [rad/s] Angular speed around Y axis in body frame
+ */
+static inline float mavlink_msg_hil_sensor_get_ygyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  24);
+}
+
+/**
+ * @brief Get field zgyro from hil_sensor message
+ *
+ * @return [rad/s] Angular speed around Z axis in body frame
+ */
+static inline float mavlink_msg_hil_sensor_get_zgyro(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  28);
+}
+
+/**
+ * @brief Get field xmag from hil_sensor message
+ *
+ * @return [gauss] X Magnetic field
+ */
+static inline float mavlink_msg_hil_sensor_get_xmag(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  32);
+}
+
+/**
+ * @brief Get field ymag from hil_sensor message
+ *
+ * @return [gauss] Y Magnetic field
+ */
+static inline float mavlink_msg_hil_sensor_get_ymag(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  36);
+}
+
+/**
+ * @brief Get field zmag from hil_sensor message
+ *
+ * @return [gauss] Z Magnetic field
+ */
+static inline float mavlink_msg_hil_sensor_get_zmag(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  40);
+}
+
+/**
+ * @brief Get field abs_pressure from hil_sensor message
+ *
+ * @return [hPa] Absolute pressure
+ */
+static inline float mavlink_msg_hil_sensor_get_abs_pressure(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  44);
+}
+
+/**
+ * @brief Get field diff_pressure from hil_sensor message
+ *
+ * @return [hPa] Differential pressure (airspeed)
+ */
+static inline float mavlink_msg_hil_sensor_get_diff_pressure(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  48);
+}
+
+/**
+ * @brief Get field pressure_alt from hil_sensor message
+ *
+ * @return  Altitude calculated from pressure
+ */
+static inline float mavlink_msg_hil_sensor_get_pressure_alt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  52);
+}
+
+/**
+ * @brief Get field temperature from hil_sensor message
+ *
+ * @return [degC] Temperature
+ */
+static inline float mavlink_msg_hil_sensor_get_temperature(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  56);
+}
+
+/**
+ * @brief Get field fields_updated from hil_sensor message
+ *
+ * @return  Bitmap for fields that have updated since last message
+ */
+static inline uint32_t mavlink_msg_hil_sensor_get_fields_updated(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  60);
+}
+
+/**
+ * @brief Get field id from hil_sensor message
+ *
+ * @return  Sensor ID (zero indexed). Used for multiple sensor inputs
+ */
+static inline uint8_t mavlink_msg_hil_sensor_get_id(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  64);
+}
+
+/**
+ * @brief Decode a hil_sensor message into a struct
+ *
+ * @param msg The message to decode
+ * @param hil_sensor C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_hil_sensor_decode(const mavlink_message_t* msg, mavlink_hil_sensor_t* hil_sensor)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    hil_sensor->time_usec = mavlink_msg_hil_sensor_get_time_usec(msg);
+    hil_sensor->xacc = mavlink_msg_hil_sensor_get_xacc(msg);
+    hil_sensor->yacc = mavlink_msg_hil_sensor_get_yacc(msg);
+    hil_sensor->zacc = mavlink_msg_hil_sensor_get_zacc(msg);
+    hil_sensor->xgyro = mavlink_msg_hil_sensor_get_xgyro(msg);
+    hil_sensor->ygyro = mavlink_msg_hil_sensor_get_ygyro(msg);
+    hil_sensor->zgyro = mavlink_msg_hil_sensor_get_zgyro(msg);
+    hil_sensor->xmag = mavlink_msg_hil_sensor_get_xmag(msg);
+    hil_sensor->ymag = mavlink_msg_hil_sensor_get_ymag(msg);
+    hil_sensor->zmag = mavlink_msg_hil_sensor_get_zmag(msg);
+    hil_sensor->abs_pressure = mavlink_msg_hil_sensor_get_abs_pressure(msg);
+    hil_sensor->diff_pressure = mavlink_msg_hil_sensor_get_diff_pressure(msg);
+    hil_sensor->pressure_alt = mavlink_msg_hil_sensor_get_pressure_alt(msg);
+    hil_sensor->temperature = mavlink_msg_hil_sensor_get_temperature(msg);
+    hil_sensor->fields_updated = mavlink_msg_hil_sensor_get_fields_updated(msg);
+    hil_sensor->id = mavlink_msg_hil_sensor_get_id(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_HIL_SENSOR_LEN? msg->len : MAVLINK_MSG_ID_HIL_SENSOR_LEN;
+        memset(hil_sensor, 0, MAVLINK_MSG_ID_HIL_SENSOR_LEN);
+    memcpy(hil_sensor, _MAV_PAYLOAD(msg), len);
+#endif
+}

Some files were not shown because too many files changed in this diff