Browse Source

增加 vk update 相关协议

Liu Yang 1 year ago
parent
commit
922699b61b

+ 32 - 2
msg_definitions/VKFly.xml

@@ -472,7 +472,6 @@
         <param index="6" label="Longitude">Longitude</param>
         <param index="7" label="Altitude" units="m">Altitude</param>
       </entry>
-
     </enum>
   </enums>
 
@@ -510,6 +509,37 @@
       <field type="uint8_t" name="s_flag3">fmu sflag3</field>
       <field type="uint8_t" name="s_flag4">fmu sflag4</field>
     </message>
+
+    <message id="53100" name="VK_FW_UPDATE_BEGIN">
+      <description>VKFLY autopilot update firmware begin. This message send from GCS to autopilot. </description>
+      <field type="uint8_t" name="target_system">Target system id.</field>
+      <field type="uint8_t" name="target_comp">Target compid id.</field>
+      <field type="uint32_t" name="file_size" units="bytes">Size of the firmware file in bytes.</field>
+    </message>
+    <message id="53101" name="VK_FW_UPDATE_ACK">
+      <description>VKFLY udpate acknowledge.</description>
+      <field type="uint8_t" name="result" enum="MAV_RESULT">Update begin ack.</field>
+    </message>
+    <message id="53102" name="VK_FW_UPDATE_DATA_REQUEST">
+      <description>VKFLY autopilot request update file data from GCS. </description>
+      <field type="uint32_t" name="offset">Offset into the update file.</field>
+      <field type="uint32_t" name="count">Number of bytes.</field>
+    </message>
+    <message id="53103" name="VK_FW_UPDATE_DATA">
+      <description>VKFLY transfer update file data.</description>
+      <field type="uint32_t" name="offset">Offset into the update file.</field>
+      <field type="uint8_t" name="count" minValue="0" maxValue="128" increment="1">Number of bytes.
+        Zero for end of file.</field>
+      <field type="uint8_t[128]" name="data">File data.</field>
+    </message>
+    <message id="53104" name="VK_UPDATE_TERMINATE">
+      <description>VKFLY transfer update terminate. Send this message to terminate a update file
+        transfer.</description>
+      <field type="uint8_t" name="target_system">Target system id.</field>
+      <field type="uint8_t" name="target_comp">Target compid id.</field>
+    </message>
+
+
   </messages>
 
-</mavlink>
+</mavlink>

+ 70 - 5
readme.md

@@ -310,6 +310,14 @@ mavlink common 标准消息集中主要由 MAVLINK_MSG_ID_COMMAND_INT 和 MAVLIN
 
     其中 fram 支持 MAV_FRAME_GLOBAL_RELATIVE_ALT MAV_FRAME_GLOBAL_RELATIVE_ALT_INT MAV_FRAME_GLOBAL MAV_FRAME_GLOBAL_INT
 
+  - [MAV_CMD_DO_SET_ROI_LOCATION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_SET_ROI_LOCATION)
+    设置吊舱经纬度兴趣点聚焦
+    | 参数   | 说明     |
+    | ------ | -------- |
+    | param5 | 纬度     |
+    | param6 | 经度     |
+    | param7 | 海拔高度 |
+
 - [MAVLINK_MSG_ID_COMMAND_LONG](https://mavlink.io/en/messages/common.html#COMMAND_LONG)
 
   飞控接受以下几条 MAV_CMD 类型的指令
@@ -478,15 +486,17 @@ mavlink common 标准消息集中主要由 MAVLINK_MSG_ID_COMMAND_INT 和 MAVLIN
     | ------ | --------------------------------------- |
     | param1 | px, 水平图像位置, 0~1, 0为最左, 1为最右 |
     | param2 | py, 垂直图像位置, 0~1, 0为最上, 1为最下 |
-    | param3 | 未使用                                  |
+    | param3 | 点半径, 0-一个像素点, 1-全图            |
 
   - [MAV_CMD_CAMERA_STOP_TRACKING](https://mavlink.io/en/messages/common.html#MAV_CMD_CAMERA_STOP_TRACKING)
     停止跟踪
   - [MAV_CMD_VIDEO_START_CAPTURE](https://mavlink.io/en/messages/common.html#MAV_CMD_VIDEO_START_CAPTURE)
     开始录像
-  - [MAV_CMD_VIDEO_STOP_CAPTURE ](https://mavlink.io/en/messages/common.html#MAV_CMD_VIDEO_STOP_CAPTURE)
+  - [MAV_CMD_VIDEO_STOP_CAPTURE](https://mavlink.io/en/messages/common.html#MAV_CMD_VIDEO_STOP_CAPTURE)
     停止录像
 
+  - [MAV_CMD_DO_SET_ROI_NONE](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_SET_ROI_NONE)
+    取消吊舱兴趣点聚焦
 
   - [MAV_CMD_DO_ENGINE_CONTROL](MAV_CMD_DO_ENGINE_CONTROL)
     发动机控制
@@ -497,8 +507,6 @@ mavlink common 标准消息集中主要由 MAVLINK_MSG_ID_COMMAND_INT 和 MAVLIN
 
 ### 飞控 LOG 读取
 
-Q: 用 mavlink FTP 还是用 LOG 系列. FTP 功能更强但实现难度更大.
-
 - MAVLINK_MSG_ID_LOG_REQUEST_LIST
 - MAVLINK_MSG_ID_LOG_ENTRY
 - MAVLINK_MSG_ID_LOG_REQUEST_DATA
@@ -506,6 +514,63 @@ Q: 用 mavlink FTP 还是用 LOG 系列. FTP 功能更强但实现难度更大.
 - MAVLINK_MSG_ID_LOG_ERASE
 - MAVLINK_MSG_ID_LOG_REQUEST_END
 
+### 飞控固件下载
+- MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN
+
+  地面站向飞控发送此消息, 开始传输固件文件.
+
+  |字段|说明|
+  |-|-|
+  |target_system|目标sysid, 在多机系统时指定哪个飞控进行升级|
+  |target_comp|目标compid, 飞控compid 为1|
+  |file_size| 文件字节大小字节数|
+
+- MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST
+
+  飞控向地面站发送此消息, 请求文件数据内容.
+  注意飞控请求count可能大于一包所能发送数量, 比如一次请求4096字节.
+  地面站收到该请求后, 依次将数据按 VK_FW_UPDATE_DATA 连续发送, 注意每次发送的 offset 都需按实际赋值.
+  
+  |字段|说明|
+  |-|-|
+  |offset|字节偏移 |
+  |count|字节数|
+
+- MAVLINK_MSG_ID_VK_FW_UPDATE_DATA
+
+  地面站向飞控发送文件数据包.
+
+  |字段|说明|
+  |-|-|
+  |offset|字节偏移|
+  |count|本包字节数, 范围0~128|
+  |data|数据内容|
+
+- MAVLINK_MSG_ID_VK_FW_UPDATE_ACK
+
+  飞控向地面站发送应答消息.
+
+  |字段|说明|
+  |-|-|
+  |result| 0-成功 其它失败, 参考 MAV_RESULT|
+  
+
+飞控固件下载交互过程如下
+
+```mermaid
+	sequenceDiagram
+	GCS->>Autopilot: VK_FW_UPDATE_BEGIN
+  GCS->>GCS: start timeout
+	Autopilot->>GCS: VK_FW_UPDATE_DATA_REQUEST (package 0)
+  Autopilot->>Autopilot: start timeout
+  GCS-->>Autopilot: VK_FW_UPDATE_DATA (package 0)
+  note over GCS,Autopilot: ...iterate through packages...
+	Autopilot->>GCS: VK_FW_UPDATE_DATA_REQUEST (the last package)
+  Autopilot->>Autopilot: start timeout
+  GCS-->>Autopilot: VK_FW_UPDATE_DATA (the last package)
+	Autopilot->>GCS: VK_FW_UPDATE_ACK
+```
+
 ## 微克 vkfmu 自定义 vkfly.xml (补充中)
 
 ### 自定义枚举类型
@@ -1031,4 +1096,4 @@ Q: 用 mavlink FTP 还是用 LOG 系列. FTP 功能更强但实现难度更大.
 | BAT_V_OFF0      | 电压通道0校准偏移        | FLOAT  | 范围-100~100, 单位V                                                                            |
 | BAT_V_OFF1      | 电压通道1校准偏移        | FLOAT  | 范围-100~100, 单位V                                                                            |
 | BAT_V_OFF2      | 电压通道2校准偏移        | FLOAT  | 范围-100~100, 单位V                                                                            |
-| BAT_V_OFF3      | 电压通道3校准偏移        | FLOAT  | 范围-100~100, 单位V                                                                            |
+| BAT_V_OFF3      | 电压通道3校准偏移        | FLOAT  | 范围-100~100, 单位V                                                                            |

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


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

@@ -6,7 +6,7 @@
 #ifndef MAVLINK_H
 #define MAVLINK_H
 
-#define MAVLINK_PRIMARY_XML_HASH -3798323614798322597
+#define MAVLINK_PRIMARY_XML_HASH -1458142097593788960
 
 #ifndef MAVLINK_STX
 #define MAVLINK_STX 253

+ 260 - 0
v2.0/VKFly/mavlink_msg_vk_fw_update_ack.h

@@ -0,0 +1,260 @@
+#pragma once
+// MESSAGE VK_FW_UPDATE_ACK PACKING
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_ACK 53101
+
+
+typedef struct __mavlink_vk_fw_update_ack_t {
+ uint8_t result; /*<  Update begin ack.*/
+} mavlink_vk_fw_update_ack_t;
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN 1
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN 1
+#define MAVLINK_MSG_ID_53101_LEN 1
+#define MAVLINK_MSG_ID_53101_MIN_LEN 1
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC 98
+#define MAVLINK_MSG_ID_53101_CRC 98
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VK_FW_UPDATE_ACK { \
+    53101, \
+    "VK_FW_UPDATE_ACK", \
+    1, \
+    {  { "result", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_vk_fw_update_ack_t, result) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VK_FW_UPDATE_ACK { \
+    "VK_FW_UPDATE_ACK", \
+    1, \
+    {  { "result", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_vk_fw_update_ack_t, result) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vk_fw_update_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 result  Update begin ack.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_ack_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t result)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN];
+    _mav_put_uint8_t(buf, 0, result);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN);
+#else
+    mavlink_vk_fw_update_ack_t packet;
+    packet.result = result;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_ACK;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC);
+}
+
+/**
+ * @brief Pack a vk_fw_update_ack message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param result  Update begin ack.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_ack_pack_status(uint8_t system_id, uint8_t component_id, mavlink_status_t *_status, mavlink_message_t* msg,
+                               uint8_t result)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN];
+    _mav_put_uint8_t(buf, 0, result);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN);
+#else
+    mavlink_vk_fw_update_ack_t packet;
+    packet.result = result;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_ACK;
+#if MAVLINK_CRC_EXTRA
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC);
+#else
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN);
+#endif
+}
+
+/**
+ * @brief Pack a vk_fw_update_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 result  Update begin ack.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_ack_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t result)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN];
+    _mav_put_uint8_t(buf, 0, result);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN);
+#else
+    mavlink_vk_fw_update_ack_t packet;
+    packet.result = result;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_ACK;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC);
+}
+
+/**
+ * @brief Encode a vk_fw_update_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 vk_fw_update_ack C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_ack_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vk_fw_update_ack_t* vk_fw_update_ack)
+{
+    return mavlink_msg_vk_fw_update_ack_pack(system_id, component_id, msg, vk_fw_update_ack->result);
+}
+
+/**
+ * @brief Encode a vk_fw_update_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 vk_fw_update_ack C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_ack_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vk_fw_update_ack_t* vk_fw_update_ack)
+{
+    return mavlink_msg_vk_fw_update_ack_pack_chan(system_id, component_id, chan, msg, vk_fw_update_ack->result);
+}
+
+/**
+ * @brief Encode a vk_fw_update_ack struct with provided status structure
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ * @param vk_fw_update_ack C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_ack_encode_status(uint8_t system_id, uint8_t component_id, mavlink_status_t* _status, mavlink_message_t* msg, const mavlink_vk_fw_update_ack_t* vk_fw_update_ack)
+{
+    return mavlink_msg_vk_fw_update_ack_pack_status(system_id, component_id, _status, msg,  vk_fw_update_ack->result);
+}
+
+/**
+ * @brief Send a vk_fw_update_ack message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param result  Update begin ack.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vk_fw_update_ack_send(mavlink_channel_t chan, uint8_t result)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN];
+    _mav_put_uint8_t(buf, 0, result);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK, buf, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC);
+#else
+    mavlink_vk_fw_update_ack_t packet;
+    packet.result = result;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK, (const char *)&packet, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vk_fw_update_ack message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vk_fw_update_ack_send_struct(mavlink_channel_t chan, const mavlink_vk_fw_update_ack_t* vk_fw_update_ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vk_fw_update_ack_send(chan, vk_fw_update_ack->result);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK, (const char *)vk_fw_update_ack, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VK_FW_UPDATE_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_vk_fw_update_ack_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t result)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint8_t(buf, 0, result);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK, buf, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC);
+#else
+    mavlink_vk_fw_update_ack_t *packet = (mavlink_vk_fw_update_ack_t *)msgbuf;
+    packet->result = result;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK, (const char *)packet, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VK_FW_UPDATE_ACK UNPACKING
+
+
+/**
+ * @brief Get field result from vk_fw_update_ack message
+ *
+ * @return  Update begin ack.
+ */
+static inline uint8_t mavlink_msg_vk_fw_update_ack_get_result(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Decode a vk_fw_update_ack message into a struct
+ *
+ * @param msg The message to decode
+ * @param vk_fw_update_ack C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vk_fw_update_ack_decode(const mavlink_message_t* msg, mavlink_vk_fw_update_ack_t* vk_fw_update_ack)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vk_fw_update_ack->result = mavlink_msg_vk_fw_update_ack_get_result(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN? msg->len : MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN;
+        memset(vk_fw_update_ack, 0, MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_LEN);
+    memcpy(vk_fw_update_ack, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 316 - 0
v2.0/VKFly/mavlink_msg_vk_fw_update_begin.h

@@ -0,0 +1,316 @@
+#pragma once
+// MESSAGE VK_FW_UPDATE_BEGIN PACKING
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN 53100
+
+
+typedef struct __mavlink_vk_fw_update_begin_t {
+ uint32_t file_size; /*< [bytes] Size of the firmware file in bytes.*/
+ uint8_t target_system; /*<  Target system id.*/
+ uint8_t target_comp; /*<  Target compid id.*/
+} mavlink_vk_fw_update_begin_t;
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN 6
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN 6
+#define MAVLINK_MSG_ID_53100_LEN 6
+#define MAVLINK_MSG_ID_53100_MIN_LEN 6
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC 39
+#define MAVLINK_MSG_ID_53100_CRC 39
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VK_FW_UPDATE_BEGIN { \
+    53100, \
+    "VK_FW_UPDATE_BEGIN", \
+    3, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_vk_fw_update_begin_t, target_system) }, \
+         { "target_comp", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_vk_fw_update_begin_t, target_comp) }, \
+         { "file_size", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_fw_update_begin_t, file_size) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VK_FW_UPDATE_BEGIN { \
+    "VK_FW_UPDATE_BEGIN", \
+    3, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_vk_fw_update_begin_t, target_system) }, \
+         { "target_comp", NULL, MAVLINK_TYPE_UINT8_T, 0, 5, offsetof(mavlink_vk_fw_update_begin_t, target_comp) }, \
+         { "file_size", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_fw_update_begin_t, file_size) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vk_fw_update_begin 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  Target system id.
+ * @param target_comp  Target compid id.
+ * @param file_size [bytes] Size of the firmware file in bytes.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_begin_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_comp, uint32_t file_size)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN];
+    _mav_put_uint32_t(buf, 0, file_size);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_comp);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN);
+#else
+    mavlink_vk_fw_update_begin_t packet;
+    packet.file_size = file_size;
+    packet.target_system = target_system;
+    packet.target_comp = target_comp;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC);
+}
+
+/**
+ * @brief Pack a vk_fw_update_begin message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  Target system id.
+ * @param target_comp  Target compid id.
+ * @param file_size [bytes] Size of the firmware file in bytes.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_begin_pack_status(uint8_t system_id, uint8_t component_id, mavlink_status_t *_status, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_comp, uint32_t file_size)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN];
+    _mav_put_uint32_t(buf, 0, file_size);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_comp);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN);
+#else
+    mavlink_vk_fw_update_begin_t packet;
+    packet.file_size = file_size;
+    packet.target_system = target_system;
+    packet.target_comp = target_comp;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN;
+#if MAVLINK_CRC_EXTRA
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC);
+#else
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN);
+#endif
+}
+
+/**
+ * @brief Pack a vk_fw_update_begin 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  Target system id.
+ * @param target_comp  Target compid id.
+ * @param file_size [bytes] Size of the firmware file in bytes.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_begin_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_comp,uint32_t file_size)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN];
+    _mav_put_uint32_t(buf, 0, file_size);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_comp);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN);
+#else
+    mavlink_vk_fw_update_begin_t packet;
+    packet.file_size = file_size;
+    packet.target_system = target_system;
+    packet.target_comp = target_comp;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC);
+}
+
+/**
+ * @brief Encode a vk_fw_update_begin 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 vk_fw_update_begin C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_begin_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vk_fw_update_begin_t* vk_fw_update_begin)
+{
+    return mavlink_msg_vk_fw_update_begin_pack(system_id, component_id, msg, vk_fw_update_begin->target_system, vk_fw_update_begin->target_comp, vk_fw_update_begin->file_size);
+}
+
+/**
+ * @brief Encode a vk_fw_update_begin 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 vk_fw_update_begin C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_begin_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vk_fw_update_begin_t* vk_fw_update_begin)
+{
+    return mavlink_msg_vk_fw_update_begin_pack_chan(system_id, component_id, chan, msg, vk_fw_update_begin->target_system, vk_fw_update_begin->target_comp, vk_fw_update_begin->file_size);
+}
+
+/**
+ * @brief Encode a vk_fw_update_begin struct with provided status structure
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ * @param vk_fw_update_begin C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_begin_encode_status(uint8_t system_id, uint8_t component_id, mavlink_status_t* _status, mavlink_message_t* msg, const mavlink_vk_fw_update_begin_t* vk_fw_update_begin)
+{
+    return mavlink_msg_vk_fw_update_begin_pack_status(system_id, component_id, _status, msg,  vk_fw_update_begin->target_system, vk_fw_update_begin->target_comp, vk_fw_update_begin->file_size);
+}
+
+/**
+ * @brief Send a vk_fw_update_begin message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  Target system id.
+ * @param target_comp  Target compid id.
+ * @param file_size [bytes] Size of the firmware file in bytes.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vk_fw_update_begin_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_comp, uint32_t file_size)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN];
+    _mav_put_uint32_t(buf, 0, file_size);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_comp);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN, buf, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC);
+#else
+    mavlink_vk_fw_update_begin_t packet;
+    packet.file_size = file_size;
+    packet.target_system = target_system;
+    packet.target_comp = target_comp;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN, (const char *)&packet, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vk_fw_update_begin message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vk_fw_update_begin_send_struct(mavlink_channel_t chan, const mavlink_vk_fw_update_begin_t* vk_fw_update_begin)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vk_fw_update_begin_send(chan, vk_fw_update_begin->target_system, vk_fw_update_begin->target_comp, vk_fw_update_begin->file_size);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN, (const char *)vk_fw_update_begin, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_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_vk_fw_update_begin_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_comp, uint32_t file_size)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, file_size);
+    _mav_put_uint8_t(buf, 4, target_system);
+    _mav_put_uint8_t(buf, 5, target_comp);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN, buf, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC);
+#else
+    mavlink_vk_fw_update_begin_t *packet = (mavlink_vk_fw_update_begin_t *)msgbuf;
+    packet->file_size = file_size;
+    packet->target_system = target_system;
+    packet->target_comp = target_comp;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN, (const char *)packet, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VK_FW_UPDATE_BEGIN UNPACKING
+
+
+/**
+ * @brief Get field target_system from vk_fw_update_begin message
+ *
+ * @return  Target system id.
+ */
+static inline uint8_t mavlink_msg_vk_fw_update_begin_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  4);
+}
+
+/**
+ * @brief Get field target_comp from vk_fw_update_begin message
+ *
+ * @return  Target compid id.
+ */
+static inline uint8_t mavlink_msg_vk_fw_update_begin_get_target_comp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  5);
+}
+
+/**
+ * @brief Get field file_size from vk_fw_update_begin message
+ *
+ * @return [bytes] Size of the firmware file in bytes.
+ */
+static inline uint32_t mavlink_msg_vk_fw_update_begin_get_file_size(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Decode a vk_fw_update_begin message into a struct
+ *
+ * @param msg The message to decode
+ * @param vk_fw_update_begin C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vk_fw_update_begin_decode(const mavlink_message_t* msg, mavlink_vk_fw_update_begin_t* vk_fw_update_begin)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vk_fw_update_begin->file_size = mavlink_msg_vk_fw_update_begin_get_file_size(msg);
+    vk_fw_update_begin->target_system = mavlink_msg_vk_fw_update_begin_get_target_system(msg);
+    vk_fw_update_begin->target_comp = mavlink_msg_vk_fw_update_begin_get_target_comp(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN? msg->len : MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN;
+        memset(vk_fw_update_begin, 0, MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_LEN);
+    memcpy(vk_fw_update_begin, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 312 - 0
v2.0/VKFly/mavlink_msg_vk_fw_update_data.h

@@ -0,0 +1,312 @@
+#pragma once
+// MESSAGE VK_FW_UPDATE_DATA PACKING
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_DATA 53103
+
+
+typedef struct __mavlink_vk_fw_update_data_t {
+ uint32_t offset; /*<  Offset into the update file.*/
+ uint8_t count; /*<  Number of bytes.
+        Zero for end of file.*/
+ uint8_t data[128]; /*<  File data.*/
+} mavlink_vk_fw_update_data_t;
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN 133
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN 133
+#define MAVLINK_MSG_ID_53103_LEN 133
+#define MAVLINK_MSG_ID_53103_MIN_LEN 133
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC 166
+#define MAVLINK_MSG_ID_53103_CRC 166
+
+#define MAVLINK_MSG_VK_FW_UPDATE_DATA_FIELD_DATA_LEN 128
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VK_FW_UPDATE_DATA { \
+    53103, \
+    "VK_FW_UPDATE_DATA", \
+    3, \
+    {  { "offset", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_fw_update_data_t, offset) }, \
+         { "count", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_vk_fw_update_data_t, count) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 128, 5, offsetof(mavlink_vk_fw_update_data_t, data) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VK_FW_UPDATE_DATA { \
+    "VK_FW_UPDATE_DATA", \
+    3, \
+    {  { "offset", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_fw_update_data_t, offset) }, \
+         { "count", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_vk_fw_update_data_t, count) }, \
+         { "data", NULL, MAVLINK_TYPE_UINT8_T, 128, 5, offsetof(mavlink_vk_fw_update_data_t, data) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vk_fw_update_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 offset  Offset into the update file.
+ * @param count  Number of bytes.
+        Zero for end of file.
+ * @param data  File data.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t offset, uint8_t count, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN];
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint8_t(buf, 4, count);
+    _mav_put_uint8_t_array(buf, 5, data, 128);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN);
+#else
+    mavlink_vk_fw_update_data_t packet;
+    packet.offset = offset;
+    packet.count = count;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*128);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_DATA;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC);
+}
+
+/**
+ * @brief Pack a vk_fw_update_data message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param offset  Offset into the update file.
+ * @param count  Number of bytes.
+        Zero for end of file.
+ * @param data  File data.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_pack_status(uint8_t system_id, uint8_t component_id, mavlink_status_t *_status, mavlink_message_t* msg,
+                               uint32_t offset, uint8_t count, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN];
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint8_t(buf, 4, count);
+    _mav_put_uint8_t_array(buf, 5, data, 128);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN);
+#else
+    mavlink_vk_fw_update_data_t packet;
+    packet.offset = offset;
+    packet.count = count;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*128);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_DATA;
+#if MAVLINK_CRC_EXTRA
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC);
+#else
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN);
+#endif
+}
+
+/**
+ * @brief Pack a vk_fw_update_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 offset  Offset into the update file.
+ * @param count  Number of bytes.
+        Zero for end of file.
+ * @param data  File data.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t offset,uint8_t count,const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN];
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint8_t(buf, 4, count);
+    _mav_put_uint8_t_array(buf, 5, data, 128);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN);
+#else
+    mavlink_vk_fw_update_data_t packet;
+    packet.offset = offset;
+    packet.count = count;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*128);
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_DATA;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC);
+}
+
+/**
+ * @brief Encode a vk_fw_update_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 vk_fw_update_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vk_fw_update_data_t* vk_fw_update_data)
+{
+    return mavlink_msg_vk_fw_update_data_pack(system_id, component_id, msg, vk_fw_update_data->offset, vk_fw_update_data->count, vk_fw_update_data->data);
+}
+
+/**
+ * @brief Encode a vk_fw_update_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 vk_fw_update_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vk_fw_update_data_t* vk_fw_update_data)
+{
+    return mavlink_msg_vk_fw_update_data_pack_chan(system_id, component_id, chan, msg, vk_fw_update_data->offset, vk_fw_update_data->count, vk_fw_update_data->data);
+}
+
+/**
+ * @brief Encode a vk_fw_update_data struct with provided status structure
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ * @param vk_fw_update_data C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_encode_status(uint8_t system_id, uint8_t component_id, mavlink_status_t* _status, mavlink_message_t* msg, const mavlink_vk_fw_update_data_t* vk_fw_update_data)
+{
+    return mavlink_msg_vk_fw_update_data_pack_status(system_id, component_id, _status, msg,  vk_fw_update_data->offset, vk_fw_update_data->count, vk_fw_update_data->data);
+}
+
+/**
+ * @brief Send a vk_fw_update_data message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param offset  Offset into the update file.
+ * @param count  Number of bytes.
+        Zero for end of file.
+ * @param data  File data.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vk_fw_update_data_send(mavlink_channel_t chan, uint32_t offset, uint8_t count, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN];
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint8_t(buf, 4, count);
+    _mav_put_uint8_t_array(buf, 5, data, 128);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA, buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC);
+#else
+    mavlink_vk_fw_update_data_t packet;
+    packet.offset = offset;
+    packet.count = count;
+    mav_array_memcpy(packet.data, data, sizeof(uint8_t)*128);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA, (const char *)&packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vk_fw_update_data message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vk_fw_update_data_send_struct(mavlink_channel_t chan, const mavlink_vk_fw_update_data_t* vk_fw_update_data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vk_fw_update_data_send(chan, vk_fw_update_data->offset, vk_fw_update_data->count, vk_fw_update_data->data);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA, (const char *)vk_fw_update_data, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VK_FW_UPDATE_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_vk_fw_update_data_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t offset, uint8_t count, const uint8_t *data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint8_t(buf, 4, count);
+    _mav_put_uint8_t_array(buf, 5, data, 128);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA, buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC);
+#else
+    mavlink_vk_fw_update_data_t *packet = (mavlink_vk_fw_update_data_t *)msgbuf;
+    packet->offset = offset;
+    packet->count = count;
+    mav_array_memcpy(packet->data, data, sizeof(uint8_t)*128);
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA, (const char *)packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VK_FW_UPDATE_DATA UNPACKING
+
+
+/**
+ * @brief Get field offset from vk_fw_update_data message
+ *
+ * @return  Offset into the update file.
+ */
+static inline uint32_t mavlink_msg_vk_fw_update_data_get_offset(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field count from vk_fw_update_data message
+ *
+ * @return  Number of bytes.
+        Zero for end of file.
+ */
+static inline uint8_t mavlink_msg_vk_fw_update_data_get_count(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  4);
+}
+
+/**
+ * @brief Get field data from vk_fw_update_data message
+ *
+ * @return  File data.
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_get_data(const mavlink_message_t* msg, uint8_t *data)
+{
+    return _MAV_RETURN_uint8_t_array(msg, data, 128,  5);
+}
+
+/**
+ * @brief Decode a vk_fw_update_data message into a struct
+ *
+ * @param msg The message to decode
+ * @param vk_fw_update_data C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vk_fw_update_data_decode(const mavlink_message_t* msg, mavlink_vk_fw_update_data_t* vk_fw_update_data)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vk_fw_update_data->offset = mavlink_msg_vk_fw_update_data_get_offset(msg);
+    vk_fw_update_data->count = mavlink_msg_vk_fw_update_data_get_count(msg);
+    mavlink_msg_vk_fw_update_data_get_data(msg, vk_fw_update_data->data);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN? msg->len : MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN;
+        memset(vk_fw_update_data, 0, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_LEN);
+    memcpy(vk_fw_update_data, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 288 - 0
v2.0/VKFly/mavlink_msg_vk_fw_update_data_request.h

@@ -0,0 +1,288 @@
+#pragma once
+// MESSAGE VK_FW_UPDATE_DATA_REQUEST PACKING
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST 53102
+
+
+typedef struct __mavlink_vk_fw_update_data_request_t {
+ uint32_t offset; /*<  Offset into the update file.*/
+ uint32_t count; /*<  Number of bytes.*/
+} mavlink_vk_fw_update_data_request_t;
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN 8
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN 8
+#define MAVLINK_MSG_ID_53102_LEN 8
+#define MAVLINK_MSG_ID_53102_MIN_LEN 8
+
+#define MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC 78
+#define MAVLINK_MSG_ID_53102_CRC 78
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VK_FW_UPDATE_DATA_REQUEST { \
+    53102, \
+    "VK_FW_UPDATE_DATA_REQUEST", \
+    2, \
+    {  { "offset", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_fw_update_data_request_t, offset) }, \
+         { "count", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_vk_fw_update_data_request_t, count) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VK_FW_UPDATE_DATA_REQUEST { \
+    "VK_FW_UPDATE_DATA_REQUEST", \
+    2, \
+    {  { "offset", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_fw_update_data_request_t, offset) }, \
+         { "count", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_vk_fw_update_data_request_t, count) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vk_fw_update_data_request 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 offset  Offset into the update file.
+ * @param count  Number of bytes.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_request_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t offset, uint32_t count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN];
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint32_t(buf, 4, count);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN);
+#else
+    mavlink_vk_fw_update_data_request_t packet;
+    packet.offset = offset;
+    packet.count = count;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC);
+}
+
+/**
+ * @brief Pack a vk_fw_update_data_request message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param offset  Offset into the update file.
+ * @param count  Number of bytes.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_request_pack_status(uint8_t system_id, uint8_t component_id, mavlink_status_t *_status, mavlink_message_t* msg,
+                               uint32_t offset, uint32_t count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN];
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint32_t(buf, 4, count);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN);
+#else
+    mavlink_vk_fw_update_data_request_t packet;
+    packet.offset = offset;
+    packet.count = count;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST;
+#if MAVLINK_CRC_EXTRA
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC);
+#else
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN);
+#endif
+}
+
+/**
+ * @brief Pack a vk_fw_update_data_request 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 offset  Offset into the update file.
+ * @param count  Number of bytes.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_request_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t offset,uint32_t count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN];
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint32_t(buf, 4, count);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN);
+#else
+    mavlink_vk_fw_update_data_request_t packet;
+    packet.offset = offset;
+    packet.count = count;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC);
+}
+
+/**
+ * @brief Encode a vk_fw_update_data_request 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 vk_fw_update_data_request C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_request_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vk_fw_update_data_request_t* vk_fw_update_data_request)
+{
+    return mavlink_msg_vk_fw_update_data_request_pack(system_id, component_id, msg, vk_fw_update_data_request->offset, vk_fw_update_data_request->count);
+}
+
+/**
+ * @brief Encode a vk_fw_update_data_request 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 vk_fw_update_data_request C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_request_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vk_fw_update_data_request_t* vk_fw_update_data_request)
+{
+    return mavlink_msg_vk_fw_update_data_request_pack_chan(system_id, component_id, chan, msg, vk_fw_update_data_request->offset, vk_fw_update_data_request->count);
+}
+
+/**
+ * @brief Encode a vk_fw_update_data_request struct with provided status structure
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ * @param vk_fw_update_data_request C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_fw_update_data_request_encode_status(uint8_t system_id, uint8_t component_id, mavlink_status_t* _status, mavlink_message_t* msg, const mavlink_vk_fw_update_data_request_t* vk_fw_update_data_request)
+{
+    return mavlink_msg_vk_fw_update_data_request_pack_status(system_id, component_id, _status, msg,  vk_fw_update_data_request->offset, vk_fw_update_data_request->count);
+}
+
+/**
+ * @brief Send a vk_fw_update_data_request message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param offset  Offset into the update file.
+ * @param count  Number of bytes.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vk_fw_update_data_request_send(mavlink_channel_t chan, uint32_t offset, uint32_t count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN];
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint32_t(buf, 4, count);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST, buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC);
+#else
+    mavlink_vk_fw_update_data_request_t packet;
+    packet.offset = offset;
+    packet.count = count;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST, (const char *)&packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vk_fw_update_data_request message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vk_fw_update_data_request_send_struct(mavlink_channel_t chan, const mavlink_vk_fw_update_data_request_t* vk_fw_update_data_request)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vk_fw_update_data_request_send(chan, vk_fw_update_data_request->offset, vk_fw_update_data_request->count);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST, (const char *)vk_fw_update_data_request, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_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_vk_fw_update_data_request_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t offset, uint32_t count)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, offset);
+    _mav_put_uint32_t(buf, 4, count);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST, buf, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC);
+#else
+    mavlink_vk_fw_update_data_request_t *packet = (mavlink_vk_fw_update_data_request_t *)msgbuf;
+    packet->offset = offset;
+    packet->count = count;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST, (const char *)packet, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VK_FW_UPDATE_DATA_REQUEST UNPACKING
+
+
+/**
+ * @brief Get field offset from vk_fw_update_data_request message
+ *
+ * @return  Offset into the update file.
+ */
+static inline uint32_t mavlink_msg_vk_fw_update_data_request_get_offset(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field count from vk_fw_update_data_request message
+ *
+ * @return  Number of bytes.
+ */
+static inline uint32_t mavlink_msg_vk_fw_update_data_request_get_count(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Decode a vk_fw_update_data_request message into a struct
+ *
+ * @param msg The message to decode
+ * @param vk_fw_update_data_request C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vk_fw_update_data_request_decode(const mavlink_message_t* msg, mavlink_vk_fw_update_data_request_t* vk_fw_update_data_request)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vk_fw_update_data_request->offset = mavlink_msg_vk_fw_update_data_request_get_offset(msg);
+    vk_fw_update_data_request->count = mavlink_msg_vk_fw_update_data_request_get_count(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN? msg->len : MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN;
+        memset(vk_fw_update_data_request, 0, MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_LEN);
+    memcpy(vk_fw_update_data_request, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 288 - 0
v2.0/VKFly/mavlink_msg_vk_update_terminate.h

@@ -0,0 +1,288 @@
+#pragma once
+// MESSAGE VK_UPDATE_TERMINATE PACKING
+
+#define MAVLINK_MSG_ID_VK_UPDATE_TERMINATE 53104
+
+
+typedef struct __mavlink_vk_update_terminate_t {
+ uint8_t target_system; /*<  Target system id.*/
+ uint8_t target_comp; /*<  Target compid id.*/
+} mavlink_vk_update_terminate_t;
+
+#define MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN 2
+#define MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN 2
+#define MAVLINK_MSG_ID_53104_LEN 2
+#define MAVLINK_MSG_ID_53104_MIN_LEN 2
+
+#define MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC 158
+#define MAVLINK_MSG_ID_53104_CRC 158
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VK_UPDATE_TERMINATE { \
+    53104, \
+    "VK_UPDATE_TERMINATE", \
+    2, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_vk_update_terminate_t, target_system) }, \
+         { "target_comp", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_vk_update_terminate_t, target_comp) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VK_UPDATE_TERMINATE { \
+    "VK_UPDATE_TERMINATE", \
+    2, \
+    {  { "target_system", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_vk_update_terminate_t, target_system) }, \
+         { "target_comp", NULL, MAVLINK_TYPE_UINT8_T, 0, 1, offsetof(mavlink_vk_update_terminate_t, target_comp) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vk_update_terminate 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  Target system id.
+ * @param target_comp  Target compid id.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_update_terminate_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_comp)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, target_comp);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN);
+#else
+    mavlink_vk_update_terminate_t packet;
+    packet.target_system = target_system;
+    packet.target_comp = target_comp;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_UPDATE_TERMINATE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC);
+}
+
+/**
+ * @brief Pack a vk_update_terminate message
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ *
+ * @param target_system  Target system id.
+ * @param target_comp  Target compid id.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_update_terminate_pack_status(uint8_t system_id, uint8_t component_id, mavlink_status_t *_status, mavlink_message_t* msg,
+                               uint8_t target_system, uint8_t target_comp)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, target_comp);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN);
+#else
+    mavlink_vk_update_terminate_t packet;
+    packet.target_system = target_system;
+    packet.target_comp = target_comp;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_UPDATE_TERMINATE;
+#if MAVLINK_CRC_EXTRA
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC);
+#else
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN);
+#endif
+}
+
+/**
+ * @brief Pack a vk_update_terminate 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  Target system id.
+ * @param target_comp  Target compid id.
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_update_terminate_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint8_t target_system,uint8_t target_comp)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, target_comp);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN);
+#else
+    mavlink_vk_update_terminate_t packet;
+    packet.target_system = target_system;
+    packet.target_comp = target_comp;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_UPDATE_TERMINATE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC);
+}
+
+/**
+ * @brief Encode a vk_update_terminate 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 vk_update_terminate C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_update_terminate_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vk_update_terminate_t* vk_update_terminate)
+{
+    return mavlink_msg_vk_update_terminate_pack(system_id, component_id, msg, vk_update_terminate->target_system, vk_update_terminate->target_comp);
+}
+
+/**
+ * @brief Encode a vk_update_terminate 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 vk_update_terminate C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_update_terminate_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vk_update_terminate_t* vk_update_terminate)
+{
+    return mavlink_msg_vk_update_terminate_pack_chan(system_id, component_id, chan, msg, vk_update_terminate->target_system, vk_update_terminate->target_comp);
+}
+
+/**
+ * @brief Encode a vk_update_terminate struct with provided status structure
+ *
+ * @param system_id ID of this system
+ * @param component_id ID of this component (e.g. 200 for IMU)
+ * @param status MAVLink status structure
+ * @param msg The MAVLink message to compress the data into
+ * @param vk_update_terminate C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_update_terminate_encode_status(uint8_t system_id, uint8_t component_id, mavlink_status_t* _status, mavlink_message_t* msg, const mavlink_vk_update_terminate_t* vk_update_terminate)
+{
+    return mavlink_msg_vk_update_terminate_pack_status(system_id, component_id, _status, msg,  vk_update_terminate->target_system, vk_update_terminate->target_comp);
+}
+
+/**
+ * @brief Send a vk_update_terminate message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param target_system  Target system id.
+ * @param target_comp  Target compid id.
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vk_update_terminate_send(mavlink_channel_t chan, uint8_t target_system, uint8_t target_comp)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN];
+    _mav_put_uint8_t(buf, 0, target_system);
+    _mav_put_uint8_t(buf, 1, target_comp);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE, buf, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC);
+#else
+    mavlink_vk_update_terminate_t packet;
+    packet.target_system = target_system;
+    packet.target_comp = target_comp;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE, (const char *)&packet, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vk_update_terminate message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vk_update_terminate_send_struct(mavlink_channel_t chan, const mavlink_vk_update_terminate_t* vk_update_terminate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vk_update_terminate_send(chan, vk_update_terminate->target_system, vk_update_terminate->target_comp);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE, (const char *)vk_update_terminate, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_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_vk_update_terminate_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint8_t target_system, uint8_t target_comp)
+{
+#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_comp);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE, buf, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC);
+#else
+    mavlink_vk_update_terminate_t *packet = (mavlink_vk_update_terminate_t *)msgbuf;
+    packet->target_system = target_system;
+    packet->target_comp = target_comp;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE, (const char *)packet, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VK_UPDATE_TERMINATE UNPACKING
+
+
+/**
+ * @brief Get field target_system from vk_update_terminate message
+ *
+ * @return  Target system id.
+ */
+static inline uint8_t mavlink_msg_vk_update_terminate_get_target_system(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  0);
+}
+
+/**
+ * @brief Get field target_comp from vk_update_terminate message
+ *
+ * @return  Target compid id.
+ */
+static inline uint8_t mavlink_msg_vk_update_terminate_get_target_comp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  1);
+}
+
+/**
+ * @brief Decode a vk_update_terminate message into a struct
+ *
+ * @param msg The message to decode
+ * @param vk_update_terminate C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vk_update_terminate_decode(const mavlink_message_t* msg, mavlink_vk_update_terminate_t* vk_update_terminate)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vk_update_terminate->target_system = mavlink_msg_vk_update_terminate_get_target_system(msg);
+    vk_update_terminate->target_comp = mavlink_msg_vk_update_terminate_get_target_comp(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN? msg->len : MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN;
+        memset(vk_update_terminate, 0, MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_LEN);
+    memcpy(vk_update_terminate, _MAV_PAYLOAD(msg), len);
+#endif
+}

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

@@ -164,10 +164,316 @@ static void mavlink_test_vkfmu_status(uint8_t system_id, uint8_t component_id, m
 #endif
 }
 
+static void mavlink_test_vk_fw_update_begin(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_VK_FW_UPDATE_BEGIN >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vk_fw_update_begin_t packet_in = {
+        963497464,17,84
+    };
+    mavlink_vk_fw_update_begin_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.file_size = packet_in.file_size;
+        packet1.target_system = packet_in.target_system;
+        packet1.target_comp = packet_in.target_comp;
+        
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_begin_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vk_fw_update_begin_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_begin_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_comp , packet1.file_size );
+    mavlink_msg_vk_fw_update_begin_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_begin_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_comp , packet1.file_size );
+    mavlink_msg_vk_fw_update_begin_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_vk_fw_update_begin_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_begin_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_comp , packet1.file_size );
+    mavlink_msg_vk_fw_update_begin_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("VK_FW_UPDATE_BEGIN") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VK_FW_UPDATE_BEGIN) != NULL);
+#endif
+}
+
+static void mavlink_test_vk_fw_update_ack(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_VK_FW_UPDATE_ACK >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vk_fw_update_ack_t packet_in = {
+        5
+    };
+    mavlink_vk_fw_update_ack_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.result = packet_in.result;
+        
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VK_FW_UPDATE_ACK_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_ack_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vk_fw_update_ack_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_ack_pack(system_id, component_id, &msg , packet1.result );
+    mavlink_msg_vk_fw_update_ack_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_ack_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.result );
+    mavlink_msg_vk_fw_update_ack_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_vk_fw_update_ack_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_ack_send(MAVLINK_COMM_1 , packet1.result );
+    mavlink_msg_vk_fw_update_ack_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("VK_FW_UPDATE_ACK") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VK_FW_UPDATE_ACK) != NULL);
+#endif
+}
+
+static void mavlink_test_vk_fw_update_data_request(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_VK_FW_UPDATE_DATA_REQUEST >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vk_fw_update_data_request_t packet_in = {
+        963497464,963497672
+    };
+    mavlink_vk_fw_update_data_request_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.offset = packet_in.offset;
+        packet1.count = packet_in.count;
+        
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_data_request_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vk_fw_update_data_request_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_data_request_pack(system_id, component_id, &msg , packet1.offset , packet1.count );
+    mavlink_msg_vk_fw_update_data_request_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_data_request_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.offset , packet1.count );
+    mavlink_msg_vk_fw_update_data_request_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_vk_fw_update_data_request_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_data_request_send(MAVLINK_COMM_1 , packet1.offset , packet1.count );
+    mavlink_msg_vk_fw_update_data_request_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("VK_FW_UPDATE_DATA_REQUEST") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_REQUEST) != NULL);
+#endif
+}
+
+static void mavlink_test_vk_fw_update_data(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_VK_FW_UPDATE_DATA >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vk_fw_update_data_t packet_in = {
+        963497464,17,{ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211 }
+    };
+    mavlink_vk_fw_update_data_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.offset = packet_in.offset;
+        packet1.count = packet_in.count;
+        
+        mav_array_memcpy(packet1.data, packet_in.data, sizeof(uint8_t)*128);
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VK_FW_UPDATE_DATA_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_data_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vk_fw_update_data_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_data_pack(system_id, component_id, &msg , packet1.offset , packet1.count , packet1.data );
+    mavlink_msg_vk_fw_update_data_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_data_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.offset , packet1.count , packet1.data );
+    mavlink_msg_vk_fw_update_data_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_vk_fw_update_data_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_fw_update_data_send(MAVLINK_COMM_1 , packet1.offset , packet1.count , packet1.data );
+    mavlink_msg_vk_fw_update_data_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("VK_FW_UPDATE_DATA") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VK_FW_UPDATE_DATA) != NULL);
+#endif
+}
+
+static void mavlink_test_vk_update_terminate(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_VK_UPDATE_TERMINATE >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vk_update_terminate_t packet_in = {
+        5,72
+    };
+    mavlink_vk_update_terminate_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.target_system = packet_in.target_system;
+        packet1.target_comp = packet_in.target_comp;
+        
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VK_UPDATE_TERMINATE_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_update_terminate_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vk_update_terminate_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_update_terminate_pack(system_id, component_id, &msg , packet1.target_system , packet1.target_comp );
+    mavlink_msg_vk_update_terminate_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_update_terminate_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.target_system , packet1.target_comp );
+    mavlink_msg_vk_update_terminate_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_vk_update_terminate_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_update_terminate_send(MAVLINK_COMM_1 , packet1.target_system , packet1.target_comp );
+    mavlink_msg_vk_update_terminate_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("VK_UPDATE_TERMINATE") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VK_UPDATE_TERMINATE) != 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);
+    mavlink_test_vk_fw_update_begin(system_id, component_id, last_msg);
+    mavlink_test_vk_fw_update_ack(system_id, component_id, last_msg);
+    mavlink_test_vk_fw_update_data_request(system_id, component_id, last_msg);
+    mavlink_test_vk_fw_update_data(system_id, component_id, last_msg);
+    mavlink_test_vk_update_terminate(system_id, component_id, last_msg);
 }
 
 #ifdef __cplusplus

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

@@ -7,7 +7,7 @@
 #ifndef MAVLINK_VERSION_H
 #define MAVLINK_VERSION_H
 
-#define MAVLINK_BUILD_DATE "Tue Apr 16 2024"
+#define MAVLINK_BUILD_DATE "Thu May 02 2024"
 #define MAVLINK_WIRE_PROTOCOL_VERSION "2.0"
 #define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 255
  

+ 1 - 1
v2.0/common/common.h

@@ -10,7 +10,7 @@
     #error Wrong include order: MAVLINK_COMMON.H MUST NOT BE DIRECTLY USED. Include mavlink.h from the same directory instead or set ALL AND EVERY defines from MAVLINK.H manually accordingly, including the #define MAVLINK_H call.
 #endif
 
-#define MAVLINK_COMMON_XML_HASH -4719018905846176978
+#define MAVLINK_COMMON_XML_HASH -7254152029833598995
 
 #ifdef __cplusplus
 extern "C" {

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

@@ -6,7 +6,7 @@
 #ifndef MAVLINK_H
 #define MAVLINK_H
 
-#define MAVLINK_PRIMARY_XML_HASH -4719018905846176978
+#define MAVLINK_PRIMARY_XML_HASH -7254152029833598995
 
 #ifndef MAVLINK_STX
 #define MAVLINK_STX 253

+ 1 - 1
v2.0/common/version.h

@@ -7,7 +7,7 @@
 #ifndef MAVLINK_VERSION_H
 #define MAVLINK_VERSION_H
 
-#define MAVLINK_BUILD_DATE "Tue Apr 16 2024"
+#define MAVLINK_BUILD_DATE "Thu May 02 2024"
 #define MAVLINK_WIRE_PROTOCOL_VERSION "2.0"
 #define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 255
  

+ 1 - 1
v2.0/minimal/mavlink.h

@@ -6,7 +6,7 @@
 #ifndef MAVLINK_H
 #define MAVLINK_H
 
-#define MAVLINK_PRIMARY_XML_HASH -936987533560736823
+#define MAVLINK_PRIMARY_XML_HASH -8211725683581581752
 
 #ifndef MAVLINK_STX
 #define MAVLINK_STX 253

+ 1 - 1
v2.0/minimal/minimal.h

@@ -10,7 +10,7 @@
     #error Wrong include order: MAVLINK_MINIMAL.H MUST NOT BE DIRECTLY USED. Include mavlink.h from the same directory instead or set ALL AND EVERY defines from MAVLINK.H manually accordingly, including the #define MAVLINK_H call.
 #endif
 
-#define MAVLINK_MINIMAL_XML_HASH -936987533560736823
+#define MAVLINK_MINIMAL_XML_HASH -8211725683581581752
 
 #ifdef __cplusplus
 extern "C" {

+ 1 - 1
v2.0/minimal/version.h

@@ -7,7 +7,7 @@
 #ifndef MAVLINK_VERSION_H
 #define MAVLINK_VERSION_H
 
-#define MAVLINK_BUILD_DATE "Tue Apr 16 2024"
+#define MAVLINK_BUILD_DATE "Thu May 02 2024"
 #define MAVLINK_WIRE_PROTOCOL_VERSION "2.0"
 #define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 22
  

+ 1 - 1
v2.0/standard/mavlink.h

@@ -6,7 +6,7 @@
 #ifndef MAVLINK_H
 #define MAVLINK_H
 
-#define MAVLINK_PRIMARY_XML_HASH 1241976508257245799
+#define MAVLINK_PRIMARY_XML_HASH -7981410192942262563
 
 #ifndef MAVLINK_STX
 #define MAVLINK_STX 253

+ 1 - 1
v2.0/standard/standard.h

@@ -10,7 +10,7 @@
     #error Wrong include order: MAVLINK_STANDARD.H MUST NOT BE DIRECTLY USED. Include mavlink.h from the same directory instead or set ALL AND EVERY defines from MAVLINK.H manually accordingly, including the #define MAVLINK_H call.
 #endif
 
-#define MAVLINK_STANDARD_XML_HASH 1241976508257245799
+#define MAVLINK_STANDARD_XML_HASH -7981410192942262563
 
 #ifdef __cplusplus
 extern "C" {

+ 1 - 1
v2.0/standard/version.h

@@ -7,7 +7,7 @@
 #ifndef MAVLINK_VERSION_H
 #define MAVLINK_VERSION_H
 
-#define MAVLINK_BUILD_DATE "Tue Apr 16 2024"
+#define MAVLINK_BUILD_DATE "Thu May 02 2024"
 #define MAVLINK_WIRE_PROTOCOL_VERSION "2.0"
 #define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE 22
  

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