Browse Source

use cantools create a07.cpp code. and add some logic to g29zlgchassistest.

yuchuli 4 days ago
parent
commit
dca4ac92fe

+ 2514 - 0
src/tool/g29zlgchassistest/a07.c

@@ -0,0 +1,2514 @@
+/**
+ * @file a07.c
+ *
+ * @brief This source file was generated by cantools version 40.2.3 Tue Jun 24 16:11:53 2025.
+ *
+ * @copyright Copyright (c) 2018-2019 Erik Moqvist
+ *
+ * @par License
+ * The MIT License (MIT)
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <string.h>
+
+#include "a07.h"
+
+static inline uint8_t pack_left_shift_u8(
+    uint8_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint8_t)((uint8_t)(value << shift) & mask);
+}
+
+static inline uint8_t pack_left_shift_u16(
+    uint16_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint8_t)((uint8_t)(value << shift) & mask);
+}
+
+static inline uint8_t pack_left_shift_u32(
+    uint32_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint8_t)((uint8_t)(value << shift) & mask);
+}
+
+static inline uint8_t pack_right_shift_u8(
+    uint8_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint8_t)((uint8_t)(value >> shift) & mask);
+}
+
+static inline uint8_t pack_right_shift_u16(
+    uint16_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint8_t)((uint8_t)(value >> shift) & mask);
+}
+
+static inline uint8_t pack_right_shift_u32(
+    uint32_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint8_t)((uint8_t)(value >> shift) & mask);
+}
+
+static inline uint8_t unpack_left_shift_u8(
+    uint8_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint8_t)((uint8_t)(value & mask) << shift);
+}
+
+static inline uint16_t unpack_left_shift_u16(
+    uint8_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint16_t)((uint16_t)(value & mask) << shift);
+}
+
+static inline uint32_t unpack_left_shift_u32(
+    uint8_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint32_t)((uint32_t)(value & mask) << shift);
+}
+
+static inline uint8_t unpack_right_shift_u8(
+    uint8_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint8_t)((uint8_t)(value & mask) >> shift);
+}
+
+static inline uint16_t unpack_right_shift_u16(
+    uint8_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint16_t)((uint16_t)(value & mask) >> shift);
+}
+
+static inline uint32_t unpack_right_shift_u32(
+    uint8_t value,
+    uint8_t shift,
+    uint8_t mask)
+{
+    return (uint32_t)((uint32_t)(value & mask) >> shift);
+}
+
+int a07_ecu_1_b2_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_1_b2_t *src_p,
+    size_t size)
+{
+    if (size < 32u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 32);
+
+    dst_p[0] |= pack_right_shift_u16(src_p->acc_motor_torque_max_limit_request, 3u, 0xffu);
+    dst_p[1] |= pack_left_shift_u16(src_p->acc_motor_torque_max_limit_request, 5u, 0xe0u);
+    dst_p[1] |= pack_right_shift_u16(src_p->acc_motor_torque_min_limit_request, 6u, 0x1fu);
+    dst_p[2] |= pack_left_shift_u16(src_p->acc_motor_torque_min_limit_request, 2u, 0xfcu);
+    dst_p[2] |= pack_right_shift_u16(src_p->acc_lat_ang_req, 12u, 0x03u);
+    dst_p[3] |= pack_right_shift_u16(src_p->acc_lat_ang_req, 4u, 0xffu);
+    dst_p[4] |= pack_left_shift_u16(src_p->acc_lat_ang_req, 4u, 0xf0u);
+    dst_p[4] |= pack_left_shift_u8(src_p->acc_lat_ang_req_active, 3u, 0x08u);
+
+    return (32);
+}
+
+int a07_ecu_1_b2_unpack(
+    struct a07_ecu_1_b2_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 32u) {
+        return (-EINVAL);
+    }
+
+    dst_p->acc_motor_torque_max_limit_request = unpack_left_shift_u16(src_p[0], 3u, 0xffu);
+    dst_p->acc_motor_torque_max_limit_request |= unpack_right_shift_u16(src_p[1], 5u, 0xe0u);
+    dst_p->acc_motor_torque_min_limit_request = unpack_left_shift_u16(src_p[1], 6u, 0x1fu);
+    dst_p->acc_motor_torque_min_limit_request |= unpack_right_shift_u16(src_p[2], 2u, 0xfcu);
+    dst_p->acc_lat_ang_req = unpack_left_shift_u16(src_p[2], 12u, 0x03u);
+    dst_p->acc_lat_ang_req |= unpack_left_shift_u16(src_p[3], 4u, 0xffu);
+    dst_p->acc_lat_ang_req |= unpack_right_shift_u16(src_p[4], 4u, 0xf0u);
+    dst_p->acc_lat_ang_req_active = unpack_right_shift_u8(src_p[4], 3u, 0x08u);
+
+    return (0);
+}
+
+int a07_ecu_1_b2_init(struct a07_ecu_1_b2_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_ecu_1_b2_t));
+
+    return 0;
+}
+
+uint16_t a07_ecu_1_b2_acc_motor_torque_max_limit_request_encode(double value)
+{
+    return (uint16_t)((value - -20.48) / 0.02);
+}
+
+double a07_ecu_1_b2_acc_motor_torque_max_limit_request_decode(uint16_t value)
+{
+    return (((double)value * 0.02) + -20.48);
+}
+
+bool a07_ecu_1_b2_acc_motor_torque_max_limit_request_is_in_range(uint16_t value)
+{
+    return (value <= 2046u);
+}
+
+uint16_t a07_ecu_1_b2_acc_motor_torque_min_limit_request_encode(double value)
+{
+    return (uint16_t)((value - -20.48) / 0.02);
+}
+
+double a07_ecu_1_b2_acc_motor_torque_min_limit_request_decode(uint16_t value)
+{
+    return (((double)value * 0.02) + -20.48);
+}
+
+bool a07_ecu_1_b2_acc_motor_torque_min_limit_request_is_in_range(uint16_t value)
+{
+    return (value <= 2046u);
+}
+
+uint16_t a07_ecu_1_b2_acc_lat_ang_req_encode(double value)
+{
+    return (uint16_t)((value - -720.0) / 0.1);
+}
+
+double a07_ecu_1_b2_acc_lat_ang_req_decode(uint16_t value)
+{
+    return (((double)value * 0.1) + -720.0);
+}
+
+bool a07_ecu_1_b2_acc_lat_ang_req_is_in_range(uint16_t value)
+{
+    return (value <= 14400u);
+}
+
+uint8_t a07_ecu_1_b2_acc_lat_ang_req_active_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_1_b2_acc_lat_ang_req_active_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_1_b2_acc_lat_ang_req_active_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+int a07_ecu_23_f_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_23_f_t *src_p,
+    size_t size)
+{
+    uint16_t apa_steering_angle_req;
+
+    if (size < 32u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 32);
+
+    dst_p[0] |= pack_left_shift_u8(src_p->apa_error_status, 2u, 0x04u);
+    dst_p[0] |= pack_left_shift_u8(src_p->apa_steering_angle_req_protection, 0u, 0x03u);
+    apa_steering_angle_req = (uint16_t)src_p->apa_steering_angle_req;
+    dst_p[1] |= pack_right_shift_u16(apa_steering_angle_req, 8u, 0xffu);
+    dst_p[2] |= pack_left_shift_u16(apa_steering_angle_req, 0u, 0xffu);
+
+    return (32);
+}
+
+int a07_ecu_23_f_unpack(
+    struct a07_ecu_23_f_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    uint16_t apa_steering_angle_req;
+
+    if (size < 32u) {
+        return (-EINVAL);
+    }
+
+    dst_p->apa_error_status = unpack_right_shift_u8(src_p[0], 2u, 0x04u);
+    dst_p->apa_steering_angle_req_protection = unpack_right_shift_u8(src_p[0], 0u, 0x03u);
+    apa_steering_angle_req = unpack_left_shift_u16(src_p[1], 8u, 0xffu);
+    apa_steering_angle_req |= unpack_right_shift_u16(src_p[2], 0u, 0xffu);
+    dst_p->apa_steering_angle_req = (int16_t)apa_steering_angle_req;
+
+    return (0);
+}
+
+int a07_ecu_23_f_init(struct a07_ecu_23_f_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_ecu_23_f_t));
+    msg_p->apa_steering_angle_req = 32767;
+
+    return 0;
+}
+
+uint8_t a07_ecu_23_f_apa_error_status_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_f_apa_error_status_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_f_apa_error_status_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_23_f_apa_steering_angle_req_protection_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_f_apa_steering_angle_req_protection_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_f_apa_steering_angle_req_protection_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+int16_t a07_ecu_23_f_apa_steering_angle_req_encode(double value)
+{
+    return (int16_t)(value / 0.1);
+}
+
+double a07_ecu_23_f_apa_steering_angle_req_decode(int16_t value)
+{
+    return ((double)value * 0.1);
+}
+
+bool a07_ecu_23_f_apa_steering_angle_req_is_in_range(int16_t value)
+{
+    return ((value >= -7800) && (value <= 7800));
+}
+
+int a07_ecu_23_c_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_23_c_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 64);
+
+    dst_p[0] |= pack_left_shift_u8(src_p->acc_acc_target_acceleration, 0u, 0xffu);
+    dst_p[4] |= pack_right_shift_u8(src_p->apa_function_on_off_sts, 3u, 0x03u);
+    dst_p[5] |= pack_left_shift_u8(src_p->apa_function_on_off_sts, 5u, 0xe0u);
+    dst_p[5] |= pack_left_shift_u8(src_p->acc_cdd_active, 4u, 0x10u);
+    dst_p[6] |= pack_left_shift_u8(src_p->acc_driveoff_request, 7u, 0x80u);
+    dst_p[6] |= pack_left_shift_u8(src_p->acc_acc_mode, 4u, 0x70u);
+    dst_p[13] |= pack_left_shift_u8(src_p->acc_acc_trq_req_active, 2u, 0x04u);
+    dst_p[16] |= pack_right_shift_u16(src_p->acc_acc_trq_req, 6u, 0xffu);
+    dst_p[17] |= pack_left_shift_u16(src_p->acc_acc_trq_req, 2u, 0xfcu);
+    dst_p[20] |= pack_left_shift_u8(src_p->adc_work_mode, 6u, 0xc0u);
+    dst_p[24] |= pack_right_shift_u8(src_p->apa_ep_brequest, 1u, 0x01u);
+    dst_p[25] |= pack_left_shift_u8(src_p->apa_ep_brequest, 7u, 0x80u);
+    dst_p[25] |= pack_left_shift_u8(src_p->apa_ep_brequest_valid, 6u, 0x40u);
+    dst_p[25] |= pack_left_shift_u8(src_p->apa_esp_brake_function_mode, 2u, 0x1cu);
+    dst_p[31] |= pack_left_shift_u8(src_p->apa_target_acceleration_valid, 0u, 0x01u);
+    dst_p[33] |= pack_left_shift_u8(src_p->apa_trans_prnd_shift_enable, 5u, 0x20u);
+    dst_p[33] |= pack_left_shift_u8(src_p->apa_trans_prnd_shift_request, 2u, 0x1cu);
+    dst_p[33] |= pack_left_shift_u8(src_p->apa_trans_prnd_shift_req_valid, 1u, 0x02u);
+    dst_p[33] |= pack_left_shift_u8(src_p->apa_vcu_ready_req, 0u, 0x01u);
+
+    return (64);
+}
+
+int a07_ecu_23_c_unpack(
+    struct a07_ecu_23_c_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    dst_p->acc_acc_target_acceleration = unpack_right_shift_u8(src_p[0], 0u, 0xffu);
+    dst_p->apa_function_on_off_sts = unpack_left_shift_u8(src_p[4], 3u, 0x03u);
+    dst_p->apa_function_on_off_sts |= unpack_right_shift_u8(src_p[5], 5u, 0xe0u);
+    dst_p->acc_cdd_active = unpack_right_shift_u8(src_p[5], 4u, 0x10u);
+    dst_p->acc_driveoff_request = unpack_right_shift_u8(src_p[6], 7u, 0x80u);
+    dst_p->acc_acc_mode = unpack_right_shift_u8(src_p[6], 4u, 0x70u);
+    dst_p->acc_acc_trq_req_active = unpack_right_shift_u8(src_p[13], 2u, 0x04u);
+    dst_p->acc_acc_trq_req = unpack_left_shift_u16(src_p[16], 6u, 0xffu);
+    dst_p->acc_acc_trq_req |= unpack_right_shift_u16(src_p[17], 2u, 0xfcu);
+    dst_p->adc_work_mode = unpack_right_shift_u8(src_p[20], 6u, 0xc0u);
+    dst_p->apa_ep_brequest = unpack_left_shift_u8(src_p[24], 1u, 0x01u);
+    dst_p->apa_ep_brequest |= unpack_right_shift_u8(src_p[25], 7u, 0x80u);
+    dst_p->apa_ep_brequest_valid = unpack_right_shift_u8(src_p[25], 6u, 0x40u);
+    dst_p->apa_esp_brake_function_mode = unpack_right_shift_u8(src_p[25], 2u, 0x1cu);
+    dst_p->apa_target_acceleration_valid = unpack_right_shift_u8(src_p[31], 0u, 0x01u);
+    dst_p->apa_trans_prnd_shift_enable = unpack_right_shift_u8(src_p[33], 5u, 0x20u);
+    dst_p->apa_trans_prnd_shift_request = unpack_right_shift_u8(src_p[33], 2u, 0x1cu);
+    dst_p->apa_trans_prnd_shift_req_valid = unpack_right_shift_u8(src_p[33], 1u, 0x02u);
+    dst_p->apa_vcu_ready_req = unpack_right_shift_u8(src_p[33], 0u, 0x01u);
+
+    return (0);
+}
+
+int a07_ecu_23_c_init(struct a07_ecu_23_c_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_ecu_23_c_t));
+    msg_p->acc_acc_trq_req = 0;
+
+    return 0;
+}
+
+uint8_t a07_ecu_23_c_acc_acc_target_acceleration_encode(double value)
+{
+    return (uint8_t)((value - -5.0) / 0.05);
+}
+
+double a07_ecu_23_c_acc_acc_target_acceleration_decode(uint8_t value)
+{
+    return (((double)value * 0.05) + -5.0);
+}
+
+bool a07_ecu_23_c_acc_acc_target_acceleration_is_in_range(uint8_t value)
+{
+    (void)value;
+
+    return (true);
+}
+
+uint8_t a07_ecu_23_c_apa_function_on_off_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_function_on_off_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_function_on_off_sts_is_in_range(uint8_t value)
+{
+    return (value <= 31u);
+}
+
+uint8_t a07_ecu_23_c_acc_cdd_active_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_acc_cdd_active_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_acc_cdd_active_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_23_c_acc_driveoff_request_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_acc_driveoff_request_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_acc_driveoff_request_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_23_c_acc_acc_mode_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_acc_acc_mode_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_acc_acc_mode_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+uint8_t a07_ecu_23_c_acc_acc_trq_req_active_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_acc_acc_trq_req_active_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_acc_acc_trq_req_active_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint16_t a07_ecu_23_c_acc_acc_trq_req_encode(double value)
+{
+    return (uint16_t)((value - -5000.0) / 5.0);
+}
+
+double a07_ecu_23_c_acc_acc_trq_req_decode(uint16_t value)
+{
+    return (((double)value * 5.0) + -5000.0);
+}
+
+bool a07_ecu_23_c_acc_acc_trq_req_is_in_range(uint16_t value)
+{
+    return (value <= 2000u);
+}
+
+uint8_t a07_ecu_23_c_adc_work_mode_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_adc_work_mode_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_adc_work_mode_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_ecu_23_c_apa_ep_brequest_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_ep_brequest_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_ep_brequest_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_ecu_23_c_apa_ep_brequest_valid_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_ep_brequest_valid_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_ep_brequest_valid_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_23_c_apa_esp_brake_function_mode_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_esp_brake_function_mode_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_esp_brake_function_mode_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+uint8_t a07_ecu_23_c_apa_target_acceleration_valid_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_target_acceleration_valid_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_target_acceleration_valid_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_23_c_apa_trans_prnd_shift_enable_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_trans_prnd_shift_enable_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_trans_prnd_shift_enable_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_23_c_apa_trans_prnd_shift_request_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_trans_prnd_shift_request_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_trans_prnd_shift_request_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+uint8_t a07_ecu_23_c_apa_trans_prnd_shift_req_valid_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_trans_prnd_shift_req_valid_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_trans_prnd_shift_req_valid_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_23_c_apa_vcu_ready_req_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_23_c_apa_vcu_ready_req_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_23_c_apa_vcu_ready_req_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+int a07_ecu_30_a_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_30_a_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 64);
+
+    dst_p[19] |= pack_left_shift_u8(src_p->ads_udlc_turn_light_req, 0u, 0x07u);
+
+    return (64);
+}
+
+int a07_ecu_30_a_unpack(
+    struct a07_ecu_30_a_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    dst_p->ads_udlc_turn_light_req = unpack_right_shift_u8(src_p[19], 0u, 0x07u);
+
+    return (0);
+}
+
+int a07_ecu_30_a_init(struct a07_ecu_30_a_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_ecu_30_a_t));
+
+    return 0;
+}
+
+uint8_t a07_ecu_30_a_ads_udlc_turn_light_req_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_30_a_ads_udlc_turn_light_req_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_30_a_ads_udlc_turn_light_req_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+int a07_ecu_2_bf_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_2_bf_t *src_p,
+    size_t size)
+{
+    if (size < 32u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 32);
+
+    dst_p[17] |= pack_left_shift_u8(src_p->apa_bcm_horn_command, 0u, 0x03u);
+
+    return (32);
+}
+
+int a07_ecu_2_bf_unpack(
+    struct a07_ecu_2_bf_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 32u) {
+        return (-EINVAL);
+    }
+
+    dst_p->apa_bcm_horn_command = unpack_right_shift_u8(src_p[17], 0u, 0x03u);
+
+    return (0);
+}
+
+int a07_ecu_2_bf_init(struct a07_ecu_2_bf_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_ecu_2_bf_t));
+
+    return 0;
+}
+
+uint8_t a07_ecu_2_bf_apa_bcm_horn_command_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_bf_apa_bcm_horn_command_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_bf_apa_bcm_horn_command_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+int a07_ecu_2_ca_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_2_ca_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 64);
+
+    dst_p[1] |= pack_left_shift_u8(src_p->cdc_auto_head_li_set, 5u, 0xe0u);
+    dst_p[1] |= pack_left_shift_u8(src_p->cdc_drvr_sld_fwd_st, 4u, 0x10u);
+    dst_p[1] |= pack_left_shift_u8(src_p->cdc_drvr_sld_backw_st, 3u, 0x08u);
+    dst_p[1] |= pack_left_shift_u8(src_p->cdc_drvr_re_upwd_st, 2u, 0x04u);
+    dst_p[1] |= pack_left_shift_u8(src_p->cdc_drvr_re_dwnwd_st, 1u, 0x02u);
+    dst_p[2] |= pack_left_shift_u8(src_p->cdc_drvr_back_fwd_st, 6u, 0x40u);
+    dst_p[2] |= pack_left_shift_u8(src_p->cdc_drvr_back_back_st, 5u, 0x20u);
+    dst_p[9] |= pack_left_shift_u8(src_p->cdc_re_mirr_fold_req, 1u, 0x06u);
+    dst_p[13] |= pack_left_shift_u8(src_p->cdc_central_ctr_right_rear_window, 0u, 0x0fu);
+    dst_p[14] |= pack_left_shift_u8(src_p->cdc_central_ctr_left_rear_window, 4u, 0xf0u);
+    dst_p[14] |= pack_left_shift_u8(src_p->cdc_central_ctr_passenger_window, 0u, 0x0fu);
+    dst_p[15] |= pack_left_shift_u8(src_p->cdc_central_ctr_driver_window, 4u, 0xf0u);
+    dst_p[17] |= pack_left_shift_u8(src_p->cdc_left_right_mirror_set_sts, 0u, 0x03u);
+    dst_p[32] |= pack_left_shift_u8(src_p->cdc_drvr_t_set, 2u, 0xfcu);
+    dst_p[38] |= pack_left_shift_u8(src_p->cdc_frnt_wind_lvl_set, 4u, 0xf0u);
+    dst_p[40] |= pack_left_shift_u8(src_p->cdc_front_ac_off_set, 6u, 0xc0u);
+
+    return (64);
+}
+
+int a07_ecu_2_ca_unpack(
+    struct a07_ecu_2_ca_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    dst_p->cdc_auto_head_li_set = unpack_right_shift_u8(src_p[1], 5u, 0xe0u);
+    dst_p->cdc_drvr_sld_fwd_st = unpack_right_shift_u8(src_p[1], 4u, 0x10u);
+    dst_p->cdc_drvr_sld_backw_st = unpack_right_shift_u8(src_p[1], 3u, 0x08u);
+    dst_p->cdc_drvr_re_upwd_st = unpack_right_shift_u8(src_p[1], 2u, 0x04u);
+    dst_p->cdc_drvr_re_dwnwd_st = unpack_right_shift_u8(src_p[1], 1u, 0x02u);
+    dst_p->cdc_drvr_back_fwd_st = unpack_right_shift_u8(src_p[2], 6u, 0x40u);
+    dst_p->cdc_drvr_back_back_st = unpack_right_shift_u8(src_p[2], 5u, 0x20u);
+    dst_p->cdc_re_mirr_fold_req = unpack_right_shift_u8(src_p[9], 1u, 0x06u);
+    dst_p->cdc_central_ctr_right_rear_window = unpack_right_shift_u8(src_p[13], 0u, 0x0fu);
+    dst_p->cdc_central_ctr_left_rear_window = unpack_right_shift_u8(src_p[14], 4u, 0xf0u);
+    dst_p->cdc_central_ctr_passenger_window = unpack_right_shift_u8(src_p[14], 0u, 0x0fu);
+    dst_p->cdc_central_ctr_driver_window = unpack_right_shift_u8(src_p[15], 4u, 0xf0u);
+    dst_p->cdc_left_right_mirror_set_sts = unpack_right_shift_u8(src_p[17], 0u, 0x03u);
+    dst_p->cdc_drvr_t_set = unpack_right_shift_u8(src_p[32], 2u, 0xfcu);
+    dst_p->cdc_frnt_wind_lvl_set = unpack_right_shift_u8(src_p[38], 4u, 0xf0u);
+    dst_p->cdc_front_ac_off_set = unpack_right_shift_u8(src_p[40], 6u, 0xc0u);
+
+    return (0);
+}
+
+int a07_ecu_2_ca_init(struct a07_ecu_2_ca_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_ecu_2_ca_t));
+    msg_p->cdc_drvr_t_set = 0;
+
+    return 0;
+}
+
+uint8_t a07_ecu_2_ca_cdc_auto_head_li_set_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_auto_head_li_set_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_auto_head_li_set_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_drvr_sld_fwd_st_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_drvr_sld_fwd_st_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_drvr_sld_fwd_st_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_drvr_sld_backw_st_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_drvr_sld_backw_st_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_drvr_sld_backw_st_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_drvr_re_upwd_st_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_drvr_re_upwd_st_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_drvr_re_upwd_st_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_drvr_re_dwnwd_st_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_drvr_re_dwnwd_st_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_drvr_re_dwnwd_st_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_drvr_back_fwd_st_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_drvr_back_fwd_st_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_drvr_back_fwd_st_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_drvr_back_back_st_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_drvr_back_back_st_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_drvr_back_back_st_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_re_mirr_fold_req_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_re_mirr_fold_req_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_re_mirr_fold_req_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_central_ctr_right_rear_window_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_central_ctr_right_rear_window_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_central_ctr_right_rear_window_is_in_range(uint8_t value)
+{
+    return (value <= 15u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_central_ctr_left_rear_window_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_central_ctr_left_rear_window_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_central_ctr_left_rear_window_is_in_range(uint8_t value)
+{
+    return (value <= 15u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_central_ctr_passenger_window_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_central_ctr_passenger_window_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_central_ctr_passenger_window_is_in_range(uint8_t value)
+{
+    return (value <= 15u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_central_ctr_driver_window_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_central_ctr_driver_window_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_central_ctr_driver_window_is_in_range(uint8_t value)
+{
+    return (value <= 15u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_left_right_mirror_set_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_left_right_mirror_set_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_left_right_mirror_set_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_drvr_t_set_encode(double value)
+{
+    return (uint8_t)((value - 17.0) / 0.5);
+}
+
+double a07_ecu_2_ca_cdc_drvr_t_set_decode(uint8_t value)
+{
+    return (((double)value * 0.5) + 17.0);
+}
+
+bool a07_ecu_2_ca_cdc_drvr_t_set_is_in_range(uint8_t value)
+{
+    return (value <= 63u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_frnt_wind_lvl_set_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_frnt_wind_lvl_set_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_frnt_wind_lvl_set_is_in_range(uint8_t value)
+{
+    return (value <= 15u);
+}
+
+uint8_t a07_ecu_2_ca_cdc_front_ac_off_set_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_2_ca_cdc_front_ac_off_set_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_2_ca_cdc_front_ac_off_set_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+int a07_ecu_372_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_372_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 8);
+
+    dst_p[0] |= pack_left_shift_u8(src_p->cdc_mirr_up_key_sts, 6u, 0xc0u);
+    dst_p[0] |= pack_left_shift_u8(src_p->cdc_mirr_down_key_sts, 4u, 0x30u);
+    dst_p[0] |= pack_left_shift_u8(src_p->cdc_mirr_ri_turn_key_sts, 1u, 0x06u);
+    dst_p[0] |= pack_right_shift_u8(src_p->cdc_mirr_le_turn_key_sts, 1u, 0x01u);
+    dst_p[1] |= pack_left_shift_u8(src_p->cdc_mirr_le_turn_key_sts, 7u, 0x80u);
+
+    return (8);
+}
+
+int a07_ecu_372_unpack(
+    struct a07_ecu_372_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    dst_p->cdc_mirr_up_key_sts = unpack_right_shift_u8(src_p[0], 6u, 0xc0u);
+    dst_p->cdc_mirr_down_key_sts = unpack_right_shift_u8(src_p[0], 4u, 0x30u);
+    dst_p->cdc_mirr_ri_turn_key_sts = unpack_right_shift_u8(src_p[0], 1u, 0x06u);
+    dst_p->cdc_mirr_le_turn_key_sts = unpack_left_shift_u8(src_p[0], 1u, 0x01u);
+    dst_p->cdc_mirr_le_turn_key_sts |= unpack_right_shift_u8(src_p[1], 7u, 0x80u);
+
+    return (0);
+}
+
+int a07_ecu_372_init(struct a07_ecu_372_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_ecu_372_t));
+
+    return 0;
+}
+
+uint8_t a07_ecu_372_cdc_mirr_up_key_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_372_cdc_mirr_up_key_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_372_cdc_mirr_up_key_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_ecu_372_cdc_mirr_down_key_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_372_cdc_mirr_down_key_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_372_cdc_mirr_down_key_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_ecu_372_cdc_mirr_ri_turn_key_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_372_cdc_mirr_ri_turn_key_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_372_cdc_mirr_ri_turn_key_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_ecu_372_cdc_mirr_le_turn_key_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_ecu_372_cdc_mirr_le_turn_key_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_ecu_372_cdc_mirr_le_turn_key_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+int a07_hgw_1_ca_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_1_ca_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 64);
+
+    dst_p[0] |= pack_left_shift_u8(src_p->whl_spd_ri_re_data_vld, 7u, 0x80u);
+    dst_p[0] |= pack_right_shift_u16(src_p->whl_spd_ri_re_data, 8u, 0x1fu);
+    dst_p[1] |= pack_left_shift_u16(src_p->whl_spd_ri_re_data, 0u, 0xffu);
+    dst_p[2] |= pack_left_shift_u8(src_p->whl_spd_le_re_data_vld, 7u, 0x80u);
+    dst_p[2] |= pack_right_shift_u16(src_p->whl_spd_le_re_data, 8u, 0x1fu);
+    dst_p[3] |= pack_left_shift_u16(src_p->whl_spd_le_re_data, 0u, 0xffu);
+    dst_p[12] |= pack_left_shift_u8(src_p->esp_veh_spd_vld, 5u, 0x20u);
+    dst_p[12] |= pack_right_shift_u16(src_p->esp_veh_spd, 8u, 0x1fu);
+    dst_p[13] |= pack_left_shift_u16(src_p->esp_veh_spd, 0u, 0xffu);
+    dst_p[16] |= pack_left_shift_u8(src_p->whl_spd_ri_frnt_data_vld, 7u, 0x80u);
+    dst_p[16] |= pack_right_shift_u16(src_p->whl_spd_ri_frnt_data, 8u, 0x1fu);
+    dst_p[17] |= pack_left_shift_u16(src_p->whl_spd_ri_frnt_data, 0u, 0xffu);
+    dst_p[18] |= pack_left_shift_u8(src_p->whl_spd_le_frnt_data_vld, 7u, 0x80u);
+    dst_p[18] |= pack_right_shift_u16(src_p->whl_spd_le_frnt_data, 8u, 0x1fu);
+    dst_p[19] |= pack_left_shift_u16(src_p->whl_spd_le_frnt_data, 0u, 0xffu);
+
+    return (64);
+}
+
+int a07_hgw_1_ca_unpack(
+    struct a07_hgw_1_ca_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    dst_p->whl_spd_ri_re_data_vld = unpack_right_shift_u8(src_p[0], 7u, 0x80u);
+    dst_p->whl_spd_ri_re_data = unpack_left_shift_u16(src_p[0], 8u, 0x1fu);
+    dst_p->whl_spd_ri_re_data |= unpack_right_shift_u16(src_p[1], 0u, 0xffu);
+    dst_p->whl_spd_le_re_data_vld = unpack_right_shift_u8(src_p[2], 7u, 0x80u);
+    dst_p->whl_spd_le_re_data = unpack_left_shift_u16(src_p[2], 8u, 0x1fu);
+    dst_p->whl_spd_le_re_data |= unpack_right_shift_u16(src_p[3], 0u, 0xffu);
+    dst_p->esp_veh_spd_vld = unpack_right_shift_u8(src_p[12], 5u, 0x20u);
+    dst_p->esp_veh_spd = unpack_left_shift_u16(src_p[12], 8u, 0x1fu);
+    dst_p->esp_veh_spd |= unpack_right_shift_u16(src_p[13], 0u, 0xffu);
+    dst_p->whl_spd_ri_frnt_data_vld = unpack_right_shift_u8(src_p[16], 7u, 0x80u);
+    dst_p->whl_spd_ri_frnt_data = unpack_left_shift_u16(src_p[16], 8u, 0x1fu);
+    dst_p->whl_spd_ri_frnt_data |= unpack_right_shift_u16(src_p[17], 0u, 0xffu);
+    dst_p->whl_spd_le_frnt_data_vld = unpack_right_shift_u8(src_p[18], 7u, 0x80u);
+    dst_p->whl_spd_le_frnt_data = unpack_left_shift_u16(src_p[18], 8u, 0x1fu);
+    dst_p->whl_spd_le_frnt_data |= unpack_right_shift_u16(src_p[19], 0u, 0xffu);
+
+    return (0);
+}
+
+int a07_hgw_1_ca_init(struct a07_hgw_1_ca_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_1_ca_t));
+
+    return 0;
+}
+
+uint8_t a07_hgw_1_ca_whl_spd_ri_re_data_vld_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_1_ca_whl_spd_ri_re_data_vld_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_1_ca_whl_spd_ri_re_data_vld_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint16_t a07_hgw_1_ca_whl_spd_ri_re_data_encode(double value)
+{
+    return (uint16_t)(value / 0.05625);
+}
+
+double a07_hgw_1_ca_whl_spd_ri_re_data_decode(uint16_t value)
+{
+    return ((double)value * 0.05625);
+}
+
+bool a07_hgw_1_ca_whl_spd_ri_re_data_is_in_range(uint16_t value)
+{
+    return (value <= 8191u);
+}
+
+uint8_t a07_hgw_1_ca_whl_spd_le_re_data_vld_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_1_ca_whl_spd_le_re_data_vld_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_1_ca_whl_spd_le_re_data_vld_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint16_t a07_hgw_1_ca_whl_spd_le_re_data_encode(double value)
+{
+    return (uint16_t)(value / 0.05625);
+}
+
+double a07_hgw_1_ca_whl_spd_le_re_data_decode(uint16_t value)
+{
+    return ((double)value * 0.05625);
+}
+
+bool a07_hgw_1_ca_whl_spd_le_re_data_is_in_range(uint16_t value)
+{
+    return (value <= 8191u);
+}
+
+uint8_t a07_hgw_1_ca_esp_veh_spd_vld_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_1_ca_esp_veh_spd_vld_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_1_ca_esp_veh_spd_vld_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint16_t a07_hgw_1_ca_esp_veh_spd_encode(double value)
+{
+    return (uint16_t)(value / 0.05625);
+}
+
+double a07_hgw_1_ca_esp_veh_spd_decode(uint16_t value)
+{
+    return ((double)value * 0.05625);
+}
+
+bool a07_hgw_1_ca_esp_veh_spd_is_in_range(uint16_t value)
+{
+    return (value <= 8191u);
+}
+
+uint8_t a07_hgw_1_ca_whl_spd_ri_frnt_data_vld_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_1_ca_whl_spd_ri_frnt_data_vld_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_1_ca_whl_spd_ri_frnt_data_vld_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint16_t a07_hgw_1_ca_whl_spd_ri_frnt_data_encode(double value)
+{
+    return (uint16_t)(value / 0.05625);
+}
+
+double a07_hgw_1_ca_whl_spd_ri_frnt_data_decode(uint16_t value)
+{
+    return ((double)value * 0.05625);
+}
+
+bool a07_hgw_1_ca_whl_spd_ri_frnt_data_is_in_range(uint16_t value)
+{
+    return (value <= 8191u);
+}
+
+uint8_t a07_hgw_1_ca_whl_spd_le_frnt_data_vld_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_1_ca_whl_spd_le_frnt_data_vld_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_1_ca_whl_spd_le_frnt_data_vld_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint16_t a07_hgw_1_ca_whl_spd_le_frnt_data_encode(double value)
+{
+    return (uint16_t)(value / 0.05625);
+}
+
+double a07_hgw_1_ca_whl_spd_le_frnt_data_decode(uint16_t value)
+{
+    return ((double)value * 0.05625);
+}
+
+bool a07_hgw_1_ca_whl_spd_le_frnt_data_is_in_range(uint16_t value)
+{
+    return (value <= 8191u);
+}
+
+int a07_hgw_169_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_169_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 64);
+
+    dst_p[8] |= pack_right_shift_u8(src_p->vcu_gear_posn, 1u, 0x03u);
+    dst_p[9] |= pack_left_shift_u8(src_p->vcu_gear_posn, 7u, 0x80u);
+    dst_p[9] |= pack_left_shift_u8(src_p->vcu_pt_tq_real_vld, 3u, 0x08u);
+    dst_p[9] |= pack_left_shift_u8(src_p->vcu_pt_tq_req_avl, 1u, 0x06u);
+    dst_p[14] |= pack_left_shift_u8(src_p->vcu_shift_lvl_posn, 4u, 0xf0u);
+    dst_p[16] |= pack_right_shift_u16(src_p->vcu_pt_tq_real, 8u, 0xffu);
+    dst_p[17] |= pack_left_shift_u16(src_p->vcu_pt_tq_real, 0u, 0xffu);
+    dst_p[18] |= pack_left_shift_u8(src_p->vcu_rdy_sts, 7u, 0x80u);
+
+    return (64);
+}
+
+int a07_hgw_169_unpack(
+    struct a07_hgw_169_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    dst_p->vcu_gear_posn = unpack_left_shift_u8(src_p[8], 1u, 0x03u);
+    dst_p->vcu_gear_posn |= unpack_right_shift_u8(src_p[9], 7u, 0x80u);
+    dst_p->vcu_pt_tq_real_vld = unpack_right_shift_u8(src_p[9], 3u, 0x08u);
+    dst_p->vcu_pt_tq_req_avl = unpack_right_shift_u8(src_p[9], 1u, 0x06u);
+    dst_p->vcu_shift_lvl_posn = unpack_right_shift_u8(src_p[14], 4u, 0xf0u);
+    dst_p->vcu_pt_tq_real = unpack_left_shift_u16(src_p[16], 8u, 0xffu);
+    dst_p->vcu_pt_tq_real |= unpack_right_shift_u16(src_p[17], 0u, 0xffu);
+    dst_p->vcu_rdy_sts = unpack_right_shift_u8(src_p[18], 7u, 0x80u);
+
+    return (0);
+}
+
+int a07_hgw_169_init(struct a07_hgw_169_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_169_t));
+    msg_p->vcu_gear_posn = 3;
+    msg_p->vcu_pt_tq_real = 0;
+
+    return 0;
+}
+
+uint8_t a07_hgw_169_vcu_gear_posn_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_169_vcu_gear_posn_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_169_vcu_gear_posn_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+uint8_t a07_hgw_169_vcu_pt_tq_real_vld_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_169_vcu_pt_tq_real_vld_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_169_vcu_pt_tq_real_vld_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_169_vcu_pt_tq_req_avl_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_169_vcu_pt_tq_req_avl_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_169_vcu_pt_tq_req_avl_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_169_vcu_shift_lvl_posn_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_169_vcu_shift_lvl_posn_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_169_vcu_shift_lvl_posn_is_in_range(uint8_t value)
+{
+    return (value <= 15u);
+}
+
+uint16_t a07_hgw_169_vcu_pt_tq_real_encode(double value)
+{
+    return (uint16_t)(value - -32768.0);
+}
+
+double a07_hgw_169_vcu_pt_tq_real_decode(uint16_t value)
+{
+    return ((double)value + -32768.0);
+}
+
+bool a07_hgw_169_vcu_pt_tq_real_is_in_range(uint16_t value)
+{
+    (void)value;
+
+    return (true);
+}
+
+uint8_t a07_hgw_169_vcu_rdy_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_169_vcu_rdy_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_169_vcu_rdy_sts_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+int a07_hgw_178_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_178_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 8);
+
+    dst_p[0] |= pack_right_shift_u16(src_p->eps_actual_motor_torq, 4u, 0xffu);
+    dst_p[1] |= pack_left_shift_u16(src_p->eps_actual_motor_torq, 4u, 0xf0u);
+    dst_p[1] |= pack_right_shift_u16(src_p->eps_max_safety_torsion_bar_torq, 10u, 0x01u);
+    dst_p[2] |= pack_right_shift_u16(src_p->eps_max_safety_torsion_bar_torq, 2u, 0xffu);
+    dst_p[3] |= pack_left_shift_u16(src_p->eps_max_safety_torsion_bar_torq, 6u, 0xc0u);
+    dst_p[3] |= pack_right_shift_u16(src_p->eps_min_safety_torsion_bar_torq, 5u, 0x3fu);
+    dst_p[4] |= pack_left_shift_u16(src_p->eps_min_safety_torsion_bar_torq, 3u, 0xf8u);
+    dst_p[4] |= pack_right_shift_u16(src_p->eps_actual_torsion_bar_torq, 8u, 0x07u);
+    dst_p[5] |= pack_left_shift_u16(src_p->eps_actual_torsion_bar_torq, 0u, 0xffu);
+
+    return (8);
+}
+
+int a07_hgw_178_unpack(
+    struct a07_hgw_178_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    dst_p->eps_actual_motor_torq = unpack_left_shift_u16(src_p[0], 4u, 0xffu);
+    dst_p->eps_actual_motor_torq |= unpack_right_shift_u16(src_p[1], 4u, 0xf0u);
+    dst_p->eps_max_safety_torsion_bar_torq = unpack_left_shift_u16(src_p[1], 10u, 0x01u);
+    dst_p->eps_max_safety_torsion_bar_torq |= unpack_left_shift_u16(src_p[2], 2u, 0xffu);
+    dst_p->eps_max_safety_torsion_bar_torq |= unpack_right_shift_u16(src_p[3], 6u, 0xc0u);
+    dst_p->eps_min_safety_torsion_bar_torq = unpack_left_shift_u16(src_p[3], 5u, 0x3fu);
+    dst_p->eps_min_safety_torsion_bar_torq |= unpack_right_shift_u16(src_p[4], 3u, 0xf8u);
+    dst_p->eps_actual_torsion_bar_torq = unpack_left_shift_u16(src_p[4], 8u, 0x07u);
+    dst_p->eps_actual_torsion_bar_torq |= unpack_right_shift_u16(src_p[5], 0u, 0xffu);
+
+    return (0);
+}
+
+int a07_hgw_178_init(struct a07_hgw_178_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_178_t));
+
+    return 0;
+}
+
+uint16_t a07_hgw_178_eps_actual_motor_torq_encode(double value)
+{
+    return (uint16_t)((value - -20.48) / 0.01);
+}
+
+double a07_hgw_178_eps_actual_motor_torq_decode(uint16_t value)
+{
+    return (((double)value * 0.01) + -20.48);
+}
+
+bool a07_hgw_178_eps_actual_motor_torq_is_in_range(uint16_t value)
+{
+    return (value <= 4094u);
+}
+
+uint16_t a07_hgw_178_eps_max_safety_torsion_bar_torq_encode(double value)
+{
+    return (uint16_t)((value - -20.48) / 0.02);
+}
+
+double a07_hgw_178_eps_max_safety_torsion_bar_torq_decode(uint16_t value)
+{
+    return (((double)value * 0.02) + -20.48);
+}
+
+bool a07_hgw_178_eps_max_safety_torsion_bar_torq_is_in_range(uint16_t value)
+{
+    return (value <= 2046u);
+}
+
+uint16_t a07_hgw_178_eps_min_safety_torsion_bar_torq_encode(double value)
+{
+    return (uint16_t)((value - -20.48) / 0.02);
+}
+
+double a07_hgw_178_eps_min_safety_torsion_bar_torq_decode(uint16_t value)
+{
+    return (((double)value * 0.02) + -20.48);
+}
+
+bool a07_hgw_178_eps_min_safety_torsion_bar_torq_is_in_range(uint16_t value)
+{
+    return (value <= 2046u);
+}
+
+uint16_t a07_hgw_178_eps_actual_torsion_bar_torq_encode(double value)
+{
+    return (uint16_t)((value - -20.48) / 0.02);
+}
+
+double a07_hgw_178_eps_actual_torsion_bar_torq_decode(uint16_t value)
+{
+    return (((double)value * 0.02) + -20.48);
+}
+
+bool a07_hgw_178_eps_actual_torsion_bar_torq_is_in_range(uint16_t value)
+{
+    return (value <= 2046u);
+}
+
+int a07_hgw_188_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_188_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 8);
+
+    dst_p[0] |= pack_right_shift_u16(src_p->eps_sas_steer_ag, 8u, 0xffu);
+    dst_p[1] |= pack_left_shift_u16(src_p->eps_sas_steer_ag, 0u, 0xffu);
+    dst_p[2] |= pack_left_shift_u8(src_p->eps_steer_ag_rate, 0u, 0xffu);
+    dst_p[3] |= pack_left_shift_u8(src_p->eps_sas_steer_ag_vld, 7u, 0x80u);
+    dst_p[3] |= pack_left_shift_u8(src_p->eps_sas_cal_sts, 5u, 0x20u);
+
+    return (8);
+}
+
+int a07_hgw_188_unpack(
+    struct a07_hgw_188_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    dst_p->eps_sas_steer_ag = unpack_left_shift_u16(src_p[0], 8u, 0xffu);
+    dst_p->eps_sas_steer_ag |= unpack_right_shift_u16(src_p[1], 0u, 0xffu);
+    dst_p->eps_steer_ag_rate = unpack_right_shift_u8(src_p[2], 0u, 0xffu);
+    dst_p->eps_sas_steer_ag_vld = unpack_right_shift_u8(src_p[3], 7u, 0x80u);
+    dst_p->eps_sas_cal_sts = unpack_right_shift_u8(src_p[3], 5u, 0x20u);
+
+    return (0);
+}
+
+int a07_hgw_188_init(struct a07_hgw_188_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_188_t));
+
+    return 0;
+}
+
+uint16_t a07_hgw_188_eps_sas_steer_ag_encode(double value)
+{
+    return (uint16_t)(value / 0.1);
+}
+
+double a07_hgw_188_eps_sas_steer_ag_decode(uint16_t value)
+{
+    return ((double)value * 0.1);
+}
+
+bool a07_hgw_188_eps_sas_steer_ag_is_in_range(uint16_t value)
+{
+    return (value <= 7800u);
+}
+
+uint8_t a07_hgw_188_eps_steer_ag_rate_encode(double value)
+{
+    return (uint8_t)(value / 4.0);
+}
+
+double a07_hgw_188_eps_steer_ag_rate_decode(uint8_t value)
+{
+    return ((double)value * 4.0);
+}
+
+bool a07_hgw_188_eps_steer_ag_rate_is_in_range(uint8_t value)
+{
+    return (value <= 254u);
+}
+
+uint8_t a07_hgw_188_eps_sas_steer_ag_vld_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_188_eps_sas_steer_ag_vld_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_188_eps_sas_steer_ag_vld_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_188_eps_sas_cal_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_188_eps_sas_cal_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_188_eps_sas_cal_sts_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+int a07_hgw_280_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_280_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 8);
+
+    dst_p[2] |= pack_right_shift_u16(src_p->esp_long_accel, 10u, 0x07u);
+    dst_p[3] |= pack_right_shift_u16(src_p->esp_long_accel, 2u, 0xffu);
+    dst_p[4] |= pack_left_shift_u16(src_p->esp_long_accel, 6u, 0xc0u);
+
+    return (8);
+}
+
+int a07_hgw_280_unpack(
+    struct a07_hgw_280_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    dst_p->esp_long_accel = unpack_left_shift_u16(src_p[2], 10u, 0x07u);
+    dst_p->esp_long_accel |= unpack_left_shift_u16(src_p[3], 2u, 0xffu);
+    dst_p->esp_long_accel |= unpack_right_shift_u16(src_p[4], 6u, 0xc0u);
+
+    return (0);
+}
+
+int a07_hgw_280_init(struct a07_hgw_280_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_280_t));
+
+    return 0;
+}
+
+uint16_t a07_hgw_280_esp_long_accel_encode(double value)
+{
+    return (uint16_t)((value - -32.0) / 0.01);
+}
+
+double a07_hgw_280_esp_long_accel_decode(uint16_t value)
+{
+    return (((double)value * 0.01) + -32.0);
+}
+
+bool a07_hgw_280_esp_long_accel_is_in_range(uint16_t value)
+{
+    return (value <= 8190u);
+}
+
+int a07_hgw_213_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_213_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 64);
+
+    dst_p[32] |= pack_left_shift_u8(src_p->esp_brake_force, 7u, 0x80u);
+    dst_p[34] |= pack_left_shift_u8(src_p->esp_cdd_active_apa, 5u, 0x20u);
+    dst_p[34] |= pack_left_shift_u8(src_p->esp_cdd_available_apa, 4u, 0x10u);
+
+    return (64);
+}
+
+int a07_hgw_213_unpack(
+    struct a07_hgw_213_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    dst_p->esp_brake_force = unpack_right_shift_u8(src_p[32], 7u, 0x80u);
+    dst_p->esp_cdd_active_apa = unpack_right_shift_u8(src_p[34], 5u, 0x20u);
+    dst_p->esp_cdd_available_apa = unpack_right_shift_u8(src_p[34], 4u, 0x10u);
+
+    return (0);
+}
+
+int a07_hgw_213_init(struct a07_hgw_213_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_213_t));
+
+    return 0;
+}
+
+uint8_t a07_hgw_213_esp_brake_force_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_213_esp_brake_force_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_213_esp_brake_force_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_213_esp_cdd_active_apa_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_213_esp_cdd_active_apa_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_213_esp_cdd_active_apa_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_213_esp_cdd_available_apa_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_213_esp_cdd_available_apa_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_213_esp_cdd_available_apa_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+int a07_hgw_257_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_257_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 8);
+
+    dst_p[3] |= pack_left_shift_u8(src_p->eps_iacc_abortreason, 2u, 0x1cu);
+
+    return (8);
+}
+
+int a07_hgw_257_unpack(
+    struct a07_hgw_257_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    dst_p->eps_iacc_abortreason = unpack_right_shift_u8(src_p[3], 2u, 0x1cu);
+
+    return (0);
+}
+
+int a07_hgw_257_init(struct a07_hgw_257_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_257_t));
+
+    return 0;
+}
+
+uint8_t a07_hgw_257_eps_iacc_abortreason_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_257_eps_iacc_abortreason_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_257_eps_iacc_abortreason_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+int a07_hgw_186_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_186_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 8);
+
+    dst_p[0] |= pack_right_shift_u16(src_p->eps_measured_torsion_bar_torque, 4u, 0xffu);
+    dst_p[1] |= pack_left_shift_u16(src_p->eps_measured_torsion_bar_torque, 4u, 0xf0u);
+    dst_p[6] |= pack_left_shift_u8(src_p->eps_lat_ctrl_active, 6u, 0x40u);
+    dst_p[6] |= pack_left_shift_u8(src_p->eps_lat_ctrl_availability_status, 4u, 0x30u);
+
+    return (8);
+}
+
+int a07_hgw_186_unpack(
+    struct a07_hgw_186_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    dst_p->eps_measured_torsion_bar_torque = unpack_left_shift_u16(src_p[0], 4u, 0xffu);
+    dst_p->eps_measured_torsion_bar_torque |= unpack_right_shift_u16(src_p[1], 4u, 0xf0u);
+    dst_p->eps_lat_ctrl_active = unpack_right_shift_u8(src_p[6], 6u, 0x40u);
+    dst_p->eps_lat_ctrl_availability_status = unpack_right_shift_u8(src_p[6], 4u, 0x30u);
+
+    return (0);
+}
+
+int a07_hgw_186_init(struct a07_hgw_186_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_186_t));
+
+    return 0;
+}
+
+uint16_t a07_hgw_186_eps_measured_torsion_bar_torque_encode(double value)
+{
+    return (uint16_t)((value - -20.48) / 0.01);
+}
+
+double a07_hgw_186_eps_measured_torsion_bar_torque_decode(uint16_t value)
+{
+    return (((double)value * 0.01) + -20.48);
+}
+
+bool a07_hgw_186_eps_measured_torsion_bar_torque_is_in_range(uint16_t value)
+{
+    return (value <= 4094u);
+}
+
+uint8_t a07_hgw_186_eps_lat_ctrl_active_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_186_eps_lat_ctrl_active_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_186_eps_lat_ctrl_active_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_186_eps_lat_ctrl_availability_status_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_186_eps_lat_ctrl_availability_status_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_186_eps_lat_ctrl_availability_status_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+int a07_hgw_58_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_58_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 8);
+
+    dst_p[0] |= pack_left_shift_u8(src_p->srs_crash_outp_sts, 4u, 0xf0u);
+    dst_p[1] |= pack_left_shift_u8(src_p->srs_drvr_buc_swt_sts, 6u, 0xc0u);
+    dst_p[1] |= pack_left_shift_u8(src_p->srs_pass_buc_swt_sts, 4u, 0x30u);
+    dst_p[1] |= pack_left_shift_u8(src_p->srs_le_re_buc_swt_sts, 2u, 0x0cu);
+    dst_p[2] |= pack_left_shift_u8(src_p->srs_mid_re_buc_swt_sts, 5u, 0x60u);
+    dst_p[2] |= pack_left_shift_u8(src_p->srs_ri_re_buc_swt_sts, 2u, 0x0cu);
+
+    return (8);
+}
+
+int a07_hgw_58_unpack(
+    struct a07_hgw_58_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    dst_p->srs_crash_outp_sts = unpack_right_shift_u8(src_p[0], 4u, 0xf0u);
+    dst_p->srs_drvr_buc_swt_sts = unpack_right_shift_u8(src_p[1], 6u, 0xc0u);
+    dst_p->srs_pass_buc_swt_sts = unpack_right_shift_u8(src_p[1], 4u, 0x30u);
+    dst_p->srs_le_re_buc_swt_sts = unpack_right_shift_u8(src_p[1], 2u, 0x0cu);
+    dst_p->srs_mid_re_buc_swt_sts = unpack_right_shift_u8(src_p[2], 5u, 0x60u);
+    dst_p->srs_ri_re_buc_swt_sts = unpack_right_shift_u8(src_p[2], 2u, 0x0cu);
+
+    return (0);
+}
+
+int a07_hgw_58_init(struct a07_hgw_58_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_58_t));
+
+    return 0;
+}
+
+uint8_t a07_hgw_58_srs_crash_outp_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_58_srs_crash_outp_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_58_srs_crash_outp_sts_is_in_range(uint8_t value)
+{
+    return (value <= 15u);
+}
+
+uint8_t a07_hgw_58_srs_drvr_buc_swt_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_58_srs_drvr_buc_swt_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_58_srs_drvr_buc_swt_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_58_srs_pass_buc_swt_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_58_srs_pass_buc_swt_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_58_srs_pass_buc_swt_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_58_srs_le_re_buc_swt_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_58_srs_le_re_buc_swt_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_58_srs_le_re_buc_swt_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_58_srs_mid_re_buc_swt_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_58_srs_mid_re_buc_swt_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_58_srs_mid_re_buc_swt_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_58_srs_ri_re_buc_swt_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_58_srs_ri_re_buc_swt_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_58_srs_ri_re_buc_swt_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+int a07_hgw_2_da_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_2_da_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 64);
+
+    dst_p[1] |= pack_left_shift_u8(src_p->cdc_auto_head_li_set, 5u, 0xe0u);
+    dst_p[49] |= pack_right_shift_u32(src_p->cdc_tot_milg, 16u, 0xffu);
+    dst_p[50] |= pack_right_shift_u32(src_p->cdc_tot_milg, 8u, 0xffu);
+    dst_p[51] |= pack_left_shift_u32(src_p->cdc_tot_milg, 0u, 0xffu);
+    dst_p[59] |= pack_left_shift_u8(src_p->hu_sentry_mode_st, 2u, 0x1cu);
+
+    return (64);
+}
+
+int a07_hgw_2_da_unpack(
+    struct a07_hgw_2_da_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 64u) {
+        return (-EINVAL);
+    }
+
+    dst_p->cdc_auto_head_li_set = unpack_right_shift_u8(src_p[1], 5u, 0xe0u);
+    dst_p->cdc_tot_milg = unpack_left_shift_u32(src_p[49], 16u, 0xffu);
+    dst_p->cdc_tot_milg |= unpack_left_shift_u32(src_p[50], 8u, 0xffu);
+    dst_p->cdc_tot_milg |= unpack_right_shift_u32(src_p[51], 0u, 0xffu);
+    dst_p->hu_sentry_mode_st = unpack_right_shift_u8(src_p[59], 2u, 0x1cu);
+
+    return (0);
+}
+
+int a07_hgw_2_da_init(struct a07_hgw_2_da_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_2_da_t));
+
+    return 0;
+}
+
+uint8_t a07_hgw_2_da_cdc_auto_head_li_set_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_2_da_cdc_auto_head_li_set_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_2_da_cdc_auto_head_li_set_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+uint32_t a07_hgw_2_da_cdc_tot_milg_encode(double value)
+{
+    return (uint32_t)(value / 0.1);
+}
+
+double a07_hgw_2_da_cdc_tot_milg_decode(uint32_t value)
+{
+    return ((double)value * 0.1);
+}
+
+bool a07_hgw_2_da_cdc_tot_milg_is_in_range(uint32_t value)
+{
+    return (value <= 16777215u);
+}
+
+uint8_t a07_hgw_2_da_hu_sentry_mode_st_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_2_da_hu_sentry_mode_st_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_2_da_hu_sentry_mode_st_is_in_range(uint8_t value)
+{
+    return (value <= 7u);
+}
+
+int a07_hgw_290_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_290_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    memset(&dst_p[0], 0, 8);
+
+    dst_p[1] |= pack_left_shift_u8(src_p->bcm_turn_indcr_le, 6u, 0xc0u);
+    dst_p[1] |= pack_left_shift_u8(src_p->bcm_turn_indcr_ri, 4u, 0x30u);
+    dst_p[1] |= pack_left_shift_u8(src_p->bcm_posn_lmp_sts, 2u, 0x0cu);
+    dst_p[2] |= pack_left_shift_u8(src_p->bcm_drvr_door_sts, 7u, 0x80u);
+    dst_p[2] |= pack_left_shift_u8(src_p->bcm_pass_door_sts, 6u, 0x40u);
+    dst_p[2] |= pack_left_shift_u8(src_p->bcm_le_re_door_sts, 5u, 0x20u);
+    dst_p[2] |= pack_left_shift_u8(src_p->bcm_ri_re_door_sts, 4u, 0x10u);
+    dst_p[4] |= pack_left_shift_u8(src_p->bdc_drvr_sts, 6u, 0x40u);
+    dst_p[4] |= pack_left_shift_u8(src_p->bcm_pass_door_lck_sts, 2u, 0x0cu);
+    dst_p[5] |= pack_left_shift_u8(src_p->bcm_pwr_sts_fb, 2u, 0x0cu);
+    dst_p[5] |= pack_left_shift_u8(src_p->bcm_drvr_door_lck_sts, 0u, 0x03u);
+
+    return (8);
+}
+
+int a07_hgw_290_unpack(
+    struct a07_hgw_290_t *dst_p,
+    const uint8_t *src_p,
+    size_t size)
+{
+    if (size < 8u) {
+        return (-EINVAL);
+    }
+
+    dst_p->bcm_turn_indcr_le = unpack_right_shift_u8(src_p[1], 6u, 0xc0u);
+    dst_p->bcm_turn_indcr_ri = unpack_right_shift_u8(src_p[1], 4u, 0x30u);
+    dst_p->bcm_posn_lmp_sts = unpack_right_shift_u8(src_p[1], 2u, 0x0cu);
+    dst_p->bcm_drvr_door_sts = unpack_right_shift_u8(src_p[2], 7u, 0x80u);
+    dst_p->bcm_pass_door_sts = unpack_right_shift_u8(src_p[2], 6u, 0x40u);
+    dst_p->bcm_le_re_door_sts = unpack_right_shift_u8(src_p[2], 5u, 0x20u);
+    dst_p->bcm_ri_re_door_sts = unpack_right_shift_u8(src_p[2], 4u, 0x10u);
+    dst_p->bdc_drvr_sts = unpack_right_shift_u8(src_p[4], 6u, 0x40u);
+    dst_p->bcm_pass_door_lck_sts = unpack_right_shift_u8(src_p[4], 2u, 0x0cu);
+    dst_p->bcm_pwr_sts_fb = unpack_right_shift_u8(src_p[5], 2u, 0x0cu);
+    dst_p->bcm_drvr_door_lck_sts = unpack_right_shift_u8(src_p[5], 0u, 0x03u);
+
+    return (0);
+}
+
+int a07_hgw_290_init(struct a07_hgw_290_t *msg_p)
+{
+    if (msg_p == NULL) return -1;
+
+    memset(msg_p, 0, sizeof(struct a07_hgw_290_t));
+
+    return 0;
+}
+
+uint8_t a07_hgw_290_bcm_turn_indcr_le_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_turn_indcr_le_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_turn_indcr_le_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_290_bcm_turn_indcr_ri_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_turn_indcr_ri_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_turn_indcr_ri_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_290_bcm_posn_lmp_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_posn_lmp_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_posn_lmp_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_290_bcm_drvr_door_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_drvr_door_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_drvr_door_sts_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_290_bcm_pass_door_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_pass_door_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_pass_door_sts_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_290_bcm_le_re_door_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_le_re_door_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_le_re_door_sts_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_290_bcm_ri_re_door_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_ri_re_door_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_ri_re_door_sts_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_290_bdc_drvr_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bdc_drvr_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bdc_drvr_sts_is_in_range(uint8_t value)
+{
+    return (value <= 1u);
+}
+
+uint8_t a07_hgw_290_bcm_pass_door_lck_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_pass_door_lck_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_pass_door_lck_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_290_bcm_pwr_sts_fb_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_pwr_sts_fb_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_pwr_sts_fb_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}
+
+uint8_t a07_hgw_290_bcm_drvr_door_lck_sts_encode(double value)
+{
+    return (uint8_t)(value);
+}
+
+double a07_hgw_290_bcm_drvr_door_lck_sts_decode(uint8_t value)
+{
+    return ((double)value);
+}
+
+bool a07_hgw_290_bcm_drvr_door_lck_sts_is_in_range(uint8_t value)
+{
+    return (value <= 3u);
+}

+ 4580 - 0
src/tool/g29zlgchassistest/a07.h

@@ -0,0 +1,4580 @@
+/**
+ * @file a07.h
+ *
+ * @brief This header file was generated by cantools version 40.2.3 Tue Jun 24 16:11:53 2025.
+ *
+ * @copyright Copyright (c) 2018-2019 Erik Moqvist
+ *
+ * @par License
+ * The MIT License (MIT)
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef A07_H
+#define A07_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+
+#ifndef EINVAL
+#    define EINVAL 22
+#endif
+
+/* Frame ids. */
+#define A07_ECU_1_B2_FRAME_ID (0x1b2u)
+#define A07_ECU_23_F_FRAME_ID (0x23fu)
+#define A07_ECU_23_C_FRAME_ID (0x23cu)
+#define A07_ECU_30_A_FRAME_ID (0x30au)
+#define A07_ECU_2_BF_FRAME_ID (0x2bfu)
+#define A07_ECU_2_CA_FRAME_ID (0x2cau)
+#define A07_ECU_372_FRAME_ID (0x372u)
+#define A07_HGW_1_CA_FRAME_ID (0x1cau)
+#define A07_HGW_169_FRAME_ID (0x169u)
+#define A07_HGW_178_FRAME_ID (0x178u)
+#define A07_HGW_188_FRAME_ID (0x188u)
+#define A07_HGW_280_FRAME_ID (0x280u)
+#define A07_HGW_213_FRAME_ID (0x213u)
+#define A07_HGW_257_FRAME_ID (0x257u)
+#define A07_HGW_186_FRAME_ID (0x186u)
+#define A07_HGW_58_FRAME_ID (0x58u)
+#define A07_HGW_2_DA_FRAME_ID (0x2dau)
+#define A07_HGW_290_FRAME_ID (0x290u)
+
+/* Frame lengths in bytes. */
+#define A07_ECU_1_B2_LENGTH (32u)
+#define A07_ECU_23_F_LENGTH (32u)
+#define A07_ECU_23_C_LENGTH (64u)
+#define A07_ECU_30_A_LENGTH (64u)
+#define A07_ECU_2_BF_LENGTH (32u)
+#define A07_ECU_2_CA_LENGTH (64u)
+#define A07_ECU_372_LENGTH (8u)
+#define A07_HGW_1_CA_LENGTH (64u)
+#define A07_HGW_169_LENGTH (64u)
+#define A07_HGW_178_LENGTH (8u)
+#define A07_HGW_188_LENGTH (8u)
+#define A07_HGW_280_LENGTH (8u)
+#define A07_HGW_213_LENGTH (64u)
+#define A07_HGW_257_LENGTH (8u)
+#define A07_HGW_186_LENGTH (8u)
+#define A07_HGW_58_LENGTH (8u)
+#define A07_HGW_2_DA_LENGTH (64u)
+#define A07_HGW_290_LENGTH (8u)
+
+/* Extended or standard frame types. */
+#define A07_ECU_1_B2_IS_EXTENDED (0)
+#define A07_ECU_23_F_IS_EXTENDED (0)
+#define A07_ECU_23_C_IS_EXTENDED (0)
+#define A07_ECU_30_A_IS_EXTENDED (0)
+#define A07_ECU_2_BF_IS_EXTENDED (0)
+#define A07_ECU_2_CA_IS_EXTENDED (0)
+#define A07_ECU_372_IS_EXTENDED (0)
+#define A07_HGW_1_CA_IS_EXTENDED (0)
+#define A07_HGW_169_IS_EXTENDED (0)
+#define A07_HGW_178_IS_EXTENDED (0)
+#define A07_HGW_188_IS_EXTENDED (0)
+#define A07_HGW_280_IS_EXTENDED (0)
+#define A07_HGW_213_IS_EXTENDED (0)
+#define A07_HGW_257_IS_EXTENDED (0)
+#define A07_HGW_186_IS_EXTENDED (0)
+#define A07_HGW_58_IS_EXTENDED (0)
+#define A07_HGW_2_DA_IS_EXTENDED (0)
+#define A07_HGW_290_IS_EXTENDED (0)
+
+/* Frame cycle times in milliseconds. */
+#define A07_ECU_1_B2_CYCLE_TIME_MS (10u)
+#define A07_ECU_23_F_CYCLE_TIME_MS (20u)
+#define A07_ECU_23_C_CYCLE_TIME_MS (20u)
+#define A07_ECU_30_A_CYCLE_TIME_MS (100u)
+#define A07_ECU_2_BF_CYCLE_TIME_MS (40u)
+#define A07_ECU_2_CA_CYCLE_TIME_MS (100u)
+#define A07_ECU_372_CYCLE_TIME_MS (40u)
+#define A07_HGW_1_CA_CYCLE_TIME_MS (10u)
+#define A07_HGW_169_CYCLE_TIME_MS (10u)
+#define A07_HGW_178_CYCLE_TIME_MS (10u)
+#define A07_HGW_188_CYCLE_TIME_MS (10u)
+#define A07_HGW_280_CYCLE_TIME_MS (10u)
+#define A07_HGW_213_CYCLE_TIME_MS (10u)
+#define A07_HGW_257_CYCLE_TIME_MS (20u)
+#define A07_HGW_186_CYCLE_TIME_MS (10u)
+#define A07_HGW_58_CYCLE_TIME_MS (20u)
+#define A07_HGW_2_DA_CYCLE_TIME_MS (100u)
+#define A07_HGW_290_CYCLE_TIME_MS (40u)
+
+/* Signal choices. */
+
+
+/* Frame Names. */
+#define A07_ECU_1_B2_NAME "ECU_1B2"
+#define A07_ECU_23_F_NAME "ECU_23F"
+#define A07_ECU_23_C_NAME "ECU_23C"
+#define A07_ECU_30_A_NAME "ECU_30A"
+#define A07_ECU_2_BF_NAME "ECU_2BF"
+#define A07_ECU_2_CA_NAME "ECU_2CA"
+#define A07_ECU_372_NAME "ECU_372"
+#define A07_HGW_1_CA_NAME "HGW_1CA"
+#define A07_HGW_169_NAME "HGW_169"
+#define A07_HGW_178_NAME "HGW_178"
+#define A07_HGW_188_NAME "HGW_188"
+#define A07_HGW_280_NAME "HGW_280"
+#define A07_HGW_213_NAME "HGW_213"
+#define A07_HGW_257_NAME "HGW_257"
+#define A07_HGW_186_NAME "HGW_186"
+#define A07_HGW_58_NAME "HGW_58"
+#define A07_HGW_2_DA_NAME "HGW_2DA"
+#define A07_HGW_290_NAME "HGW_290"
+
+/* Signal Names. */
+#define A07_ECU_1_B2_ACC_MOTOR_TORQUE_MAX_LIMIT_REQUEST_NAME "ACC_MotorTorqueMaxLimitRequest"
+#define A07_ECU_1_B2_ACC_MOTOR_TORQUE_MIN_LIMIT_REQUEST_NAME "ACC_MotorTorqueMinLimitRequest"
+#define A07_ECU_1_B2_ACC_LAT_ANG_REQ_NAME "ACC_LatAngReq"
+#define A07_ECU_1_B2_ACC_LAT_ANG_REQ_ACTIVE_NAME "ACC_LatAngReqActive"
+#define A07_ECU_23_F_APA_ERROR_STATUS_NAME "APA_ErrorStatus"
+#define A07_ECU_23_F_APA_STEERING_ANGLE_REQ_PROTECTION_NAME "APA_SteeringAngleReqProtection"
+#define A07_ECU_23_F_APA_STEERING_ANGLE_REQ_NAME "APA_SteeringAngleReq"
+#define A07_ECU_23_C_ACC_ACC_TARGET_ACCELERATION_NAME "ACC_ACCTargetAcceleration"
+#define A07_ECU_23_C_APA_FUNCTION_ON_OFF_STS_NAME "APA_FunctionOnOffSts"
+#define A07_ECU_23_C_ACC_CDD_ACTIVE_NAME "ACC_CDDActive"
+#define A07_ECU_23_C_ACC_DRIVEOFF_REQUEST_NAME "ACC_Driveoff_Request"
+#define A07_ECU_23_C_ACC_ACC_MODE_NAME "ACC_ACCMode"
+#define A07_ECU_23_C_ACC_ACC_TRQ_REQ_ACTIVE_NAME "ACC_AccTrqReqActive"
+#define A07_ECU_23_C_ACC_ACC_TRQ_REQ_NAME "ACC_AccTrqReq"
+#define A07_ECU_23_C_ADC_WORK_MODE_NAME "ADC_WorkMode"
+#define A07_ECU_23_C_APA_EP_BREQUEST_NAME "APA_EPBrequest"
+#define A07_ECU_23_C_APA_EP_BREQUEST_VALID_NAME "APA_EPBrequestValid"
+#define A07_ECU_23_C_APA_ESP_BRAKE_FUNCTION_MODE_NAME "APA_ESP_BrakeFunctionMode"
+#define A07_ECU_23_C_APA_TARGET_ACCELERATION_VALID_NAME "APA_TargetAccelerationValid"
+#define A07_ECU_23_C_APA_TRANS_PRND_SHIFT_ENABLE_NAME "APA_TransPRNDShiftEnable"
+#define A07_ECU_23_C_APA_TRANS_PRND_SHIFT_REQUEST_NAME "APA_TransPRNDShiftRequest"
+#define A07_ECU_23_C_APA_TRANS_PRND_SHIFT_REQ_VALID_NAME "APA_TransPRNDShiftReqValid"
+#define A07_ECU_23_C_APA_VCU_READY_REQ_NAME "APA_VCUReadyReq"
+#define A07_ECU_30_A_ADS_UDLC_TURN_LIGHT_REQ_NAME "ADS_UDLCTurnLightReq"
+#define A07_ECU_2_BF_APA_BCM_HORN_COMMAND_NAME "APA_BCMHornCommand"
+#define A07_ECU_2_CA_CDC_AUTO_HEAD_LI_SET_NAME "CdcAutoHeadLiSet"
+#define A07_ECU_2_CA_CDC_DRVR_SLD_FWD_ST_NAME "CdcDrvrSldFwdSt"
+#define A07_ECU_2_CA_CDC_DRVR_SLD_BACKW_ST_NAME "CdcDrvrSldBackwSt"
+#define A07_ECU_2_CA_CDC_DRVR_RE_UPWD_ST_NAME "CdcDrvrReUpwdSt"
+#define A07_ECU_2_CA_CDC_DRVR_RE_DWNWD_ST_NAME "CdcDrvrReDwnwdSt"
+#define A07_ECU_2_CA_CDC_DRVR_BACK_FWD_ST_NAME "CdcDrvrBackFwdSt"
+#define A07_ECU_2_CA_CDC_DRVR_BACK_BACK_ST_NAME "CdcDrvrBackBackSt"
+#define A07_ECU_2_CA_CDC_RE_MIRR_FOLD_REQ_NAME "CdcReMirrFoldReq"
+#define A07_ECU_2_CA_CDC_CENTRAL_CTR_RIGHT_REAR_WINDOW_NAME "CdcCentralCtrRightRearWindow"
+#define A07_ECU_2_CA_CDC_CENTRAL_CTR_LEFT_REAR_WINDOW_NAME "CdcCentralCtrLeftRearWindow"
+#define A07_ECU_2_CA_CDC_CENTRAL_CTR_PASSENGER_WINDOW_NAME "CdcCentralCtrPassengerWindow"
+#define A07_ECU_2_CA_CDC_CENTRAL_CTR_DRIVER_WINDOW_NAME "CdcCentralCtrDriverWindow"
+#define A07_ECU_2_CA_CDC_LEFT_RIGHT_MIRROR_SET_STS_NAME "CdcLeftRightMirrorSetSts"
+#define A07_ECU_2_CA_CDC_DRVR_T_SET_NAME "CdcDrvrTSet"
+#define A07_ECU_2_CA_CDC_FRNT_WIND_LVL_SET_NAME "CdcFrntWindLvlSet"
+#define A07_ECU_2_CA_CDC_FRONT_AC_OFF_SET_NAME "CdcFrontAcOffSet"
+#define A07_ECU_372_CDC_MIRR_UP_KEY_STS_NAME "CdcMirrUpKeySts"
+#define A07_ECU_372_CDC_MIRR_DOWN_KEY_STS_NAME "CdcMirrDownKeySts"
+#define A07_ECU_372_CDC_MIRR_RI_TURN_KEY_STS_NAME "CdcMirrRiTurnKeySts"
+#define A07_ECU_372_CDC_MIRR_LE_TURN_KEY_STS_NAME "CdcMirrLeTurnKeySts"
+#define A07_HGW_1_CA_WHL_SPD_RI_RE_DATA_VLD_NAME "WhlSpdRiReDataVld"
+#define A07_HGW_1_CA_WHL_SPD_RI_RE_DATA_NAME "WhlSpdRiReData"
+#define A07_HGW_1_CA_WHL_SPD_LE_RE_DATA_VLD_NAME "WhlSpdLeReDataVld"
+#define A07_HGW_1_CA_WHL_SPD_LE_RE_DATA_NAME "WhlSpdLeReData"
+#define A07_HGW_1_CA_ESP_VEH_SPD_VLD_NAME "EspVehSpdVld"
+#define A07_HGW_1_CA_ESP_VEH_SPD_NAME "EspVehSpd"
+#define A07_HGW_1_CA_WHL_SPD_RI_FRNT_DATA_VLD_NAME "WhlSpdRiFrntDataVld"
+#define A07_HGW_1_CA_WHL_SPD_RI_FRNT_DATA_NAME "WhlSpdRiFrntData"
+#define A07_HGW_1_CA_WHL_SPD_LE_FRNT_DATA_VLD_NAME "WhlSpdLeFrntDataVld"
+#define A07_HGW_1_CA_WHL_SPD_LE_FRNT_DATA_NAME "WhlSpdLeFrntData"
+#define A07_HGW_169_VCU_GEAR_POSN_NAME "VcuGearPosn"
+#define A07_HGW_169_VCU_PT_TQ_REAL_VLD_NAME "VcuPtTqRealVld"
+#define A07_HGW_169_VCU_PT_TQ_REQ_AVL_NAME "VcuPtTqReqAvl"
+#define A07_HGW_169_VCU_SHIFT_LVL_POSN_NAME "VcuShiftLvlPosn"
+#define A07_HGW_169_VCU_PT_TQ_REAL_NAME "VcuPtTqReal"
+#define A07_HGW_169_VCU_RDY_STS_NAME "VcuRdySts"
+#define A07_HGW_178_EPS_ACTUAL_MOTOR_TORQ_NAME "EPS_ActualMotorTorq"
+#define A07_HGW_178_EPS_MAX_SAFETY_TORSION_BAR_TORQ_NAME "EPS_MaxSafetyTorsionBarTorq"
+#define A07_HGW_178_EPS_MIN_SAFETY_TORSION_BAR_TORQ_NAME "EPS_MinSafetyTorsionBarTorq"
+#define A07_HGW_178_EPS_ACTUAL_TORSION_BAR_TORQ_NAME "EPS_ActualTorsionBarTorq"
+#define A07_HGW_188_EPS_SAS_STEER_AG_NAME "EpsSasSteerAg"
+#define A07_HGW_188_EPS_STEER_AG_RATE_NAME "EpsSteerAgRate"
+#define A07_HGW_188_EPS_SAS_STEER_AG_VLD_NAME "EpsSasSteerAgVld"
+#define A07_HGW_188_EPS_SAS_CAL_STS_NAME "EpsSasCalSts"
+#define A07_HGW_280_ESP_LONG_ACCEL_NAME "ESP_LongAccel"
+#define A07_HGW_213_ESP_BRAKE_FORCE_NAME "ESP_BrakeForce"
+#define A07_HGW_213_ESP_CDD_ACTIVE_APA_NAME "ESP_CDD_Active_APA"
+#define A07_HGW_213_ESP_CDD_AVAILABLE_APA_NAME "ESP_CDD_Available_APA"
+#define A07_HGW_257_EPS_IACC_ABORTREASON_NAME "EPS_IACC_abortreason"
+#define A07_HGW_186_EPS_MEASURED_TORSION_BAR_TORQUE_NAME "EPS_MeasuredTorsionBarTorque"
+#define A07_HGW_186_EPS_LAT_CTRL_ACTIVE_NAME "EPS_LatCtrlActive"
+#define A07_HGW_186_EPS_LAT_CTRL_AVAILABILITY_STATUS_NAME "EPS_LatCtrlAvailabilityStatus"
+#define A07_HGW_58_SRS_CRASH_OUTP_STS_NAME "SrsCrashOutpSts"
+#define A07_HGW_58_SRS_DRVR_BUC_SWT_STS_NAME "SrsDrvrBucSwtSts"
+#define A07_HGW_58_SRS_PASS_BUC_SWT_STS_NAME "SrsPassBucSwtSts"
+#define A07_HGW_58_SRS_LE_RE_BUC_SWT_STS_NAME "SrsLeReBucSwtSts"
+#define A07_HGW_58_SRS_MID_RE_BUC_SWT_STS_NAME "SrsMidReBucSwtSts"
+#define A07_HGW_58_SRS_RI_RE_BUC_SWT_STS_NAME "SrsRiReBucSwtSts"
+#define A07_HGW_2_DA_CDC_AUTO_HEAD_LI_SET_NAME "CdcAutoHeadLiSet"
+#define A07_HGW_2_DA_CDC_TOT_MILG_NAME "CdcTotMilg"
+#define A07_HGW_2_DA_HU_SENTRY_MODE_ST_NAME "HU_SentryModeSt"
+#define A07_HGW_290_BCM_TURN_INDCR_LE_NAME "BcmTurnIndcrLe"
+#define A07_HGW_290_BCM_TURN_INDCR_RI_NAME "BcmTurnIndcrRi"
+#define A07_HGW_290_BCM_POSN_LMP_STS_NAME "BcmPosnLmpSts"
+#define A07_HGW_290_BCM_DRVR_DOOR_STS_NAME "BcmDrvrDoorSts"
+#define A07_HGW_290_BCM_PASS_DOOR_STS_NAME "BcmPassDoorSts"
+#define A07_HGW_290_BCM_LE_RE_DOOR_STS_NAME "BcmLeReDoorSts"
+#define A07_HGW_290_BCM_RI_RE_DOOR_STS_NAME "BcmRiReDoorSts"
+#define A07_HGW_290_BDC_DRVR_STS_NAME "BdcDrvrSts"
+#define A07_HGW_290_BCM_PASS_DOOR_LCK_STS_NAME "BcmPassDoorLckSts"
+#define A07_HGW_290_BCM_PWR_STS_FB_NAME "BcmPwrStsFb"
+#define A07_HGW_290_BCM_DRVR_DOOR_LCK_STS_NAME "BcmDrvrDoorLckSts"
+
+/**
+ * Signals in message ECU_1B2.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_ecu_1_b2_t {
+    /**
+     * ?\B7\BD\CF\F2\C5\CC\D7\F3\B4\F2Ϊ\D5\FD\A1\A3
+     * ?\D4\DAEPSECU\BF\AAʼ\D6\FA\C1\A6֮ǰ\A1\A2Initialֵ\CA\E4\B3\F6Ϊ(0)\A1\A3
+     * ?0x7FF:Reserved
+     *
+     * Range: 0..2046 (-20.48..20.44 Nm)
+     * Scale: 0.02
+     * Offset: -20.48
+     */
+    uint16_t acc_motor_torque_max_limit_request;
+
+    /**
+     * ?\B7\BD\CF\F2\C5\CC\D7\F3\B4\F2Ϊ\D5\FD\A1\A3
+     * ?\D4\DAEPSECU\BF\AAʼ\D6\FA\C1\A6֮ǰ\A1\A2Initialֵ\CA\E4\B3\F6Ϊ(0)\A1\A3
+     * ?0x7FF:Reserved
+     *
+     * Range: 0..2046 (-20.48..20.44 Nm)
+     * Scale: 0.02
+     * Offset: -20.48
+     */
+    uint16_t acc_motor_torque_min_limit_request;
+
+    /**
+     * \B7\BD\CF\F2\C5\CC\CD\F9\C1\E3\B5\E3\D7\F3תΪ\D5\FD\A3\AC\C1\E3\B5\E3\D3\D2תΪ\B8\BA
+     * 0x384A-3FFF:Reserved
+     *
+     * Range: 0..14400 (-720.0..720.0 degree)
+     * Scale: 0.1
+     * Offset: -720.0
+     */
+    uint16_t acc_lat_ang_req;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t acc_lat_ang_req_active;
+};
+
+/**
+ * Signals in message ECU_23F.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_ecu_23_f_t {
+    /**
+     * \BC\B4PAS_PSC_Status
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_error_status;
+
+    /**
+     * PAS_PSC_EPS_Control_Requ
+     * est
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_steering_angle_req_protection;
+
+    /**
+     * \BC\B4PAS_PSC_SetSteeringWheel
+     * Ang
+     *
+     * Range: -7800..7800 (-780.0..780.0 degree)
+     * Scale: 0.1
+     * Offset: 0.0
+     */
+    int16_t apa_steering_angle_req;
+};
+
+/**
+ * Signals in message ECU_23C.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_ecu_23_c_t {
+    /**
+     * ACC target acceleration for transmission.
+     *
+     * Range: 0..255 (-5.0..7.75 m/s2)
+     * Scale: 0.05
+     * Offset: -5.0
+     */
+    uint8_t acc_acc_target_acceleration;
+
+    /**
+     * (\CD\F8\B9ؼ\D3\C3ܷ\A2\CB͸\F8RFBT)
+     * APA\C5\E4\D6÷\A2\CBͷ\BDΪAPA
+     *
+     * Range: 0..31 (0.0..31.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_function_on_off_sts;
+
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t acc_cdd_active;
+
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t acc_driveoff_request;
+
+    /**
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t acc_acc_mode;
+
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t acc_acc_trq_req_active;
+
+    /**
+     * REVר\D3\C3
+     *
+     * Range: 0..2000 (-5000.0..5000.0 NM)
+     * Scale: 5
+     * Offset: -5000
+     */
+    uint16_t acc_acc_trq_req;
+
+    /**
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t adc_work_mode;
+
+    /**
+     * APA\C5\E4\D6÷\A2\CBͷ\BDΪAPA
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_ep_brequest;
+
+    /**
+     * APA\C5\E4\D6÷\A2\CBͷ\BDΪAPA
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_ep_brequest_valid;
+
+    /**
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_esp_brake_function_mode;
+
+    /**
+     * Range: 0..1 (0.0..1.0 NA)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_target_acceleration_valid;
+
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_trans_prnd_shift_enable;
+
+    /**
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_trans_prnd_shift_request;
+
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_trans_prnd_shift_req_valid;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_vcu_ready_req;
+};
+
+/**
+ * Signals in message ECU_30A.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_ecu_30_a_t {
+    /**
+     * 
+     *
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t ads_udlc_turn_light_req;
+};
+
+/**
+ * Signals in message ECU_2BF.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_ecu_2_bf_t {
+    /**
+     * APA\C5\E4\D6÷\A2\CBͷ\BDΪAPA
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t apa_bcm_horn_command;
+};
+
+/**
+ * Signals in message ECU_2CA.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_ecu_2_ca_t {
+    /**
+     * 600
+     *
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_auto_head_li_set;
+
+    /**
+     * 600
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_drvr_sld_fwd_st;
+
+    /**
+     * 600
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_drvr_sld_backw_st;
+
+    /**
+     * 600
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_drvr_re_upwd_st;
+
+    /**
+     * 600
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_drvr_re_dwnwd_st;
+
+    /**
+     * 600
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_drvr_back_fwd_st;
+
+    /**
+     * 600
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_drvr_back_back_st;
+
+    /**
+     * 601
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_re_mirr_fold_req;
+
+    /**
+     * 601
+     *
+     * Range: 0..15 (0.0..15.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_central_ctr_right_rear_window;
+
+    /**
+     * 601
+     *
+     * Range: 0..15 (0.0..15.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_central_ctr_left_rear_window;
+
+    /**
+     * 601
+     *
+     * Range: 0..15 (0.0..15.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_central_ctr_passenger_window;
+
+    /**
+     * 601
+     *
+     * Range: 0..15 (0.0..15.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_central_ctr_driver_window;
+
+    /**
+     * 602
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_left_right_mirror_set_sts;
+
+    /**
+     * \D7Ô¶\AF\BFÕµ\F7\A3\BA0x00:noreq
+     * 0x01:LO
+     * 0x02\A1\AB0x1E:18~32\A1\E6
+     * 0x1F:HI
+     * 0x20:upreq
+     * 0x21:downreq
+     * 0x22\A1\AB0x3E:reversed
+     * 0x3F:Invalid
+     * \CAÖ¶\AF\BFÕµ\F7\A3\BA0x00:noreq
+     * 
+     * 0x01\A1\AB0x10:Level1\A1\ABLevel16
+     * 0x11\A1\AB0x1F:reversed
+     * 0x20:upreq
+     * 0x21:downreq
+     * 0x22\A1\AB0x3E:reversed
+     * 0x3F:Invalid
+     *
+     * Range: 0..63 (17.0..48.5 -)
+     * Scale: 0.5
+     * Offset: 17.0
+     */
+    uint8_t cdc_drvr_t_set;
+
+    /**
+     * 0xB-0xF:reserve
+     *
+     * Range: 0..15 (0.0..15.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_frnt_wind_lvl_set;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_front_ac_off_set;
+};
+
+/**
+ * Signals in message ECU_372.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_ecu_372_t {
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_mirr_up_key_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_mirr_down_key_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_mirr_ri_turn_key_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_mirr_le_turn_key_sts;
+};
+
+/**
+ * Signals in message HGW_1CA.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_1_ca_t {
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t whl_spd_ri_re_data_vld;
+
+    /**
+     * Range: 0..8191 (0.0..460.74375 km/h)
+     * Scale: 0.05625
+     * Offset: 0.0
+     */
+    uint16_t whl_spd_ri_re_data;
+
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t whl_spd_le_re_data_vld;
+
+    /**
+     * Range: 0..8191 (0.0..460.74375 km/h)
+     * Scale: 0.05625
+     * Offset: 0.0
+     */
+    uint16_t whl_spd_le_re_data;
+
+    /**
+     * TCU\BD\D3\CA\D5ΪDCTר\D3\C3
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t esp_veh_spd_vld;
+
+    /**
+     * 
+     *
+     * Range: 0..8191 (0.0..460.74375 km/h)
+     * Scale: 0.05625
+     * Offset: 0.0
+     */
+    uint16_t esp_veh_spd;
+
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t whl_spd_ri_frnt_data_vld;
+
+    /**
+     * Range: 0..8191 (0.0..460.74375 km/h)
+     * Scale: 0.05625
+     * Offset: 0.0
+     */
+    uint16_t whl_spd_ri_frnt_data;
+
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t whl_spd_le_frnt_data_vld;
+
+    /**
+     * Range: 0..8191 (0.0..460.74375 km/h)
+     * Scale: 0.05625
+     * Offset: 0.0
+     */
+    uint16_t whl_spd_le_frnt_data;
+};
+
+/**
+ * Signals in message HGW_169.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_169_t {
+    /**
+     * 
+     *
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t vcu_gear_posn;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t vcu_pt_tq_real_vld;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t vcu_pt_tq_req_avl;
+
+    /**
+     * 0x5~0xE:Reserved
+     *
+     * Range: 0..15 (0.0..15.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t vcu_shift_lvl_posn;
+
+    /**
+     * 
+     *
+     * Range: 0..65535 (-32768.0..32767.0 Nm)
+     * Scale: 1
+     * Offset: -32768
+     */
+    uint16_t vcu_pt_tq_real;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t vcu_rdy_sts;
+};
+
+/**
+ * Signals in message HGW_178.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_178_t {
+    /**
+     * ?\B7\BD\CF\F2\C5\CC\D7\F3\B4\F2Ϊ\D5\FD\A1\A3
+     * ?\D4\DAEPSECU\BF\AAʼ\D6\FA\C1\A6֮ǰ\A1\A2Initialֵ\CA\E4\B3\F6Ϊ(0)\A1\A3
+     * ?\D2쳣״̬\A3\A8ȷ\B6\A8\B9\CA\D5ϣ\A9\B5\C4\C7\E9\BF\F6\CF¡\A2Invalidֵ\CA\E4\B3\F6Ϊ(0x7FF)\A1\A3
+     *
+     * Range: 0..4094 (-20.48..20.46 Nm)
+     * Scale: 0.01
+     * Offset: -20.48
+     */
+    uint16_t eps_actual_motor_torq;
+
+    /**
+     * ?\B7\BD\CF\F2\C5\CC\D7\F3\B4\F2Ϊ\D5\FD\A1\A3
+     * ?\D4\DAEPSECU\BF\AAʼ\D6\FA\C1\A6֮ǰ\A1\A2Initialֵ\CA\E4\B3\F6Ϊ(0)\A1\A3
+     * ?\D2쳣״̬\A3\A8ȷ\B6\A8\B9\CA\D5ϣ\A9\B5\C4\C7\E9\BF\F6\CF¡\A2Invalidֵ\CA\E4\B3\F6Ϊ(0x7FF)\A1\A3
+     * ƽ̨Ϊ10ms\A3\ACCD569\CC\D8\C0\FDΪ8ms
+     *
+     * Range: 0..2046 (-20.48..20.44 Nm)
+     * Scale: 0.02
+     * Offset: -20.48
+     */
+    uint16_t eps_max_safety_torsion_bar_torq;
+
+    /**
+     * ƽ̨Ϊ10ms\A3\ACCD569\CC\D8\C0\FDΪ8ms
+     * ?\B7\BD\CF\F2\C5\CC\D7\F3\B4\F2Ϊ\D5\FD\A1\A3
+     * ?\D4\DAEPSECU\BF\AAʼ\D6\FA\C1\A6֮ǰ\A1\A2Initialֵ\CA\E4\B3\F6Ϊ(0)\A1\A3
+     * ?\D2쳣״̬\A3\A8ȷ\B6\A8\B9\CA\D5ϣ\A9\B5\C4\C7\E9\BF\F6\CF¡\A2Invalidֵ\CA\E4\B3\F6Ϊ(0x7FF)\A1\A3
+     *
+     * Range: 0..2046 (-20.48..20.44 Nm)
+     * Scale: 0.02
+     * Offset: -20.48
+     */
+    uint16_t eps_min_safety_torsion_bar_torq;
+
+    /**
+     * ?\B7\BD\CF\F2\C5\CC\D7\F3\B4\F2Ϊ\D5\FD\A1\A3
+     * ?\D4\DAEPSECU\BF\AAʼ\D6\FA\C1\A6֮ǰ\A1\A2Initialֵ\CA\E4\B3\F6Ϊ(0)\A1\A3
+     * ?\D2쳣״̬\A3\A8ȷ\B6\A8\B9\CA\D5ϣ\A9\B5\C4\C7\E9\BF\F6\CF¡\A2Invalidֵ\CA\E4\B3\F6Ϊ(0x7FF)\A1\A3
+     * ƽ̨Ϊ10ms\A3\ACCD569\CC\D8\C0\FDΪ8ms
+     *
+     * Range: 0..2046 (-20.48..20.44 Nm)
+     * Scale: 0.02
+     * Offset: -20.48
+     */
+    uint16_t eps_actual_torsion_bar_torq;
+};
+
+/**
+ * Signals in message HGW_188.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_188_t {
+    /**
+     * \B7\BD\CF\F2\C5\CC\CD\F9\C1\E3\B5\E3\D7\F3תΪ\D5\FD\A3\AC\C1\E3\B5\E3\D3\D2תΪ\B8\BA
+     * Steeringwheelangle(N:valueofthemessage):
+     * :N\A1\C10.1,for0<N\A1\DC32767
+     * :(N-65536)\A1\C10.1,forN\A3\BE32767
+     * Note:thatClockwiserotationis\A1\AE-\A1\AEandanti-Clockwiserotationis\A1\AE+\A1\AE
+     *
+     * Range: -7800..7800 (-780.0..780.0 degree)
+     * Scale: 0.1
+     * Offset: 0.0
+     */
+    uint16_t eps_sas_steer_ag;
+
+    /**
+     * \B7\BD\CF\F2\C5\CC\CD\F9\C1\E3\B5\E3\D7\F3תΪ\D5\FD,\C1\E3\B5\E3\D3\D2תΪ\B8\BA
+     * SteeringAngleSpeed
+     * (N:valueofthemessage):
+     * :N\A1\C14,for0<N\A1\DC254
+     * :errorsignaled,forN>254
+     *
+     * Range: 0..254 (0.0..1016.0 deg/s)
+     * Scale: 4
+     * Offset: 0
+     */
+    uint8_t eps_steer_ag_rate;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t eps_sas_steer_ag_vld;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t eps_sas_cal_sts;
+};
+
+/**
+ * Signals in message HGW_280.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_280_t {
+    /**
+     * Range: 0..8190 (-32.0..49.9 m/s2)
+     * Scale: 0.01
+     * Offset: -32.0
+     */
+    uint16_t esp_long_accel;
+};
+
+/**
+ * Signals in message HGW_213.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_213_t {
+    /**
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t esp_brake_force;
+
+    /**
+     * APA\C5\E4\D6ý\D3\CAշ\BD\CE\DEBDC
+     *
+     * Range: 0..1 (0.0..1.0 NA)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t esp_cdd_active_apa;
+
+    /**
+     * APA\C5\E4\D6ý\D3\CAշ\BD\CE\DEBDC
+     *
+     * Range: 0..1 (0.0..1.0 NA)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t esp_cdd_available_apa;
+};
+
+/**
+ * Signals in message HGW_257.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_257_t {
+    /**
+     * 
+     *
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t eps_iacc_abortreason;
+};
+
+/**
+ * Signals in message HGW_186.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_186_t {
+    /**
+     * ?\CB\E3ʽ\A3\BA(MeasuredTorsionBarTorque\A8C0x800)*0.01
+     * ?\B7\BD\CF\F2\C5\CC\D7\F3\B4\F2Ϊ\D5\FD\A1\A3
+     * ?\D4\DAEPSECU\BF\AAʼ\D6\FA\C1\A6֮ǰ\A1\A2Initialֵ\CA\E4\B3\F6Ϊ(0)\A1\A3
+     * ?\D2쳣״̬\A3\A8ȷ\B6\A8\B9\CA\D5ϣ\A9\B5\C4\C7\E9\BF\F6\CF¡\A2Invalidֵ\CA\E4\B3\F6Ϊ(0xFFF)\A1\A3
+     *
+     * Range: 0..4094 (-20.48..20.46 Nm)
+     * Scale: 0.01
+     * Offset: -20.48
+     */
+    uint16_t eps_measured_torsion_bar_torque;
+
+    /**
+     * ƽ̨Ϊ10ms\A3\ACCD569\CC\D8\C0\FDΪ8ms
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t eps_lat_ctrl_active;
+
+    /**
+     * ƽ̨Ϊ10ms\A3\ACCD569\CC\D8\C0\FDΪ8ms
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t eps_lat_ctrl_availability_status;
+};
+
+/**
+ * Signals in message HGW_58.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_58_t {
+    /**
+     * \C5\F6ײ\D0źŶ\A8\D2\E5Ϊ\B1\BE\B1\A8\CE\C4Ψһ\B5\C4\CA¼\FE\B4\A5\B7\A2\D0ź\C5,\B5\B1\D0ź\C5ֵΪ\B7\C70ʱ\A3\AC\D2\D420ms\D6\DC\C6\DA\D6ظ\B4\B7\A2\CB\CD10\B4Σ\AC֮\BA\F3\D6\DC\C6ڻָ\B4Ϊ500ms
+     * 0x2~0xF:NotUsed
+     *
+     * Range: 0..15 (0.0..15.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t srs_crash_outp_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t srs_drvr_buc_swt_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t srs_pass_buc_swt_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t srs_le_re_buc_swt_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t srs_mid_re_buc_swt_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t srs_ri_re_buc_swt_sts;
+};
+
+/**
+ * Signals in message HGW_2DA.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_2_da_t {
+    /**
+     * 600
+     *
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t cdc_auto_head_li_set;
+
+    /**
+     * 
+     *
+     * Range: 0..16777215 (0.0..1677721.5 Km)
+     * Scale: 0.1
+     * Offset: 0.0
+     */
+    uint32_t cdc_tot_milg;
+
+    /**
+     * 
+     *
+     * Range: 0..7 (0.0..7.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t hu_sentry_mode_st;
+};
+
+/**
+ * Signals in message HGW_290.
+ *
+ * CANFD 
+ *
+ * All signal values are as on the CAN bus.
+ */
+struct a07_hgw_290_t {
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_turn_indcr_le;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_turn_indcr_ri;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_posn_lmp_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_drvr_door_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_pass_door_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_le_re_door_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_ri_re_door_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..1 (0.0..1.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bdc_drvr_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_pass_door_lck_sts;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_pwr_sts_fb;
+
+    /**
+     * 
+     *
+     * Range: 0..3 (0.0..3.0 -)
+     * Scale: 1
+     * Offset: 0
+     */
+    uint8_t bcm_drvr_door_lck_sts;
+};
+
+/**
+ * Pack message ECU_1B2.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_ecu_1_b2_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_1_b2_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message ECU_1B2.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_ecu_1_b2_unpack(
+    struct a07_ecu_1_b2_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from ECU_1B2.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_ecu_1_b2_init(struct a07_ecu_1_b2_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_ecu_1_b2_acc_motor_torque_max_limit_request_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_1_b2_acc_motor_torque_max_limit_request_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_1_b2_acc_motor_torque_max_limit_request_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_ecu_1_b2_acc_motor_torque_min_limit_request_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_1_b2_acc_motor_torque_min_limit_request_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_1_b2_acc_motor_torque_min_limit_request_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_ecu_1_b2_acc_lat_ang_req_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_1_b2_acc_lat_ang_req_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_1_b2_acc_lat_ang_req_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_1_b2_acc_lat_ang_req_active_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_1_b2_acc_lat_ang_req_active_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_1_b2_acc_lat_ang_req_active_is_in_range(uint8_t value);
+
+/**
+ * Pack message ECU_23F.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_ecu_23_f_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_23_f_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message ECU_23F.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_ecu_23_f_unpack(
+    struct a07_ecu_23_f_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from ECU_23F.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_ecu_23_f_init(struct a07_ecu_23_f_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_f_apa_error_status_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_f_apa_error_status_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_f_apa_error_status_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_f_apa_steering_angle_req_protection_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_f_apa_steering_angle_req_protection_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_f_apa_steering_angle_req_protection_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+int16_t a07_ecu_23_f_apa_steering_angle_req_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_f_apa_steering_angle_req_decode(int16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_f_apa_steering_angle_req_is_in_range(int16_t value);
+
+/**
+ * Pack message ECU_23C.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_ecu_23_c_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_23_c_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message ECU_23C.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_ecu_23_c_unpack(
+    struct a07_ecu_23_c_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from ECU_23C.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_ecu_23_c_init(struct a07_ecu_23_c_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_acc_acc_target_acceleration_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_acc_acc_target_acceleration_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_acc_acc_target_acceleration_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_function_on_off_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_function_on_off_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_function_on_off_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_acc_cdd_active_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_acc_cdd_active_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_acc_cdd_active_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_acc_driveoff_request_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_acc_driveoff_request_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_acc_driveoff_request_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_acc_acc_mode_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_acc_acc_mode_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_acc_acc_mode_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_acc_acc_trq_req_active_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_acc_acc_trq_req_active_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_acc_acc_trq_req_active_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_ecu_23_c_acc_acc_trq_req_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_acc_acc_trq_req_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_acc_acc_trq_req_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_adc_work_mode_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_adc_work_mode_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_adc_work_mode_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_ep_brequest_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_ep_brequest_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_ep_brequest_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_ep_brequest_valid_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_ep_brequest_valid_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_ep_brequest_valid_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_esp_brake_function_mode_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_esp_brake_function_mode_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_esp_brake_function_mode_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_target_acceleration_valid_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_target_acceleration_valid_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_target_acceleration_valid_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_trans_prnd_shift_enable_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_trans_prnd_shift_enable_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_trans_prnd_shift_enable_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_trans_prnd_shift_request_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_trans_prnd_shift_request_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_trans_prnd_shift_request_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_trans_prnd_shift_req_valid_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_trans_prnd_shift_req_valid_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_trans_prnd_shift_req_valid_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_23_c_apa_vcu_ready_req_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_23_c_apa_vcu_ready_req_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_23_c_apa_vcu_ready_req_is_in_range(uint8_t value);
+
+/**
+ * Pack message ECU_30A.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_ecu_30_a_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_30_a_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message ECU_30A.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_ecu_30_a_unpack(
+    struct a07_ecu_30_a_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from ECU_30A.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_ecu_30_a_init(struct a07_ecu_30_a_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_30_a_ads_udlc_turn_light_req_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_30_a_ads_udlc_turn_light_req_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_30_a_ads_udlc_turn_light_req_is_in_range(uint8_t value);
+
+/**
+ * Pack message ECU_2BF.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_ecu_2_bf_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_2_bf_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message ECU_2BF.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_ecu_2_bf_unpack(
+    struct a07_ecu_2_bf_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from ECU_2BF.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_ecu_2_bf_init(struct a07_ecu_2_bf_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_bf_apa_bcm_horn_command_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_bf_apa_bcm_horn_command_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_bf_apa_bcm_horn_command_is_in_range(uint8_t value);
+
+/**
+ * Pack message ECU_2CA.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_ecu_2_ca_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_2_ca_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message ECU_2CA.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_ecu_2_ca_unpack(
+    struct a07_ecu_2_ca_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from ECU_2CA.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_ecu_2_ca_init(struct a07_ecu_2_ca_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_auto_head_li_set_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_auto_head_li_set_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_auto_head_li_set_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_drvr_sld_fwd_st_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_drvr_sld_fwd_st_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_drvr_sld_fwd_st_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_drvr_sld_backw_st_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_drvr_sld_backw_st_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_drvr_sld_backw_st_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_drvr_re_upwd_st_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_drvr_re_upwd_st_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_drvr_re_upwd_st_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_drvr_re_dwnwd_st_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_drvr_re_dwnwd_st_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_drvr_re_dwnwd_st_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_drvr_back_fwd_st_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_drvr_back_fwd_st_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_drvr_back_fwd_st_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_drvr_back_back_st_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_drvr_back_back_st_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_drvr_back_back_st_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_re_mirr_fold_req_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_re_mirr_fold_req_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_re_mirr_fold_req_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_central_ctr_right_rear_window_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_central_ctr_right_rear_window_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_central_ctr_right_rear_window_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_central_ctr_left_rear_window_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_central_ctr_left_rear_window_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_central_ctr_left_rear_window_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_central_ctr_passenger_window_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_central_ctr_passenger_window_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_central_ctr_passenger_window_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_central_ctr_driver_window_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_central_ctr_driver_window_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_central_ctr_driver_window_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_left_right_mirror_set_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_left_right_mirror_set_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_left_right_mirror_set_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_drvr_t_set_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_drvr_t_set_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_drvr_t_set_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_frnt_wind_lvl_set_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_frnt_wind_lvl_set_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_frnt_wind_lvl_set_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_2_ca_cdc_front_ac_off_set_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_2_ca_cdc_front_ac_off_set_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_2_ca_cdc_front_ac_off_set_is_in_range(uint8_t value);
+
+/**
+ * Pack message ECU_372.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_ecu_372_pack(
+    uint8_t *dst_p,
+    const struct a07_ecu_372_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message ECU_372.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_ecu_372_unpack(
+    struct a07_ecu_372_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from ECU_372.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_ecu_372_init(struct a07_ecu_372_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_372_cdc_mirr_up_key_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_372_cdc_mirr_up_key_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_372_cdc_mirr_up_key_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_372_cdc_mirr_down_key_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_372_cdc_mirr_down_key_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_372_cdc_mirr_down_key_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_372_cdc_mirr_ri_turn_key_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_372_cdc_mirr_ri_turn_key_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_372_cdc_mirr_ri_turn_key_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_ecu_372_cdc_mirr_le_turn_key_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_ecu_372_cdc_mirr_le_turn_key_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_ecu_372_cdc_mirr_le_turn_key_sts_is_in_range(uint8_t value);
+
+/**
+ * Pack message HGW_1CA.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_1_ca_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_1_ca_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_1CA.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_1_ca_unpack(
+    struct a07_hgw_1_ca_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_1CA.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_1_ca_init(struct a07_hgw_1_ca_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_1_ca_whl_spd_ri_re_data_vld_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_whl_spd_ri_re_data_vld_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_whl_spd_ri_re_data_vld_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_1_ca_whl_spd_ri_re_data_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_whl_spd_ri_re_data_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_whl_spd_ri_re_data_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_1_ca_whl_spd_le_re_data_vld_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_whl_spd_le_re_data_vld_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_whl_spd_le_re_data_vld_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_1_ca_whl_spd_le_re_data_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_whl_spd_le_re_data_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_whl_spd_le_re_data_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_1_ca_esp_veh_spd_vld_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_esp_veh_spd_vld_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_esp_veh_spd_vld_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_1_ca_esp_veh_spd_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_esp_veh_spd_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_esp_veh_spd_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_1_ca_whl_spd_ri_frnt_data_vld_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_whl_spd_ri_frnt_data_vld_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_whl_spd_ri_frnt_data_vld_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_1_ca_whl_spd_ri_frnt_data_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_whl_spd_ri_frnt_data_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_whl_spd_ri_frnt_data_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_1_ca_whl_spd_le_frnt_data_vld_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_whl_spd_le_frnt_data_vld_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_whl_spd_le_frnt_data_vld_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_1_ca_whl_spd_le_frnt_data_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_1_ca_whl_spd_le_frnt_data_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_1_ca_whl_spd_le_frnt_data_is_in_range(uint16_t value);
+
+/**
+ * Pack message HGW_169.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_169_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_169_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_169.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_169_unpack(
+    struct a07_hgw_169_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_169.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_169_init(struct a07_hgw_169_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_169_vcu_gear_posn_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_169_vcu_gear_posn_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_169_vcu_gear_posn_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_169_vcu_pt_tq_real_vld_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_169_vcu_pt_tq_real_vld_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_169_vcu_pt_tq_real_vld_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_169_vcu_pt_tq_req_avl_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_169_vcu_pt_tq_req_avl_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_169_vcu_pt_tq_req_avl_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_169_vcu_shift_lvl_posn_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_169_vcu_shift_lvl_posn_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_169_vcu_shift_lvl_posn_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_169_vcu_pt_tq_real_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_169_vcu_pt_tq_real_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_169_vcu_pt_tq_real_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_169_vcu_rdy_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_169_vcu_rdy_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_169_vcu_rdy_sts_is_in_range(uint8_t value);
+
+/**
+ * Pack message HGW_178.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_178_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_178_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_178.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_178_unpack(
+    struct a07_hgw_178_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_178.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_178_init(struct a07_hgw_178_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_178_eps_actual_motor_torq_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_178_eps_actual_motor_torq_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_178_eps_actual_motor_torq_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_178_eps_max_safety_torsion_bar_torq_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_178_eps_max_safety_torsion_bar_torq_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_178_eps_max_safety_torsion_bar_torq_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_178_eps_min_safety_torsion_bar_torq_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_178_eps_min_safety_torsion_bar_torq_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_178_eps_min_safety_torsion_bar_torq_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_178_eps_actual_torsion_bar_torq_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_178_eps_actual_torsion_bar_torq_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_178_eps_actual_torsion_bar_torq_is_in_range(uint16_t value);
+
+/**
+ * Pack message HGW_188.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_188_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_188_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_188.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_188_unpack(
+    struct a07_hgw_188_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_188.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_188_init(struct a07_hgw_188_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_188_eps_sas_steer_ag_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_188_eps_sas_steer_ag_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_188_eps_sas_steer_ag_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_188_eps_steer_ag_rate_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_188_eps_steer_ag_rate_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_188_eps_steer_ag_rate_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_188_eps_sas_steer_ag_vld_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_188_eps_sas_steer_ag_vld_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_188_eps_sas_steer_ag_vld_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_188_eps_sas_cal_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_188_eps_sas_cal_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_188_eps_sas_cal_sts_is_in_range(uint8_t value);
+
+/**
+ * Pack message HGW_280.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_280_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_280_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_280.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_280_unpack(
+    struct a07_hgw_280_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_280.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_280_init(struct a07_hgw_280_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_280_esp_long_accel_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_280_esp_long_accel_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_280_esp_long_accel_is_in_range(uint16_t value);
+
+/**
+ * Pack message HGW_213.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_213_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_213_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_213.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_213_unpack(
+    struct a07_hgw_213_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_213.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_213_init(struct a07_hgw_213_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_213_esp_brake_force_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_213_esp_brake_force_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_213_esp_brake_force_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_213_esp_cdd_active_apa_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_213_esp_cdd_active_apa_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_213_esp_cdd_active_apa_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_213_esp_cdd_available_apa_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_213_esp_cdd_available_apa_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_213_esp_cdd_available_apa_is_in_range(uint8_t value);
+
+/**
+ * Pack message HGW_257.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_257_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_257_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_257.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_257_unpack(
+    struct a07_hgw_257_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_257.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_257_init(struct a07_hgw_257_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_257_eps_iacc_abortreason_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_257_eps_iacc_abortreason_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_257_eps_iacc_abortreason_is_in_range(uint8_t value);
+
+/**
+ * Pack message HGW_186.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_186_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_186_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_186.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_186_unpack(
+    struct a07_hgw_186_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_186.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_186_init(struct a07_hgw_186_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint16_t a07_hgw_186_eps_measured_torsion_bar_torque_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_186_eps_measured_torsion_bar_torque_decode(uint16_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_186_eps_measured_torsion_bar_torque_is_in_range(uint16_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_186_eps_lat_ctrl_active_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_186_eps_lat_ctrl_active_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_186_eps_lat_ctrl_active_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_186_eps_lat_ctrl_availability_status_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_186_eps_lat_ctrl_availability_status_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_186_eps_lat_ctrl_availability_status_is_in_range(uint8_t value);
+
+/**
+ * Pack message HGW_58.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_58_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_58_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_58.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_58_unpack(
+    struct a07_hgw_58_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_58.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_58_init(struct a07_hgw_58_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_58_srs_crash_outp_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_58_srs_crash_outp_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_58_srs_crash_outp_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_58_srs_drvr_buc_swt_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_58_srs_drvr_buc_swt_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_58_srs_drvr_buc_swt_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_58_srs_pass_buc_swt_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_58_srs_pass_buc_swt_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_58_srs_pass_buc_swt_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_58_srs_le_re_buc_swt_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_58_srs_le_re_buc_swt_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_58_srs_le_re_buc_swt_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_58_srs_mid_re_buc_swt_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_58_srs_mid_re_buc_swt_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_58_srs_mid_re_buc_swt_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_58_srs_ri_re_buc_swt_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_58_srs_ri_re_buc_swt_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_58_srs_ri_re_buc_swt_sts_is_in_range(uint8_t value);
+
+/**
+ * Pack message HGW_2DA.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_2_da_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_2_da_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_2DA.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_2_da_unpack(
+    struct a07_hgw_2_da_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_2DA.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_2_da_init(struct a07_hgw_2_da_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_2_da_cdc_auto_head_li_set_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_2_da_cdc_auto_head_li_set_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_2_da_cdc_auto_head_li_set_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint32_t a07_hgw_2_da_cdc_tot_milg_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_2_da_cdc_tot_milg_decode(uint32_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_2_da_cdc_tot_milg_is_in_range(uint32_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_2_da_hu_sentry_mode_st_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_2_da_hu_sentry_mode_st_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_2_da_hu_sentry_mode_st_is_in_range(uint8_t value);
+
+/**
+ * Pack message HGW_290.
+ *
+ * @param[out] dst_p Buffer to pack the message into.
+ * @param[in] src_p Data to pack.
+ * @param[in] size Size of dst_p.
+ *
+ * @return Size of packed data, or negative error code.
+ */
+int a07_hgw_290_pack(
+    uint8_t *dst_p,
+    const struct a07_hgw_290_t *src_p,
+    size_t size);
+
+/**
+ * Unpack message HGW_290.
+ *
+ * @param[out] dst_p Object to unpack the message into.
+ * @param[in] src_p Message to unpack.
+ * @param[in] size Size of src_p.
+ *
+ * @return zero(0) or negative error code.
+ */
+int a07_hgw_290_unpack(
+    struct a07_hgw_290_t *dst_p,
+    const uint8_t *src_p,
+    size_t size);
+
+/**
+ * Init message fields to default values from HGW_290.
+ *
+ * @param[in] msg_p Message to init.
+ *
+ * @return zero(0) on success or (-1) in case of nullptr argument.
+ */
+int a07_hgw_290_init(struct a07_hgw_290_t *msg_p);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_turn_indcr_le_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_turn_indcr_le_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_turn_indcr_le_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_turn_indcr_ri_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_turn_indcr_ri_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_turn_indcr_ri_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_posn_lmp_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_posn_lmp_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_posn_lmp_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_drvr_door_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_drvr_door_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_drvr_door_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_pass_door_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_pass_door_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_pass_door_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_le_re_door_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_le_re_door_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_le_re_door_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_ri_re_door_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_ri_re_door_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_ri_re_door_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bdc_drvr_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bdc_drvr_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bdc_drvr_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_pass_door_lck_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_pass_door_lck_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_pass_door_lck_sts_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_pwr_sts_fb_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_pwr_sts_fb_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_pwr_sts_fb_is_in_range(uint8_t value);
+
+/**
+ * Encode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to encode.
+ *
+ * @return Encoded signal.
+ */
+uint8_t a07_hgw_290_bcm_drvr_door_lck_sts_encode(double value);
+
+/**
+ * Decode given signal by applying scaling and offset.
+ *
+ * @param[in] value Signal to decode.
+ *
+ * @return Decoded signal.
+ */
+double a07_hgw_290_bcm_drvr_door_lck_sts_decode(uint8_t value);
+
+/**
+ * Check that given signal is in allowed range.
+ *
+ * @param[in] value Signal to check.
+ *
+ * @return true if in range, false otherwise.
+ */
+bool a07_hgw_290_bcm_drvr_door_lck_sts_is_in_range(uint8_t value);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 2 - 0
src/tool/g29zlgchassistest/g29zlgchassistest.pro

@@ -16,6 +16,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
 SOURCES += \
+    a07.c \
     cancard.cpp \
     joyreadthread.cpp \
     main.cpp \
@@ -23,6 +24,7 @@ SOURCES += \
     speed.cpp
 
 HEADERS += \
+    a07.h \
     cancard.h \
     canframe.h \
     config.h \

+ 106 - 0
src/tool/g29zlgchassistest/mainwindow.cpp

@@ -17,6 +17,9 @@ MainWindow::MainWindow(QWidget *parent)
 
     CreateView();
 
+    mpthreaddata = new std::thread(&MainWindow::threaddata,this);
+
+
     setWindowTitle("Chassis Test Use G29 & ZLG");
 }
 
@@ -24,6 +27,9 @@ MainWindow::~MainWindow()
 {
     LogiSteeringShutdown();
 
+    mbthreaddatarun = false;
+    mpthreaddata->join();
+
     delete ui;
 }
 
@@ -131,3 +137,103 @@ void MainWindow::on_pushButton_OpenCAN_clicked()
 {
 
 }
+
+void MainWindow::threaddata()
+{
+    a07_ecu_23_c_t can23c;
+    a07_ecu_23_f_t can23f;
+    a07_ecu_1_b2_t can1b2;
+    a07_ecu_30_a_t can30a;
+    a07_ecu_2_ca_t can2ca;
+
+
+    while(mbthreaddatarun)
+    {
+        can1b2.acc_lat_ang_req = mfWheelAngle;
+        can1b2.acc_motor_torque_max_limit_request = 10.0;
+        can1b2.acc_motor_torque_min_limit_request = -10.0;
+        if(mbchassisactive)
+        {
+            can1b2.acc_lat_ang_req_active = 1;
+        }
+        else
+        {
+            can1b2.acc_lat_ang_req_active = 0;
+        }
+
+        can23c.acc_acc_trq_req = mfTorque;
+        if(mbchassisactive)
+        {
+            can23c.acc_acc_trq_req = 1;
+        }
+        else
+        {
+            can23c.acc_acc_trq_req = 0;
+        }
+
+        if(mbUseAPA)
+        {
+
+
+            static int64_t ntimeChangetoreq = std::chrono::system_clock::now().time_since_epoch().count()/1e6;
+            int64_t nnow;
+            if(mbchassisactive)
+            {
+                switch (gnAPAstate) {
+                case 0:
+                    gnAPAstate = 1;
+                    ntimeChangetoreq = std::chrono::system_clock::now().time_since_epoch().count()/1e6;
+                    break;
+                case 1:
+                    nnow = std::chrono::system_clock::now().time_since_epoch().count()/1e6;
+                    if(abs(nnow - ntimeChangetoreq)<300)
+                        gnAPAstate = 1;
+                    else
+                        gnAPAstate = 2;
+                    break;
+                case 2:
+                    gnAPAstate = 2;
+                    break;
+                default:
+                    gnAPAstate = 0;
+                    break;
+                }
+            }
+            else
+            {
+                switch (gnAPAstate) {
+                case 0:
+                    gnAPAstate = 0;
+                    break;
+                case 1:
+                    gnAPAstate = 0;
+                    break;
+                case 2:
+                    gnAPAstate = 0;
+                    break;
+                default:
+                    gnAPAstate = 0;
+                    break;
+                }
+            }
+
+            can23f.apa_steering_angle_req_protection = gnAPAstate;
+            can23f.apa_error_status = 0;
+            can23f.apa_steering_angle_req = mfWheelAngle;
+            can1b2.acc_lat_ang_req_active = 0;
+
+
+
+        }
+        else
+        {
+            gnAPAstate = 0;
+            can23f.apa_steering_angle_req_protection = 0;
+            can23f.apa_error_status = 0;
+            can23f.apa_steering_angle_req = mfWheelAngle;
+
+
+        }
+        std::this_thread::sleep_for(std::chrono::milliseconds(10));
+    }
+}

+ 20 - 0
src/tool/g29zlgchassistest/mainwindow.h

@@ -3,12 +3,20 @@
 
 #include <QMainWindow>
 #include <QLibrary>
+#include <QTimer>
+
+#include <thread>
 
 #include "joyreadthread.h"
 #include "speed.h"
 
 #include "cancard.h"
 
+extern "C"
+{
+#include "a07.h"
+}
+
 QT_BEGIN_NAMESPACE
 namespace Ui { class MainWindow; }
 QT_END_NAMESPACE
@@ -41,8 +49,19 @@ private:
 
     Speed * mpVehSpeed;
 
+    std::thread * mpthreaddata;
+    bool mbthreaddatarun = true;
+
+    bool mbchassisactive = false;
+
+    double mfWheelAngle = 0;
+    double mfTorque = 0;
+    bool mbUseAPA = false;
+    int gnAPAstate = 0;
+
     int mnSpeedMax = 100;
 
+
 public:
      void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
 
@@ -51,6 +70,7 @@ private slots:
 
 private:
     void CreateView();
+    void threaddata();
 
     cancard zlgcancard;