Browse Source

feat(code&doc): 增加降落伞,称重器等消息

Liu Yang 8 months ago
parent
commit
105ec59f5a

+ 41 - 5
readme.md

@@ -53,7 +53,12 @@ typedef enum VKFLY_USER_COMP_ID
     VKFLY_COMP_ID_BAT3=13, /* 电池3 | */
     VKFLY_COMP_ID_BAT4=14, /* 电池4 | */
     VKFLY_COMP_ID_BAT5=15, /* 电池5 | */
-    VKFLY_USER_COMP_ID_ENUM_END=16, /*  | */
+    VKFLY_COMP_ID_ECU0=16, /* 发动机 ECU0 | */
+    VKFLY_COMP_ID_ECU1=17, /* 发动机 ECU1 | */
+    VKFLY_COMP_ID_ECU2=18, /* 发动机 ECU2 | */
+    VKFLY_COMP_ID_ECU3=19, /* 发动机 ECU3 | */
+    VKFLY_COMP_ID_WEIGHER=20,/* 称重器  | */
+    VKFLY_USER_COMP_ID_ENUM_END=21, /*  | */
 }
 ```
 
@@ -737,6 +742,30 @@ LOCAL 定位信息
 | att_mode      | 测向模式                        |
 | reserved      | 保留字段                        |
 
+### 2.24 降落伞数据 VK_PARACHUTE_STATUS
+
+当有降落伞设备数据接入后, 飞控自动周期向地面站发送此消息
+
+| 字段        | 说明                                 |
+| ----------- | ------------------------------------ |
+| timestamp   | 毫秒时间戳                           |
+| state       | 状态 0-未就绪 1-就绪 2-已开伞 3-故障 |
+| auto_launch | 伞自主触发 0-不启用 1-启动           |
+| uav_cmd     | 伞给飞控命令 0-无 1-停桨             |
+| err_code    | 降落伞故障码                         |
+| backvolt    | 备用供电电压 V                       |
+
+### 2.25 称重器数据 VK_WEIGHER_STATE
+
+当有称重器设备数据接入后, 飞控自动周期向地面站发送此消息
+
+| 字段       | 说明                 |
+| ---------- | -------------------- |
+| timestamp  | 毫秒时间戳           |
+| weight     | 称重器重量 g         |
+| weight_d   | 称重器重量变化率 g/s |
+| work_state | 工作状态             |
+| err_code   | 称重器故障码         |
 
 ## 3 参数设置
 
@@ -820,7 +849,7 @@ param3 作为飞往该点速度使用m/s, NAN表示使用飞控默认巡航速
 | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | param1 | 该参数按 byte[4] 进行使用. <br>byte[0]-byte[1] s16, 悬停时间, 单位 s. 0 表示不进行悬停自动转弯. 悬停到时间后将执行抛投信号触发. <br>byte[2]-byte[3] s16, 巡航速度, 单位 dm/s. 0 或负数表示使用默认巡航速度参数.                                                                                      |
 | param2 | 该参数按 byte[4] 进行使用. <br>byte[0]-byte[1] s16, 抛投对地高度, 单位 dm. 0或者负数表示在航点当前高度抛投. 若有有效的对地高度信息如雷达测距仪等, 则自动在航点进行下降到设定的对地高度再执行抛投. <br>byte[2]-byte[3] u16, 抛投通道. 每 bit 代表一个抛投执行通道, bitmap 参考 VKFLY_THROW_CHAN_TYPE. |
-| param3 | 预留                                                                                                                                                                                                                                                                                                 |
+| param3 | 地面海拔高度 m, NAN 表示无效                                                                                                                                                                                                                                                                         |
 | param4 | 该参数作为 byte[4] 类型使用. <br>byte[0] u8, 为航向模式参考 VKFLY_YAW_CTRL_MODE. <br>byte[1]预留. <br>byte[2]-byte[3] s16, 范围-180-180. 当航向模式为 VKFLY_YAW_TO_SETVAL 时表示给定的航向值, 单位deg. 当航向模式为指向 <br>HOME 或 NEXT_WP 或 INTEREST 等给定点点时, 表示叠加的航向偏移.            |
 | param5 | 纬度 1e-7deg                                                                                                                                                                                                                                                                                         |
 | param6 | 经度 1e-7deg                                                                                                                                                                                                                                                                                         |
@@ -1179,8 +1208,8 @@ param1~param5中,
 
 返航
 
-- **直线返航** 从指令开始位置直线返回到降落点
-- **逆序返航** 从指令开始位置逆序返回到降落点
+- 直线返航 从指令开始位置直线返回到降落点
+- 逆序返航 从指令开始位置逆序返回到降落点
     - 若指定了起始航点, 则从指定起始航点开始执行
     - 若未指定起始航点, 未执行过航线
       - 地面站指令返航, 则从最后一航点开始执行
@@ -1189,7 +1218,7 @@ param1~param5中,
       - 若前序航线顺序执行, 航线目标航点为第一个航点, 则直线返航
       - 若前序航线顺序执行, 航线目标航点不为第一个航点, 则从航线目标航点-1开始执行
       - 若前序航线逆序执行, 则从航线目标航点开始执行。
-- **顺序返航** 从指令开始位置顺序返回到降落点
+- 顺序返航 从指令开始位置顺序返回到降落点
     - 若指定了起始航点, 则从指定起始航点开始执行。
     - 若未指定起始航点, 未执行过航线,
       - 地面站指令返航, 则从第一个航点开始执行
@@ -1204,6 +1233,13 @@ param1~param5中,
 | param1 | 起始航点序号, -1-UINT16_MAX. 当返航执行方式为正序或逆序航线返航时参数有效. -1表示最后一点开始, NAN 表示忽略该参数 |
 | param2 | 返航执行, 参考 VKFLY_RTL_EXEC_MODE                                                                                |
 
+### 5.36 称重器配置 VKFLY_CMD_WEIGHER_CONFIG
+
+| 参数   | 说明                                      |
+| ------ | ----------------------------------------- |
+| param1 | 重量校准, 填写实际载重单位克. NAN表示忽略 |
+| param2 | 1-恢复出厂配置.  NAN表示忽略              |
+
 
 
 ## 6 飞控 LOG 读取

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 -4381439533350736848
+#define MAVLINK_PRIMARY_XML_HASH -4488967979592242041
 
 #ifndef MAVLINK_STX
 #define MAVLINK_STX 253

+ 400 - 0
v2.0/VKFly/mavlink_msg_vk_parachute_status.h

@@ -0,0 +1,400 @@
+#pragma once
+// MESSAGE VK_PARACHUTE_STATUS PACKING
+
+#define MAVLINK_MSG_ID_VK_PARACHUTE_STATUS 53020
+
+
+typedef struct __mavlink_vk_parachute_status_t {
+ uint32_t timestamp; /*< [ms] timestamp from system boot*/
+ float backvolt; /*<  parachute backup voltage*/
+ uint16_t err_code; /*<  parachute error code */
+ uint8_t state; /*<  parachute state*/
+ uint8_t auto_launch; /*<   is auto launch enabled*/
+ uint8_t uav_cmd; /*<   uav command from parachute*/
+} mavlink_vk_parachute_status_t;
+
+#define MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN 13
+#define MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN 13
+#define MAVLINK_MSG_ID_53020_LEN 13
+#define MAVLINK_MSG_ID_53020_MIN_LEN 13
+
+#define MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC 45
+#define MAVLINK_MSG_ID_53020_CRC 45
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VK_PARACHUTE_STATUS { \
+    53020, \
+    "VK_PARACHUTE_STATUS", \
+    6, \
+    {  { "timestamp", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_parachute_status_t, timestamp) }, \
+         { "state", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_vk_parachute_status_t, state) }, \
+         { "auto_launch", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_vk_parachute_status_t, auto_launch) }, \
+         { "uav_cmd", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_vk_parachute_status_t, uav_cmd) }, \
+         { "err_code", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_vk_parachute_status_t, err_code) }, \
+         { "backvolt", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_vk_parachute_status_t, backvolt) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VK_PARACHUTE_STATUS { \
+    "VK_PARACHUTE_STATUS", \
+    6, \
+    {  { "timestamp", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_parachute_status_t, timestamp) }, \
+         { "state", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_vk_parachute_status_t, state) }, \
+         { "auto_launch", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_vk_parachute_status_t, auto_launch) }, \
+         { "uav_cmd", NULL, MAVLINK_TYPE_UINT8_T, 0, 12, offsetof(mavlink_vk_parachute_status_t, uav_cmd) }, \
+         { "err_code", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_vk_parachute_status_t, err_code) }, \
+         { "backvolt", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_vk_parachute_status_t, backvolt) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vk_parachute_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 timestamp [ms] timestamp from system boot
+ * @param state  parachute state
+ * @param auto_launch   is auto launch enabled
+ * @param uav_cmd   uav command from parachute
+ * @param err_code  parachute error code 
+ * @param backvolt  parachute backup voltage
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_parachute_status_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t timestamp, uint8_t state, uint8_t auto_launch, uint8_t uav_cmd, uint16_t err_code, float backvolt)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_float(buf, 4, backvolt);
+    _mav_put_uint16_t(buf, 8, err_code);
+    _mav_put_uint8_t(buf, 10, state);
+    _mav_put_uint8_t(buf, 11, auto_launch);
+    _mav_put_uint8_t(buf, 12, uav_cmd);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN);
+#else
+    mavlink_vk_parachute_status_t packet;
+    packet.timestamp = timestamp;
+    packet.backvolt = backvolt;
+    packet.err_code = err_code;
+    packet.state = state;
+    packet.auto_launch = auto_launch;
+    packet.uav_cmd = uav_cmd;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_PARACHUTE_STATUS;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC);
+}
+
+/**
+ * @brief Pack a vk_parachute_status 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 timestamp [ms] timestamp from system boot
+ * @param state  parachute state
+ * @param auto_launch   is auto launch enabled
+ * @param uav_cmd   uav command from parachute
+ * @param err_code  parachute error code 
+ * @param backvolt  parachute backup voltage
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_parachute_status_pack_status(uint8_t system_id, uint8_t component_id, mavlink_status_t *_status, mavlink_message_t* msg,
+                               uint32_t timestamp, uint8_t state, uint8_t auto_launch, uint8_t uav_cmd, uint16_t err_code, float backvolt)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_float(buf, 4, backvolt);
+    _mav_put_uint16_t(buf, 8, err_code);
+    _mav_put_uint8_t(buf, 10, state);
+    _mav_put_uint8_t(buf, 11, auto_launch);
+    _mav_put_uint8_t(buf, 12, uav_cmd);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN);
+#else
+    mavlink_vk_parachute_status_t packet;
+    packet.timestamp = timestamp;
+    packet.backvolt = backvolt;
+    packet.err_code = err_code;
+    packet.state = state;
+    packet.auto_launch = auto_launch;
+    packet.uav_cmd = uav_cmd;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_PARACHUTE_STATUS;
+#if MAVLINK_CRC_EXTRA
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC);
+#else
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN);
+#endif
+}
+
+/**
+ * @brief Pack a vk_parachute_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 timestamp [ms] timestamp from system boot
+ * @param state  parachute state
+ * @param auto_launch   is auto launch enabled
+ * @param uav_cmd   uav command from parachute
+ * @param err_code  parachute error code 
+ * @param backvolt  parachute backup voltage
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_parachute_status_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t timestamp,uint8_t state,uint8_t auto_launch,uint8_t uav_cmd,uint16_t err_code,float backvolt)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_float(buf, 4, backvolt);
+    _mav_put_uint16_t(buf, 8, err_code);
+    _mav_put_uint8_t(buf, 10, state);
+    _mav_put_uint8_t(buf, 11, auto_launch);
+    _mav_put_uint8_t(buf, 12, uav_cmd);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN);
+#else
+    mavlink_vk_parachute_status_t packet;
+    packet.timestamp = timestamp;
+    packet.backvolt = backvolt;
+    packet.err_code = err_code;
+    packet.state = state;
+    packet.auto_launch = auto_launch;
+    packet.uav_cmd = uav_cmd;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_PARACHUTE_STATUS;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC);
+}
+
+/**
+ * @brief Encode a vk_parachute_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 vk_parachute_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_parachute_status_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vk_parachute_status_t* vk_parachute_status)
+{
+    return mavlink_msg_vk_parachute_status_pack(system_id, component_id, msg, vk_parachute_status->timestamp, vk_parachute_status->state, vk_parachute_status->auto_launch, vk_parachute_status->uav_cmd, vk_parachute_status->err_code, vk_parachute_status->backvolt);
+}
+
+/**
+ * @brief Encode a vk_parachute_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 vk_parachute_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_parachute_status_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vk_parachute_status_t* vk_parachute_status)
+{
+    return mavlink_msg_vk_parachute_status_pack_chan(system_id, component_id, chan, msg, vk_parachute_status->timestamp, vk_parachute_status->state, vk_parachute_status->auto_launch, vk_parachute_status->uav_cmd, vk_parachute_status->err_code, vk_parachute_status->backvolt);
+}
+
+/**
+ * @brief Encode a vk_parachute_status 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_parachute_status C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_parachute_status_encode_status(uint8_t system_id, uint8_t component_id, mavlink_status_t* _status, mavlink_message_t* msg, const mavlink_vk_parachute_status_t* vk_parachute_status)
+{
+    return mavlink_msg_vk_parachute_status_pack_status(system_id, component_id, _status, msg,  vk_parachute_status->timestamp, vk_parachute_status->state, vk_parachute_status->auto_launch, vk_parachute_status->uav_cmd, vk_parachute_status->err_code, vk_parachute_status->backvolt);
+}
+
+/**
+ * @brief Send a vk_parachute_status message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param timestamp [ms] timestamp from system boot
+ * @param state  parachute state
+ * @param auto_launch   is auto launch enabled
+ * @param uav_cmd   uav command from parachute
+ * @param err_code  parachute error code 
+ * @param backvolt  parachute backup voltage
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vk_parachute_status_send(mavlink_channel_t chan, uint32_t timestamp, uint8_t state, uint8_t auto_launch, uint8_t uav_cmd, uint16_t err_code, float backvolt)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_float(buf, 4, backvolt);
+    _mav_put_uint16_t(buf, 8, err_code);
+    _mav_put_uint8_t(buf, 10, state);
+    _mav_put_uint8_t(buf, 11, auto_launch);
+    _mav_put_uint8_t(buf, 12, uav_cmd);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS, buf, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC);
+#else
+    mavlink_vk_parachute_status_t packet;
+    packet.timestamp = timestamp;
+    packet.backvolt = backvolt;
+    packet.err_code = err_code;
+    packet.state = state;
+    packet.auto_launch = auto_launch;
+    packet.uav_cmd = uav_cmd;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS, (const char *)&packet, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vk_parachute_status message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vk_parachute_status_send_struct(mavlink_channel_t chan, const mavlink_vk_parachute_status_t* vk_parachute_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vk_parachute_status_send(chan, vk_parachute_status->timestamp, vk_parachute_status->state, vk_parachute_status->auto_launch, vk_parachute_status->uav_cmd, vk_parachute_status->err_code, vk_parachute_status->backvolt);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS, (const char *)vk_parachute_status, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VK_PARACHUTE_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_vk_parachute_status_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t timestamp, uint8_t state, uint8_t auto_launch, uint8_t uav_cmd, uint16_t err_code, float backvolt)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_float(buf, 4, backvolt);
+    _mav_put_uint16_t(buf, 8, err_code);
+    _mav_put_uint8_t(buf, 10, state);
+    _mav_put_uint8_t(buf, 11, auto_launch);
+    _mav_put_uint8_t(buf, 12, uav_cmd);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS, buf, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC);
+#else
+    mavlink_vk_parachute_status_t *packet = (mavlink_vk_parachute_status_t *)msgbuf;
+    packet->timestamp = timestamp;
+    packet->backvolt = backvolt;
+    packet->err_code = err_code;
+    packet->state = state;
+    packet->auto_launch = auto_launch;
+    packet->uav_cmd = uav_cmd;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS, (const char *)packet, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VK_PARACHUTE_STATUS UNPACKING
+
+
+/**
+ * @brief Get field timestamp from vk_parachute_status message
+ *
+ * @return [ms] timestamp from system boot
+ */
+static inline uint32_t mavlink_msg_vk_parachute_status_get_timestamp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field state from vk_parachute_status message
+ *
+ * @return  parachute state
+ */
+static inline uint8_t mavlink_msg_vk_parachute_status_get_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  10);
+}
+
+/**
+ * @brief Get field auto_launch from vk_parachute_status message
+ *
+ * @return   is auto launch enabled
+ */
+static inline uint8_t mavlink_msg_vk_parachute_status_get_auto_launch(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  11);
+}
+
+/**
+ * @brief Get field uav_cmd from vk_parachute_status message
+ *
+ * @return   uav command from parachute
+ */
+static inline uint8_t mavlink_msg_vk_parachute_status_get_uav_cmd(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  12);
+}
+
+/**
+ * @brief Get field err_code from vk_parachute_status message
+ *
+ * @return  parachute error code 
+ */
+static inline uint16_t mavlink_msg_vk_parachute_status_get_err_code(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  8);
+}
+
+/**
+ * @brief Get field backvolt from vk_parachute_status message
+ *
+ * @return  parachute backup voltage
+ */
+static inline float mavlink_msg_vk_parachute_status_get_backvolt(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_float(msg,  4);
+}
+
+/**
+ * @brief Decode a vk_parachute_status message into a struct
+ *
+ * @param msg The message to decode
+ * @param vk_parachute_status C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vk_parachute_status_decode(const mavlink_message_t* msg, mavlink_vk_parachute_status_t* vk_parachute_status)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vk_parachute_status->timestamp = mavlink_msg_vk_parachute_status_get_timestamp(msg);
+    vk_parachute_status->backvolt = mavlink_msg_vk_parachute_status_get_backvolt(msg);
+    vk_parachute_status->err_code = mavlink_msg_vk_parachute_status_get_err_code(msg);
+    vk_parachute_status->state = mavlink_msg_vk_parachute_status_get_state(msg);
+    vk_parachute_status->auto_launch = mavlink_msg_vk_parachute_status_get_auto_launch(msg);
+    vk_parachute_status->uav_cmd = mavlink_msg_vk_parachute_status_get_uav_cmd(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN? msg->len : MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN;
+        memset(vk_parachute_status, 0, MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_LEN);
+    memcpy(vk_parachute_status, _MAV_PAYLOAD(msg), len);
+#endif
+}

+ 372 - 0
v2.0/VKFly/mavlink_msg_vk_weigher_state.h

@@ -0,0 +1,372 @@
+#pragma once
+// MESSAGE VK_WEIGHER_STATE PACKING
+
+#define MAVLINK_MSG_ID_VK_WEIGHER_STATE 53021
+
+
+typedef struct __mavlink_vk_weigher_state_t {
+ uint32_t timestamp; /*< [ms] timestamp from system boot*/
+ uint32_t weight; /*< [g] weight in gram*/
+ uint16_t weight_d; /*<  weight variant rate*/
+ uint8_t work_state; /*<  */
+ uint8_t err_code; /*<  */
+} mavlink_vk_weigher_state_t;
+
+#define MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN 12
+#define MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN 12
+#define MAVLINK_MSG_ID_53021_LEN 12
+#define MAVLINK_MSG_ID_53021_MIN_LEN 12
+
+#define MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC 89
+#define MAVLINK_MSG_ID_53021_CRC 89
+
+
+
+#if MAVLINK_COMMAND_24BIT
+#define MAVLINK_MESSAGE_INFO_VK_WEIGHER_STATE { \
+    53021, \
+    "VK_WEIGHER_STATE", \
+    5, \
+    {  { "timestamp", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_weigher_state_t, timestamp) }, \
+         { "weight", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_vk_weigher_state_t, weight) }, \
+         { "weight_d", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_vk_weigher_state_t, weight_d) }, \
+         { "work_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_vk_weigher_state_t, work_state) }, \
+         { "err_code", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_vk_weigher_state_t, err_code) }, \
+         } \
+}
+#else
+#define MAVLINK_MESSAGE_INFO_VK_WEIGHER_STATE { \
+    "VK_WEIGHER_STATE", \
+    5, \
+    {  { "timestamp", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_vk_weigher_state_t, timestamp) }, \
+         { "weight", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_vk_weigher_state_t, weight) }, \
+         { "weight_d", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_vk_weigher_state_t, weight_d) }, \
+         { "work_state", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_vk_weigher_state_t, work_state) }, \
+         { "err_code", NULL, MAVLINK_TYPE_UINT8_T, 0, 11, offsetof(mavlink_vk_weigher_state_t, err_code) }, \
+         } \
+}
+#endif
+
+/**
+ * @brief Pack a vk_weigher_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 timestamp [ms] timestamp from system boot
+ * @param weight [g] weight in gram
+ * @param weight_d  weight variant rate
+ * @param work_state  
+ * @param err_code  
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_weigher_state_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
+                               uint32_t timestamp, uint32_t weight, uint16_t weight_d, uint8_t work_state, uint8_t err_code)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_uint32_t(buf, 4, weight);
+    _mav_put_uint16_t(buf, 8, weight_d);
+    _mav_put_uint8_t(buf, 10, work_state);
+    _mav_put_uint8_t(buf, 11, err_code);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN);
+#else
+    mavlink_vk_weigher_state_t packet;
+    packet.timestamp = timestamp;
+    packet.weight = weight;
+    packet.weight_d = weight_d;
+    packet.work_state = work_state;
+    packet.err_code = err_code;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_WEIGHER_STATE;
+    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC);
+}
+
+/**
+ * @brief Pack a vk_weigher_state 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 timestamp [ms] timestamp from system boot
+ * @param weight [g] weight in gram
+ * @param weight_d  weight variant rate
+ * @param work_state  
+ * @param err_code  
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_weigher_state_pack_status(uint8_t system_id, uint8_t component_id, mavlink_status_t *_status, mavlink_message_t* msg,
+                               uint32_t timestamp, uint32_t weight, uint16_t weight_d, uint8_t work_state, uint8_t err_code)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_uint32_t(buf, 4, weight);
+    _mav_put_uint16_t(buf, 8, weight_d);
+    _mav_put_uint8_t(buf, 10, work_state);
+    _mav_put_uint8_t(buf, 11, err_code);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN);
+#else
+    mavlink_vk_weigher_state_t packet;
+    packet.timestamp = timestamp;
+    packet.weight = weight;
+    packet.weight_d = weight_d;
+    packet.work_state = work_state;
+    packet.err_code = err_code;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_WEIGHER_STATE;
+#if MAVLINK_CRC_EXTRA
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC);
+#else
+    return mavlink_finalize_message_buffer(msg, system_id, component_id, _status, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN);
+#endif
+}
+
+/**
+ * @brief Pack a vk_weigher_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 timestamp [ms] timestamp from system boot
+ * @param weight [g] weight in gram
+ * @param weight_d  weight variant rate
+ * @param work_state  
+ * @param err_code  
+ * @return length of the message in bytes (excluding serial stream start sign)
+ */
+static inline uint16_t mavlink_msg_vk_weigher_state_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
+                               mavlink_message_t* msg,
+                                   uint32_t timestamp,uint32_t weight,uint16_t weight_d,uint8_t work_state,uint8_t err_code)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_uint32_t(buf, 4, weight);
+    _mav_put_uint16_t(buf, 8, weight_d);
+    _mav_put_uint8_t(buf, 10, work_state);
+    _mav_put_uint8_t(buf, 11, err_code);
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN);
+#else
+    mavlink_vk_weigher_state_t packet;
+    packet.timestamp = timestamp;
+    packet.weight = weight;
+    packet.weight_d = weight_d;
+    packet.work_state = work_state;
+    packet.err_code = err_code;
+
+        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN);
+#endif
+
+    msg->msgid = MAVLINK_MSG_ID_VK_WEIGHER_STATE;
+    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC);
+}
+
+/**
+ * @brief Encode a vk_weigher_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 vk_weigher_state C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_weigher_state_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_vk_weigher_state_t* vk_weigher_state)
+{
+    return mavlink_msg_vk_weigher_state_pack(system_id, component_id, msg, vk_weigher_state->timestamp, vk_weigher_state->weight, vk_weigher_state->weight_d, vk_weigher_state->work_state, vk_weigher_state->err_code);
+}
+
+/**
+ * @brief Encode a vk_weigher_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 vk_weigher_state C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_weigher_state_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_vk_weigher_state_t* vk_weigher_state)
+{
+    return mavlink_msg_vk_weigher_state_pack_chan(system_id, component_id, chan, msg, vk_weigher_state->timestamp, vk_weigher_state->weight, vk_weigher_state->weight_d, vk_weigher_state->work_state, vk_weigher_state->err_code);
+}
+
+/**
+ * @brief Encode a vk_weigher_state 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_weigher_state C-struct to read the message contents from
+ */
+static inline uint16_t mavlink_msg_vk_weigher_state_encode_status(uint8_t system_id, uint8_t component_id, mavlink_status_t* _status, mavlink_message_t* msg, const mavlink_vk_weigher_state_t* vk_weigher_state)
+{
+    return mavlink_msg_vk_weigher_state_pack_status(system_id, component_id, _status, msg,  vk_weigher_state->timestamp, vk_weigher_state->weight, vk_weigher_state->weight_d, vk_weigher_state->work_state, vk_weigher_state->err_code);
+}
+
+/**
+ * @brief Send a vk_weigher_state message
+ * @param chan MAVLink channel to send the message
+ *
+ * @param timestamp [ms] timestamp from system boot
+ * @param weight [g] weight in gram
+ * @param weight_d  weight variant rate
+ * @param work_state  
+ * @param err_code  
+ */
+#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
+
+static inline void mavlink_msg_vk_weigher_state_send(mavlink_channel_t chan, uint32_t timestamp, uint32_t weight, uint16_t weight_d, uint8_t work_state, uint8_t err_code)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char buf[MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN];
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_uint32_t(buf, 4, weight);
+    _mav_put_uint16_t(buf, 8, weight_d);
+    _mav_put_uint8_t(buf, 10, work_state);
+    _mav_put_uint8_t(buf, 11, err_code);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_WEIGHER_STATE, buf, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC);
+#else
+    mavlink_vk_weigher_state_t packet;
+    packet.timestamp = timestamp;
+    packet.weight = weight;
+    packet.weight_d = weight_d;
+    packet.work_state = work_state;
+    packet.err_code = err_code;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_WEIGHER_STATE, (const char *)&packet, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC);
+#endif
+}
+
+/**
+ * @brief Send a vk_weigher_state message
+ * @param chan MAVLink channel to send the message
+ * @param struct The MAVLink struct to serialize
+ */
+static inline void mavlink_msg_vk_weigher_state_send_struct(mavlink_channel_t chan, const mavlink_vk_weigher_state_t* vk_weigher_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    mavlink_msg_vk_weigher_state_send(chan, vk_weigher_state->timestamp, vk_weigher_state->weight, vk_weigher_state->weight_d, vk_weigher_state->work_state, vk_weigher_state->err_code);
+#else
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_WEIGHER_STATE, (const char *)vk_weigher_state, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC);
+#endif
+}
+
+#if MAVLINK_MSG_ID_VK_WEIGHER_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_vk_weigher_state_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint32_t timestamp, uint32_t weight, uint16_t weight_d, uint8_t work_state, uint8_t err_code)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    char *buf = (char *)msgbuf;
+    _mav_put_uint32_t(buf, 0, timestamp);
+    _mav_put_uint32_t(buf, 4, weight);
+    _mav_put_uint16_t(buf, 8, weight_d);
+    _mav_put_uint8_t(buf, 10, work_state);
+    _mav_put_uint8_t(buf, 11, err_code);
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_WEIGHER_STATE, buf, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC);
+#else
+    mavlink_vk_weigher_state_t *packet = (mavlink_vk_weigher_state_t *)msgbuf;
+    packet->timestamp = timestamp;
+    packet->weight = weight;
+    packet->weight_d = weight_d;
+    packet->work_state = work_state;
+    packet->err_code = err_code;
+
+    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_VK_WEIGHER_STATE, (const char *)packet, MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN, MAVLINK_MSG_ID_VK_WEIGHER_STATE_CRC);
+#endif
+}
+#endif
+
+#endif
+
+// MESSAGE VK_WEIGHER_STATE UNPACKING
+
+
+/**
+ * @brief Get field timestamp from vk_weigher_state message
+ *
+ * @return [ms] timestamp from system boot
+ */
+static inline uint32_t mavlink_msg_vk_weigher_state_get_timestamp(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  0);
+}
+
+/**
+ * @brief Get field weight from vk_weigher_state message
+ *
+ * @return [g] weight in gram
+ */
+static inline uint32_t mavlink_msg_vk_weigher_state_get_weight(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint32_t(msg,  4);
+}
+
+/**
+ * @brief Get field weight_d from vk_weigher_state message
+ *
+ * @return  weight variant rate
+ */
+static inline uint16_t mavlink_msg_vk_weigher_state_get_weight_d(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint16_t(msg,  8);
+}
+
+/**
+ * @brief Get field work_state from vk_weigher_state message
+ *
+ * @return  
+ */
+static inline uint8_t mavlink_msg_vk_weigher_state_get_work_state(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  10);
+}
+
+/**
+ * @brief Get field err_code from vk_weigher_state message
+ *
+ * @return  
+ */
+static inline uint8_t mavlink_msg_vk_weigher_state_get_err_code(const mavlink_message_t* msg)
+{
+    return _MAV_RETURN_uint8_t(msg,  11);
+}
+
+/**
+ * @brief Decode a vk_weigher_state message into a struct
+ *
+ * @param msg The message to decode
+ * @param vk_weigher_state C-struct to decode the message contents into
+ */
+static inline void mavlink_msg_vk_weigher_state_decode(const mavlink_message_t* msg, mavlink_vk_weigher_state_t* vk_weigher_state)
+{
+#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
+    vk_weigher_state->timestamp = mavlink_msg_vk_weigher_state_get_timestamp(msg);
+    vk_weigher_state->weight = mavlink_msg_vk_weigher_state_get_weight(msg);
+    vk_weigher_state->weight_d = mavlink_msg_vk_weigher_state_get_weight_d(msg);
+    vk_weigher_state->work_state = mavlink_msg_vk_weigher_state_get_work_state(msg);
+    vk_weigher_state->err_code = mavlink_msg_vk_weigher_state_get_err_code(msg);
+#else
+        uint8_t len = msg->len < MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN? msg->len : MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN;
+        memset(vk_weigher_state, 0, MAVLINK_MSG_ID_VK_WEIGHER_STATE_LEN);
+    memcpy(vk_weigher_state, _MAV_PAYLOAD(msg), len);
+#endif
+}

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

@@ -591,6 +591,133 @@ static void mavlink_test_vk_mosaich_gps_raw(uint8_t system_id, uint8_t component
 #endif
 }
 
+static void mavlink_test_vk_parachute_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_VK_PARACHUTE_STATUS >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vk_parachute_status_t packet_in = {
+        963497464,45.0,17651,163,230,41
+    };
+    mavlink_vk_parachute_status_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.timestamp = packet_in.timestamp;
+        packet1.backvolt = packet_in.backvolt;
+        packet1.err_code = packet_in.err_code;
+        packet1.state = packet_in.state;
+        packet1.auto_launch = packet_in.auto_launch;
+        packet1.uav_cmd = packet_in.uav_cmd;
+        
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VK_PARACHUTE_STATUS_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_parachute_status_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vk_parachute_status_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_parachute_status_pack(system_id, component_id, &msg , packet1.timestamp , packet1.state , packet1.auto_launch , packet1.uav_cmd , packet1.err_code , packet1.backvolt );
+    mavlink_msg_vk_parachute_status_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_parachute_status_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.timestamp , packet1.state , packet1.auto_launch , packet1.uav_cmd , packet1.err_code , packet1.backvolt );
+    mavlink_msg_vk_parachute_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_vk_parachute_status_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_parachute_status_send(MAVLINK_COMM_1 , packet1.timestamp , packet1.state , packet1.auto_launch , packet1.uav_cmd , packet1.err_code , packet1.backvolt );
+    mavlink_msg_vk_parachute_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("VK_PARACHUTE_STATUS") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VK_PARACHUTE_STATUS) != NULL);
+#endif
+}
+
+static void mavlink_test_vk_weigher_state(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_WEIGHER_STATE >= 256) {
+            return;
+        }
+#endif
+    mavlink_message_t msg;
+        uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
+        uint16_t i;
+    mavlink_vk_weigher_state_t packet_in = {
+        963497464,963497672,17651,163,230
+    };
+    mavlink_vk_weigher_state_t packet1, packet2;
+        memset(&packet1, 0, sizeof(packet1));
+        packet1.timestamp = packet_in.timestamp;
+        packet1.weight = packet_in.weight;
+        packet1.weight_d = packet_in.weight_d;
+        packet1.work_state = packet_in.work_state;
+        packet1.err_code = packet_in.err_code;
+        
+        
+#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1
+        if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) {
+           // cope with extensions
+           memset(MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_VK_WEIGHER_STATE_MIN_LEN);
+        }
+#endif
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_weigher_state_encode(system_id, component_id, &msg, &packet1);
+    mavlink_msg_vk_weigher_state_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_weigher_state_pack(system_id, component_id, &msg , packet1.timestamp , packet1.weight , packet1.weight_d , packet1.work_state , packet1.err_code );
+    mavlink_msg_vk_weigher_state_decode(&msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_weigher_state_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.timestamp , packet1.weight , packet1.weight_d , packet1.work_state , packet1.err_code );
+    mavlink_msg_vk_weigher_state_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_weigher_state_decode(last_msg, &packet2);
+        MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0);
+        
+        memset(&packet2, 0, sizeof(packet2));
+    mavlink_msg_vk_weigher_state_send(MAVLINK_COMM_1 , packet1.timestamp , packet1.weight , packet1.weight_d , packet1.work_state , packet1.err_code );
+    mavlink_msg_vk_weigher_state_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_WEIGHER_STATE") != NULL);
+    MAVLINK_ASSERT(mavlink_get_message_info_by_id(MAVLINK_MSG_ID_VK_WEIGHER_STATE) != NULL);
+#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
@@ -973,6 +1100,8 @@ static void mavlink_test_VKFly(uint8_t system_id, uint8_t component_id, mavlink_
     mavlink_test_vk_engine_ecu_staus(system_id, component_id, last_msg);
     mavlink_test_vk_comp_version(system_id, component_id, last_msg);
     mavlink_test_vk_mosaich_gps_raw(system_id, component_id, last_msg);
+    mavlink_test_vk_parachute_status(system_id, component_id, last_msg);
+    mavlink_test_vk_weigher_state(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);

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

@@ -7,7 +7,7 @@
 #ifndef MAVLINK_VERSION_H
 #define MAVLINK_VERSION_H
 
-#define MAVLINK_BUILD_DATE "Tue Oct 22 2024"
+#define MAVLINK_BUILD_DATE "Thu Nov 21 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 2427719436761419026
+#define MAVLINK_COMMON_XML_HASH 1239892170518097068
 
 #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 2427719436761419026
+#define MAVLINK_PRIMARY_XML_HASH 1239892170518097068
 
 #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 Oct 22 2024"
+#define MAVLINK_BUILD_DATE "Thu Nov 21 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 1564798260152367589
+#define MAVLINK_PRIMARY_XML_HASH 8704855588041561803
 
 #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 1564798260152367589
+#define MAVLINK_MINIMAL_XML_HASH 8704855588041561803
 
 #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 Oct 22 2024"
+#define MAVLINK_BUILD_DATE "Thu Nov 21 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 4794152705503848696
+#define MAVLINK_PRIMARY_XML_HASH -6314738245746489701
 
 #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 4794152705503848696
+#define MAVLINK_STANDARD_XML_HASH -6314738245746489701
 
 #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 Oct 22 2024"
+#define MAVLINK_BUILD_DATE "Thu Nov 21 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