////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
// All rights reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: Parameter Parser V7.4.1 (8cca6579792b9fcef3bc725ff070c5ec453c7c85)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  eis_1_5_0.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef EIS_1_5_0_H
#define EIS_1_5_0_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "ispglobalelements.h"

#define EIS_1_5_0_NAMESPACE_BEGIN namespace eis_1_5_0 {
#define EIS_1_5_0_NAMESPACE_END }

EIS_1_5_0_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_eis15_reserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_eis15_reserveType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// top
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct topStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_fhd_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_fhd_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_fhd_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_fhd_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_fhd_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_fhd_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_fhd_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_fhd_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_fhd_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_fhd_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_fhd_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_fhd_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_4k_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_4k_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_4k_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_4k_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_4k_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_4k_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_4k_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_4k_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_4k_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_4k_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_4k_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_4k_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_8k_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_8k_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_8k_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_8k_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_8k_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_8k_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_8k_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_8k_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_x_8k_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested physical margins ratio for x axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual x total margins
        ///                would be between [requested_total_margins_x, minimal_total_margin].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_x_8k_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// requested_total_margins_y_8k_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   Requested total margins ratio for y axis, with respect to input image size and represent sum of both
        ///                sides. This is used for requesting physical margins and also to be sent to GeoLib. Actual y margins would
        ///                be between [minimal_total_margin, requested_total_margins_y].
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  requested_total_margins_y_8k_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_fhd_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 30
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_fhd_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_fhd_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 40
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_fhd_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_fhd_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 40
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_fhd_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_4k_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 30
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_4k_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_4k_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 30
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_4k_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_4k_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 30
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_4k_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_8k_30
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 10
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_8k_30;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_8k_60
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 10
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_8k_60;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// future_buffer_size_8k_120
        ///
        /// Tuning Level:  often_tune
        /// Description:   future looking buffer size.
        /// Type:          uint
        /// Default Value: 10
        /// Range:         [10, 120]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 future_buffer_size_8k_120;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// gyro_frequency
        ///
        /// Tuning Level:  must_tune
        /// Description:   Requested gyro sampling frequency in Hz. Has to match actual gyro sampling frequency.
        /// Type:          uint
        /// Default Value: 832
        /// Range:         [200, 2000]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 gyro_frequency;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_frequency
        ///
        /// Tuning Level:  must_tune
        /// Description:   Requested OIS sampling frequency in Hz. Has to match actual OIS sampling frequency. If no OIS for sensor,
        ///                must configure zero.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 2000]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 ois_frequency;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// acc_frequency
        ///
        /// Tuning Level:  must_tune
        /// Description:   Requested accelerometer sampling frequency in Hz. Has to match actual accelerometer sampling frequency. 0
        ///                value is disable accelerometer.
        /// Type:          uint
        /// Default Value: 832
        /// Range:         [0, 2000]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 acc_frequency;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mag_frequency
        ///
        /// Tuning Level:  must_tune
        /// Description:   Requested magnetometer sampling frequency in Hz. Has to match actual magnetometer sampling frequency. 0
        ///                value is disable magnetometer.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 2000]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 mag_frequency;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ifovc_frequency
        ///
        /// Tuning Level:  must_tune
        /// Description:   Requested iFOVC sampling frequency in Hz. Has to match actual iFOVC sampling frequency. 0 value is
        ///                disable iFOVC.
        /// Type:          uint
        /// Default Value: 120
        /// Range:         [0, 2000]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 ifovc_frequency;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// gravity_frequency
        ///
        /// Tuning Level:  must_tune
        /// Description:   Requested Gravity vector sampling frequency in Hz. Has to match actual Gravity vector sampling frequency.
        ///                0 value is disable Gravity vector.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 200]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 gravity_frequency;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_delay_to_display_ms
        ///
        /// Tuning Level:  must_tune
        /// Description:   Delay to display. Used to gather OIS data for OIS filtering. Units are millisecond.
        /// Type:          uint
        /// Default Value: 16
        /// Range:         [0, 33]
        /// Bit Depth:     8u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 ois_delay_to_display_ms;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// lens_pos_orientation_axis_x
        ///
        /// Tuning Level:  must_tune
        /// Description:   Number of axis to assign to axis lens position x. Minus sign is negative that axis.
        /// Type:          int
        /// Default Value: 1
        /// Range:         [-3, 3]
        /// Bit Depth:     3s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  lens_pos_orientation_axis_x;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// lens_pos_orientation_axis_y
        ///
        /// Tuning Level:  must_tune
        /// Description:   Number of axis to assign to axis lens position y. Minus sign is negative that axis.
        /// Type:          int
        /// Default Value: 2
        /// Range:         [-3, 3]
        /// Bit Depth:     3s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  lens_pos_orientation_axis_y;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// lens_pos_orientation_axis_z
        ///
        /// Tuning Level:  must_tune
        /// Description:   Number of axis to assign to axis lens position z. Minus sign is negative that axis.
        /// Type:          int
        /// Default Value: 3
        /// Range:         [-3, 3]
        /// Bit Depth:     3s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  lens_pos_orientation_axis_z;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// gyro_frequency_est_ratio_error_margin_vs_init
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t requested sample rate.
        /// Type:          float
        /// Default Value: 0.035
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  gyro_frequency_est_ratio_error_margin_vs_init;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// gyro_frequency_est_ratio_error_margin_vs_avg
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t average sample rate.
        /// Type:          float
        /// Default Value: 0.01
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  gyro_frequency_est_ratio_error_margin_vs_avg;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_frequency_est_ratio_error_margin_vs_init
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t requested sample rate.
        /// Type:          float
        /// Default Value: 0.035
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  ois_frequency_est_ratio_error_margin_vs_init;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_frequency_est_ratio_error_margin_vs_avg
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t average sample rate.
        /// Type:          float
        /// Default Value: 0.01
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  ois_frequency_est_ratio_error_margin_vs_avg;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// acc_frequency_est_ratio_error_margin_vs_init
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t requested sample rate.
        /// Type:          float
        /// Default Value: 0.035
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  acc_frequency_est_ratio_error_margin_vs_init;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// acc_frequency_est_ratio_error_margin_vs_avg
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t average sample rate.
        /// Type:          float
        /// Default Value: 0.01
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  acc_frequency_est_ratio_error_margin_vs_avg;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mag_frequency_est_ratio_error_margin_vs_init
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t requested sample rate.
        /// Type:          float
        /// Default Value: 0.035
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  mag_frequency_est_ratio_error_margin_vs_init;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mag_frequency_est_ratio_error_margin_vs_avg
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t average sample rate.
        /// Type:          float
        /// Default Value: 0.01
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  mag_frequency_est_ratio_error_margin_vs_avg;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ifovc_frequency_est_ratio_error_margin_vs_init
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t requested sample rate.
        /// Type:          float
        /// Default Value: 0.035
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  ifovc_frequency_est_ratio_error_margin_vs_init;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ifovc_frequency_est_ratio_error_margin_vs_avg
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Error margin of frequency estimation ratio w.r.t average sample rate.
        /// Type:          float
        /// Default Value: 0.01
        /// Range:         [0, 0.3]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  ifovc_frequency_est_ratio_error_margin_vs_avg;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// zoom_factor_smoothing_enable
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Zoom factor smoothing enable bit. 0 : Default, legacy mode will be used, feature will be disabled. 1 :
        ///                Zoom factoring smoothening will be enabled. . @Note: Common bit to all sensor. If one enabled for one
        ///                sensor feature will be enabled for all other sensors as well.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 zoom_factor_smoothing_enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// sat_matrix_smoothing_enable
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   SAT matrix smoothing enable bit. 0 : Default, legacy mode will be used, feature will be disabled. 1 : SAT
        ///                matrix smoothening will be enabled. . @Note: 1. Common bit to all sensor. If one enabled for one sensor
        ///                feature will be enabled for all other sensors as well. 2. If is_sat_enabled is false then this bit will
        ///                be ignored.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 sat_matrix_smoothing_enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_lut_param_0_tab
        ///
        /// Description:   Top Reserved LUT parameter 0.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        32
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct res_lut_param_0_tabStruct
        {
            static constexpr UINT32 res_lut_param_0FixedCount = 32;
            float                   res_lut_param_0[32];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct res_lut_param_0_tabStruct res_lut_param_0_tab;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct topStruct top;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// general
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct generalStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// minimal_total_margin
        ///
        /// Tuning Level:  often_tune
        /// Description:   Minimal total margins ratio for x/y axis (physical + virtual), with respect to input image size and
        ///                represent sum of both sides. If physical margins are not sufficient, virtual margins will be used to get
        ///                to the minimal_total_margin.
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0.1, 0.67]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  minimal_total_margin;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// focal_length
        ///
        /// Tuning Level:  must_tune
        /// Description:   Focal length in pixel units for horizontal size of 1920. This value is scaled for other resolutions.
        /// Type:          uint
        /// Default Value: 1450
        /// Range:         [0, 65535]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 focal_length;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// gyro_noise_floor
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Gyro noise floor [rad/sec].
        /// Type:          float
        /// Default Value: 0.003
        /// Range:         [0, 0.1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  gyro_noise_floor;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_noise_floor_tab
        ///
        /// Description:   OIS noise floor per channel [ois input units]. Per each channel. May use same value for all channels.
        /// Type:          float
        /// Range:         [0, 500]
        /// Bit Depth:     float
        /// Length:        6
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct ois_noise_floor_tabStruct
        {
            static constexpr UINT32 ois_noise_floorFixedCount = 6;
            float                   ois_noise_floor[6];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct ois_noise_floor_tabStruct ois_noise_floor_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// acc_noise_floor
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Accelerometer noise floor [m/s2].
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [0, 10]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  acc_noise_floor;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mag_noise_floor
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Magnetometer noise floor [uT].
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [0, 500]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  mag_noise_floor;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// output_grid_precision
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Precision of the EIS output grid (will be overridden by 0 if HW not supports grid precision 1). 0: 35x27
        ///                samples (945 samples are used). 1: 67x51 samples (3417 samples are used).
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 output_grid_precision;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_1
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 1.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_1;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_2
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 2.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_2;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_3
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 3.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_3;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_4
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 4.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_4;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_5
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 5.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_5;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_6
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 6.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_6;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_7
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 7.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_7;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_8
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 8.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_8;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_9
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 9.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_9;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_param_10
        ///
        /// Tuning Level:  never_tune
        /// Description:   Reserved parameter 10.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  res_param_10;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_lut_param_1_tab
        ///
        /// Description:   Reserved LUT parameter 1.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        32
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct res_lut_param_1_tabStruct
        {
            static constexpr UINT32 res_lut_param_1FixedCount = 32;
            float                   res_lut_param_1[32];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct res_lut_param_1_tabStruct res_lut_param_1_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_lut_param_2_tab
        ///
        /// Description:   Reserved LUT parameter 2.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        32
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct res_lut_param_2_tabStruct
        {
            static constexpr UINT32 res_lut_param_2FixedCount = 32;
            float                   res_lut_param_2[32];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct res_lut_param_2_tabStruct res_lut_param_2_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// res_lut_param_3_tab
        ///
        /// Description:   Reserved LUT parameter 3.
        /// Type:          uint
        /// Range:         [0, 4294967295]
        /// Bit Depth:     32u
        /// Length:        16
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct res_lut_param_3_tabStruct
        {
            static constexpr UINT32 res_lut_param_3FixedCount = 16;
            UINT32                  res_lut_param_3[16];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct res_lut_param_3_tabStruct res_lut_param_3_tab;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct generalStruct general;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// timing
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct timingStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// s3d_offset
        ///
        /// Tuning Level:  must_tune
        /// Description:   Offset between gyro timing and SOF timing in microseconds.
        /// Type:          int
        /// Default Value: 0
        /// Range:         [-30000, 30000]
        /// Bit Depth:     32s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  s3d_offset;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_offset
        ///
        /// Tuning Level:  must_tune
        /// Description:   Offset between OIS angles timing and SOF timing in microseconds.
        /// Type:          int
        /// Default Value: 0
        /// Range:         [-30000, 30000]
        /// Bit Depth:     32s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  ois_offset;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// acc_offset
        ///
        /// Tuning Level:  must_tune
        /// Description:   Offset between accelerometer timing and SOF timing in microseconds.
        /// Type:          int
        /// Default Value: 0
        /// Range:         [-30000, 30000]
        /// Bit Depth:     32s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  acc_offset;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mag_offset
        ///
        /// Tuning Level:  must_tune
        /// Description:   Offset between magnetometer timing and SOF timing in microseconds.
        /// Type:          int
        /// Default Value: 0
        /// Range:         [-30000, 30000]
        /// Bit Depth:     32s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  mag_offset;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ifovc_offset
        ///
        /// Tuning Level:  must_tune
        /// Description:   Offset between iFOVC angles timing and SOF timing in microseconds.
        /// Type:          int
        /// Default Value: 0
        /// Range:         [-30000, 30000]
        /// Bit Depth:     32s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  ifovc_offset;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct timingStruct timing;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// blur_masking
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct blur_maskingStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Enable blur masking mechanism. 0 is disable mechanism. 1 is enable current mechanism. 2 is enable
        ///                experimental mechanism with adaptive behavior.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 2]
        /// Bit Depth:     2u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// min_strength
        ///
        /// Tuning Level:  often_tune
        /// Description:   Minimal stabilization strength for strong blur ( estimated_blur is greater than or equal to
        ///                end_decrease_at_blur ).
        /// Type:          float
        /// Default Value: 0.8
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  min_strength;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// exposure_time_th
        ///
        /// Tuning Level:  often_tune
        /// Description:   if (exp_time is greater than exposure_time_th) then blur masking feature is enabled. Otherwise disabled.
        ///                Units are seconds.
        /// Type:          float
        /// Default Value: 0.019
        /// Range:         [0, 0.04]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  exposure_time_th;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// start_decrease_at_blur
        ///
        /// Tuning Level:  often_tune
        /// Description:   Blur below this point won't decrease strength. Units are pixels out of 1920 resolutions. Blur above this
        ///                point will cause min_strength stabilization (in between start/end interpolate) Units are pixels out of
        ///                1920 resolutions. If (end_decrease_at_bluris greater thanstart_decrease_at_blur) then feature will be
        ///                disabled.
        /// Type:          float
        /// Default Value: 10.0
        /// Range:         [5, 100]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  start_decrease_at_blur;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// end_decrease_at_blur
        ///
        /// Tuning Level:  often_tune
        /// Description:   Blur below this point won't decrease strength. Units are pixels out of 1920 resolutions. Blur above this
        ///                point will cause min_strength stabilization (in between start/end interpolate) Units are pixels out of
        ///                1920 resolutions. If (end_decrease_at_bluris greater thanstart_decrease_at_blur) then feature will be
        ///                disabled.
        /// Type:          float
        /// Default Value: 20.0
        /// Range:         [5, 100]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  end_decrease_at_blur;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// pan_min_threshold
        ///
        /// Tuning Level:  often_tune
        /// Description:   Threshold for pan detection on the filter result [rad/sec]. Lower than pan_min_threshold is not a pan.
        ///                Higher than pan_max_threshold is a full pan. In between the weight is linear. Blur masking mechanism is
        ///                only active when no pan is detected.
        /// Type:          float
        /// Default Value: 0.1
        /// Range:         [0, 3.14]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  pan_min_threshold;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// pan_max_threshold
        ///
        /// Tuning Level:  often_tune
        /// Description:   Threshold for pan detection on the filter result [rad/sec]. Lower than pan_min_threshold is not a pan.
        ///                Higher than pan_max_threshold is a full pan. In between the weight is linear. Blur masking mechanism is
        ///                only active when no pan is detected.
        /// Type:          float
        /// Default Value: 0.2
        /// Range:         [0, 3.14]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  pan_max_threshold;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// exposure_time_th_2
        ///
        /// Tuning Level:  often_tune
        /// Description:   Above this value a constant strength is picked to be min_strength_exp_th_2. Units are [seconds]. If value
        ///                is defined to be 0 (Default Chromatix value) legacy mode will be used, and feature will be disabled.
        /// Type:          float
        /// Default Value: 0.029
        /// Range:         [0, 0.1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  exposure_time_th_2;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// min_strength_exp_th_2
        ///
        /// Tuning Level:  often_tune
        /// Description:   Lower strength to pick in case of exposure time is greater than or equal to
        ///                blur_masking__exposure_time_th_2. Valid values are in (0,1]. Only used in case
        ///                (blur_masking__exposure_time_th_2 is greater than 0).
        /// Type:          float
        /// Default Value: 0.8
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  min_strength_exp_th_2;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// exposure_time_th_3
        ///
        /// Tuning Level:  often_tune
        /// Description:   Above this value a constant strength is picked to be min_strength_exp_th_3. Units are [seconds]. If value
        ///                is defined to be 0 (Default Chromatix value) legacy mode will be used, and feature will be disabled.
        /// Type:          float
        /// Default Value: 0.039
        /// Range:         [0, 0.1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  exposure_time_th_3;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// min_strength_exp_th_3
        ///
        /// Tuning Level:  often_tune
        /// Description:   Lower strength to pick in case of exposure time is greater than or equal to
        ///                blur_masking__exposure_time_th_3. Valid values are in (0,1]. Only used in case
        ///                (blur_masking__exposure_time_th_3 is greater than 0).
        /// Type:          float
        /// Default Value: 0.4
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  min_strength_exp_th_3;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// blur_masking_res_lut_tab
        ///
        /// Description:   Reserved LUT parameter.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        32
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct blur_masking_res_lut_tabStruct
        {
            static constexpr UINT32 blur_masking_res_lutFixedCount = 32;
            float                   blur_masking_res_lut[32];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct blur_masking_res_lut_tabStruct blur_masking_res_lut_tab;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct blur_maskingStruct blur_masking;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// lens_distortion_correction
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct lens_distortion_correctionStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ldc_grid_source
        ///
        /// Tuning Level:  often_tune
        /// Description:   0 = use grids defined here (local grid, only if ldc_grid_enable == 1, , otherwise no LDC). 1 = use grids
        ///                defined in ICA/LDC Chromatix (only if its valid, otherwise no LDC). Comment: Usually take grids from ICA
        ///                Chromatix unless the input FOV is different between Video with EIS or video without EIS. Or if the chip
        ///                doesn't contains ICA Chromatix.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 ldc_grid_source;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ldc_grid_enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Enable/validity for the grids below (defined under EIS Chromatix).
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 ldc_grid_enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ldc_calib_domain
        ///
        /// Tuning Level:  often_tune
        /// Description:   0 = EIS local grid is calibrated on Full Sensor domain (FOV). 1 = EIS local grid is calibrated on IFE
        ///                Input @ DZ X1 domain (FOV). 2 = EIS local grid is calibrated on IFE Output @ DZ X1 domain (FOV). Comment:
        ///                EIS local grid means the grid defined below and not the one coming from ICA Chromatix.
        /// Type:          uint
        /// Default Value: 2
        /// Range:         [0, 2]
        /// Bit Depth:     2u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 ldc_calib_domain;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// distorted_input_to_undistorted_ldc_grid_x_tab
        ///
        /// Description:   LDC grid in2out. Grid coordinates are defined on image_size_undistorted.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        3417
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct distorted_input_to_undistorted_ldc_grid_x_tabStruct
        {
            static constexpr UINT32 distorted_input_to_undistorted_ldc_grid_xFixedCount = 3417;
            float                   distorted_input_to_undistorted_ldc_grid_x[3417];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct distorted_input_to_undistorted_ldc_grid_x_tabStruct distorted_input_to_undistorted_ldc_grid_x_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// distorted_input_to_undistorted_ldc_grid_y_tab
        ///
        /// Description:   LDC grid in2out. Grid coordinates are defined on image_size_undistorted.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        3417
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct distorted_input_to_undistorted_ldc_grid_y_tabStruct
        {
            static constexpr UINT32 distorted_input_to_undistorted_ldc_grid_yFixedCount = 3417;
            float                   distorted_input_to_undistorted_ldc_grid_y[3417];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct distorted_input_to_undistorted_ldc_grid_y_tabStruct distorted_input_to_undistorted_ldc_grid_y_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// distorted_input_to_undistorted_ldc_grid_geometry
        ///
        /// Tuning Level:  often_tune
        /// Description:   Precision of the LDC in2out grid. 0: 35x27 samples (945 samples are used). 1: 67x51 samples (3417 samples
        ///                are used).
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 distorted_input_to_undistorted_ldc_grid_geometry;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// undistorted_to_distorted_input_ldc_grid_x_tab
        ///
        /// Description:   LDC grid out2in. Grid coordinates are defined on image_size_distorted.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        3417
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct undistorted_to_distorted_input_ldc_grid_x_tabStruct
        {
            static constexpr UINT32 undistorted_to_distorted_input_ldc_grid_xFixedCount = 3417;
            float                   undistorted_to_distorted_input_ldc_grid_x[3417];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct undistorted_to_distorted_input_ldc_grid_x_tabStruct undistorted_to_distorted_input_ldc_grid_x_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// undistorted_to_distorted_input_ldc_grid_y_tab
        ///
        /// Description:   LDC grid out2in. Grid coordinates are defined on image_size_distorted.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        3417
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct undistorted_to_distorted_input_ldc_grid_y_tabStruct
        {
            static constexpr UINT32 undistorted_to_distorted_input_ldc_grid_yFixedCount = 3417;
            float                   undistorted_to_distorted_input_ldc_grid_y[3417];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct undistorted_to_distorted_input_ldc_grid_y_tabStruct undistorted_to_distorted_input_ldc_grid_y_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// undistorted_to_distorted_input_ldc_grid_geometry
        ///
        /// Tuning Level:  often_tune
        /// Description:   Precision of the LDC out2in grid. 0: 35x27 samples (945 samples are used). 1: 67x51 samples (3417 samples
        ///                are used).
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 undistorted_to_distorted_input_ldc_grid_geometry;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// image_size_distorted_x
        ///
        /// Tuning Level:  often_tune
        /// Description:   Distorted image size, image used for LDC calibration.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 65535]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 image_size_distorted_x;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// image_size_distorted_y
        ///
        /// Tuning Level:  often_tune
        /// Description:   Distorted image size, image used for LDC calibration.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 65535]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 image_size_distorted_y;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// image_size_undistorted_x
        ///
        /// Tuning Level:  often_tune
        /// Description:   Un-Distorted image size, image used for LDC calibration.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 65535]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 image_size_undistorted_x;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// image_size_undistorted_y
        ///
        /// Tuning Level:  often_tune
        /// Description:   Un-Distorted image size, image used for LDC calibration.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 65535]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 image_size_undistorted_y;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ldc_model_type
        ///
        /// Tuning Level:  often_tune
        /// Description:   0 = custom/no model (grid is not by any of the following models model ), 1 = regular, 2= fisheye, 3 =
        ///                reserved for a new model.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 7]
        /// Bit Depth:     3u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 ldc_model_type;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// model_parameters_tab
        ///
        /// Description:   Model parameters to be used with the selected model. Parameters interpretation per model:. For model 1:
        ///                [k1 k2 p1 p2 k3]. For model 2: [k1 k2 k3 k4].
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        32
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct model_parameters_tabStruct
        {
            static constexpr UINT32 model_parametersFixedCount = 32;
            float                   model_parameters[32];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct model_parameters_tabStruct model_parameters_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// focal_length_x
        ///
        /// Tuning Level:  often_tune
        /// Description:   Camera matrix \ Focal length that was extracted during camera calibration for LDC. Image sizes
        ///                (image_size_distorted) are as defined above and are not normalized and according to calibration images.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  focal_length_x;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// focal_length_y
        ///
        /// Tuning Level:  often_tune
        /// Description:   Camera matrix \ Focal length that was extracted during camera calibration for LDC. Image sizes
        ///                (image_size_distorted) are as defined above and are not normalized and according to calibration images.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  focal_length_y;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// optical_center_x
        ///
        /// Tuning Level:  often_tune
        /// Description:   Camera matrix \ Optical center that was extracted during camera calibration for LDC. Image sizes
        ///                (image_size_distorted) are as defined below and are not normalized and according to calibration images.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  optical_center_x;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// optical_center_y
        ///
        /// Tuning Level:  often_tune
        /// Description:   Camera matrix \ Optical center that was extracted during camera calibration for LDC. Image sizes
        ///                (image_size_distorted) are as defined below and are not normalized and according to calibration images.
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  optical_center_y;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct lens_distortion_correctionStruct lens_distortion_correction;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ois
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct oisStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// module_type
        ///
        /// Tuning Level:  must_tune
        /// Description:   Type 0 is lens shift. Type 1 is general model. Type 2 is general model 2. Type 3 is gimbal
        ///                (tilt-rotation). Type 4 is gimbal prism. Types 5 to 15 are reserved.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 15]
        /// Bit Depth:     4u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 module_type;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// data_conversion_x_tab
        ///
        /// Description:   Conversion polynomial coefficients between hall data x and hall data y to x axis pixels. Polynomial
        ///                result is normalized to horizontal image size of 1920 (then scale by algorithm per resolution).
        ///                ois_conversion_func(hall_x,hall_y) = p00 + p10*hall_x + p01*hall_y + p20*hall_x^2 + p11*hall_x*hall_y +
        ///                p02*hall_y^2 + p30*hall_x^3 + p21*hall_x^2*hall_y + p12*hall_x*hall_y^2 + p03*hall_y^3. . Notes: . - Used
        ///                for module types 0,2. - In case of rotational OIS, this function is still used but converts angles to
        ///                angles.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        10
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct data_conversion_x_tabStruct
        {
            static constexpr UINT32 data_conversion_xFixedCount = 10;
            float                   data_conversion_x[10];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct data_conversion_x_tabStruct data_conversion_x_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// data_conversion_y_tab
        ///
        /// Description:   Conversion polynomial coefficients between hall data x and hall data y to y axis pixels. Polynomial
        ///                result is normalized to horizontal image size of 1920 (then scale by algorithm per resolution).
        ///                ois_conversion_func(hall_x,hall_y) = p00 + p10*hall_x + p01*hall_y + p20*hall_x^2 + p11*hall_x*hall_y +
        ///                p02*hall_y^2 + p30*hall_x^3 + p21*hall_x^2*hall_y + p12*hall_x*hall_y^2 + p03*hall_y^3. . Notes: . - Used
        ///                for module types 0,2. - In case of rotational OIS, this function is still used but converts angles to
        ///                angles.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        10
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct data_conversion_y_tabStruct
        {
            static constexpr UINT32 data_conversion_yFixedCount = 10;
            float                   data_conversion_y[10];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct data_conversion_y_tabStruct data_conversion_y_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// data_conversion_z_tab
        ///
        /// Description:   ois_conversion_func(hall_x,hall_y,hall_z) = p100*hall_x + p010*hall_y + p001*hall_z + p003*hall_z^3. For
        ///                prism we get hall_z = -ois_conversion_func_y(hall_x, hall_y) (Change of y angle which is shift in x axis
        ///                caused rotation around z axis with same rotation angle of y axis ). For gimbal we get hall_z from OIS
        ///                input.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        4
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct data_conversion_z_tabStruct
        {
            static constexpr UINT32 data_conversion_zFixedCount = 4;
            float                   data_conversion_z[4];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct data_conversion_z_tabStruct data_conversion_z_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// data_raw_offset_x
        ///
        /// Tuning Level:  must_tune
        /// Description:   Add this offset to OIS raw readings before entering to data conversion function or before entering to
        ///                general model. It is used in order to have 0,0 when OIS is centered. .
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  data_raw_offset_x;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// data_raw_offset_y
        ///
        /// Tuning Level:  must_tune
        /// Description:   Add this offset to OIS raw readings before entering to data conversion function or before entering to
        ///                general model. It is used in order to have 0,0 when OIS is centered. .
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  data_raw_offset_y;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// general_model_parameters_tab
        ///
        /// Description:   General model parameters.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        512
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct general_model_parameters_tabStruct
        {
            static constexpr UINT32 general_model_parametersFixedCount = 512;
            float                   general_model_parameters[512];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct general_model_parameters_tabStruct general_model_parameters_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// general_model_transform_defined_on_x
        ///
        /// Tuning Level:  often_tune
        /// Description:   General model parameters defined on image size.
        /// Type:          uint
        /// Default Value: 1920
        /// Range:         [0, 65535]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 general_model_transform_defined_on_x;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// general_model_transform_defined_on_y
        ///
        /// Tuning Level:  often_tune
        /// Description:   General model parameters defined on image size.
        /// Type:          uint
        /// Default Value: 1440
        /// Range:         [0, 65535]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 general_model_transform_defined_on_y;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// center_command_enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Enable OIS centering mechanism (option to center \ automatic modes).
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 center_command_enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// center_exposure_time_th
        ///
        /// Tuning Level:  often_tune
        /// Description:   If (exp_time is greater than exposure_time_th) then OIS is set to automatic mode, otherwise OIS is fixed
        ///                to center. Units are microsecond [us].
        /// Type:          uint
        /// Default Value: 3000
        /// Range:         [0, 40000]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 center_exposure_time_th;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// center_response_time_ms
        ///
        /// Tuning Level:  often_tune
        /// Description:   Response time of OIS centering mechanism between centering \ automatic operation mode. Units are
        ///                millisecond [ms].
        /// Type:          uint
        /// Default Value: 1200
        /// Range:         [0, 65535]
        /// Bit Depth:     16u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 center_response_time_ms;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_filter_mode
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   0 is default. Other are reserved and should be set according to QIS team recommendation only.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 31]
        /// Bit Depth:     5u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 ois_filter_mode;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_filter_parameters_tab
        ///
        /// Description:   OIS filter parameters are required in case ois_filter_mode is not using default settings.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        64
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct ois_filter_parameters_tabStruct
        {
            static constexpr UINT32 ois_filter_parametersFixedCount = 64;
            float                   ois_filter_parameters[64];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct ois_filter_parameters_tabStruct ois_filter_parameters_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// center_during_zoom_transition
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   Publish OIS center command during zoom change or before / after sensor switch. OIS will be centered for
        ///                at least center_response_time_ms. 0 : Default, legacy mode will be used, feature will be disabled. 1 :
        ///                OIS center command during zoom feature is enabled. . @Note: Common bit to all sensor. If one enabled for
        ///                one sensor feature will be enabled for all other sensors as well.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 center_during_zoom_transition;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_res_lut_param_1_tab
        ///
        /// Description:   Reserved LUT parameter.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        16
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct ois_res_lut_param_1_tabStruct
        {
            static constexpr UINT32 ois_res_lut_param_1FixedCount = 16;
            float                   ois_res_lut_param_1[16];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct ois_res_lut_param_1_tabStruct ois_res_lut_param_1_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ois_res_lut_param_2_tab
        ///
        /// Description:   Reserved LUT parameter.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        16
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct ois_res_lut_param_2_tabStruct
        {
            static constexpr UINT32 ois_res_lut_param_2FixedCount = 16;
            float                   ois_res_lut_param_2[16];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct ois_res_lut_param_2_tabStruct ois_res_lut_param_2_tab;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct oisStruct ois;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dis
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct disStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Enable DIS.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// enable_for_selfie
        ///
        /// Tuning Level:  often_tune
        /// Description:   Enable DIS for selfie front cam.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 enable_for_selfie;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// exposure_time_threshold
        ///
        /// Tuning Level:  often_tune
        /// Description:   if (exp_time[sec] is less than or equal to exposure_time_threshold[sec]) then DIS feature is enabled.
        ///                Otherwise disabled. Units are seconds.
        /// Type:          float
        /// Default Value: 0.01999
        /// Range:         [0, 0.04]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  exposure_time_threshold;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// focus_distance_threshold
        ///
        /// Tuning Level:  often_tune
        /// Description:   if (focus_distance[meter] is greater than or equal to focus_distance_threshold[meter]) then DIS feature
        ///                is enabled. Otherwise disabled. Units are meters. if value == 0 then DIS will never be disabled due to
        ///                this mechanism.
        /// Type:          float
        /// Default Value: 0.6
        /// Range:         [0, 5]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  focus_distance_threshold;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// robustness_threshold
        ///
        /// Tuning Level:  often_tune
        /// Description:   Robustness value above or equal which the motion vector result is valid.
        /// Type:          int
        /// Default Value: -2
        /// Range:         [-3, 4]
        /// Bit Depth:     4s
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32  robustness_threshold;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// confidence_threshold
        ///
        /// Tuning Level:  often_tune
        /// Description:   When calculated transform confidence is below this threshold, the transform is ignored and DIS is not
        ///                used. Hysteresis is used on this parameter to avoid excessive switching.
        /// Type:          uint
        /// Default Value: 75
        /// Range:         [0, 255]
        /// Bit Depth:     8u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 confidence_threshold;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// dis_res_lut_param_tab
        ///
        /// Description:   Reserved LUT parameter.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        32
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct dis_res_lut_param_tabStruct
        {
            static constexpr UINT32 dis_res_lut_paramFixedCount = 32;
            float                   dis_res_lut_param[32];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct dis_res_lut_param_tabStruct dis_res_lut_param_tab;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct disStruct dis;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// z_lens_pos
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct z_lens_posStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Enable FOVC scaling in EIS.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// scale_source
        ///
        /// Tuning Level:  often_tune
        /// Description:   Options to calculate scale: . 0 is external scale from AF\FOVC. 1 is derive scale from z_lens_pos input
        ///                and internal iFOVC LUT scale parameters.
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 scale_source;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// z_lens_pos_source
        ///
        /// Tuning Level:  often_tune
        /// Description:   The source of z_lens_pos in case of using z_lens_pos. 0: Take z_lens_pos from iFOVC input struct
        ///                (estimation if from AF or real reading if coming from lens_pos controller). 1: Take z_lens_pos from OIS
        ///                input struct (third field, real readings).
        /// Type:          uint
        /// Default Value: 0
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 z_lens_pos_source;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// lut_z_lens_pos_tab
        ///
        /// Description:   Scale vs z_lens_pos function: this LUT is for z_lens_pos.
        /// Type:          float
        /// Range:         [0, 99999999999]
        /// Bit Depth:     float
        /// Length:        16
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct lut_z_lens_pos_tabStruct
        {
            static constexpr UINT32 lut_z_lens_posFixedCount = 16;
            float                   lut_z_lens_pos[16];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct lut_z_lens_pos_tabStruct lut_z_lens_pos_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// lut_scale_vs_z_lens_pos_tab
        ///
        /// Description:   Scale vs z_lens_pos function: this LUT is for scale to bring any focus FOV to infinity focus FOV. (1 for
        ///                focus infinity , is less than 1 is what scale to do to be like infinity fov).
        /// Type:          float
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Length:        16
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct lut_scale_vs_z_lens_pos_tabStruct
        {
            static constexpr UINT32 lut_scale_vs_z_lens_posFixedCount = 16;
            float                   lut_scale_vs_z_lens_pos[16];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct lut_scale_vs_z_lens_pos_tabStruct lut_scale_vs_z_lens_pos_tab;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// lut_len
        ///
        /// Tuning Level:  must_tune
        /// Description:   Number of entries in scale vs z_lens_pos LUT to use.
        /// Type:          uint
        /// Default Value: 2
        /// Range:         [2, 16]
        /// Bit Depth:     5u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 lut_len;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// min_scale_limit
        ///
        /// Tuning Level:  often_tune
        /// Description:   Limitation of the correction. If set to higher value it will limit the correction accordingly. Set to 1
        ///                will disable feature.
        /// Type:          float
        /// Default Value: 0
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  min_scale_limit;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// z_lens_pos_noise_floor
        ///
        /// Tuning Level:  often_tune
        /// Description:   z lens position readings noise floor (reading noise while focus is constant).
        /// Type:          float
        /// Default Value: 0.0
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  z_lens_pos_noise_floor;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// enable_ldc_in_ifovc_ldc_only_mode
        ///
        /// Tuning Level:  often_tune
        /// Description:   if you enable ldc or not for the iFOVC ldc only mode.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 enable_ldc_in_ifovc_ldc_only_mode;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// fovc_mode
        ///
        /// Tuning Level:  rarely_tune
        /// Description:   0 is constant scale for entire frame. 1 is different scale per image line.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 fovc_mode;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct z_lens_posStruct z_lens_pos;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// selfie
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct selfieStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// face_distortion_prevention_enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Enable selfie_distortion_prevention_enable for front sensors.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 face_distortion_prevention_enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// face_distortion_prevention_angle_delta_th_low
        ///
        /// Tuning Level:  often_tune
        /// Description:   Movement below this feature will get no feature impact.
        /// Type:          float
        /// Default Value: 0.015
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  face_distortion_prevention_angle_delta_th_low;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// face_distortion_prevention_angle_delta_th_high
        ///
        /// Tuning Level:  often_tune
        /// Description:   Movement above this value will get feature max result.
        /// Type:          float
        /// Default Value: 0.04
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  face_distortion_prevention_angle_delta_th_high;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// face_distortion_prevention_factor_high
        ///
        /// Tuning Level:  often_tune
        /// Description:   Max factor for feature when movement is higher than face_distortion_prevention_angle_delta_th_high.
        /// Type:          float
        /// Default Value: 0.01
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  face_distortion_prevention_factor_high;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// face_distortion_prevention_kernel_decrease
        ///
        /// Tuning Level:  often_tune
        /// Description:   Kernel weight if need to decrease mechanism strength for current frame.
        /// Type:          float
        /// Default Value: 0.25
        /// Range:         [0, 2]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  face_distortion_prevention_kernel_decrease;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// face_distortion_prevention_kernel_increase
        ///
        /// Tuning Level:  often_tune
        /// Description:   Kernel weight if need to increase mechanism strength for current frame.
        /// Type:          float
        /// Default Value: 2.0
        /// Range:         [0, 2]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  face_distortion_prevention_kernel_increase;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// face_distortion_prevention_allow_grid_recalc
        ///
        /// Tuning Level:  often_tune
        /// Description:   Selfie distortion prevention, in case of strong selfie distortion, distortion correction grid will be
        ///                re-calculated. according to selfie distortion prevention mechanism decision. 0 : Default, legacy mode
        ///                will be used, feature will be disabled. 1 : grid distortion correction recalculation will be enabled. .
        ///                Note: - Only relevant for EISv3. - Might affect EIS+MCTF quality in some cases. - Common bit to all
        ///                sensor. If one enabled for one sensor feature will be enabled for all other sensors as well. - If camera
        ///                is not on selfie mode then this bit will be ignored.
        /// Type:          float
        /// Default Value: 1.0
        /// Range:         [0, 1]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  face_distortion_prevention_allow_grid_recalc;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// face_distortion_prevention_res_lut_param_tab
        ///
        /// Description:   Reserved LUT parameter.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        32
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct face_distortion_prevention_res_lut_param_tabStruct
        {
            static constexpr UINT32 face_distortion_prevention_res_lut_paramFixedCount = 32;
            float                   face_distortion_prevention_res_lut_param[32];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct face_distortion_prevention_res_lut_param_tabStruct face_distortion_prevention_res_lut_param_tab;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct selfieStruct selfie;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// horizon_leveling
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct horizon_levelingStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Enable horizon leveling.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// max_roll_leveling_deg
        ///
        /// Tuning Level:  often_tune
        /// Description:   Limit horizon leveling by minimum between this limit and WarpEngine limit in degrees.
        /// Type:          float
        /// Default Value: 8.0
        /// Range:         [0, 25]
        /// Bit Depth:     float
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        float  max_roll_leveling_deg;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct horizon_levelingStruct horizon_leveling;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// adaptive_behavior
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct adaptive_behaviorStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// handheld_boost_enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Adaptively enabling handheld stabilization boost. 0 : Default, legacy mode will be used, feature will be
        ///                disabled. 1 : Adaptive stabilization boost for handheld case will be enabled. . @Note: Common bit to all
        ///                sensor. If one enabled for one sensor feature will be enabled for all other sensors as well.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 handheld_boost_enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// panning_boost_enable
        ///
        /// Tuning Level:  often_tune
        /// Description:   Adaptively enabling panning stabilization boost. 0 : Default, legacy mode will be used, feature will be
        ///                disabled. 1 : Adaptive stabilization boost for panning case will be enabled. . @Note: Common bit to all
        ///                sensor. If one enabled for one sensor feature will be enabled for all other sensors as well.
        /// Type:          uint
        /// Default Value: 1
        /// Range:         [0, 1]
        /// Bit Depth:     1u
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 panning_boost_enable;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// adaptive_behavior_res_lut_tab
        ///
        /// Description:   Reserved LUT parameter.
        /// Type:          float
        /// Range:         [-99999999999, 99999999999]
        /// Bit Depth:     float
        /// Length:        128
        /// Notes:         Constant: no dynamic configuration even when control variable change.
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        struct adaptive_behavior_res_lut_tabStruct
        {
            static constexpr UINT32 adaptive_behavior_res_lutFixedCount = 128;
            float                   adaptive_behavior_res_lut[128];

            void Load(
                ParameterLoadParameters& parentParams);

            static void LoadArray(
                ParameterLoadParameters& __params,
                void*                    __array,
                UINT32                   __count);

            static void* AllocArray(
                UINT32 __count);

            bool GetValue(
                const CHAR* __path,
                CHAR*       __value,
                UINT32      __size);

            bool SetValue(
                const CHAR* __path,
                const CHAR* __value);

            bool GetInfo(
                const CHAR*                 __path,
                PList<ParameterParserInfo>& __info);
        };
        struct adaptive_behavior_res_lut_tabStruct adaptive_behavior_res_lut_tab;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct adaptive_behaviorStruct adaptive_behavior;

    void Load(
        ParameterLoadParameters& parentParams);

    static void LoadArray(
        ParameterLoadParameters& __params,
        void*                    __array,
        UINT32                   __count);

    static void* AllocArray(
        UINT32 __count);

    bool GetValue(
        const CHAR* __path,
        CHAR*       __value,
        UINT32      __size);

    bool SetValue(
        const CHAR* __path,
        const CHAR* __value);

    bool GetInfo(
        const CHAR*                 __path,
        PList<ParameterParserInfo>& __info);
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_eis15Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_eis15Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32  major_revision;
        INT32  minor_revision;
        INT32  incr_revision;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct module_versionStruct module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// parameter_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct parameter_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        CHAR*  revision;

        void Load(
            ParameterLoadParameters& parentParams);

        static void LoadArray(
            ParameterLoadParameters& __params,
            void*                    __array,
            UINT32                   __count);

        static void* AllocArray(
            UINT32 __count);
        void Unload(ParameterFileSymbolTable* const __table);

        bool GetValue(
            const CHAR* __path,
            CHAR*       __value,
            UINT32      __size);

        bool SetValue(
            const CHAR* __path,
            const CHAR* __value);

        bool GetInfo(
            const CHAR*                 __path,
            PList<ParameterParserInfo>& __info);
    };
    struct parameter_versionStruct parameter_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_eis15_reserve
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_eis15_reserveType chromatix_eis15_reserve;

    void Load(
        ParameterLoadParameters& parentParams);

    static void LoadArray(
        ParameterLoadParameters& __params,
        void*                    __array,
        UINT32                   __count);

    static void* AllocArray(
        UINT32 __count);
    void Unload(ParameterFileSymbolTable* const __table);

    bool GetValue(
        const CHAR* __path,
        CHAR*       __value,
        UINT32      __size);

    bool SetValue(
        const CHAR* __path,
        const CHAR* __value);

    bool GetInfo(
        const CHAR*                 __path,
        PList<ParameterParserInfo>& __info);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Release the ParameterModule object
    /// Requires that this object was created via a ParameterSetManager::GetModule call
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    void Release();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Returns the ParameterModule::Modified value
    /// The Modified value is incremented when the module's data or pointer values change
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 GetModified();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetModuleName: Returns ParameterModule::Name variable
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    const CHAR* GetModuleName();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetModuleName: Returns ParameterModule::Name variable
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT64 GetModuleNameHash();
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_eis15TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatix_eis15TypeClass : public ParameterModule, public chromatix_eis15Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static constexpr UINT16 MAJOR = 1U;
    static constexpr UINT16 MINOR = 5U;
    static constexpr UINT32 PATCH = 0U;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_eis15TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_eis15TypeClass(
        const CHAR*       name,
        ModuleData* const moduleData);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatix_eis15TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetModuleName: Returns ParameterModule::Name variable
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual PARAMETER_INLINE const CHAR* GetModuleName()
    {
        return Name;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetModuleNameHash: Returns ParameterModule::NameHash variable
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual PARAMETER_INLINE UINT64 GetModuleNameHash()
    {
        return NameHash;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Create module, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Create(
        ModuleData* const    moduleData,
        DefaultModule* const defModule) const;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module data, return true if successful
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual bool LoadModule(
        ParameterFileSymbolTable* const table);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload module data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual void UnloadModule();

    virtual bool GetValue(
        const CHAR* const __path,
        CHAR* const       __value,
        UINT32 const      __size)
    {
        return chromatix_eis15Type::GetValue(__path, __value, __size);
    }

    virtual bool SetValue(
        const CHAR* const __path,
        const CHAR* const __value)
    {
        if (chromatix_eis15Type::SetValue(__path, __value))
        {
            // Change SymbolTableID so the code can detect that the module was modified.
            // Increment by 0x01000000, so the original value is preserved for diagnostics (mask with 0x00FFFFFF)
            if (SymbolTableID >= 0xff000000)
            {
                SymbolTableID = SymbolTableID & 0x00ffffffU;
            }
            SymbolTableID += 0x01000000;

            // Increment Modified counter (replaces SymbolTableID to detect modified data)
            Modified++;
            return true;
        }
        else
        {
            return false;
        }
    }

    virtual bool GetInfo(
        const CHAR* const           __path,
        PList<ParameterParserInfo>& __info)
    {
        return chromatix_eis15Type::GetInfo(__path, __info);
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// /// Release the ParameterModule object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    void Release();
}; // End class chromatix_eis15TypeClass

EIS_1_5_0_NAMESPACE_END
#endif // EIS_1_5_0_H

