////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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 V5.5.1 (2411131018)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  afalgotuningelements.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "afalgotuningelements.h"
#include "parametersetmanager.h"

AFALGOTUNINGELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// SetValue/GetValue Functions
/// Gets or sets the requested value
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixTouchROISettingsType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "normalLight") == 0)
    {
        ParameterUtils::DoubleToString((double)normalLight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lowLight") == 0)
    {
        ParameterUtils::DoubleToString((double)lowLight, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixTouchROISettingsType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "normalLight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            normalLight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lowLight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lowLight = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixTouchROISettingsType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // normalLight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("normalLight", ParameterParserDataType::Float, (double)normalLight));
    }
    else if (PARAMETER_STRCMP(__name, "normalLight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)normalLight));
    }

    // lowLight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lowLight", ParameterParserDataType::Float, (double)lowLight));
    }
    else if (PARAMETER_STRCMP(__name, "lowLight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)lowLight));
    }

    return __result;
}

bool chromatixAFRackFocusType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMovePercentage") == 0)
    {
        ParameterUtils::DoubleToString((double)rackFocusMovePercentage, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMaxStep") == 0)
    {
        ParameterUtils::DoubleToString((double)rackFocusMaxStep, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMaxStepBuffer") == 0)
    {
        ParameterUtils::DoubleToString((double)rackFocusMaxStepBuffer, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFRackFocusType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMovePercentage") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            rackFocusMovePercentage = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMaxStep") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            rackFocusMaxStep = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMaxStepBuffer") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            rackFocusMaxStepBuffer = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFRackFocusType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // rackFocusMovePercentage
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("rackFocusMovePercentage", ParameterParserDataType::Float, (double)rackFocusMovePercentage));
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMovePercentage") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)rackFocusMovePercentage));
    }

    // rackFocusMaxStep
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("rackFocusMaxStep", ParameterParserDataType::Int32, (double)rackFocusMaxStep, 0));
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMaxStep") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)rackFocusMaxStep, 0));
    }

    // rackFocusMaxStepBuffer
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("rackFocusMaxStepBuffer", ParameterParserDataType::Int32, (double)rackFocusMaxStepBuffer, 0));
    }
    else if (PARAMETER_STRCMP(__name, "rackFocusMaxStepBuffer") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)rackFocusMaxStepBuffer, 0));
    }

    return __result;
}

bool chromatixAFROITypeBasedSizeConfig::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "roiType") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)roiType, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "sizeX") == 0)
    {
        ParameterUtils::DoubleToString((double)sizeX, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "sizeY") == 0)
    {
        ParameterUtils::DoubleToString((double)sizeY, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAFROITypeBasedSizeConfig::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "roiType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            roiType = (afglobalelements::AFTriggerCtrlTypeROIEnum)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "sizeX") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            sizeX = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "sizeY") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            sizeY = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFROITypeBasedSizeConfig::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // roiType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("roiType", ParameterParserDataType::Enum, (double)(UINT32)roiType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "roiType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)roiType, 0));
    }

    // sizeX
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sizeX", ParameterParserDataType::Float, (double)sizeX));
    }
    else if (PARAMETER_STRCMP(__name, "sizeX") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)sizeX));
    }

    // sizeY
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sizeY", ParameterParserDataType::Float, (double)sizeY));
    }
    else if (PARAMETER_STRCMP(__name, "sizeY") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)sizeY));
    }

    return __result;
}

bool chromatixAFMinROISizeControl::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "sizeX") == 0)
    {
        ParameterUtils::DoubleToString((double)sizeX, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "sizeY") == 0)
    {
        ParameterUtils::DoubleToString((double)sizeY, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "roiTypeBasedOverrideConfigArr") == 0)
    {
        if (__index < roiTypeBasedOverrideConfigArrCount)
        {
            __result = roiTypeBasedOverrideConfigArr[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixAFMinROISizeControl::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "sizeX") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            sizeX = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "sizeY") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            sizeY = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "roiTypeBasedOverrideConfigArr") == 0)
    {
        if (__index < roiTypeBasedOverrideConfigArrCount)
        {
            __result = roiTypeBasedOverrideConfigArr[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixAFMinROISizeControl::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // sizeX
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sizeX", ParameterParserDataType::Float, (double)sizeX));
    }
    else if (PARAMETER_STRCMP(__name, "sizeX") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)sizeX));
    }

    // sizeY
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sizeY", ParameterParserDataType::Float, (double)sizeY));
    }
    else if (PARAMETER_STRCMP(__name, "sizeY") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)sizeY));
    }

    // roiTypeBasedOverrideConfigArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("roiTypeBasedOverrideConfigArr", ParameterParserDataType::Structure, true, false, roiTypeBasedOverrideConfigArrCount));
    }
    else if (PARAMETER_STRCMP(__name, "roiTypeBasedOverrideConfigArr") == 0)
    {
        if (__index < roiTypeBasedOverrideConfigArrCount)
        {
            __result = roiTypeBasedOverrideConfigArr[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, roiTypeBasedOverrideConfigArrCount));
        }
    }

    return __result;
}

bool chromatixAFROISizeBasedGridConfig::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "numHRegions") == 0)
    {
        ParameterUtils::DoubleToString((double)numHRegions, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "numVRegions") == 0)
    {
        ParameterUtils::DoubleToString((double)numVRegions, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "sizeGridConfigList") == 0)
    {
        if (__index < sizeGridConfigListCount)
        {
            __result = sizeGridConfigList[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixAFROISizeBasedGridConfig::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "numHRegions") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            numHRegions = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "numVRegions") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            numVRegions = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "sizeGridConfigList") == 0)
    {
        if (__index < sizeGridConfigListCount)
        {
            __result = sizeGridConfigList[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixAFROISizeBasedGridConfig::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // numHRegions
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("numHRegions", ParameterParserDataType::UInt32, (double)numHRegions, 0));
    }
    else if (PARAMETER_STRCMP(__name, "numHRegions") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)numHRegions, 0));
    }

    // numVRegions
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("numVRegions", ParameterParserDataType::UInt32, (double)numVRegions, 0));
    }
    else if (PARAMETER_STRCMP(__name, "numVRegions") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)numVRegions, 0));
    }

    // sizeGridConfigList
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sizeGridConfigList", ParameterParserDataType::Structure, true, false, sizeGridConfigListCount));
    }
    else if (PARAMETER_STRCMP(__name, "sizeGridConfigList") == 0)
    {
        if (__index < sizeGridConfigListCount)
        {
            __result = sizeGridConfigList[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, sizeGridConfigListCount));
        }
    }

    return __result;
}

bool chromatixROIScaleFactorList::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "scaleFactors") == 0)
    {
        if (__index < scaleFactorsCount)
        {
            __result = scaleFactors[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixROIScaleFactorList::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "scaleFactors") == 0)
    {
        if (__index < scaleFactorsCount)
        {
            __result = scaleFactors[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixROIScaleFactorList::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // scaleFactors
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("scaleFactors", ParameterParserDataType::Structure, true, false, scaleFactorsCount));
    }
    else if (PARAMETER_STRCMP(__name, "scaleFactors") == 0)
    {
        if (__index < scaleFactorsCount)
        {
            __result = scaleFactors[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, scaleFactorsCount));
        }
    }

    return __result;
}

bool chromatixAFMultiROIScaleAndGridConfig::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "scaleFactorList") == 0)
    {
        __result = scaleFactorList.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "sizeBasedMWConfig") == 0)
    {
        __result = sizeBasedMWConfig.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFMultiROIScaleAndGridConfig::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "scaleFactorList") == 0)
    {
        __result = scaleFactorList.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "sizeBasedMWConfig") == 0)
    {
        __result = sizeBasedMWConfig.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFMultiROIScaleAndGridConfig::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // scaleFactorList
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("scaleFactorList", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "scaleFactorList") == 0)
    {
        __result = scaleFactorList.GetInfo(&__path[__pos], __info);
    }

    // sizeBasedMWConfig
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sizeBasedMWConfig", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "sizeBasedMWConfig") == 0)
    {
        __result = sizeBasedMWConfig.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFMultiROIExtension::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "multiROITouch") == 0)
    {
        __result = multiROITouch.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "multiROITrack") == 0)
    {
        __result = multiROITrack.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFMultiROIExtension::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "multiROITouch") == 0)
    {
        __result = multiROITouch.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "multiROITrack") == 0)
    {
        __result = multiROITrack.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFMultiROIExtension::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // multiROITouch
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("multiROITouch", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "multiROITouch") == 0)
    {
        __result = multiROITouch.GetInfo(&__path[__pos], __info);
    }

    // multiROITrack
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("multiROITrack", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "multiROITrack") == 0)
    {
        __result = multiROITrack.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFMultiROIConfigControl::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "roiTypeSelectionArr") == 0)
    {
        if (__index < roiTypeSelectionArrCount)
        {
            ParameterUtils::DoubleToString((double)(UINT32)roiTypeSelectionArr[__index], __value, __size, 0);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < roiTypeSelectionArrCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)(UINT32)roiTypeSelectionArr[i], &__value[__valuePos], (INT32)(__size - __valuePos), 0);
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "multiROIExtension") == 0)
    {
        __result = multiROIExtension.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFMultiROIConfigControl::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "roiTypeSelectionArr") == 0)
    {
        if (__index < roiTypeSelectionArrCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                roiTypeSelectionArr[__index] = (afglobalelements::chromatixAFMultiROIType)(UINT32)dblValue; 
            }
        }
        else
        {
            SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __pos = 0;

            __index = 0;
            while (__pos < __valueLen && __index < roiTypeSelectionArrCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __pos += ParameterUtils::GetSubString(&__value[__pos], ',', __valueStr, MAX_SIZE);
                __pos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    roiTypeSelectionArr[__index] = (afglobalelements::chromatixAFMultiROIType)(UINT32)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "multiROIExtension") == 0)
    {
        __result = multiROIExtension.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFMultiROIConfigControl::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // roiTypeSelectionArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("roiTypeSelectionArr", ParameterParserDataType::Enum, true, false, roiTypeSelectionArrCount));
    }

    // multiROIExtension
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("multiROIExtension", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "multiROIExtension") == 0)
    {
        __result = multiROIExtension.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFEyeTrackingControl::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "faceROISizeXTh") == 0)
    {
        ParameterUtils::DoubleToString((double)faceROISizeXTh, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "faceROISizeYTh") == 0)
    {
        ParameterUtils::DoubleToString((double)faceROISizeYTh, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "faceSizeHysFactor") == 0)
    {
        ParameterUtils::DoubleToString((double)faceSizeHysFactor, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "eyeRectFaceOrientationSelection") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)eyeRectFaceOrientationSelection, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "eyeROIPreference") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)eyeROIPreference, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "SingleEyeRectSizeXFactor") == 0)
    {
        ParameterUtils::DoubleToString((double)SingleEyeRectSizeXFactor, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "SingleEyeRectSizeYFactor") == 0)
    {
        ParameterUtils::DoubleToString((double)SingleEyeRectSizeYFactor, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TwoEyeRectSizeXFactor") == 0)
    {
        ParameterUtils::DoubleToString((double)TwoEyeRectSizeXFactor, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TwoEyeRectSizeYFactor") == 0)
    {
        ParameterUtils::DoubleToString((double)TwoEyeRectSizeYFactor, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAFEyeTrackingControl::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceROISizeXTh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceROISizeXTh = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceROISizeYTh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceROISizeYTh = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceSizeHysFactor") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceSizeHysFactor = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "eyeRectFaceOrientationSelection") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            eyeRectFaceOrientationSelection = (chromatixAFFaceOrientation)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "eyeROIPreference") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            eyeROIPreference = (chromatixAFEyeSelectionType)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "SingleEyeRectSizeXFactor") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            SingleEyeRectSizeXFactor = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "SingleEyeRectSizeYFactor") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            SingleEyeRectSizeYFactor = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TwoEyeRectSizeXFactor") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TwoEyeRectSizeXFactor = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TwoEyeRectSizeYFactor") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TwoEyeRectSizeYFactor = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFEyeTrackingControl::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // faceROISizeXTh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceROISizeXTh", ParameterParserDataType::Float, (double)faceROISizeXTh));
    }
    else if (PARAMETER_STRCMP(__name, "faceROISizeXTh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)faceROISizeXTh));
    }

    // faceROISizeYTh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceROISizeYTh", ParameterParserDataType::Float, (double)faceROISizeYTh));
    }
    else if (PARAMETER_STRCMP(__name, "faceROISizeYTh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)faceROISizeYTh));
    }

    // faceSizeHysFactor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceSizeHysFactor", ParameterParserDataType::Float, (double)faceSizeHysFactor));
    }
    else if (PARAMETER_STRCMP(__name, "faceSizeHysFactor") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)faceSizeHysFactor));
    }

    // eyeRectFaceOrientationSelection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("eyeRectFaceOrientationSelection", ParameterParserDataType::Enum, (double)(UINT32)eyeRectFaceOrientationSelection, 0));
    }
    else if (PARAMETER_STRCMP(__name, "eyeRectFaceOrientationSelection") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)eyeRectFaceOrientationSelection, 0));
    }

    // eyeROIPreference
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("eyeROIPreference", ParameterParserDataType::Enum, (double)(UINT32)eyeROIPreference, 0));
    }
    else if (PARAMETER_STRCMP(__name, "eyeROIPreference") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)eyeROIPreference, 0));
    }

    // SingleEyeRectSizeXFactor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("SingleEyeRectSizeXFactor", ParameterParserDataType::Float, (double)SingleEyeRectSizeXFactor));
    }
    else if (PARAMETER_STRCMP(__name, "SingleEyeRectSizeXFactor") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)SingleEyeRectSizeXFactor));
    }

    // SingleEyeRectSizeYFactor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("SingleEyeRectSizeYFactor", ParameterParserDataType::Float, (double)SingleEyeRectSizeYFactor));
    }
    else if (PARAMETER_STRCMP(__name, "SingleEyeRectSizeYFactor") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)SingleEyeRectSizeYFactor));
    }

    // TwoEyeRectSizeXFactor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TwoEyeRectSizeXFactor", ParameterParserDataType::Float, (double)TwoEyeRectSizeXFactor));
    }
    else if (PARAMETER_STRCMP(__name, "TwoEyeRectSizeXFactor") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TwoEyeRectSizeXFactor));
    }

    // TwoEyeRectSizeYFactor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TwoEyeRectSizeYFactor", ParameterParserDataType::Float, (double)TwoEyeRectSizeYFactor));
    }
    else if (PARAMETER_STRCMP(__name, "TwoEyeRectSizeYFactor") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TwoEyeRectSizeYFactor));
    }

    return __result;
}

bool chromatixAFROILowLumaAlert::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minTolerableLuma") == 0)
    {
        ParameterUtils::DoubleToString((double)minTolerableLuma, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minFaceAFWorkingLuma") == 0)
    {
        ParameterUtils::DoubleToString((double)minFaceAFWorkingLuma, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "horizontalBayerGridCropOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)horizontalBayerGridCropOffset, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "verticalBayerGridCropOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)verticalBayerGridCropOffset, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "enableFaceTracking") == 0)
    {
        ParameterUtils::DoubleToString((double)enableFaceTracking, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockMaxSensReduction") == 0)
    {
        ParameterUtils::DoubleToString((double)refocusLockMaxSensReduction, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockAlertStableCount") == 0)
    {
        ParameterUtils::DoubleToString((double)refocusLockAlertStableCount, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockLumaGapAmplifier") == 0)
    {
        ParameterUtils::DoubleToString((double)refocusLockLumaGapAmplifier, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "faceROIWidthScaler") == 0)
    {
        ParameterUtils::DoubleToString((double)faceROIWidthScaler, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "faceROIHeightScaler") == 0)
    {
        ParameterUtils::DoubleToString((double)faceROIHeightScaler, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "pdTemporalFilterSizeExtend") == 0)
    {
        ParameterUtils::DoubleToString((double)pdTemporalFilterSizeExtend, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "face2PDMinMoveThreshExtend") == 0)
    {
        ParameterUtils::DoubleToString((double)face2PDMinMoveThreshExtend, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "waitPDConfRecoverCntExtend") == 0)
    {
        ParameterUtils::DoubleToString((double)waitPDConfRecoverCntExtend, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFROILowLumaAlert::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minTolerableLuma") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minTolerableLuma = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minFaceAFWorkingLuma") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minFaceAFWorkingLuma = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "horizontalBayerGridCropOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            horizontalBayerGridCropOffset = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "verticalBayerGridCropOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            verticalBayerGridCropOffset = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableFaceTracking") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableFaceTracking = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockMaxSensReduction") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            refocusLockMaxSensReduction = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockAlertStableCount") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            refocusLockAlertStableCount = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockLumaGapAmplifier") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            refocusLockLumaGapAmplifier = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceROIWidthScaler") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceROIWidthScaler = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceROIHeightScaler") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceROIHeightScaler = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "pdTemporalFilterSizeExtend") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            pdTemporalFilterSizeExtend = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "face2PDMinMoveThreshExtend") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            face2PDMinMoveThreshExtend = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "waitPDConfRecoverCntExtend") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            waitPDConfRecoverCntExtend = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFROILowLumaAlert::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // minTolerableLuma
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minTolerableLuma", ParameterParserDataType::Float, (double)minTolerableLuma));
    }
    else if (PARAMETER_STRCMP(__name, "minTolerableLuma") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)minTolerableLuma));
    }

    // minFaceAFWorkingLuma
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minFaceAFWorkingLuma", ParameterParserDataType::Float, (double)minFaceAFWorkingLuma));
    }
    else if (PARAMETER_STRCMP(__name, "minFaceAFWorkingLuma") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)minFaceAFWorkingLuma));
    }

    // horizontalBayerGridCropOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("horizontalBayerGridCropOffset", ParameterParserDataType::Float, (double)horizontalBayerGridCropOffset));
    }
    else if (PARAMETER_STRCMP(__name, "horizontalBayerGridCropOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)horizontalBayerGridCropOffset));
    }

    // verticalBayerGridCropOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("verticalBayerGridCropOffset", ParameterParserDataType::Float, (double)verticalBayerGridCropOffset));
    }
    else if (PARAMETER_STRCMP(__name, "verticalBayerGridCropOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)verticalBayerGridCropOffset));
    }

    // enableFaceTracking
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableFaceTracking", ParameterParserDataType::Boolean, (double)enableFaceTracking, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableFaceTracking") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enableFaceTracking, 0));
    }

    // refocusLockMaxSensReduction
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("refocusLockMaxSensReduction", ParameterParserDataType::Float, (double)refocusLockMaxSensReduction));
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockMaxSensReduction") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)refocusLockMaxSensReduction));
    }

    // refocusLockAlertStableCount
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("refocusLockAlertStableCount", ParameterParserDataType::UInt32, (double)refocusLockAlertStableCount, 0));
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockAlertStableCount") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)refocusLockAlertStableCount, 0));
    }

    // refocusLockLumaGapAmplifier
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("refocusLockLumaGapAmplifier", ParameterParserDataType::Float, (double)refocusLockLumaGapAmplifier));
    }
    else if (PARAMETER_STRCMP(__name, "refocusLockLumaGapAmplifier") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)refocusLockLumaGapAmplifier));
    }

    // faceROIWidthScaler
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceROIWidthScaler", ParameterParserDataType::Float, (double)faceROIWidthScaler));
    }
    else if (PARAMETER_STRCMP(__name, "faceROIWidthScaler") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)faceROIWidthScaler));
    }

    // faceROIHeightScaler
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceROIHeightScaler", ParameterParserDataType::Float, (double)faceROIHeightScaler));
    }
    else if (PARAMETER_STRCMP(__name, "faceROIHeightScaler") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)faceROIHeightScaler));
    }

    // pdTemporalFilterSizeExtend
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("pdTemporalFilterSizeExtend", ParameterParserDataType::UInt32, (double)pdTemporalFilterSizeExtend, 0));
    }
    else if (PARAMETER_STRCMP(__name, "pdTemporalFilterSizeExtend") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)pdTemporalFilterSizeExtend, 0));
    }

    // face2PDMinMoveThreshExtend
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("face2PDMinMoveThreshExtend", ParameterParserDataType::UInt32, (double)face2PDMinMoveThreshExtend, 0));
    }
    else if (PARAMETER_STRCMP(__name, "face2PDMinMoveThreshExtend") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)face2PDMinMoveThreshExtend, 0));
    }

    // waitPDConfRecoverCntExtend
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("waitPDConfRecoverCntExtend", ParameterParserDataType::UInt32, (double)waitPDConfRecoverCntExtend, 0));
    }
    else if (PARAMETER_STRCMP(__name, "waitPDConfRecoverCntExtend") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)waitPDConfRecoverCntExtend, 0));
    }

    return __result;
}

bool chromatixTouchAssistControlType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "confidenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)confidenceThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTouchAssistControlType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "confidenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            confidenceThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixTouchAssistControlType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // confidenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("confidenceThreshold", ParameterParserDataType::Int32, (double)confidenceThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "confidenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)confidenceThreshold, 0));
    }

    return __result;
}

bool HDRStatsEntryType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "value") == 0)
    {
        ParameterUtils::DoubleToString((double)value, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        ParameterUtils::DoubleToString((double)weight, __value, __size);
        __result = true;
    }

    return __result;
}

bool HDRStatsEntryType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "value") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            value = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            weight = (float)dblValue; 
        }
    }

    return __result;
}

bool HDRStatsEntryType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // value
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("value", ParameterParserDataType::Float, (double)value));
    }
    else if (PARAMETER_STRCMP(__name, "value") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)value));
    }

    // weight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("weight", ParameterParserDataType::Float, (double)weight));
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)weight));
    }

    return __result;
}

bool HDRProcessingTypeGrid::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)StatsTypeArr, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool HDRProcessingTypeGrid::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            StatsTypeArr = (HDRStatsTypeGrid)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool HDRProcessingTypeGrid::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // StatsTypeArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("StatsTypeArr", ParameterParserDataType::Enum, (double)(UINT32)StatsTypeArr, 0));
    }
    else if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)StatsTypeArr, 0));
    }

    // entries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("entries", ParameterParserDataType::Structure, true, false, entriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, entriesCount));
        }
    }

    return __result;
}

bool HDRProcessingTypeGlobal::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)StatsTypeArr, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool HDRProcessingTypeGlobal::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            StatsTypeArr = (HDRStatsTypeGlobal)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool HDRProcessingTypeGlobal::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // StatsTypeArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("StatsTypeArr", ParameterParserDataType::Enum, (double)(UINT32)StatsTypeArr, 0));
    }
    else if (PARAMETER_STRCMP(__name, "StatsTypeArr") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)StatsTypeArr, 0));
    }

    // entries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("entries", ParameterParserDataType::Structure, true, false, entriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, entriesCount));
        }
    }

    return __result;
}

bool HDRBiasEntryType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "biasType") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)biasType, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        ParameterUtils::DoubleToString((double)weight, __value, __size);
        __result = true;
    }

    return __result;
}

bool HDRBiasEntryType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "biasType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            biasType = (BiasExposureType)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            weight = (float)dblValue; 
        }
    }

    return __result;
}

bool HDRBiasEntryType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // biasType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("biasType", ParameterParserDataType::Enum, (double)(UINT32)biasType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "biasType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)biasType, 0));
    }

    // weight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("weight", ParameterParserDataType::Float, (double)weight));
    }
    else if (PARAMETER_STRCMP(__name, "weight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)weight));
    }

    return __result;
}

bool chromatixAFHDRControlType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "modeSelect") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)modeSelect, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "bias") == 0)
    {
        __result = bias.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGlobal") == 0)
    {
        __result = statsTypeGlobal.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGrid") == 0)
    {
        __result = statsTypeGrid.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFHDRControlType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "modeSelect") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            modeSelect = (HDRStatsSelectionType)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "bias") == 0)
    {
        __result = bias.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGlobal") == 0)
    {
        __result = statsTypeGlobal.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGrid") == 0)
    {
        __result = statsTypeGrid.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFHDRControlType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // modeSelect
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("modeSelect", ParameterParserDataType::Enum, (double)(UINT32)modeSelect, 0));
    }
    else if (PARAMETER_STRCMP(__name, "modeSelect") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)modeSelect, 0));
    }

    // bias
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("bias", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "bias") == 0)
    {
        __result = bias.GetInfo(&__path[__pos], __info);
    }

    // statsTypeGlobal
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("statsTypeGlobal", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGlobal") == 0)
    {
        __result = statsTypeGlobal.GetInfo(&__path[__pos], __info);
    }

    // statsTypeGrid
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("statsTypeGrid", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "statsTypeGrid") == 0)
    {
        __result = statsTypeGrid.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFHDRControlType::biasStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixAFHDRControlType::biasStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixAFHDRControlType::biasStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // entries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("entries", ParameterParserDataType::Structure, true, false, entriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "entries") == 0)
    {
        if (__index < entriesCount)
        {
            __result = entries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, entriesCount));
        }
    }

    return __result;
}

bool chromatixAFHDRControlType::statsTypeGlobalStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixAFHDRControlType::statsTypeGlobalStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixAFHDRControlType::statsTypeGlobalStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // StatsControlArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("StatsControlArr", ParameterParserDataType::Structure, true, false, StatsControlArrCount));
    }
    else if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, StatsControlArrCount));
        }
    }

    return __result;
}

bool chromatixAFHDRControlType::statsTypeGridStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixAFHDRControlType::statsTypeGridStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixAFHDRControlType::statsTypeGridStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // StatsControlArr
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("StatsControlArr", ParameterParserDataType::Structure, true, false, StatsControlArrCount));
    }
    else if (PARAMETER_STRCMP(__name, "StatsControlArr") == 0)
    {
        if (__index < StatsControlArrCount)
        {
            __result = StatsControlArr[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, StatsControlArrCount));
        }
    }

    return __result;
}

bool chromatixTriggerConditionEntriesType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minConfidence") == 0)
    {
        ParameterUtils::DoubleToString((double)minConfidence, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minDefocus") == 0)
    {
        ParameterUtils::DoubleToString((double)minDefocus, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxDefocus") == 0)
    {
        ParameterUtils::DoubleToString((double)maxDefocus, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxGyro") == 0)
    {
        ParameterUtils::DoubleToString((double)maxGyro, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minDist") == 0)
    {
        ParameterUtils::DoubleToString((double)minDist, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxDist") == 0)
    {
        ParameterUtils::DoubleToString((double)maxDist, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minAmb") == 0)
    {
        ParameterUtils::DoubleToString((double)minAmb, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxAmb") == 0)
    {
        ParameterUtils::DoubleToString((double)maxAmb, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minExp") == 0)
    {
        ParameterUtils::DoubleToString((double)minExp, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxExp") == 0)
    {
        ParameterUtils::DoubleToString((double)maxExp, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minDrcGain") == 0)
    {
        ParameterUtils::DoubleToString((double)minDrcGain, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxDrcGain") == 0)
    {
        ParameterUtils::DoubleToString((double)maxDrcGain, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minStableCount") == 0)
    {
        ParameterUtils::DoubleToString((double)minStableCount, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxEscapeCount") == 0)
    {
        ParameterUtils::DoubleToString((double)maxEscapeCount, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "MFDOFScene") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)MFDOFScene, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "sceneFlag") == 0)
    {
        ParameterUtils::DoubleToString((double)sceneFlag, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixTriggerConditionEntriesType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minConfidence") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minConfidence = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minDefocus") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minDefocus = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxDefocus") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxDefocus = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxGyro") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxGyro = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minDist") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minDist = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxDist") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxDist = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minAmb") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minAmb = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxAmb") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxAmb = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minExp") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minExp = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxExp") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxExp = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minDrcGain") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minDrcGain = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxDrcGain") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxDrcGain = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minStableCount") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minStableCount = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxEscapeCount") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxEscapeCount = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "MFDOFScene") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            MFDOFScene = (MFDOFSceneEnum)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "sceneFlag") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            sceneFlag = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixTriggerConditionEntriesType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // minConfidence
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minConfidence", ParameterParserDataType::UInt32, (double)minConfidence, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minConfidence") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)minConfidence, 0));
    }

    // minDefocus
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minDefocus", ParameterParserDataType::Int32, (double)minDefocus, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minDefocus") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minDefocus, 0));
    }

    // maxDefocus
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxDefocus", ParameterParserDataType::Int32, (double)maxDefocus, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxDefocus") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxDefocus, 0));
    }

    // maxGyro
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxGyro", ParameterParserDataType::Float, (double)maxGyro));
    }
    else if (PARAMETER_STRCMP(__name, "maxGyro") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)maxGyro));
    }

    // minDist
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minDist", ParameterParserDataType::Int32, (double)minDist, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minDist") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minDist, 0));
    }

    // maxDist
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxDist", ParameterParserDataType::Int32, (double)maxDist, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxDist") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxDist, 0));
    }

    // minAmb
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minAmb", ParameterParserDataType::Float, (double)minAmb));
    }
    else if (PARAMETER_STRCMP(__name, "minAmb") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)minAmb));
    }

    // maxAmb
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxAmb", ParameterParserDataType::Float, (double)maxAmb));
    }
    else if (PARAMETER_STRCMP(__name, "maxAmb") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)maxAmb));
    }

    // minExp
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minExp", ParameterParserDataType::UInt32, (double)minExp, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minExp") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)minExp, 0));
    }

    // maxExp
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxExp", ParameterParserDataType::UInt32, (double)maxExp, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxExp") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)maxExp, 0));
    }

    // minDrcGain
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minDrcGain", ParameterParserDataType::Float, (double)minDrcGain));
    }
    else if (PARAMETER_STRCMP(__name, "minDrcGain") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)minDrcGain));
    }

    // maxDrcGain
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxDrcGain", ParameterParserDataType::Float, (double)maxDrcGain));
    }
    else if (PARAMETER_STRCMP(__name, "maxDrcGain") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)maxDrcGain));
    }

    // minStableCount
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minStableCount", ParameterParserDataType::UInt32, (double)minStableCount, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minStableCount") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)minStableCount, 0));
    }

    // maxEscapeCount
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxEscapeCount", ParameterParserDataType::UInt32, (double)maxEscapeCount, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxEscapeCount") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)maxEscapeCount, 0));
    }

    // MFDOFScene
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MFDOFScene", ParameterParserDataType::Enum, (double)(UINT32)MFDOFScene, 0));
    }
    else if (PARAMETER_STRCMP(__name, "MFDOFScene") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)MFDOFScene, 0));
    }

    // sceneFlag
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sceneFlag", ParameterParserDataType::Int32, (double)sceneFlag, 0));
    }
    else if (PARAMETER_STRCMP(__name, "sceneFlag") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)sceneFlag, 0));
    }

    return __result;
}

bool chromatixDualFaceFocus::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "enableControlExtension") == 0)
    {
        ParameterUtils::DoubleToString((double)enableControlExtension, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "rearToFrontFocusWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)rearToFrontFocusWeight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "overlapPrevRoiIouRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)overlapPrevRoiIouRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "convergeConditions") == 0)
    {
        __result = convergeConditions.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixDualFaceFocus::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableControlExtension") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableControlExtension = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "rearToFrontFocusWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            rearToFrontFocusWeight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "overlapPrevRoiIouRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            overlapPrevRoiIouRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "convergeConditions") == 0)
    {
        __result = convergeConditions.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixDualFaceFocus::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // enableControlExtension
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableControlExtension", ParameterParserDataType::Boolean, (double)enableControlExtension, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableControlExtension") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enableControlExtension, 0));
    }

    // rearToFrontFocusWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("rearToFrontFocusWeight", ParameterParserDataType::Float, (double)rearToFrontFocusWeight));
    }
    else if (PARAMETER_STRCMP(__name, "rearToFrontFocusWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)rearToFrontFocusWeight));
    }

    // overlapPrevRoiIouRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("overlapPrevRoiIouRatio", ParameterParserDataType::Float, (double)overlapPrevRoiIouRatio));
    }
    else if (PARAMETER_STRCMP(__name, "overlapPrevRoiIouRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)overlapPrevRoiIouRatio));
    }

    // convergeConditions
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("convergeConditions", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "convergeConditions") == 0)
    {
        __result = convergeConditions.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixTriggerConditionListType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerConditionEntries") == 0)
    {
        if (__index < triggerConditionEntriesCount)
        {
            __result = triggerConditionEntries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixTriggerConditionListType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerConditionEntries") == 0)
    {
        if (__index < triggerConditionEntriesCount)
        {
            __result = triggerConditionEntries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixTriggerConditionListType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // triggerConditionEntries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerConditionEntries", ParameterParserDataType::Structure, true, false, triggerConditionEntriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "triggerConditionEntries") == 0)
    {
        if (__index < triggerConditionEntriesCount)
        {
            __result = triggerConditionEntries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, triggerConditionEntriesCount));
        }
    }

    return __result;
}

bool chromatixCoordinateEntriesType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "x") == 0)
    {
        ParameterUtils::DoubleToString((double)x, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "y") == 0)
    {
        ParameterUtils::DoubleToString((double)y, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixCoordinateEntriesType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "x") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            x = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "y") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            y = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixCoordinateEntriesType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // x
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("x", ParameterParserDataType::Float, (double)x));
    }
    else if (PARAMETER_STRCMP(__name, "x") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)x));
    }

    // y
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("y", ParameterParserDataType::Float, (double)y));
    }
    else if (PARAMETER_STRCMP(__name, "y") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)y));
    }

    return __result;
}

bool chromatixCoordinateListType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "coordinateEntries") == 0)
    {
        if (__index < coordinateEntriesCount)
        {
            __result = coordinateEntries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixCoordinateListType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "coordinateEntries") == 0)
    {
        if (__index < coordinateEntriesCount)
        {
            __result = coordinateEntries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixCoordinateListType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // coordinateEntries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("coordinateEntries", ParameterParserDataType::Structure, true, false, coordinateEntriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "coordinateEntries") == 0)
    {
        if (__index < coordinateEntriesCount)
        {
            __result = coordinateEntries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, coordinateEntriesCount));
        }
    }

    return __result;
}

bool chromatixMFDOF::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "touchMaxDistanceFromCenter") == 0)
    {
        ParameterUtils::DoubleToString((double)touchMaxDistanceFromCenter, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minTiltedDefocus") == 0)
    {
        ParameterUtils::DoubleToString((double)minTiltedDefocus, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "cornerStatsMerger") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)cornerStatsMerger, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "force2Output") == 0)
    {
        ParameterUtils::DoubleToString((double)force2Output, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "multiDepthAbort") == 0)
    {
        ParameterUtils::DoubleToString((double)multiDepthAbort, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "focusDoneThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)focusDoneThreshold, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "convergeDoneFilterThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)convergeDoneFilterThreshold, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "coordinateList") == 0)
    {
        __result = coordinateList.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "triggerConditionList") == 0)
    {
        __result = triggerConditionList.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixMFDOF::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "touchMaxDistanceFromCenter") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            touchMaxDistanceFromCenter = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minTiltedDefocus") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minTiltedDefocus = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "cornerStatsMerger") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            cornerStatsMerger = (cornerStatsMergerEnum)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "force2Output") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            force2Output = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "multiDepthAbort") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            multiDepthAbort = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "focusDoneThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            focusDoneThreshold = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "convergeDoneFilterThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            convergeDoneFilterThreshold = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "coordinateList") == 0)
    {
        __result = coordinateList.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "triggerConditionList") == 0)
    {
        __result = triggerConditionList.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixMFDOF::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // touchMaxDistanceFromCenter
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("touchMaxDistanceFromCenter", ParameterParserDataType::Float, (double)touchMaxDistanceFromCenter));
    }
    else if (PARAMETER_STRCMP(__name, "touchMaxDistanceFromCenter") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)touchMaxDistanceFromCenter));
    }

    // minTiltedDefocus
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minTiltedDefocus", ParameterParserDataType::Int32, (double)minTiltedDefocus, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minTiltedDefocus") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minTiltedDefocus, 0));
    }

    // cornerStatsMerger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("cornerStatsMerger", ParameterParserDataType::Enum, (double)(UINT32)cornerStatsMerger, 0));
    }
    else if (PARAMETER_STRCMP(__name, "cornerStatsMerger") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)cornerStatsMerger, 0));
    }

    // force2Output
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("force2Output", ParameterParserDataType::Boolean, (double)force2Output, 0));
    }
    else if (PARAMETER_STRCMP(__name, "force2Output") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)force2Output, 0));
    }

    // multiDepthAbort
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("multiDepthAbort", ParameterParserDataType::Boolean, (double)multiDepthAbort, 0));
    }
    else if (PARAMETER_STRCMP(__name, "multiDepthAbort") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)multiDepthAbort, 0));
    }

    // focusDoneThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("focusDoneThreshold", ParameterParserDataType::UInt32, (double)focusDoneThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "focusDoneThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)focusDoneThreshold, 0));
    }

    // convergeDoneFilterThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("convergeDoneFilterThreshold", ParameterParserDataType::UInt32, (double)convergeDoneFilterThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "convergeDoneFilterThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)convergeDoneFilterThreshold, 0));
    }

    // coordinateList
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("coordinateList", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "coordinateList") == 0)
    {
        __result = coordinateList.GetInfo(&__path[__pos], __info);
    }

    // triggerConditionList
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerConditionList", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "triggerConditionList") == 0)
    {
        __result = triggerConditionList.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool FocusMapConfidenceEntryType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerPoint") == 0)
    {
        ParameterUtils::DoubleToString((double)triggerPoint, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "confidenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)confidenceThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool FocusMapConfidenceEntryType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerPoint") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            triggerPoint = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "confidenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            confidenceThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool FocusMapConfidenceEntryType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // triggerPoint
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerPoint", ParameterParserDataType::Float, (double)triggerPoint));
    }
    else if (PARAMETER_STRCMP(__name, "triggerPoint") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)triggerPoint));
    }

    // confidenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("confidenceThreshold", ParameterParserDataType::Int32, (double)confidenceThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "confidenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)confidenceThreshold, 0));
    }

    return __result;
}

bool FocusMapDefocusEntryType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerPoint") == 0)
    {
        ParameterUtils::DoubleToString((double)triggerPoint, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "defocusThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)defocusThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool FocusMapDefocusEntryType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerPoint") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            triggerPoint = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "defocusThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            defocusThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool FocusMapDefocusEntryType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // triggerPoint
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerPoint", ParameterParserDataType::Float, (double)triggerPoint));
    }
    else if (PARAMETER_STRCMP(__name, "triggerPoint") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)triggerPoint));
    }

    // defocusThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("defocusThreshold", ParameterParserDataType::Int32, (double)defocusThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "defocusThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)defocusThreshold, 0));
    }

    return __result;
}

bool chromatixAFFocusMapControlType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "enableDepthSensorFocusmap") == 0)
    {
        ParameterUtils::DoubleToString((double)enableDepthSensorFocusmap, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "enableDistanceMap") == 0)
    {
        ParameterUtils::DoubleToString((double)enableDistanceMap, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "resolution") == 0)
    {
        __result = resolution.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "defocusTable") == 0)
    {
        __result = defocusTable.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "confidenceTable") == 0)
    {
        __result = confidenceTable.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFFocusMapControlType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableDepthSensorFocusmap") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableDepthSensorFocusmap = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableDistanceMap") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableDistanceMap = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "resolution") == 0)
    {
        __result = resolution.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "defocusTable") == 0)
    {
        __result = defocusTable.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "confidenceTable") == 0)
    {
        __result = confidenceTable.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFFocusMapControlType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // enableDepthSensorFocusmap
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableDepthSensorFocusmap", ParameterParserDataType::Boolean, (double)enableDepthSensorFocusmap, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableDepthSensorFocusmap") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enableDepthSensorFocusmap, 0));
    }

    // enableDistanceMap
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableDistanceMap", ParameterParserDataType::Boolean, (double)enableDistanceMap, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableDistanceMap") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enableDistanceMap, 0));
    }

    // resolution
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("resolution", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "resolution") == 0)
    {
        __result = resolution.GetInfo(&__path[__pos], __info);
    }

    // defocusTable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("defocusTable", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "defocusTable") == 0)
    {
        __result = defocusTable.GetInfo(&__path[__pos], __info);
    }

    // confidenceTable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("confidenceTable", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "confidenceTable") == 0)
    {
        __result = confidenceTable.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFFocusMapControlType::resolutionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "width") == 0)
    {
        ParameterUtils::DoubleToString((double)width, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "height") == 0)
    {
        ParameterUtils::DoubleToString((double)height, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFFocusMapControlType::resolutionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "width") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            width = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "height") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            height = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFFocusMapControlType::resolutionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // width
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("width", ParameterParserDataType::Int32, (double)width, 0));
    }
    else if (PARAMETER_STRCMP(__name, "width") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)width, 0));
    }

    // height
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("height", ParameterParserDataType::Int32, (double)height, 0));
    }
    else if (PARAMETER_STRCMP(__name, "height") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)height, 0));
    }

    return __result;
}

bool chromatixAFFocusMapControlType::defocusTableStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerMode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)triggerMode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "triggerEntries") == 0)
    {
        if (__index < triggerEntriesCount)
        {
            __result = triggerEntries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixAFFocusMapControlType::defocusTableStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            triggerMode = (triggerModeEnum)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "triggerEntries") == 0)
    {
        if (__index < triggerEntriesCount)
        {
            __result = triggerEntries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixAFFocusMapControlType::defocusTableStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // triggerMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerMode", ParameterParserDataType::Enum, (double)(UINT32)triggerMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "triggerMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)triggerMode, 0));
    }

    // triggerEntries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerEntries", ParameterParserDataType::Structure, true, false, triggerEntriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "triggerEntries") == 0)
    {
        if (__index < triggerEntriesCount)
        {
            __result = triggerEntries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, triggerEntriesCount));
        }
    }

    return __result;
}

bool chromatixAFFocusMapControlType::confidenceTableStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerMode") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)triggerMode, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "triggerEntries") == 0)
    {
        if (__index < triggerEntriesCount)
        {
            __result = triggerEntries[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool chromatixAFFocusMapControlType::confidenceTableStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "triggerMode") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            triggerMode = (triggerModeEnum)(UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "triggerEntries") == 0)
    {
        if (__index < triggerEntriesCount)
        {
            __result = triggerEntries[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool chromatixAFFocusMapControlType::confidenceTableStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // triggerMode
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerMode", ParameterParserDataType::Enum, (double)(UINT32)triggerMode, 0));
    }
    else if (PARAMETER_STRCMP(__name, "triggerMode") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)triggerMode, 0));
    }

    // triggerEntries
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerEntries", ParameterParserDataType::Structure, true, false, triggerEntriesCount));
    }
    else if (PARAMETER_STRCMP(__name, "triggerEntries") == 0)
    {
        if (__index < triggerEntriesCount)
        {
            __result = triggerEntries[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, triggerEntriesCount));
        }
    }

    return __result;
}

bool chromatixAdaptiveLensMap::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "convergeStats") == 0)
    {
        __result = convergeStats.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "settledStats") == 0)
    {
        __result = settledStats.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "sampleCollection") == 0)
    {
        __result = sampleCollection.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "prediction") == 0)
    {
        __result = prediction.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "temperatureCompensation") == 0)
    {
        __result = temperatureCompensation.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAdaptiveLensMap::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "convergeStats") == 0)
    {
        __result = convergeStats.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "settledStats") == 0)
    {
        __result = settledStats.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "sampleCollection") == 0)
    {
        __result = sampleCollection.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "prediction") == 0)
    {
        __result = prediction.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "temperatureCompensation") == 0)
    {
        __result = temperatureCompensation.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAdaptiveLensMap::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // convergeStats
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("convergeStats", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "convergeStats") == 0)
    {
        __result = convergeStats.GetInfo(&__path[__pos], __info);
    }

    // settledStats
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("settledStats", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "settledStats") == 0)
    {
        __result = settledStats.GetInfo(&__path[__pos], __info);
    }

    // sampleCollection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("sampleCollection", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "sampleCollection") == 0)
    {
        __result = sampleCollection.GetInfo(&__path[__pos], __info);
    }

    // prediction
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("prediction", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "prediction") == 0)
    {
        __result = prediction.GetInfo(&__path[__pos], __info);
    }

    // temperatureCompensation
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("temperatureCompensation", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "temperatureCompensation") == 0)
    {
        __result = temperatureCompensation.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAdaptiveLensMap::convergeStatsStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minConvergeFrame") == 0)
    {
        ParameterUtils::DoubleToString((double)minConvergeFrame, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxConvergeFrame") == 0)
    {
        ParameterUtils::DoubleToString((double)maxConvergeFrame, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minPDConfidence") == 0)
    {
        ParameterUtils::DoubleToString((double)minPDConfidence, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxGyroSQR") == 0)
    {
        ParameterUtils::DoubleToString((double)maxGyroSQR, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "MaxTOFDistanceVariation") == 0)
    {
        ParameterUtils::DoubleToString((double)MaxTOFDistanceVariation, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAdaptiveLensMap::convergeStatsStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minConvergeFrame") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minConvergeFrame = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxConvergeFrame") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxConvergeFrame = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minPDConfidence") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minPDConfidence = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxGyroSQR") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxGyroSQR = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "MaxTOFDistanceVariation") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            MaxTOFDistanceVariation = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAdaptiveLensMap::convergeStatsStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // minConvergeFrame
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minConvergeFrame", ParameterParserDataType::Float, (double)minConvergeFrame));
    }
    else if (PARAMETER_STRCMP(__name, "minConvergeFrame") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)minConvergeFrame));
    }

    // maxConvergeFrame
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxConvergeFrame", ParameterParserDataType::Float, (double)maxConvergeFrame));
    }
    else if (PARAMETER_STRCMP(__name, "maxConvergeFrame") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)maxConvergeFrame));
    }

    // minPDConfidence
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minPDConfidence", ParameterParserDataType::Int32, (double)minPDConfidence, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minPDConfidence") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minPDConfidence, 0));
    }

    // maxGyroSQR
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxGyroSQR", ParameterParserDataType::Float, (double)maxGyroSQR));
    }
    else if (PARAMETER_STRCMP(__name, "maxGyroSQR") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)maxGyroSQR));
    }

    // MaxTOFDistanceVariation
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MaxTOFDistanceVariation", ParameterParserDataType::Int32, (double)MaxTOFDistanceVariation, 0));
    }
    else if (PARAMETER_STRCMP(__name, "MaxTOFDistanceVariation") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)MaxTOFDistanceVariation, 0));
    }

    return __result;
}

bool chromatixAdaptiveLensMap::settledStatsStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "frameRequired") == 0)
    {
        ParameterUtils::DoubleToString((double)frameRequired, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minPDConfidence") == 0)
    {
        ParameterUtils::DoubleToString((double)minPDConfidence, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxPDDefocus") == 0)
    {
        ParameterUtils::DoubleToString((double)maxPDDefocus, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxGyroSQR") == 0)
    {
        ParameterUtils::DoubleToString((double)maxGyroSQR, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxSADValue") == 0)
    {
        ParameterUtils::DoubleToString((double)maxSADValue, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "MaxTOFDistanceVariation") == 0)
    {
        ParameterUtils::DoubleToString((double)MaxTOFDistanceVariation, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAdaptiveLensMap::settledStatsStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "frameRequired") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            frameRequired = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minPDConfidence") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minPDConfidence = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxPDDefocus") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxPDDefocus = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxGyroSQR") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxGyroSQR = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxSADValue") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxSADValue = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "MaxTOFDistanceVariation") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            MaxTOFDistanceVariation = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAdaptiveLensMap::settledStatsStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // frameRequired
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("frameRequired", ParameterParserDataType::Int32, (double)frameRequired, 0));
    }
    else if (PARAMETER_STRCMP(__name, "frameRequired") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)frameRequired, 0));
    }

    // minPDConfidence
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minPDConfidence", ParameterParserDataType::Int32, (double)minPDConfidence, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minPDConfidence") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minPDConfidence, 0));
    }

    // maxPDDefocus
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxPDDefocus", ParameterParserDataType::Int32, (double)maxPDDefocus, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxPDDefocus") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxPDDefocus, 0));
    }

    // maxGyroSQR
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxGyroSQR", ParameterParserDataType::Float, (double)maxGyroSQR));
    }
    else if (PARAMETER_STRCMP(__name, "maxGyroSQR") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)maxGyroSQR));
    }

    // maxSADValue
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxSADValue", ParameterParserDataType::Float, (double)maxSADValue));
    }
    else if (PARAMETER_STRCMP(__name, "maxSADValue") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)maxSADValue));
    }

    // MaxTOFDistanceVariation
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MaxTOFDistanceVariation", ParameterParserDataType::Int32, (double)MaxTOFDistanceVariation, 0));
    }
    else if (PARAMETER_STRCMP(__name, "MaxTOFDistanceVariation") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)MaxTOFDistanceVariation, 0));
    }

    return __result;
}

bool chromatixAdaptiveLensMap::sampleCollectionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minDistance") == 0)
    {
        ParameterUtils::DoubleToString((double)minDistance, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxDistance") == 0)
    {
        ParameterUtils::DoubleToString((double)maxDistance, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "ROIDistanceEnable") == 0)
    {
        ParameterUtils::DoubleToString((double)ROIDistanceEnable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxLensBiasFromOTPEstimation") == 0)
    {
        ParameterUtils::DoubleToString((double)maxLensBiasFromOTPEstimation, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxSampleCount") == 0)
    {
        ParameterUtils::DoubleToString((double)maxSampleCount, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAdaptiveLensMap::sampleCollectionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minDistance") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minDistance = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxDistance") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxDistance = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "ROIDistanceEnable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            ROIDistanceEnable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxLensBiasFromOTPEstimation") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxLensBiasFromOTPEstimation = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxSampleCount") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxSampleCount = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAdaptiveLensMap::sampleCollectionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // minDistance
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minDistance", ParameterParserDataType::Int32, (double)minDistance, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minDistance") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minDistance, 0));
    }

    // maxDistance
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxDistance", ParameterParserDataType::Int32, (double)maxDistance, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxDistance") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxDistance, 0));
    }

    // ROIDistanceEnable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("ROIDistanceEnable", ParameterParserDataType::Boolean, (double)ROIDistanceEnable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "ROIDistanceEnable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)ROIDistanceEnable, 0));
    }

    // maxLensBiasFromOTPEstimation
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxLensBiasFromOTPEstimation", ParameterParserDataType::Int32, (double)maxLensBiasFromOTPEstimation, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxLensBiasFromOTPEstimation") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxLensBiasFromOTPEstimation, 0));
    }

    // maxSampleCount
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxSampleCount", ParameterParserDataType::Int32, (double)maxSampleCount, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxSampleCount") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxSampleCount, 0));
    }

    return __result;
}

bool chromatixAdaptiveLensMap::predictionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minSampleRequired") == 0)
    {
        ParameterUtils::DoubleToString((double)minSampleRequired, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minRangeRequired") == 0)
    {
        ParameterUtils::DoubleToString((double)minRangeRequired, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "enableOutlierRemoval") == 0)
    {
        ParameterUtils::DoubleToString((double)enableOutlierRemoval, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "outlierRemovalRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)outlierRemovalRatio, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAdaptiveLensMap::predictionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minSampleRequired") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minSampleRequired = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minRangeRequired") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minRangeRequired = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "enableOutlierRemoval") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableOutlierRemoval = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "outlierRemovalRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            outlierRemovalRatio = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAdaptiveLensMap::predictionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // minSampleRequired
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minSampleRequired", ParameterParserDataType::Int32, (double)minSampleRequired, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minSampleRequired") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minSampleRequired, 0));
    }

    // minRangeRequired
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minRangeRequired", ParameterParserDataType::Float, (double)minRangeRequired));
    }
    else if (PARAMETER_STRCMP(__name, "minRangeRequired") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)minRangeRequired));
    }

    // enableOutlierRemoval
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableOutlierRemoval", ParameterParserDataType::Boolean, (double)enableOutlierRemoval, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableOutlierRemoval") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enableOutlierRemoval, 0));
    }

    // outlierRemovalRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("outlierRemovalRatio", ParameterParserDataType::Float, (double)outlierRemovalRatio));
    }
    else if (PARAMETER_STRCMP(__name, "outlierRemovalRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)outlierRemovalRatio));
    }

    return __result;
}

bool chromatixAdaptiveLensMap::temperatureCompensationStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minTemp") == 0)
    {
        ParameterUtils::DoubleToString((double)minTemp, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxTemp") == 0)
    {
        ParameterUtils::DoubleToString((double)maxTemp, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "diffusionRatio1") == 0)
    {
        ParameterUtils::DoubleToString((double)diffusionRatio1, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "diffusionRatio2") == 0)
    {
        ParameterUtils::DoubleToString((double)diffusionRatio2, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAdaptiveLensMap::temperatureCompensationStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minTemp") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minTemp = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxTemp") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxTemp = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "diffusionRatio1") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            diffusionRatio1 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "diffusionRatio2") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            diffusionRatio2 = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAdaptiveLensMap::temperatureCompensationStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // minTemp
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minTemp", ParameterParserDataType::Int32, (double)minTemp, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minTemp") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minTemp, 0));
    }

    // maxTemp
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxTemp", ParameterParserDataType::Int32, (double)maxTemp, 0));
    }
    else if (PARAMETER_STRCMP(__name, "maxTemp") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)maxTemp, 0));
    }

    // diffusionRatio1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("diffusionRatio1", ParameterParserDataType::Float, (double)diffusionRatio1));
    }
    else if (PARAMETER_STRCMP(__name, "diffusionRatio1") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)diffusionRatio1));
    }

    // diffusionRatio2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("diffusionRatio2", ParameterParserDataType::Float, (double)diffusionRatio2));
    }
    else if (PARAMETER_STRCMP(__name, "diffusionRatio2") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)diffusionRatio2));
    }

    return __result;
}

bool chromatixAFDistancemapControlType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "useOTPData") == 0)
    {
        ParameterUtils::DoubleToString((double)useOTPData, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "adaptiveLensMap") == 0)
    {
        __result = adaptiveLensMap.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFDistancemapControlType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "useOTPData") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            useOTPData = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "adaptiveLensMap") == 0)
    {
        __result = adaptiveLensMap.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFDistancemapControlType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // useOTPData
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("useOTPData", ParameterParserDataType::Boolean, (double)useOTPData, 0));
    }
    else if (PARAMETER_STRCMP(__name, "useOTPData") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)useOTPData, 0));
    }

    // adaptiveLensMap
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("adaptiveLensMap", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "adaptiveLensMap") == 0)
    {
        __result = adaptiveLensMap.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixSagCompensation::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "fDAC") == 0)
    {
        if (__index < fDACCount)
        {
            ParameterUtils::DoubleToString((double)fDAC[__index], __value, __size, 0);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < fDACCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)fDAC[i], &__value[__valuePos], (INT32)(__size - __valuePos), 0);
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "fDistance") == 0)
    {
        ParameterUtils::DoubleToString((double)fDistance, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "triggerThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)triggerThreshold, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixSagCompensation::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "fDAC") == 0)
    {
        if (__index < fDACCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                fDAC[__index] = (UINT32)dblValue; 
            }
        }
        else
        {
            SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __pos = 0;

            __index = 0;
            while (__pos < __valueLen && __index < fDACCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __pos += ParameterUtils::GetSubString(&__value[__pos], ',', __valueStr, MAX_SIZE);
                __pos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    fDAC[__index] = (UINT32)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "fDistance") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            fDistance = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "triggerThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            triggerThreshold = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixSagCompensation::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::UInt32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)enable, 0));
    }

    // fDAC
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("fDAC", ParameterParserDataType::UInt32, true, false, fDACCount));
    }

    // fDistance
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("fDistance", ParameterParserDataType::Float, (double)fDistance));
    }
    else if (PARAMETER_STRCMP(__name, "fDistance") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)fDistance));
    }

    // triggerThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("triggerThreshold", ParameterParserDataType::Float, (double)triggerThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "triggerThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)triggerThreshold));
    }

    return __result;
}

bool chromatixModuleTuningReserveType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "lensSagCompensation") == 0)
    {
        __result = lensSagCompensation.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "enableHysteresisOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)enableHysteresisOffset, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixModuleTuningReserveType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "lensSagCompensation") == 0)
    {
        __result = lensSagCompensation.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "enableHysteresisOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enableHysteresisOffset = (globalelements::enable_flag_type)dblValue; 
        }
    }

    return __result;
}

bool chromatixModuleTuningReserveType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // lensSagCompensation
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lensSagCompensation", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "lensSagCompensation") == 0)
    {
        __result = lensSagCompensation.GetInfo(&__path[__pos], __info);
    }

    // enableHysteresisOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enableHysteresisOffset", ParameterParserDataType::Int32, (double)enableHysteresisOffset, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enableHysteresisOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enableHysteresisOffset, 0));
    }

    return __result;
}

bool chromatixAFOutdoorConfigurationReserveType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "EnableOutdoorROITune") == 0)
    {
        ParameterUtils::DoubleToString((double)EnableOutdoorROITune, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "OutdoorROIRatioX") == 0)
    {
        ParameterUtils::DoubleToString((double)OutdoorROIRatioX, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "OutdoorROIRatioY") == 0)
    {
        ParameterUtils::DoubleToString((double)OutdoorROIRatioY, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAFOutdoorConfigurationReserveType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "EnableOutdoorROITune") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            EnableOutdoorROITune = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "OutdoorROIRatioX") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            OutdoorROIRatioX = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "OutdoorROIRatioY") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            OutdoorROIRatioY = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFOutdoorConfigurationReserveType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // EnableOutdoorROITune
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("EnableOutdoorROITune", ParameterParserDataType::Int32, (double)EnableOutdoorROITune, 0));
    }
    else if (PARAMETER_STRCMP(__name, "EnableOutdoorROITune") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)EnableOutdoorROITune, 0));
    }

    // OutdoorROIRatioX
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("OutdoorROIRatioX", ParameterParserDataType::Float, (double)OutdoorROIRatioX));
    }
    else if (PARAMETER_STRCMP(__name, "OutdoorROIRatioX") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)OutdoorROIRatioX));
    }

    // OutdoorROIRatioY
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("OutdoorROIRatioY", ParameterParserDataType::Float, (double)OutdoorROIRatioY));
    }
    else if (PARAMETER_STRCMP(__name, "OutdoorROIRatioY") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)OutdoorROIRatioY));
    }

    return __result;
}

bool chromatixAFOrientationDetectionReserveType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "gravityXLandscapeThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)gravityXLandscapeThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gravityYLandscapeThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)gravityYLandscapeThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gravityXPortraitThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)gravityXPortraitThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gravityYPortraitThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)gravityYPortraitThreshold, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAFOrientationDetectionReserveType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "gravityXLandscapeThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gravityXLandscapeThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gravityYLandscapeThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gravityYLandscapeThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gravityXPortraitThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gravityXPortraitThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gravityYPortraitThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gravityYPortraitThreshold = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFOrientationDetectionReserveType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // gravityXLandscapeThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gravityXLandscapeThreshold", ParameterParserDataType::Float, (double)gravityXLandscapeThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "gravityXLandscapeThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gravityXLandscapeThreshold));
    }

    // gravityYLandscapeThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gravityYLandscapeThreshold", ParameterParserDataType::Float, (double)gravityYLandscapeThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "gravityYLandscapeThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gravityYLandscapeThreshold));
    }

    // gravityXPortraitThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gravityXPortraitThreshold", ParameterParserDataType::Float, (double)gravityXPortraitThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "gravityXPortraitThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gravityXPortraitThreshold));
    }

    // gravityYPortraitThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gravityYPortraitThreshold", ParameterParserDataType::Float, (double)gravityYPortraitThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "gravityYPortraitThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gravityYPortraitThreshold));
    }

    return __result;
}

bool chromatixAFFaceDetectionROITuningReserveType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "FDROITune") == 0)
    {
        ParameterUtils::DoubleToString((double)FDROITune, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "FDROIRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)FDROIRatio, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAFFaceDetectionROITuningReserveType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "FDROITune") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            FDROITune = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "FDROIRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            FDROIRatio = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFFaceDetectionROITuningReserveType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // FDROITune
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FDROITune", ParameterParserDataType::Int32, (double)FDROITune, 0));
    }
    else if (PARAMETER_STRCMP(__name, "FDROITune") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)FDROITune, 0));
    }

    // FDROIRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FDROIRatio", ParameterParserDataType::Float, (double)FDROIRatio));
    }
    else if (PARAMETER_STRCMP(__name, "FDROIRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)FDROIRatio));
    }

    return __result;
}

bool chromatixAFFaceROIExtensionReserveType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "ROIFaceExtensionEnable") == 0)
    {
        ParameterUtils::DoubleToString((double)ROIFaceExtensionEnable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceScaleX") == 0)
    {
        ParameterUtils::DoubleToString((double)ROIFaceScaleX, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceScaleY") == 0)
    {
        ParameterUtils::DoubleToString((double)ROIFaceScaleY, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceSymmetricX") == 0)
    {
        ParameterUtils::DoubleToString((double)ROIFaceSymmetricX, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceSymmetricY") == 0)
    {
        ParameterUtils::DoubleToString((double)ROIFaceSymmetricY, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAFFaceROIExtensionReserveType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "ROIFaceExtensionEnable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            ROIFaceExtensionEnable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceScaleX") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            ROIFaceScaleX = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceScaleY") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            ROIFaceScaleY = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceSymmetricX") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            ROIFaceSymmetricX = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceSymmetricY") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            ROIFaceSymmetricY = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFFaceROIExtensionReserveType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // ROIFaceExtensionEnable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("ROIFaceExtensionEnable", ParameterParserDataType::Int32, (double)ROIFaceExtensionEnable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceExtensionEnable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)ROIFaceExtensionEnable, 0));
    }

    // ROIFaceScaleX
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("ROIFaceScaleX", ParameterParserDataType::Float, (double)ROIFaceScaleX));
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceScaleX") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)ROIFaceScaleX));
    }

    // ROIFaceScaleY
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("ROIFaceScaleY", ParameterParserDataType::Float, (double)ROIFaceScaleY));
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceScaleY") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)ROIFaceScaleY));
    }

    // ROIFaceSymmetricX
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("ROIFaceSymmetricX", ParameterParserDataType::Float, (double)ROIFaceSymmetricX));
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceSymmetricX") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)ROIFaceSymmetricX));
    }

    // ROIFaceSymmetricY
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("ROIFaceSymmetricY", ParameterParserDataType::Float, (double)ROIFaceSymmetricY));
    }
    else if (PARAMETER_STRCMP(__name, "ROIFaceSymmetricY") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)ROIFaceSymmetricY));
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "faceROIExtension") == 0)
    {
        __result = faceROIExtension.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "faceDetectionROITuning") == 0)
    {
        __result = faceDetectionROITuning.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "faceHVWeight") == 0)
    {
        __result = faceHVWeight.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "faceFarEnd") == 0)
    {
        __result = faceFarEnd.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "faceROITypeSelection") == 0)
    {
        ParameterUtils::DoubleToString((double)(UINT32)faceROITypeSelection, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "faceROIExtension") == 0)
    {
        __result = faceROIExtension.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "faceDetectionROITuning") == 0)
    {
        __result = faceDetectionROITuning.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "faceHVWeight") == 0)
    {
        __result = faceHVWeight.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "faceFarEnd") == 0)
    {
        __result = faceFarEnd.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "faceROITypeSelection") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceROITypeSelection = (chromatixAFFaceROITypeSelection)(UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // faceROIExtension
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceROIExtension", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "faceROIExtension") == 0)
    {
        __result = faceROIExtension.GetInfo(&__path[__pos], __info);
    }

    // faceDetectionROITuning
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceDetectionROITuning", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "faceDetectionROITuning") == 0)
    {
        __result = faceDetectionROITuning.GetInfo(&__path[__pos], __info);
    }

    // faceHVWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceHVWeight", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "faceHVWeight") == 0)
    {
        __result = faceHVWeight.GetInfo(&__path[__pos], __info);
    }

    // faceFarEnd
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceFarEnd", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "faceFarEnd") == 0)
    {
        __result = faceFarEnd.GetInfo(&__path[__pos], __info);
    }

    // faceROITypeSelection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceROITypeSelection", ParameterParserDataType::Enum, (double)(UINT32)faceROITypeSelection, 0));
    }
    else if (PARAMETER_STRCMP(__name, "faceROITypeSelection") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Enum, (double)(UINT32)faceROITypeSelection, 0));
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::faceHVWeightStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "hWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)hWeight, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::faceHVWeightStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "hWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            hWeight = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::faceHVWeightStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // hWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("hWeight", ParameterParserDataType::Float, (double)hWeight));
    }
    else if (PARAMETER_STRCMP(__name, "hWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)hWeight));
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::faceFarEndStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "farEnd") == 0)
    {
        ParameterUtils::DoubleToString((double)farEnd, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::faceFarEndStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "farEnd") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            farEnd = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixFaceDetectionTuningType::faceFarEndStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // farEnd
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("farEnd", ParameterParserDataType::Int32, (double)farEnd, 0));
    }
    else if (PARAMETER_STRCMP(__name, "farEnd") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)farEnd, 0));
    }

    return __result;
}

bool chromatixFocusModeSearchLimitType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "nearEnd") == 0)
    {
        ParameterUtils::DoubleToString((double)nearEnd, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "farEnd") == 0)
    {
        ParameterUtils::DoubleToString((double)farEnd, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "defaultPosition") == 0)
    {
        ParameterUtils::DoubleToString((double)defaultPosition, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixFocusModeSearchLimitType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "nearEnd") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            nearEnd = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "farEnd") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            farEnd = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "defaultPosition") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            defaultPosition = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixFocusModeSearchLimitType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Int32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)enable, 0));
    }

    // nearEnd
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("nearEnd", ParameterParserDataType::UInt32, (double)nearEnd, 0));
    }
    else if (PARAMETER_STRCMP(__name, "nearEnd") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)nearEnd, 0));
    }

    // farEnd
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("farEnd", ParameterParserDataType::UInt32, (double)farEnd, 0));
    }
    else if (PARAMETER_STRCMP(__name, "farEnd") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)farEnd, 0));
    }

    // defaultPosition
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("defaultPosition", ParameterParserDataType::UInt32, (double)defaultPosition, 0));
    }
    else if (PARAMETER_STRCMP(__name, "defaultPosition") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)defaultPosition, 0));
    }

    return __result;
}

bool chromatixFOVCorrection::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "fudgeFactor") == 0)
    {
        ParameterUtils::DoubleToString((double)fudgeFactor, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "anchorLensPosition1") == 0)
    {
        ParameterUtils::DoubleToString((double)anchorLensPosition1, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "anchorLensPosition2") == 0)
    {
        ParameterUtils::DoubleToString((double)anchorLensPosition2, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "anchorDistanceMM1") == 0)
    {
        ParameterUtils::DoubleToString((double)anchorDistanceMM1, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "anchorDistanceMM2") == 0)
    {
        ParameterUtils::DoubleToString((double)anchorDistanceMM2, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "focusConvergeStepSizeBrightLight") == 0)
    {
        ParameterUtils::DoubleToString((double)focusConvergeStepSizeBrightLight, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "fineSearchStepSizeBrightLight") == 0)
    {
        ParameterUtils::DoubleToString((double)fineSearchStepSizeBrightLight, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "focusConvergeStepSizeLowLight") == 0)
    {
        ParameterUtils::DoubleToString((double)focusConvergeStepSizeLowLight, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "fineSearchStepSizeLowLight") == 0)
    {
        ParameterUtils::DoubleToString((double)fineSearchStepSizeLowLight, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "iFOVCenable") == 0)
    {
        ParameterUtils::DoubleToString((double)iFOVCenable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "short_exp_time") == 0)
    {
        ParameterUtils::DoubleToString((double)short_exp_time, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "short_ts_offset") == 0)
    {
        ParameterUtils::DoubleToString((double)short_ts_offset, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "short_duration") == 0)
    {
        ParameterUtils::DoubleToString((double)short_duration, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "long_exp_time") == 0)
    {
        ParameterUtils::DoubleToString((double)long_exp_time, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "long_ts_offset") == 0)
    {
        ParameterUtils::DoubleToString((double)long_ts_offset, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "long_duration") == 0)
    {
        ParameterUtils::DoubleToString((double)long_duration, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "is_clamp") == 0)
    {
        ParameterUtils::DoubleToString((double)is_clamp, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "enable_framebased") == 0)
    {
        ParameterUtils::DoubleToString((double)enable_framebased, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "generalROI_only") == 0)
    {
        ParameterUtils::DoubleToString((double)generalROI_only, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixFOVCorrection::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "fudgeFactor") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            fudgeFactor = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "anchorLensPosition1") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            anchorLensPosition1 = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "anchorLensPosition2") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            anchorLensPosition2 = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "anchorDistanceMM1") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            anchorDistanceMM1 = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "anchorDistanceMM2") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            anchorDistanceMM2 = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "focusConvergeStepSizeBrightLight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            focusConvergeStepSizeBrightLight = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "fineSearchStepSizeBrightLight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            fineSearchStepSizeBrightLight = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "focusConvergeStepSizeLowLight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            focusConvergeStepSizeLowLight = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "fineSearchStepSizeLowLight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            fineSearchStepSizeLowLight = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "iFOVCenable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            iFOVCenable = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "short_exp_time") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            short_exp_time = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "short_ts_offset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            short_ts_offset = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "short_duration") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            short_duration = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "long_exp_time") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            long_exp_time = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "long_ts_offset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            long_ts_offset = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "long_duration") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            long_duration = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "is_clamp") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            is_clamp = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "enable_framebased") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable_framebased = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "generalROI_only") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            generalROI_only = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixFOVCorrection::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::UInt32, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)enable, 0));
    }

    // fudgeFactor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("fudgeFactor", ParameterParserDataType::Float, (double)fudgeFactor));
    }
    else if (PARAMETER_STRCMP(__name, "fudgeFactor") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)fudgeFactor));
    }

    // anchorLensPosition1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("anchorLensPosition1", ParameterParserDataType::Int32, (double)anchorLensPosition1, 0));
    }
    else if (PARAMETER_STRCMP(__name, "anchorLensPosition1") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)anchorLensPosition1, 0));
    }

    // anchorLensPosition2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("anchorLensPosition2", ParameterParserDataType::Int32, (double)anchorLensPosition2, 0));
    }
    else if (PARAMETER_STRCMP(__name, "anchorLensPosition2") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)anchorLensPosition2, 0));
    }

    // anchorDistanceMM1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("anchorDistanceMM1", ParameterParserDataType::Int32, (double)anchorDistanceMM1, 0));
    }
    else if (PARAMETER_STRCMP(__name, "anchorDistanceMM1") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)anchorDistanceMM1, 0));
    }

    // anchorDistanceMM2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("anchorDistanceMM2", ParameterParserDataType::Int32, (double)anchorDistanceMM2, 0));
    }
    else if (PARAMETER_STRCMP(__name, "anchorDistanceMM2") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)anchorDistanceMM2, 0));
    }

    // focusConvergeStepSizeBrightLight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("focusConvergeStepSizeBrightLight", ParameterParserDataType::Int32, (double)focusConvergeStepSizeBrightLight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "focusConvergeStepSizeBrightLight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)focusConvergeStepSizeBrightLight, 0));
    }

    // fineSearchStepSizeBrightLight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("fineSearchStepSizeBrightLight", ParameterParserDataType::Int32, (double)fineSearchStepSizeBrightLight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "fineSearchStepSizeBrightLight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)fineSearchStepSizeBrightLight, 0));
    }

    // focusConvergeStepSizeLowLight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("focusConvergeStepSizeLowLight", ParameterParserDataType::Int32, (double)focusConvergeStepSizeLowLight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "focusConvergeStepSizeLowLight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)focusConvergeStepSizeLowLight, 0));
    }

    // fineSearchStepSizeLowLight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("fineSearchStepSizeLowLight", ParameterParserDataType::Int32, (double)fineSearchStepSizeLowLight, 0));
    }
    else if (PARAMETER_STRCMP(__name, "fineSearchStepSizeLowLight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)fineSearchStepSizeLowLight, 0));
    }

    // iFOVCenable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("iFOVCenable", ParameterParserDataType::UInt32, (double)iFOVCenable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "iFOVCenable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)iFOVCenable, 0));
    }

    // short_exp_time
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("short_exp_time", ParameterParserDataType::Int32, (double)short_exp_time, 0));
    }
    else if (PARAMETER_STRCMP(__name, "short_exp_time") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)short_exp_time, 0));
    }

    // short_ts_offset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("short_ts_offset", ParameterParserDataType::Int32, (double)short_ts_offset, 0));
    }
    else if (PARAMETER_STRCMP(__name, "short_ts_offset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)short_ts_offset, 0));
    }

    // short_duration
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("short_duration", ParameterParserDataType::Int32, (double)short_duration, 0));
    }
    else if (PARAMETER_STRCMP(__name, "short_duration") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)short_duration, 0));
    }

    // long_exp_time
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("long_exp_time", ParameterParserDataType::Int32, (double)long_exp_time, 0));
    }
    else if (PARAMETER_STRCMP(__name, "long_exp_time") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)long_exp_time, 0));
    }

    // long_ts_offset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("long_ts_offset", ParameterParserDataType::Int32, (double)long_ts_offset, 0));
    }
    else if (PARAMETER_STRCMP(__name, "long_ts_offset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)long_ts_offset, 0));
    }

    // long_duration
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("long_duration", ParameterParserDataType::Int32, (double)long_duration, 0));
    }
    else if (PARAMETER_STRCMP(__name, "long_duration") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)long_duration, 0));
    }

    // is_clamp
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("is_clamp", ParameterParserDataType::UInt32, (double)is_clamp, 0));
    }
    else if (PARAMETER_STRCMP(__name, "is_clamp") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)is_clamp, 0));
    }

    // enable_framebased
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable_framebased", ParameterParserDataType::UInt32, (double)enable_framebased, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable_framebased") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)enable_framebased, 0));
    }

    // generalROI_only
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("generalROI_only", ParameterParserDataType::UInt32, (double)generalROI_only, 0));
    }
    else if (PARAMETER_STRCMP(__name, "generalROI_only") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)generalROI_only, 0));
    }

    return __result;
}

bool chromatixAFCommonType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "positionNearEnd") == 0)
    {
        ParameterUtils::DoubleToString((double)positionNearEnd, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "positionFarEnd") == 0)
    {
        ParameterUtils::DoubleToString((double)positionFarEnd, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "positionNormalHyperfocal") == 0)
    {
        ParameterUtils::DoubleToString((double)positionNormalHyperfocal, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lowLightGainThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)lowLightGainThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFCommonType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "positionNearEnd") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionNearEnd = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "positionFarEnd") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionFarEnd = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "positionNormalHyperfocal") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionNormalHyperfocal = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lowLightGainThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lowLightGainThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFCommonType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // positionNearEnd
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("positionNearEnd", ParameterParserDataType::Int32, (double)positionNearEnd, 0));
    }
    else if (PARAMETER_STRCMP(__name, "positionNearEnd") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)positionNearEnd, 0));
    }

    // positionFarEnd
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("positionFarEnd", ParameterParserDataType::Int32, (double)positionFarEnd, 0));
    }
    else if (PARAMETER_STRCMP(__name, "positionFarEnd") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)positionFarEnd, 0));
    }

    // positionNormalHyperfocal
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("positionNormalHyperfocal", ParameterParserDataType::Int32, (double)positionNormalHyperfocal, 0));
    }
    else if (PARAMETER_STRCMP(__name, "positionNormalHyperfocal") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)positionNormalHyperfocal, 0));
    }

    // lowLightGainThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lowLightGainThreshold", ParameterParserDataType::Int32, (double)lowLightGainThreshold, 0));
    }
    else if (PARAMETER_STRCMP(__name, "lowLightGainThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)lowLightGainThreshold, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "commonElements") == 0)
    {
        __result = commonElements.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "FOVCorrection") == 0)
    {
        __result = FOVCorrection.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "searchLimit") == 0)
    {
        if (__index < searchLimitCount)
        {
            __result = searchLimit[__index].GetValue(&__path[__pos], __value, __size);
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceDetection") == 0)
    {
        __result = faceDetection.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "statsROIProcess") == 0)
    {
        __result = statsROIProcess.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "orientationDetection") == 0)
    {
        __result = orientationDetection.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "outdoorROIConfiguration") == 0)
    {
        __result = outdoorROIConfiguration.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "moduleTuning") == 0)
    {
        __result = moduleTuning.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "handJitter") == 0)
    {
        __result = handJitter.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "spotlightDetection") == 0)
    {
        __result = spotlightDetection.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "distanceMapControl") == 0)
    {
        __result = distanceMapControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "focusMapControl") == 0)
    {
        __result = focusMapControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "motionControl") == 0)
    {
        __result = motionControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "MultiFrameDepthOfField") == 0)
    {
        __result = MultiFrameDepthOfField.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "DualFaceFocus") == 0)
    {
        __result = DualFaceFocus.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "HDRControl") == 0)
    {
        __result = HDRControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "TouchAssistControl") == 0)
    {
        __result = TouchAssistControl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "AFROILowLumaAlert") == 0)
    {
        __result = AFROILowLumaAlert.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "eyeTrackingCtrl") == 0)
    {
        __result = eyeTrackingCtrl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "multiROIConfigCtrl") == 0)
    {
        __result = multiROIConfigCtrl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "minROISizeCtrl") == 0)
    {
        __result = minROISizeCtrl.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "AFRackFocus") == 0)
    {
        __result = AFRackFocus.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "touchROIScalingFactor") == 0)
    {
        __result = touchROIScalingFactor.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "commonElements") == 0)
    {
        __result = commonElements.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "FOVCorrection") == 0)
    {
        __result = FOVCorrection.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "searchLimit") == 0)
    {
        if (__index < searchLimitCount)
        {
            __result = searchLimit[__index].SetValue(&__path[__pos], __value);
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceDetection") == 0)
    {
        __result = faceDetection.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "statsROIProcess") == 0)
    {
        __result = statsROIProcess.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "orientationDetection") == 0)
    {
        __result = orientationDetection.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "outdoorROIConfiguration") == 0)
    {
        __result = outdoorROIConfiguration.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "moduleTuning") == 0)
    {
        __result = moduleTuning.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "handJitter") == 0)
    {
        __result = handJitter.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "spotlightDetection") == 0)
    {
        __result = spotlightDetection.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "distanceMapControl") == 0)
    {
        __result = distanceMapControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "focusMapControl") == 0)
    {
        __result = focusMapControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "motionControl") == 0)
    {
        __result = motionControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "MultiFrameDepthOfField") == 0)
    {
        __result = MultiFrameDepthOfField.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "DualFaceFocus") == 0)
    {
        __result = DualFaceFocus.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "HDRControl") == 0)
    {
        __result = HDRControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "TouchAssistControl") == 0)
    {
        __result = TouchAssistControl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "AFROILowLumaAlert") == 0)
    {
        __result = AFROILowLumaAlert.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "eyeTrackingCtrl") == 0)
    {
        __result = eyeTrackingCtrl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "multiROIConfigCtrl") == 0)
    {
        __result = multiROIConfigCtrl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "minROISizeCtrl") == 0)
    {
        __result = minROISizeCtrl.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "AFRackFocus") == 0)
    {
        __result = AFRackFocus.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "touchROIScalingFactor") == 0)
    {
        __result = touchROIScalingFactor.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // module_version
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("module_version", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.GetInfo(&__path[__pos], __info);
    }

    // parameter_version
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("parameter_version", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.GetInfo(&__path[__pos], __info);
    }

    // commonElements
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("commonElements", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "commonElements") == 0)
    {
        __result = commonElements.GetInfo(&__path[__pos], __info);
    }

    // FOVCorrection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FOVCorrection", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "FOVCorrection") == 0)
    {
        __result = FOVCorrection.GetInfo(&__path[__pos], __info);
    }

    // searchLimit
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("searchLimit", ParameterParserDataType::Structure, true, false, searchLimitCount));
    }
    else if (PARAMETER_STRCMP(__name, "searchLimit") == 0)
    {
        if (__index < searchLimitCount)
        {
            __result = searchLimit[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, searchLimitCount));
        }
    }

    // faceDetection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("faceDetection", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "faceDetection") == 0)
    {
        __result = faceDetection.GetInfo(&__path[__pos], __info);
    }

    // statsROIProcess
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("statsROIProcess", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "statsROIProcess") == 0)
    {
        __result = statsROIProcess.GetInfo(&__path[__pos], __info);
    }

    // orientationDetection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("orientationDetection", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "orientationDetection") == 0)
    {
        __result = orientationDetection.GetInfo(&__path[__pos], __info);
    }

    // outdoorROIConfiguration
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("outdoorROIConfiguration", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "outdoorROIConfiguration") == 0)
    {
        __result = outdoorROIConfiguration.GetInfo(&__path[__pos], __info);
    }

    // moduleTuning
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("moduleTuning", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "moduleTuning") == 0)
    {
        __result = moduleTuning.GetInfo(&__path[__pos], __info);
    }

    // handJitter
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("handJitter", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "handJitter") == 0)
    {
        __result = handJitter.GetInfo(&__path[__pos], __info);
    }

    // spotlightDetection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("spotlightDetection", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "spotlightDetection") == 0)
    {
        __result = spotlightDetection.GetInfo(&__path[__pos], __info);
    }

    // distanceMapControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("distanceMapControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "distanceMapControl") == 0)
    {
        __result = distanceMapControl.GetInfo(&__path[__pos], __info);
    }

    // focusMapControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("focusMapControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "focusMapControl") == 0)
    {
        __result = focusMapControl.GetInfo(&__path[__pos], __info);
    }

    // motionControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("motionControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "motionControl") == 0)
    {
        __result = motionControl.GetInfo(&__path[__pos], __info);
    }

    // MultiFrameDepthOfField
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MultiFrameDepthOfField", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "MultiFrameDepthOfField") == 0)
    {
        __result = MultiFrameDepthOfField.GetInfo(&__path[__pos], __info);
    }

    // DualFaceFocus
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("DualFaceFocus", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "DualFaceFocus") == 0)
    {
        __result = DualFaceFocus.GetInfo(&__path[__pos], __info);
    }

    // HDRControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("HDRControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "HDRControl") == 0)
    {
        __result = HDRControl.GetInfo(&__path[__pos], __info);
    }

    // TouchAssistControl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TouchAssistControl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "TouchAssistControl") == 0)
    {
        __result = TouchAssistControl.GetInfo(&__path[__pos], __info);
    }

    // AFROILowLumaAlert
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("AFROILowLumaAlert", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "AFROILowLumaAlert") == 0)
    {
        __result = AFROILowLumaAlert.GetInfo(&__path[__pos], __info);
    }

    // eyeTrackingCtrl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("eyeTrackingCtrl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "eyeTrackingCtrl") == 0)
    {
        __result = eyeTrackingCtrl.GetInfo(&__path[__pos], __info);
    }

    // multiROIConfigCtrl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("multiROIConfigCtrl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "multiROIConfigCtrl") == 0)
    {
        __result = multiROIConfigCtrl.GetInfo(&__path[__pos], __info);
    }

    // minROISizeCtrl
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minROISizeCtrl", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "minROISizeCtrl") == 0)
    {
        __result = minROISizeCtrl.GetInfo(&__path[__pos], __info);
    }

    // AFRackFocus
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("AFRackFocus", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "AFRackFocus") == 0)
    {
        __result = AFRackFocus.GetInfo(&__path[__pos], __info);
    }

    // touchROIScalingFactor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("touchROIScalingFactor", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "touchROIScalingFactor") == 0)
    {
        __result = touchROIScalingFactor.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::module_versionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)major_revision, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)minor_revision, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)incr_revision, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::module_versionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            major_revision = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minor_revision = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            incr_revision = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::module_versionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // major_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("major_revision", ParameterParserDataType::Int32, (double)major_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)major_revision, 0));
    }

    // minor_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minor_revision", ParameterParserDataType::Int32, (double)minor_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minor_revision, 0));
    }

    // incr_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("incr_revision", ParameterParserDataType::Int32, (double)incr_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)incr_revision, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::parameter_versionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        PARAMETER_STRCPY(__value, __size, revision);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::parameter_versionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const /*__value*/)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        // Cannot modify strings, risk of memory leaks or corruption
    }

    return __result;
}

bool chromatixAFAlgoTuningType::parameter_versionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("revision", ParameterParserDataType::String, revision));
    }
    else if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::String, revision));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::statsROIProcessStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "ROIProcessEnable") == 0)
    {
        ParameterUtils::DoubleToString((double)ROIProcessEnable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "statsROIPriority") == 0)
    {
        __result = statsROIPriority.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "trackROIPriority") == 0)
    {
        __result = trackROIPriority.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "saliencyROIEnable") == 0)
    {
        ParameterUtils::DoubleToString((double)saliencyROIEnable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "saliencyROIPriority") == 0)
    {
        __result = saliencyROIPriority.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "touchMWROI") == 0)
    {
        __result = touchMWROI.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::statsROIProcessStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "ROIProcessEnable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            ROIProcessEnable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "statsROIPriority") == 0)
    {
        __result = statsROIPriority.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "trackROIPriority") == 0)
    {
        __result = trackROIPriority.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "saliencyROIEnable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            saliencyROIEnable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "saliencyROIPriority") == 0)
    {
        __result = saliencyROIPriority.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "touchMWROI") == 0)
    {
        __result = touchMWROI.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::statsROIProcessStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // ROIProcessEnable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("ROIProcessEnable", ParameterParserDataType::Int32, (double)ROIProcessEnable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "ROIProcessEnable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)ROIProcessEnable, 0));
    }

    // statsROIPriority
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("statsROIPriority", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "statsROIPriority") == 0)
    {
        __result = statsROIPriority.GetInfo(&__path[__pos], __info);
    }

    // trackROIPriority
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("trackROIPriority", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "trackROIPriority") == 0)
    {
        __result = trackROIPriority.GetInfo(&__path[__pos], __info);
    }

    // saliencyROIEnable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("saliencyROIEnable", ParameterParserDataType::Int32, (double)saliencyROIEnable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "saliencyROIEnable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)saliencyROIEnable, 0));
    }

    // saliencyROIPriority
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("saliencyROIPriority", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "saliencyROIPriority") == 0)
    {
        __result = saliencyROIPriority.GetInfo(&__path[__pos], __info);
    }

    // touchMWROI
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("touchMWROI", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "touchMWROI") == 0)
    {
        __result = touchMWROI.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "AFSingle") == 0)
    {
        __result = AFSingle.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "HAFFineSearch") == 0)
    {
        __result = HAFFineSearch.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "samplingRate") == 0)
    {
        ParameterUtils::DoubleToString((double)samplingRate, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "reportingRate") == 0)
    {
        ParameterUtils::DoubleToString((double)reportingRate, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "AFSingle") == 0)
    {
        __result = AFSingle.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "HAFFineSearch") == 0)
    {
        __result = HAFFineSearch.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "samplingRate") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            samplingRate = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "reportingRate") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            reportingRate = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // AFSingle
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("AFSingle", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "AFSingle") == 0)
    {
        __result = AFSingle.GetInfo(&__path[__pos], __info);
    }

    // HAFFineSearch
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("HAFFineSearch", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "HAFFineSearch") == 0)
    {
        __result = HAFFineSearch.GetInfo(&__path[__pos], __info);
    }

    // samplingRate
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("samplingRate", ParameterParserDataType::UInt32, (double)samplingRate, 0));
    }
    else if (PARAMETER_STRCMP(__name, "samplingRate") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)samplingRate, 0));
    }

    // reportingRate
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("reportingRate", ParameterParserDataType::UInt32, (double)reportingRate, 0));
    }
    else if (PARAMETER_STRCMP(__name, "reportingRate") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)reportingRate, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "maxFVInBeginning") == 0)
    {
        ParameterUtils::DoubleToString((double)maxFVInBeginning, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "coarseSearch") == 0)
    {
        __result = coarseSearch.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "fineSearch") == 0)
    {
        __result = fineSearch.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "redoRateThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)redoRateThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        ParameterUtils::DoubleToString((double)handleNeedCount, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "resetDataBeforeFineSearch") == 0)
    {
        ParameterUtils::DoubleToString((double)resetDataBeforeFineSearch, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        ParameterUtils::DoubleToString((double)workingExposureIndex, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "maxFVInBeginning") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            maxFVInBeginning = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "coarseSearch") == 0)
    {
        __result = coarseSearch.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "fineSearch") == 0)
    {
        __result = fineSearch.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "redoRateThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            redoRateThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            handleNeedCount = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "resetDataBeforeFineSearch") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            resetDataBeforeFineSearch = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            workingExposureIndex = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // maxFVInBeginning
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("maxFVInBeginning", ParameterParserDataType::Float, (double)maxFVInBeginning));
    }
    else if (PARAMETER_STRCMP(__name, "maxFVInBeginning") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)maxFVInBeginning));
    }

    // coarseSearch
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("coarseSearch", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "coarseSearch") == 0)
    {
        __result = coarseSearch.GetInfo(&__path[__pos], __info);
    }

    // fineSearch
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("fineSearch", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "fineSearch") == 0)
    {
        __result = fineSearch.GetInfo(&__path[__pos], __info);
    }

    // redoRateThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("redoRateThreshold", ParameterParserDataType::Float, (double)redoRateThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "redoRateThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)redoRateThreshold));
    }

    // handleNeedCount
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("handleNeedCount", ParameterParserDataType::UInt32, (double)handleNeedCount, 0));
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)handleNeedCount, 0));
    }

    // resetDataBeforeFineSearch
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("resetDataBeforeFineSearch", ParameterParserDataType::Boolean, (double)resetDataBeforeFineSearch, 0));
    }
    else if (PARAMETER_STRCMP(__name, "resetDataBeforeFineSearch") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)resetDataBeforeFineSearch, 0));
    }

    // workingExposureIndex
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("workingExposureIndex", ParameterParserDataType::UInt32, (double)workingExposureIndex, 0));
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)workingExposureIndex, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::coarseSearchStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        ParameterUtils::DoubleToString((double)minSampleSize, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)currentGyroscopeThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)currentGyroscopeSTDThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)gyroscopeThresholdForDifferenceRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)gyroscodeDifferenceRatioThreshold, __value, __size);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::coarseSearchStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minSampleSize = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            currentGyroscopeThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            currentGyroscopeSTDThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gyroscopeThresholdForDifferenceRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gyroscodeDifferenceRatioThreshold = (float)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::coarseSearchStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // minSampleSize
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minSampleSize", ParameterParserDataType::UInt32, (double)minSampleSize, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)minSampleSize, 0));
    }

    // currentGyroscopeThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("currentGyroscopeThreshold", ParameterParserDataType::Float, (double)currentGyroscopeThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)currentGyroscopeThreshold));
    }

    // currentGyroscopeSTDThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("currentGyroscopeSTDThreshold", ParameterParserDataType::Float, (double)currentGyroscopeSTDThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)currentGyroscopeSTDThreshold));
    }

    // gyroscopeThresholdForDifferenceRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gyroscopeThresholdForDifferenceRatio", ParameterParserDataType::Float, (double)gyroscopeThresholdForDifferenceRatio));
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gyroscopeThresholdForDifferenceRatio));
    }

    // gyroscodeDifferenceRatioThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gyroscodeDifferenceRatioThreshold", ParameterParserDataType::Float, (double)gyroscodeDifferenceRatioThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gyroscodeDifferenceRatioThreshold));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::fineSearchStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        ParameterUtils::DoubleToString((double)minSampleSize, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)currentGyroscopeThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)currentGyroscopeSTDThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)gyroscopeThresholdForDifferenceRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)gyroscodeDifferenceRatioThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::fineSearchStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minSampleSize = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            currentGyroscopeThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            currentGyroscopeSTDThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gyroscopeThresholdForDifferenceRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gyroscodeDifferenceRatioThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::fineSearchStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // minSampleSize
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minSampleSize", ParameterParserDataType::UInt32, (double)minSampleSize, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)minSampleSize, 0));
    }

    // currentGyroscopeThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("currentGyroscopeThreshold", ParameterParserDataType::Float, (double)currentGyroscopeThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)currentGyroscopeThreshold));
    }

    // currentGyroscopeSTDThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("currentGyroscopeSTDThreshold", ParameterParserDataType::Float, (double)currentGyroscopeSTDThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)currentGyroscopeSTDThreshold));
    }

    // gyroscopeThresholdForDifferenceRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gyroscopeThresholdForDifferenceRatio", ParameterParserDataType::Float, (double)gyroscopeThresholdForDifferenceRatio));
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gyroscopeThresholdForDifferenceRatio));
    }

    // gyroscodeDifferenceRatioThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gyroscodeDifferenceRatioThreshold", ParameterParserDataType::Float, (double)gyroscodeDifferenceRatioThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gyroscodeDifferenceRatioThreshold));
    }

    // FVNormalized
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FVNormalized", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::fineSearchStruct::FVNormalizedStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "highGyroscopeDifferenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)highGyroscopeDifferenceThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lowGyroscopeDifferenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)lowGyroscopeDifferenceThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "highGryoscopeFVWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)highGryoscopeFVWeight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        ParameterUtils::DoubleToString((double)weightType, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::fineSearchStruct::FVNormalizedStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "highGyroscopeDifferenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            highGyroscopeDifferenceThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lowGyroscopeDifferenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lowGyroscopeDifferenceThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "highGryoscopeFVWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            highGryoscopeFVWeight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            weightType = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::fineSearchStruct::FVNormalizedStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // highGyroscopeDifferenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("highGyroscopeDifferenceThreshold", ParameterParserDataType::Float, (double)highGyroscopeDifferenceThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "highGyroscopeDifferenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)highGyroscopeDifferenceThreshold));
    }

    // lowGyroscopeDifferenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lowGyroscopeDifferenceThreshold", ParameterParserDataType::Float, (double)lowGyroscopeDifferenceThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "lowGyroscopeDifferenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)lowGyroscopeDifferenceThreshold));
    }

    // highGryoscopeFVWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("highGryoscopeFVWeight", ParameterParserDataType::Float, (double)highGryoscopeFVWeight));
    }
    else if (PARAMETER_STRCMP(__name, "highGryoscopeFVWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)highGryoscopeFVWeight));
    }

    // weightType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("weightType", ParameterParserDataType::UInt32, (double)weightType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)weightType, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "fineSearch") == 0)
    {
        __result = fineSearch.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        ParameterUtils::DoubleToString((double)handleNeedCount, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        ParameterUtils::DoubleToString((double)workingExposureIndex, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "fineSearch") == 0)
    {
        __result = fineSearch.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            handleNeedCount = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            workingExposureIndex = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // fineSearch
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("fineSearch", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "fineSearch") == 0)
    {
        __result = fineSearch.GetInfo(&__path[__pos], __info);
    }

    // handleNeedCount
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("handleNeedCount", ParameterParserDataType::UInt32, (double)handleNeedCount, 0));
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)handleNeedCount, 0));
    }

    // workingExposureIndex
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("workingExposureIndex", ParameterParserDataType::UInt32, (double)workingExposureIndex, 0));
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)workingExposureIndex, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::fineSearchStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        ParameterUtils::DoubleToString((double)minSampleSize, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)currentGyroscopeThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)currentGyroscopeSTDThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        ParameterUtils::DoubleToString((double)gyroscopeThresholdForDifferenceRatio, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)gyroscodeDifferenceRatioThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::fineSearchStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minSampleSize = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            currentGyroscopeThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            currentGyroscopeSTDThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gyroscopeThresholdForDifferenceRatio = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gyroscodeDifferenceRatioThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::fineSearchStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // minSampleSize
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minSampleSize", ParameterParserDataType::UInt32, (double)minSampleSize, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)minSampleSize, 0));
    }

    // currentGyroscopeThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("currentGyroscopeThreshold", ParameterParserDataType::Float, (double)currentGyroscopeThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)currentGyroscopeThreshold));
    }

    // currentGyroscopeSTDThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("currentGyroscopeSTDThreshold", ParameterParserDataType::Float, (double)currentGyroscopeSTDThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "currentGyroscopeSTDThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)currentGyroscopeSTDThreshold));
    }

    // gyroscopeThresholdForDifferenceRatio
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gyroscopeThresholdForDifferenceRatio", ParameterParserDataType::Float, (double)gyroscopeThresholdForDifferenceRatio));
    }
    else if (PARAMETER_STRCMP(__name, "gyroscopeThresholdForDifferenceRatio") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gyroscopeThresholdForDifferenceRatio));
    }

    // gyroscodeDifferenceRatioThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gyroscodeDifferenceRatioThreshold", ParameterParserDataType::Float, (double)gyroscodeDifferenceRatioThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "gyroscodeDifferenceRatioThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gyroscodeDifferenceRatioThreshold));
    }

    // FVNormalized
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FVNormalized", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::fineSearchStruct::FVNormalizedStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "highGyroscopeDifferenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)highGyroscopeDifferenceThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lowGyroscopeDifferenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)lowGyroscopeDifferenceThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "highGryoscopeFVWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)highGryoscopeFVWeight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        ParameterUtils::DoubleToString((double)weightType, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::fineSearchStruct::FVNormalizedStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "highGyroscopeDifferenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            highGyroscopeDifferenceThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lowGyroscopeDifferenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lowGyroscopeDifferenceThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "highGryoscopeFVWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            highGryoscopeFVWeight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            weightType = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::fineSearchStruct::FVNormalizedStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // highGyroscopeDifferenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("highGyroscopeDifferenceThreshold", ParameterParserDataType::Float, (double)highGyroscopeDifferenceThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "highGyroscopeDifferenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)highGyroscopeDifferenceThreshold));
    }

    // lowGyroscopeDifferenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lowGyroscopeDifferenceThreshold", ParameterParserDataType::Float, (double)lowGyroscopeDifferenceThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "lowGyroscopeDifferenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)lowGyroscopeDifferenceThreshold));
    }

    // highGryoscopeFVWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("highGryoscopeFVWeight", ParameterParserDataType::Float, (double)highGryoscopeFVWeight));
    }
    else if (PARAMETER_STRCMP(__name, "highGryoscopeFVWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)highGryoscopeFVWeight));
    }

    // weightType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("weightType", ParameterParserDataType::UInt32, (double)weightType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)weightType, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::spotlightDetectionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "statsType") == 0)
    {
        ParameterUtils::DoubleToString((double)statsType, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "bgStatsThreshAutoConvertEnable") == 0)
    {
        ParameterUtils::DoubleToString((double)bgStatsThreshAutoConvertEnable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "bgStatsBrightRegionSatRatioThresh") == 0)
    {
        ParameterUtils::DoubleToString((double)bgStatsBrightRegionSatRatioThresh, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "far_flat_th") == 0)
    {
        ParameterUtils::DoubleToString((double)far_flat_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "marco_flat_th") == 0)
    {
        ParameterUtils::DoubleToString((double)marco_flat_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "inc_flat_th") == 0)
    {
        ParameterUtils::DoubleToString((double)inc_flat_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "dec_flat_th") == 0)
    {
        ParameterUtils::DoubleToString((double)dec_flat_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_start_h") == 0)
    {
        ParameterUtils::DoubleToString((double)spotlight_zone_start_h, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_end_h") == 0)
    {
        ParameterUtils::DoubleToString((double)spotlight_zone_end_h, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_start_v") == 0)
    {
        ParameterUtils::DoubleToString((double)spotlight_zone_start_v, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_end_v") == 0)
    {
        ParameterUtils::DoubleToString((double)spotlight_zone_end_v, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_start_h") == 0)
    {
        ParameterUtils::DoubleToString((double)background_zone_start_h, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_end_h") == 0)
    {
        ParameterUtils::DoubleToString((double)background_zone_end_h, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_start_v") == 0)
    {
        ParameterUtils::DoubleToString((double)background_zone_start_v, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_end_v") == 0)
    {
        ParameterUtils::DoubleToString((double)background_zone_end_v, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "exposure_index_trigger_th") == 0)
    {
        ParameterUtils::DoubleToString((double)exposure_index_trigger_th, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "background_luma_avg_th") == 0)
    {
        ParameterUtils::DoubleToString((double)background_luma_avg_th, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "region_low_grey_th") == 0)
    {
        ParameterUtils::DoubleToString((double)region_low_grey_th, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "region_low_dark_th") == 0)
    {
        ParameterUtils::DoubleToString((double)region_low_dark_th, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "background_low_grey_pct_th") == 0)
    {
        ParameterUtils::DoubleToString((double)background_low_grey_pct_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "background_dark_grey_pct_th") == 0)
    {
        ParameterUtils::DoubleToString((double)background_dark_grey_pct_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_background_zone") == 0)
    {
        ParameterUtils::DoubleToString((double)bright_region_luma_delta_background_zone, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_spotlight_zone_low_grey") == 0)
    {
        ParameterUtils::DoubleToString((double)bright_region_luma_delta_spotlight_zone_low_grey, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_spotlight_zone_dark_grey") == 0)
    {
        ParameterUtils::DoubleToString((double)bright_region_luma_delta_spotlight_zone_dark_grey, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "square_cluster_inc_size") == 0)
    {
        ParameterUtils::DoubleToString((double)square_cluster_inc_size, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "vertical_cluster_inc_size") == 0)
    {
        ParameterUtils::DoubleToString((double)vertical_cluster_inc_size, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "horizontal_cluster_inc_size") == 0)
    {
        ParameterUtils::DoubleToString((double)horizontal_cluster_inc_size, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "square_cluster_pct_th") == 0)
    {
        ParameterUtils::DoubleToString((double)square_cluster_pct_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "vertical_cluster_pct_th") == 0)
    {
        ParameterUtils::DoubleToString((double)vertical_cluster_pct_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "horizontal_cluster_pct_th") == 0)
    {
        ParameterUtils::DoubleToString((double)horizontal_cluster_pct_th, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_detect_cnt_th") == 0)
    {
        ParameterUtils::DoubleToString((double)spotlight_detect_cnt_th, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::spotlightDetectionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "statsType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            statsType = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "bgStatsThreshAutoConvertEnable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            bgStatsThreshAutoConvertEnable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "bgStatsBrightRegionSatRatioThresh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            bgStatsBrightRegionSatRatioThresh = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "far_flat_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            far_flat_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "marco_flat_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            marco_flat_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "inc_flat_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            inc_flat_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "dec_flat_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            dec_flat_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_start_h") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            spotlight_zone_start_h = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_end_h") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            spotlight_zone_end_h = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_start_v") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            spotlight_zone_start_v = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_end_v") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            spotlight_zone_end_v = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_start_h") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            background_zone_start_h = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_end_h") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            background_zone_end_h = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_start_v") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            background_zone_start_v = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_end_v") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            background_zone_end_v = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "exposure_index_trigger_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            exposure_index_trigger_th = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "background_luma_avg_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            background_luma_avg_th = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "region_low_grey_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            region_low_grey_th = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "region_low_dark_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            region_low_dark_th = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "background_low_grey_pct_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            background_low_grey_pct_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "background_dark_grey_pct_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            background_dark_grey_pct_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_background_zone") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            bright_region_luma_delta_background_zone = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_spotlight_zone_low_grey") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            bright_region_luma_delta_spotlight_zone_low_grey = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_spotlight_zone_dark_grey") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            bright_region_luma_delta_spotlight_zone_dark_grey = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "square_cluster_inc_size") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            square_cluster_inc_size = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "vertical_cluster_inc_size") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            vertical_cluster_inc_size = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "horizontal_cluster_inc_size") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            horizontal_cluster_inc_size = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "square_cluster_pct_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            square_cluster_pct_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "vertical_cluster_pct_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            vertical_cluster_pct_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "horizontal_cluster_pct_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            horizontal_cluster_pct_th = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_detect_cnt_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            spotlight_detect_cnt_th = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::spotlightDetectionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // statsType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("statsType", ParameterParserDataType::Int32, (double)statsType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "statsType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)statsType, 0));
    }

    // bgStatsThreshAutoConvertEnable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("bgStatsThreshAutoConvertEnable", ParameterParserDataType::Int32, (double)bgStatsThreshAutoConvertEnable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "bgStatsThreshAutoConvertEnable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)bgStatsThreshAutoConvertEnable, 0));
    }

    // bgStatsBrightRegionSatRatioThresh
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("bgStatsBrightRegionSatRatioThresh", ParameterParserDataType::Float, (double)bgStatsBrightRegionSatRatioThresh));
    }
    else if (PARAMETER_STRCMP(__name, "bgStatsBrightRegionSatRatioThresh") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)bgStatsBrightRegionSatRatioThresh));
    }

    // far_flat_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("far_flat_th", ParameterParserDataType::Float, (double)far_flat_th));
    }
    else if (PARAMETER_STRCMP(__name, "far_flat_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)far_flat_th));
    }

    // marco_flat_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("marco_flat_th", ParameterParserDataType::Float, (double)marco_flat_th));
    }
    else if (PARAMETER_STRCMP(__name, "marco_flat_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)marco_flat_th));
    }

    // inc_flat_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("inc_flat_th", ParameterParserDataType::Float, (double)inc_flat_th));
    }
    else if (PARAMETER_STRCMP(__name, "inc_flat_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)inc_flat_th));
    }

    // dec_flat_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("dec_flat_th", ParameterParserDataType::Float, (double)dec_flat_th));
    }
    else if (PARAMETER_STRCMP(__name, "dec_flat_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)dec_flat_th));
    }

    // spotlight_zone_start_h
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("spotlight_zone_start_h", ParameterParserDataType::UInt32, (double)spotlight_zone_start_h, 0));
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_start_h") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)spotlight_zone_start_h, 0));
    }

    // spotlight_zone_end_h
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("spotlight_zone_end_h", ParameterParserDataType::UInt32, (double)spotlight_zone_end_h, 0));
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_end_h") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)spotlight_zone_end_h, 0));
    }

    // spotlight_zone_start_v
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("spotlight_zone_start_v", ParameterParserDataType::UInt32, (double)spotlight_zone_start_v, 0));
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_start_v") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)spotlight_zone_start_v, 0));
    }

    // spotlight_zone_end_v
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("spotlight_zone_end_v", ParameterParserDataType::UInt32, (double)spotlight_zone_end_v, 0));
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_zone_end_v") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)spotlight_zone_end_v, 0));
    }

    // background_zone_start_h
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("background_zone_start_h", ParameterParserDataType::UInt32, (double)background_zone_start_h, 0));
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_start_h") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)background_zone_start_h, 0));
    }

    // background_zone_end_h
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("background_zone_end_h", ParameterParserDataType::UInt32, (double)background_zone_end_h, 0));
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_end_h") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)background_zone_end_h, 0));
    }

    // background_zone_start_v
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("background_zone_start_v", ParameterParserDataType::UInt32, (double)background_zone_start_v, 0));
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_start_v") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)background_zone_start_v, 0));
    }

    // background_zone_end_v
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("background_zone_end_v", ParameterParserDataType::UInt32, (double)background_zone_end_v, 0));
    }
    else if (PARAMETER_STRCMP(__name, "background_zone_end_v") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)background_zone_end_v, 0));
    }

    // exposure_index_trigger_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exposure_index_trigger_th", ParameterParserDataType::Int32, (double)exposure_index_trigger_th, 0));
    }
    else if (PARAMETER_STRCMP(__name, "exposure_index_trigger_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)exposure_index_trigger_th, 0));
    }

    // background_luma_avg_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("background_luma_avg_th", ParameterParserDataType::UInt32, (double)background_luma_avg_th, 0));
    }
    else if (PARAMETER_STRCMP(__name, "background_luma_avg_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)background_luma_avg_th, 0));
    }

    // region_low_grey_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("region_low_grey_th", ParameterParserDataType::UInt32, (double)region_low_grey_th, 0));
    }
    else if (PARAMETER_STRCMP(__name, "region_low_grey_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)region_low_grey_th, 0));
    }

    // region_low_dark_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("region_low_dark_th", ParameterParserDataType::UInt32, (double)region_low_dark_th, 0));
    }
    else if (PARAMETER_STRCMP(__name, "region_low_dark_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)region_low_dark_th, 0));
    }

    // background_low_grey_pct_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("background_low_grey_pct_th", ParameterParserDataType::Float, (double)background_low_grey_pct_th));
    }
    else if (PARAMETER_STRCMP(__name, "background_low_grey_pct_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)background_low_grey_pct_th));
    }

    // background_dark_grey_pct_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("background_dark_grey_pct_th", ParameterParserDataType::Float, (double)background_dark_grey_pct_th));
    }
    else if (PARAMETER_STRCMP(__name, "background_dark_grey_pct_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)background_dark_grey_pct_th));
    }

    // bright_region_luma_delta_background_zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("bright_region_luma_delta_background_zone", ParameterParserDataType::Float, (double)bright_region_luma_delta_background_zone));
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_background_zone") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)bright_region_luma_delta_background_zone));
    }

    // bright_region_luma_delta_spotlight_zone_low_grey
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("bright_region_luma_delta_spotlight_zone_low_grey", ParameterParserDataType::Float, (double)bright_region_luma_delta_spotlight_zone_low_grey));
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_spotlight_zone_low_grey") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)bright_region_luma_delta_spotlight_zone_low_grey));
    }

    // bright_region_luma_delta_spotlight_zone_dark_grey
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("bright_region_luma_delta_spotlight_zone_dark_grey", ParameterParserDataType::Float, (double)bright_region_luma_delta_spotlight_zone_dark_grey));
    }
    else if (PARAMETER_STRCMP(__name, "bright_region_luma_delta_spotlight_zone_dark_grey") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)bright_region_luma_delta_spotlight_zone_dark_grey));
    }

    // square_cluster_inc_size
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("square_cluster_inc_size", ParameterParserDataType::UInt32, (double)square_cluster_inc_size, 0));
    }
    else if (PARAMETER_STRCMP(__name, "square_cluster_inc_size") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)square_cluster_inc_size, 0));
    }

    // vertical_cluster_inc_size
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("vertical_cluster_inc_size", ParameterParserDataType::UInt32, (double)vertical_cluster_inc_size, 0));
    }
    else if (PARAMETER_STRCMP(__name, "vertical_cluster_inc_size") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)vertical_cluster_inc_size, 0));
    }

    // horizontal_cluster_inc_size
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("horizontal_cluster_inc_size", ParameterParserDataType::UInt32, (double)horizontal_cluster_inc_size, 0));
    }
    else if (PARAMETER_STRCMP(__name, "horizontal_cluster_inc_size") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)horizontal_cluster_inc_size, 0));
    }

    // square_cluster_pct_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("square_cluster_pct_th", ParameterParserDataType::Float, (double)square_cluster_pct_th));
    }
    else if (PARAMETER_STRCMP(__name, "square_cluster_pct_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)square_cluster_pct_th));
    }

    // vertical_cluster_pct_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("vertical_cluster_pct_th", ParameterParserDataType::Float, (double)vertical_cluster_pct_th));
    }
    else if (PARAMETER_STRCMP(__name, "vertical_cluster_pct_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)vertical_cluster_pct_th));
    }

    // horizontal_cluster_pct_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("horizontal_cluster_pct_th", ParameterParserDataType::Float, (double)horizontal_cluster_pct_th));
    }
    else if (PARAMETER_STRCMP(__name, "horizontal_cluster_pct_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)horizontal_cluster_pct_th));
    }

    // spotlight_detect_cnt_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("spotlight_detect_cnt_th", ParameterParserDataType::UInt32, (double)spotlight_detect_cnt_th, 0));
    }
    else if (PARAMETER_STRCMP(__name, "spotlight_detect_cnt_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)spotlight_detect_cnt_th, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "motionDetection") == 0)
    {
        __result = motionDetection.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "HAFFineSearch") == 0)
    {
        __result = HAFFineSearch.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "motionDetection") == 0)
    {
        __result = motionDetection.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "HAFFineSearch") == 0)
    {
        __result = HAFFineSearch.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // motionDetection
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("motionDetection", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "motionDetection") == 0)
    {
        __result = motionDetection.GetInfo(&__path[__pos], __info);
    }

    // HAFFineSearch
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("HAFFineSearch", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "HAFFineSearch") == 0)
    {
        __result = HAFFineSearch.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::motionDetectionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "statsType") == 0)
    {
        ParameterUtils::DoubleToString((double)statsType, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "detection_alpha") == 0)
    {
        ParameterUtils::DoubleToString((double)detection_alpha, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "detection_level") == 0)
    {
        ParameterUtils::DoubleToString((double)detection_level, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "flow_scale") == 0)
    {
        ParameterUtils::DoubleToString((double)flow_scale, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "motion_level_min_thres") == 0)
    {
        ParameterUtils::DoubleToString((double)motion_level_min_thres, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "motion_level_max_thres") == 0)
    {
        ParameterUtils::DoubleToString((double)motion_level_max_thres, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "motion_replace_sad") == 0)
    {
        ParameterUtils::DoubleToString((double)motion_replace_sad, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::motionDetectionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "statsType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            statsType = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "detection_alpha") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            detection_alpha = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "detection_level") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            detection_level = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "flow_scale") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            flow_scale = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "motion_level_min_thres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            motion_level_min_thres = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "motion_level_max_thres") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            motion_level_max_thres = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "motion_replace_sad") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            motion_replace_sad = (BOOL)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::motionDetectionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // statsType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("statsType", ParameterParserDataType::Int32, (double)statsType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "statsType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)statsType, 0));
    }

    // detection_alpha
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("detection_alpha", ParameterParserDataType::Float, (double)detection_alpha));
    }
    else if (PARAMETER_STRCMP(__name, "detection_alpha") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)detection_alpha));
    }

    // detection_level
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("detection_level", ParameterParserDataType::UInt32, (double)detection_level, 0));
    }
    else if (PARAMETER_STRCMP(__name, "detection_level") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)detection_level, 0));
    }

    // flow_scale
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("flow_scale", ParameterParserDataType::Float, (double)flow_scale));
    }
    else if (PARAMETER_STRCMP(__name, "flow_scale") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)flow_scale));
    }

    // motion_level_min_thres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("motion_level_min_thres", ParameterParserDataType::UInt32, (double)motion_level_min_thres, 0));
    }
    else if (PARAMETER_STRCMP(__name, "motion_level_min_thres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)motion_level_min_thres, 0));
    }

    // motion_level_max_thres
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("motion_level_max_thres", ParameterParserDataType::UInt32, (double)motion_level_max_thres, 0));
    }
    else if (PARAMETER_STRCMP(__name, "motion_level_max_thres") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)motion_level_max_thres, 0));
    }

    // motion_replace_sad
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("motion_replace_sad", ParameterParserDataType::Boolean, (double)motion_replace_sad, 0));
    }
    else if (PARAMETER_STRCMP(__name, "motion_replace_sad") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)motion_replace_sad, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::HAFFineSearchStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "currentMotionLevelThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)currentMotionLevelThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        ParameterUtils::DoubleToString((double)minSampleSize, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        ParameterUtils::DoubleToString((double)handleNeedCount, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        ParameterUtils::DoubleToString((double)workingExposureIndex, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::HAFFineSearchStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "currentMotionLevelThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            currentMotionLevelThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minSampleSize = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            handleNeedCount = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            workingExposureIndex = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::HAFFineSearchStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // currentMotionLevelThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("currentMotionLevelThreshold", ParameterParserDataType::Float, (double)currentMotionLevelThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "currentMotionLevelThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)currentMotionLevelThreshold));
    }

    // minSampleSize
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minSampleSize", ParameterParserDataType::UInt32, (double)minSampleSize, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minSampleSize") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)minSampleSize, 0));
    }

    // FVNormalized
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FVNormalized", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "FVNormalized") == 0)
    {
        __result = FVNormalized.GetInfo(&__path[__pos], __info);
    }

    // handleNeedCount
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("handleNeedCount", ParameterParserDataType::UInt32, (double)handleNeedCount, 0));
    }
    else if (PARAMETER_STRCMP(__name, "handleNeedCount") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)handleNeedCount, 0));
    }

    // workingExposureIndex
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("workingExposureIndex", ParameterParserDataType::UInt32, (double)workingExposureIndex, 0));
    }
    else if (PARAMETER_STRCMP(__name, "workingExposureIndex") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)workingExposureIndex, 0));
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::HAFFineSearchStruct::FVNormalizedStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        ParameterUtils::DoubleToString((double)enable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "highMotionDifferenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)highMotionDifferenceThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lowMotionDifferenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)lowMotionDifferenceThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "highMotionFVWeight") == 0)
    {
        ParameterUtils::DoubleToString((double)highMotionFVWeight, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        ParameterUtils::DoubleToString((double)weightType, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::HAFFineSearchStruct::FVNormalizedStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            enable = (BOOL)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "highMotionDifferenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            highMotionDifferenceThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lowMotionDifferenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lowMotionDifferenceThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "highMotionFVWeight") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            highMotionFVWeight = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            weightType = (UINT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFAlgoTuningType::motionControlStruct::HAFFineSearchStruct::FVNormalizedStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable", ParameterParserDataType::Boolean, (double)enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Boolean, (double)enable, 0));
    }

    // highMotionDifferenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("highMotionDifferenceThreshold", ParameterParserDataType::Float, (double)highMotionDifferenceThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "highMotionDifferenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)highMotionDifferenceThreshold));
    }

    // lowMotionDifferenceThreshold
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lowMotionDifferenceThreshold", ParameterParserDataType::Float, (double)lowMotionDifferenceThreshold));
    }
    else if (PARAMETER_STRCMP(__name, "lowMotionDifferenceThreshold") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)lowMotionDifferenceThreshold));
    }

    // highMotionFVWeight
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("highMotionFVWeight", ParameterParserDataType::Float, (double)highMotionFVWeight));
    }
    else if (PARAMETER_STRCMP(__name, "highMotionFVWeight") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)highMotionFVWeight));
    }

    // weightType
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("weightType", ParameterParserDataType::UInt32, (double)weightType, 0));
    }
    else if (PARAMETER_STRCMP(__name, "weightType") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)weightType, 0));
    }

    return __result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ReadEnum_chromatixAFEyeSelectionType(
    ParameterFileSymbolTableEntry* const entry,
    chromatixAFEyeSelectionType& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(chromatixAFEyeSelectionType::AFEyeROIDefault):
            enumValue = chromatixAFEyeSelectionType::AFEyeROIDefault;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFEyeSelectionType::AFEyeROILeft):
            enumValue = chromatixAFEyeSelectionType::AFEyeROILeft;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFEyeSelectionType::AFEyeROIRight):
            enumValue = chromatixAFEyeSelectionType::AFEyeROIRight;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to chromatixAFEyeSelectionType", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ReadEnum_chromatixAFFaceOrientation(
    ParameterFileSymbolTableEntry* const entry,
    chromatixAFFaceOrientation& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(chromatixAFFaceOrientation::AFFaceOrientationDefault):
            enumValue = chromatixAFFaceOrientation::AFFaceOrientationDefault;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFaceOrientation::AFFaceOrientationStraight):
            enumValue = chromatixAFFaceOrientation::AFFaceOrientationStraight;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFaceOrientation::AFFaceOrientationSide):
            enumValue = chromatixAFFaceOrientation::AFFaceOrientationSide;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to chromatixAFFaceOrientation", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ReadEnum_HDRStatsTypeGrid(
    ParameterFileSymbolTableEntry* const entry,
    HDRStatsTypeGrid& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(HDRStatsTypeGrid::GridTypeLuma):
            enumValue = HDRStatsTypeGrid::GridTypeLuma;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsTypeGrid::GridTypeSaturationRatio):
            enumValue = HDRStatsTypeGrid::GridTypeSaturationRatio;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsTypeGrid::GridTypePDAFConfidence):
            enumValue = HDRStatsTypeGrid::GridTypePDAFConfidence;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsTypeGrid::TypeMax):
            enumValue = HDRStatsTypeGrid::TypeMax;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to HDRStatsTypeGrid", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ReadEnum_HDRStatsTypeGlobal(
    ParameterFileSymbolTableEntry* const entry,
    HDRStatsTypeGlobal& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(HDRStatsTypeGlobal::GlobalTypeExposureTime):
            enumValue = HDRStatsTypeGlobal::GlobalTypeExposureTime;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsTypeGlobal::GlobalTypeExposureGain):
            enumValue = HDRStatsTypeGlobal::GlobalTypeExposureGain;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsTypeGlobal::GlobalTypeLuma):
            enumValue = HDRStatsTypeGlobal::GlobalTypeLuma;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsTypeGlobal::GlobalTypeSaturationRatio):
            enumValue = HDRStatsTypeGlobal::GlobalTypeSaturationRatio;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsTypeGlobal::GlobalTypePDAFConfidence):
            enumValue = HDRStatsTypeGlobal::GlobalTypePDAFConfidence;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsTypeGlobal::TypeMax):
            enumValue = HDRStatsTypeGlobal::TypeMax;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to HDRStatsTypeGlobal", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ReadEnum_BiasExposureType(
    ParameterFileSymbolTableEntry* const entry,
    BiasExposureType& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(BiasExposureType::exposureTypeShort):
            enumValue = BiasExposureType::exposureTypeShort;
            result    = true;
            break;
        case static_cast<UINT32>(BiasExposureType::exposureTypeLong):
            enumValue = BiasExposureType::exposureTypeLong;
            result    = true;
            break;
        case static_cast<UINT32>(BiasExposureType::exposureTypeSafe):
            enumValue = BiasExposureType::exposureTypeSafe;
            result    = true;
            break;
        case static_cast<UINT32>(BiasExposureType::exposureTypeMerged):
            enumValue = BiasExposureType::exposureTypeMerged;
            result    = true;
            break;
        case static_cast<UINT32>(BiasExposureType::exposureTypeMax):
            enumValue = BiasExposureType::exposureTypeMax;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to BiasExposureType", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ReadEnum_HDRStatsSelectionType(
    ParameterFileSymbolTableEntry* const entry,
    HDRStatsSelectionType& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(HDRStatsSelectionType::SelectTypeChooseGlobal):
            enumValue = HDRStatsSelectionType::SelectTypeChooseGlobal;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsSelectionType::SelectTypeBlendGlobal):
            enumValue = HDRStatsSelectionType::SelectTypeBlendGlobal;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsSelectionType::SelectTypeChooseGrid):
            enumValue = HDRStatsSelectionType::SelectTypeChooseGrid;
            result    = true;
            break;
        case static_cast<UINT32>(HDRStatsSelectionType::SelectTypeBlendGrid):
            enumValue = HDRStatsSelectionType::SelectTypeBlendGrid;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to HDRStatsSelectionType", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixTriggerConditionEntriesType::ReadEnum_MFDOFSceneEnum(
    ParameterFileSymbolTableEntry* const entry,
    chromatixTriggerConditionEntriesType::MFDOFSceneEnum& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::MTFChart):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::MTFChart;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::FlatPlane):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::FlatPlane;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::FileScan):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::FileScan;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::MultiDepth):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::MultiDepth;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::ISO12233Chart):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::ISO12233Chart;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SkipAecSaDebug):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SkipAecSaDebug;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::DualFace):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::DualFace;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo07Reserved):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo07Reserved;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo08Reserved):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo08Reserved;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo09Reserved):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo09Reserved;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo10Reserved):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo10Reserved;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo11Reserved):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::SceneNo11Reserved;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixTriggerConditionEntriesType::MFDOFSceneEnum::NumberOfKnownScenes):
            enumValue = chromatixTriggerConditionEntriesType::MFDOFSceneEnum::NumberOfKnownScenes;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to chromatixTriggerConditionEntriesType::MFDOFSceneEnum", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixMFDOF::ReadEnum_cornerStatsMergerEnum(
    ParameterFileSymbolTableEntry* const entry,
    chromatixMFDOF::cornerStatsMergerEnum& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(chromatixMFDOF::cornerStatsMergerEnum::ByAverage):
            enumValue = chromatixMFDOF::cornerStatsMergerEnum::ByAverage;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixMFDOF::cornerStatsMergerEnum::ByMaximum):
            enumValue = chromatixMFDOF::cornerStatsMergerEnum::ByMaximum;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to chromatixMFDOF::cornerStatsMergerEnum", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFocusMapControlType::defocusTableStruct::ReadEnum_triggerModeEnum(
    ParameterFileSymbolTableEntry* const entry,
    chromatixAFFocusMapControlType::defocusTableStruct::triggerModeEnum& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(chromatixAFFocusMapControlType::defocusTableStruct::triggerModeEnum::AECGain):
            enumValue = chromatixAFFocusMapControlType::defocusTableStruct::triggerModeEnum::AECGain;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFocusMapControlType::defocusTableStruct::triggerModeEnum::AECLuxIndex):
            enumValue = chromatixAFFocusMapControlType::defocusTableStruct::triggerModeEnum::AECLuxIndex;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFocusMapControlType::defocusTableStruct::triggerModeEnum::LensPosition):
            enumValue = chromatixAFFocusMapControlType::defocusTableStruct::triggerModeEnum::LensPosition;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to chromatixAFFocusMapControlType::defocusTableStruct::triggerModeEnum", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFocusMapControlType::confidenceTableStruct::ReadEnum_triggerModeEnum(
    ParameterFileSymbolTableEntry* const entry,
    chromatixAFFocusMapControlType::confidenceTableStruct::triggerModeEnum& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(chromatixAFFocusMapControlType::confidenceTableStruct::triggerModeEnum::AECGain):
            enumValue = chromatixAFFocusMapControlType::confidenceTableStruct::triggerModeEnum::AECGain;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFocusMapControlType::confidenceTableStruct::triggerModeEnum::AECLuxIndex):
            enumValue = chromatixAFFocusMapControlType::confidenceTableStruct::triggerModeEnum::AECLuxIndex;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFocusMapControlType::confidenceTableStruct::triggerModeEnum::LensPosition):
            enumValue = chromatixAFFocusMapControlType::confidenceTableStruct::triggerModeEnum::LensPosition;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to chromatixAFFocusMapControlType::confidenceTableStruct::triggerModeEnum", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ReadEnum_chromatixAFFaceROITypeSelection(
    ParameterFileSymbolTableEntry* const entry,
    chromatixAFFaceROITypeSelection& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(chromatixAFFaceROITypeSelection::AFFaceROITypeNone):
            enumValue = chromatixAFFaceROITypeSelection::AFFaceROITypeNone;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFaceROITypeSelection::AFFaceROITypeUnStabilized):
            enumValue = chromatixAFFaceROITypeSelection::AFFaceROITypeUnStabilized;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFaceROITypeSelection::AFFaceROITypeStabilized):
            enumValue = chromatixAFFaceROITypeSelection::AFFaceROITypeStabilized;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to chromatixAFFaceROITypeSelection", uintValue);
            break;
        }
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Read enum value
/// @param entry [in] Symbol table entry
/// @param enumValue [out] Enum value to read
/// @param alignment [in] Symbol table byte alignment
/// @return true if successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool ReadEnum_chromatixAFFocusModeType(
    ParameterFileSymbolTableEntry* const entry,
    chromatixAFFocusModeType& enumValue,
    BYTE const alignment)
{
    bool result {false};

    UINT32 uintValue {entry->ReadEnum(&result, alignment)};

    if (result)
    {
        switch (uintValue)
        {
        case static_cast<UINT32>(chromatixAFFocusModeType::AFFocusModeAuto):
            enumValue = chromatixAFFocusModeType::AFFocusModeAuto;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFocusModeType::AFFocusModeContinuous):
            enumValue = chromatixAFFocusModeType::AFFocusModeContinuous;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFocusModeType::AFFocusModeInfinity):
            enumValue = chromatixAFFocusModeType::AFFocusModeInfinity;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFocusModeType::AFFocusModeMacro):
            enumValue = chromatixAFFocusModeType::AFFocusModeMacro;
            result    = true;
            break;
        case static_cast<UINT32>(chromatixAFFocusModeType::AFFocusModeManual):
            enumValue = chromatixAFFocusModeType::AFFocusModeManual;
            result    = true;
            break;
        default:
            PARAMETER_LOG_ERROR(entry->SetManager, "Invalid value(% u) converting UINT32 to chromatixAFFocusModeType", uintValue);
            break;
        }
    }
    return result;
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixAFAlgoTuningTypeClass::chromatixAFAlgoTuningTypeClass(
    const CHAR* const name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, nullptr)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(commonElements);
    PARAMETER_INITIALIZE(FOVCorrection);
    PARAMETER_INITIALIZE(searchLimitCount);
    PARAMETER_INITIALIZE(searchLimit);
    PARAMETER_INITIALIZE(faceDetection);
    PARAMETER_INITIALIZE(statsROIProcess);
    PARAMETER_INITIALIZE(orientationDetection);
    PARAMETER_INITIALIZE(outdoorROIConfiguration);
    PARAMETER_INITIALIZE(moduleTuning);
    PARAMETER_INITIALIZE(handJitter);
    PARAMETER_INITIALIZE(spotlightDetection);
    PARAMETER_INITIALIZE(distanceMapControl);
    PARAMETER_INITIALIZE(focusMapControl);
    PARAMETER_INITIALIZE(motionControl);
    PARAMETER_INITIALIZE(MultiFrameDepthOfField);
    PARAMETER_INITIALIZE(DualFaceFocus);
    PARAMETER_INITIALIZE(HDRControl);
    PARAMETER_INITIALIZE(TouchAssistControl);
    PARAMETER_INITIALIZE(AFROILowLumaAlert);
    PARAMETER_INITIALIZE(eyeTrackingCtrl);
    PARAMETER_INITIALIZE(multiROIConfigCtrl);
    PARAMETER_INITIALIZE(minROISizeCtrl);
    PARAMETER_INITIALIZE(AFRackFocus);
    PARAMETER_INITIALIZE(touchROIScalingFactor);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixAFAlgoTuningTypeClass::chromatixAFAlgoTuningTypeClass(
    const CHAR* const name,
    ModuleData* const moduleData)
    : ParameterModule(name, MAJOR, MINOR, PATCH, moduleData)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(commonElements);
    PARAMETER_INITIALIZE(FOVCorrection);
    PARAMETER_INITIALIZE(searchLimit);
    PARAMETER_INITIALIZE(faceDetection);
    PARAMETER_INITIALIZE(statsROIProcess);
    PARAMETER_INITIALIZE(orientationDetection);
    PARAMETER_INITIALIZE(outdoorROIConfiguration);
    PARAMETER_INITIALIZE(moduleTuning);
    PARAMETER_INITIALIZE(handJitter);
    PARAMETER_INITIALIZE(spotlightDetection);
    PARAMETER_INITIALIZE(distanceMapControl);
    PARAMETER_INITIALIZE(focusMapControl);
    PARAMETER_INITIALIZE(motionControl);
    PARAMETER_INITIALIZE(MultiFrameDepthOfField);
    PARAMETER_INITIALIZE(DualFaceFocus);
    PARAMETER_INITIALIZE(HDRControl);
    PARAMETER_INITIALIZE(TouchAssistControl);
    PARAMETER_INITIALIZE(AFROILowLumaAlert);
    PARAMETER_INITIALIZE(eyeTrackingCtrl);
    PARAMETER_INITIALIZE(multiROIConfigCtrl);
    PARAMETER_INITIALIZE(minROISizeCtrl);
    PARAMETER_INITIALIZE(AFRackFocus);
    PARAMETER_INITIALIZE(touchROIScalingFactor);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixAFAlgoTuningTypeClass::~chromatixAFAlgoTuningTypeClass()
{
    if (Loaded)
    {
        UnloadModule();
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixAFAlgoTuningTypeClass::GetName(
    const CHAR* const type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ModuleData::GetType(temp, "chromatixAFAlgoTuning")) == 0)
    {
        name = "chromatixAFAlgoTuning";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTouchROISettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixTouchROISettingsType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(normalLight);
    PARAMETER_INITIALIZE(lowLight);

    SYMBOL_TABLE_ENTRY_READ(entry, result, normalLight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, lowLight, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFRackFocusType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFRackFocusType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(rackFocusMovePercentage);
    PARAMETER_INITIALIZE(rackFocusMaxStep);
    PARAMETER_INITIALIZE(rackFocusMaxStepBuffer);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, rackFocusMovePercentage, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, rackFocusMaxStep, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, rackFocusMaxStepBuffer, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFROITypeBasedSizeConfig
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFROITypeBasedSizeConfig::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(roiType);
    PARAMETER_INITIALIZE(sizeX);
    PARAMETER_INITIALIZE(sizeY);

    result = afglobalelements::ReadEnum_AFTriggerCtrlTypeROIEnum(entry, roiType, alignment);
    SYMBOL_TABLE_ENTRY_READ(entry, result, sizeX, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, sizeY, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFMinROISizeControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFMinROISizeControl::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(sizeX);
    PARAMETER_INITIALIZE(sizeY);
    PARAMETER_INITIALIZE(roiTypeBasedOverrideConfigArr);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, sizeX, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, sizeY, alignment)

    // Reading Array roiTypeBasedOverrideConfigArr from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        roiTypeBasedOverrideConfigArrCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, roiTypeBasedOverrideConfigArrCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            roiTypeBasedOverrideConfigArrID = pointerEntry->ID;
            DupObjInfo* roiTypeBasedOverrideConfigArrDupInfo = pointerEntry->GetDupObject(roiTypeBasedOverrideConfigArrCount, file, line);
            if (roiTypeBasedOverrideConfigArrDupInfo != nullptr && roiTypeBasedOverrideConfigArrDupInfo->Object != nullptr)
            {
                roiTypeBasedOverrideConfigArr = (chromatixAFROITypeBasedSizeConfig*)roiTypeBasedOverrideConfigArrDupInfo->Object;
                if (roiTypeBasedOverrideConfigArr == nullptr)
                {
                    if (roiTypeBasedOverrideConfigArrDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "roiTypeBasedOverrideConfigArr duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            roiTypeBasedOverrideConfigArrDupInfo->File, roiTypeBasedOverrideConfigArrDupInfo->Line, roiTypeBasedOverrideConfigArrDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "roiTypeBasedOverrideConfigArr duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            roiTypeBasedOverrideConfigArrDupInfo->Line, roiTypeBasedOverrideConfigArrDupInfo->RefCount);
                    }
                }
            }

            if (roiTypeBasedOverrideConfigArr == nullptr)
            {
                if (result && roiTypeBasedOverrideConfigArrCount > 0)
                {
                    roiTypeBasedOverrideConfigArr = PARAMETER_NEW chromatixAFROITypeBasedSizeConfig[roiTypeBasedOverrideConfigArrCount];
                    (void)pointerEntry->SetDupObject(roiTypeBasedOverrideConfigArr, roiTypeBasedOverrideConfigArrCount, file, line);
                }
                if (!result || roiTypeBasedOverrideConfigArr == nullptr)
                {
                    if (roiTypeBasedOverrideConfigArrCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate roiTypeBasedOverrideConfigArr\n");
                    }
                    roiTypeBasedOverrideConfigArrCount = 0;
                }
                for (UINT32 i = 0; result && i < roiTypeBasedOverrideConfigArrCount; i++)
                {
                    result = roiTypeBasedOverrideConfigArr[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (roiTypeBasedOverrideConfigArr == nullptr)
        {
            roiTypeBasedOverrideConfigArrCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFROISizeBasedGridConfig
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFROISizeBasedGridConfig::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(numHRegions);
    PARAMETER_INITIALIZE(numVRegions);
    PARAMETER_INITIALIZE(sizeGridConfigList);

    SYMBOL_TABLE_ENTRY_READ(entry, result, numHRegions, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, numVRegions, alignment)

    // Reading Array sizeGridConfigList from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        sizeGridConfigListCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, sizeGridConfigListCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            sizeGridConfigListID = pointerEntry->ID;
            DupObjInfo* sizeGridConfigListDupInfo = pointerEntry->GetDupObject(sizeGridConfigListCount, file, line);
            if (sizeGridConfigListDupInfo != nullptr && sizeGridConfigListDupInfo->Object != nullptr)
            {
                sizeGridConfigList = (afglobalelements::chromatixROISizeBasedGridConfig*)sizeGridConfigListDupInfo->Object;
                if (sizeGridConfigList == nullptr)
                {
                    if (sizeGridConfigListDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "sizeGridConfigList duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            sizeGridConfigListDupInfo->File, sizeGridConfigListDupInfo->Line, sizeGridConfigListDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "sizeGridConfigList duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            sizeGridConfigListDupInfo->Line, sizeGridConfigListDupInfo->RefCount);
                    }
                }
            }

            if (sizeGridConfigList == nullptr)
            {
                if (result && sizeGridConfigListCount > 0)
                {
                    sizeGridConfigList = PARAMETER_NEW afglobalelements::chromatixROISizeBasedGridConfig[sizeGridConfigListCount];
                    (void)pointerEntry->SetDupObject(sizeGridConfigList, sizeGridConfigListCount, file, line);
                }
                if (!result || sizeGridConfigList == nullptr)
                {
                    if (sizeGridConfigListCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate sizeGridConfigList\n");
                    }
                    sizeGridConfigListCount = 0;
                }
                for (UINT32 i = 0; result && i < sizeGridConfigListCount; i++)
                {
                    result = sizeGridConfigList[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (sizeGridConfigList == nullptr)
        {
            sizeGridConfigListCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixROIScaleFactorList
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixROIScaleFactorList::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(scaleFactors);


    // Reading Array scaleFactors from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        scaleFactorsCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, scaleFactorsCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            scaleFactorsID = pointerEntry->ID;
            DupObjInfo* scaleFactorsDupInfo = pointerEntry->GetDupObject(scaleFactorsCount, file, line);
            if (scaleFactorsDupInfo != nullptr && scaleFactorsDupInfo->Object != nullptr)
            {
                scaleFactors = (afglobalelements::chromatixROIScaleFactorType*)scaleFactorsDupInfo->Object;
                if (scaleFactors == nullptr)
                {
                    if (scaleFactorsDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "scaleFactors duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            scaleFactorsDupInfo->File, scaleFactorsDupInfo->Line, scaleFactorsDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "scaleFactors duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            scaleFactorsDupInfo->Line, scaleFactorsDupInfo->RefCount);
                    }
                }
            }

            if (scaleFactors == nullptr)
            {
                if (result && scaleFactorsCount > 0)
                {
                    scaleFactors = PARAMETER_NEW afglobalelements::chromatixROIScaleFactorType[scaleFactorsCount];
                    (void)pointerEntry->SetDupObject(scaleFactors, scaleFactorsCount, file, line);
                }
                if (!result || scaleFactors == nullptr)
                {
                    if (scaleFactorsCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate scaleFactors\n");
                    }
                    scaleFactorsCount = 0;
                }
                for (UINT32 i = 0; result && i < scaleFactorsCount; i++)
                {
                    result = scaleFactors[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (scaleFactors == nullptr)
        {
            scaleFactorsCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFMultiROIScaleAndGridConfig
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFMultiROIScaleAndGridConfig::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(scaleFactorList);
    PARAMETER_INITIALIZE(sizeBasedMWConfig);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    if (result)
    {
        result = scaleFactorList.Load(entry, alignment);
    }
    if (result)
    {
        result = sizeBasedMWConfig.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFMultiROIExtension
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFMultiROIExtension::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(multiROITouch);
    PARAMETER_INITIALIZE(multiROITrack);

    result = multiROITouch.Load(entry, alignment);
    if (result)
    {
        result = multiROITrack.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFMultiROIConfigControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFMultiROIConfigControl::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(roiTypeSelectionArr);
    PARAMETER_INITIALIZE(multiROIExtension);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)

    // Reading Array roiTypeSelectionArr from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        roiTypeSelectionArrCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, roiTypeSelectionArrCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            roiTypeSelectionArrID = pointerEntry->ID;
            DupObjInfo* roiTypeSelectionArrDupInfo = pointerEntry->GetDupObject(roiTypeSelectionArrCount, file, line);
            if (roiTypeSelectionArrDupInfo != nullptr && roiTypeSelectionArrDupInfo->Object != nullptr)
            {
                roiTypeSelectionArr = (afglobalelements::chromatixAFMultiROIType*)roiTypeSelectionArrDupInfo->Object;
                if (roiTypeSelectionArr == nullptr)
                {
                    if (roiTypeSelectionArrDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "roiTypeSelectionArr duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            roiTypeSelectionArrDupInfo->File, roiTypeSelectionArrDupInfo->Line, roiTypeSelectionArrDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "roiTypeSelectionArr duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            roiTypeSelectionArrDupInfo->Line, roiTypeSelectionArrDupInfo->RefCount);
                    }
                }
            }

            if (roiTypeSelectionArr == nullptr)
            {
                if (result && roiTypeSelectionArrCount > 0)
                {
                    roiTypeSelectionArr = PARAMETER_NEW afglobalelements::chromatixAFMultiROIType[roiTypeSelectionArrCount];
                    (void)pointerEntry->SetDupObject(roiTypeSelectionArr, roiTypeSelectionArrCount, file, line);
                }
                if (!result || roiTypeSelectionArr == nullptr)
                {
                    if (roiTypeSelectionArrCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate roiTypeSelectionArr\n");
                    }
                    roiTypeSelectionArrCount = 0;
                }
                for (UINT32 i = 0; result && i < roiTypeSelectionArrCount; i++)
                {
                    result = afglobalelements::ReadEnum_chromatixAFMultiROIType(pointerEntry, roiTypeSelectionArr[i], alignment);
                }
            }
        }
        if (roiTypeSelectionArr == nullptr)
        {
            roiTypeSelectionArrCount = 0;
        }
    }
    if (result)
    {
        result = multiROIExtension.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFEyeTrackingControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFEyeTrackingControl::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(faceROISizeXTh);
    PARAMETER_INITIALIZE(faceROISizeYTh);
    PARAMETER_INITIALIZE(faceSizeHysFactor);
    PARAMETER_INITIALIZE(eyeRectFaceOrientationSelection);
    PARAMETER_INITIALIZE(eyeROIPreference);
    PARAMETER_INITIALIZE(SingleEyeRectSizeXFactor);
    PARAMETER_INITIALIZE(SingleEyeRectSizeYFactor);
    PARAMETER_INITIALIZE(TwoEyeRectSizeXFactor);
    PARAMETER_INITIALIZE(TwoEyeRectSizeYFactor);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, faceROISizeXTh, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, faceROISizeYTh, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, faceSizeHysFactor, alignment)
    if (result)
    {
        result = afalgotuningelements::ReadEnum_chromatixAFFaceOrientation(entry, eyeRectFaceOrientationSelection, alignment);
    }
    if (result)
    {
        result = afalgotuningelements::ReadEnum_chromatixAFEyeSelectionType(entry, eyeROIPreference, alignment);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, SingleEyeRectSizeXFactor, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, SingleEyeRectSizeYFactor, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, TwoEyeRectSizeXFactor, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, TwoEyeRectSizeYFactor, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFROILowLumaAlert
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFROILowLumaAlert::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(minTolerableLuma);
    PARAMETER_INITIALIZE(minFaceAFWorkingLuma);
    PARAMETER_INITIALIZE(horizontalBayerGridCropOffset);
    PARAMETER_INITIALIZE(verticalBayerGridCropOffset);
    PARAMETER_INITIALIZE(enableFaceTracking);
    PARAMETER_INITIALIZE(refocusLockMaxSensReduction);
    PARAMETER_INITIALIZE(refocusLockAlertStableCount);
    PARAMETER_INITIALIZE(refocusLockLumaGapAmplifier);
    PARAMETER_INITIALIZE(faceROIWidthScaler);
    PARAMETER_INITIALIZE(faceROIHeightScaler);
    PARAMETER_INITIALIZE(pdTemporalFilterSizeExtend);
    PARAMETER_INITIALIZE(face2PDMinMoveThreshExtend);
    PARAMETER_INITIALIZE(waitPDConfRecoverCntExtend);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minTolerableLuma, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minFaceAFWorkingLuma, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, horizontalBayerGridCropOffset, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, verticalBayerGridCropOffset, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, enableFaceTracking, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, refocusLockMaxSensReduction, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, refocusLockAlertStableCount, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, refocusLockLumaGapAmplifier, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, faceROIWidthScaler, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, faceROIHeightScaler, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, pdTemporalFilterSizeExtend, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, face2PDMinMoveThreshExtend, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, waitPDConfRecoverCntExtend, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTouchAssistControlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixTouchAssistControlType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(confidenceThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, confidenceThreshold, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load HDRStatsEntryType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool HDRStatsEntryType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(value);
    PARAMETER_INITIALIZE(weight);

    SYMBOL_TABLE_ENTRY_READ(entry, result, value, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, weight, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load HDRProcessingTypeGrid
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool HDRProcessingTypeGrid::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(StatsTypeArr);
    PARAMETER_INITIALIZE(entries);

    result = afalgotuningelements::ReadEnum_HDRStatsTypeGrid(entry, StatsTypeArr, alignment);

    // Reading Array entries from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        entriesCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, entriesCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            entriesID = pointerEntry->ID;
            DupObjInfo* entriesDupInfo = pointerEntry->GetDupObject(entriesCount, file, line);
            if (entriesDupInfo != nullptr && entriesDupInfo->Object != nullptr)
            {
                entries = (HDRStatsEntryType*)entriesDupInfo->Object;
                if (entries == nullptr)
                {
                    if (entriesDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "entries duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            entriesDupInfo->File, entriesDupInfo->Line, entriesDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "entries duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            entriesDupInfo->Line, entriesDupInfo->RefCount);
                    }
                }
            }

            if (entries == nullptr)
            {
                if (result && entriesCount > 0)
                {
                    entries = PARAMETER_NEW HDRStatsEntryType[entriesCount];
                    (void)pointerEntry->SetDupObject(entries, entriesCount, file, line);
                }
                if (!result || entries == nullptr)
                {
                    if (entriesCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate entries\n");
                    }
                    entriesCount = 0;
                }
                for (UINT32 i = 0; result && i < entriesCount; i++)
                {
                    result = entries[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (entries == nullptr)
        {
            entriesCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load HDRProcessingTypeGlobal
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool HDRProcessingTypeGlobal::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(StatsTypeArr);
    PARAMETER_INITIALIZE(entries);

    result = afalgotuningelements::ReadEnum_HDRStatsTypeGlobal(entry, StatsTypeArr, alignment);

    // Reading Array entries from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        entriesCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, entriesCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            entriesID = pointerEntry->ID;
            DupObjInfo* entriesDupInfo = pointerEntry->GetDupObject(entriesCount, file, line);
            if (entriesDupInfo != nullptr && entriesDupInfo->Object != nullptr)
            {
                entries = (HDRStatsEntryType*)entriesDupInfo->Object;
                if (entries == nullptr)
                {
                    if (entriesDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "entries duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            entriesDupInfo->File, entriesDupInfo->Line, entriesDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "entries duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            entriesDupInfo->Line, entriesDupInfo->RefCount);
                    }
                }
            }

            if (entries == nullptr)
            {
                if (result && entriesCount > 0)
                {
                    entries = PARAMETER_NEW HDRStatsEntryType[entriesCount];
                    (void)pointerEntry->SetDupObject(entries, entriesCount, file, line);
                }
                if (!result || entries == nullptr)
                {
                    if (entriesCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate entries\n");
                    }
                    entriesCount = 0;
                }
                for (UINT32 i = 0; result && i < entriesCount; i++)
                {
                    result = entries[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (entries == nullptr)
        {
            entriesCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load HDRBiasEntryType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool HDRBiasEntryType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(biasType);
    PARAMETER_INITIALIZE(weight);

    result = afalgotuningelements::ReadEnum_BiasExposureType(entry, biasType, alignment);
    SYMBOL_TABLE_ENTRY_READ(entry, result, weight, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFHDRControlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFHDRControlType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(modeSelect);
    PARAMETER_INITIALIZE(bias);
    PARAMETER_INITIALIZE(statsTypeGlobal);
    PARAMETER_INITIALIZE(statsTypeGrid);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    if (result)
    {
        result = afalgotuningelements::ReadEnum_HDRStatsSelectionType(entry, modeSelect, alignment);
    }
    if (result)
    {
        result = bias.Load(entry, alignment);
    }
    if (result)
    {
        result = statsTypeGlobal.Load(entry, alignment);
    }
    if (result)
    {
        result = statsTypeGrid.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFHDRControlType_biasStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFHDRControlType::biasStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(entries);


    // Reading Array entries from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        entriesCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, entriesCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            entriesID = pointerEntry->ID;
            DupObjInfo* entriesDupInfo = pointerEntry->GetDupObject(entriesCount, file, line);
            if (entriesDupInfo != nullptr && entriesDupInfo->Object != nullptr)
            {
                entries = (HDRBiasEntryType*)entriesDupInfo->Object;
                if (entries == nullptr)
                {
                    if (entriesDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "entries duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            entriesDupInfo->File, entriesDupInfo->Line, entriesDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "entries duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            entriesDupInfo->Line, entriesDupInfo->RefCount);
                    }
                }
            }

            if (entries == nullptr)
            {
                if (result && entriesCount > 0)
                {
                    entries = PARAMETER_NEW HDRBiasEntryType[entriesCount];
                    (void)pointerEntry->SetDupObject(entries, entriesCount, file, line);
                }
                if (!result || entries == nullptr)
                {
                    if (entriesCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate entries\n");
                    }
                    entriesCount = 0;
                }
                for (UINT32 i = 0; result && i < entriesCount; i++)
                {
                    result = entries[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (entries == nullptr)
        {
            entriesCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFHDRControlType_statsTypeGlobalStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFHDRControlType::statsTypeGlobalStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(StatsControlArr);


    // Reading Array StatsControlArr from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        StatsControlArrCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, StatsControlArrCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            StatsControlArrID = pointerEntry->ID;
            DupObjInfo* StatsControlArrDupInfo = pointerEntry->GetDupObject(StatsControlArrCount, file, line);
            if (StatsControlArrDupInfo != nullptr && StatsControlArrDupInfo->Object != nullptr)
            {
                StatsControlArr = (HDRProcessingTypeGlobal*)StatsControlArrDupInfo->Object;
                if (StatsControlArr == nullptr)
                {
                    if (StatsControlArrDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "StatsControlArr duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            StatsControlArrDupInfo->File, StatsControlArrDupInfo->Line, StatsControlArrDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "StatsControlArr duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            StatsControlArrDupInfo->Line, StatsControlArrDupInfo->RefCount);
                    }
                }
            }

            if (StatsControlArr == nullptr)
            {
                if (result && StatsControlArrCount > 0)
                {
                    StatsControlArr = PARAMETER_NEW HDRProcessingTypeGlobal[StatsControlArrCount];
                    (void)pointerEntry->SetDupObject(StatsControlArr, StatsControlArrCount, file, line);
                }
                if (!result || StatsControlArr == nullptr)
                {
                    if (StatsControlArrCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate StatsControlArr\n");
                    }
                    StatsControlArrCount = 0;
                }
                for (UINT32 i = 0; result && i < StatsControlArrCount; i++)
                {
                    result = StatsControlArr[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (StatsControlArr == nullptr)
        {
            StatsControlArrCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFHDRControlType_statsTypeGridStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFHDRControlType::statsTypeGridStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(StatsControlArr);


    // Reading Array StatsControlArr from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        StatsControlArrCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, StatsControlArrCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            StatsControlArrID = pointerEntry->ID;
            DupObjInfo* StatsControlArrDupInfo = pointerEntry->GetDupObject(StatsControlArrCount, file, line);
            if (StatsControlArrDupInfo != nullptr && StatsControlArrDupInfo->Object != nullptr)
            {
                StatsControlArr = (HDRProcessingTypeGrid*)StatsControlArrDupInfo->Object;
                if (StatsControlArr == nullptr)
                {
                    if (StatsControlArrDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "StatsControlArr duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            StatsControlArrDupInfo->File, StatsControlArrDupInfo->Line, StatsControlArrDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "StatsControlArr duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            StatsControlArrDupInfo->Line, StatsControlArrDupInfo->RefCount);
                    }
                }
            }

            if (StatsControlArr == nullptr)
            {
                if (result && StatsControlArrCount > 0)
                {
                    StatsControlArr = PARAMETER_NEW HDRProcessingTypeGrid[StatsControlArrCount];
                    (void)pointerEntry->SetDupObject(StatsControlArr, StatsControlArrCount, file, line);
                }
                if (!result || StatsControlArr == nullptr)
                {
                    if (StatsControlArrCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate StatsControlArr\n");
                    }
                    StatsControlArrCount = 0;
                }
                for (UINT32 i = 0; result && i < StatsControlArrCount; i++)
                {
                    result = StatsControlArr[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (StatsControlArr == nullptr)
        {
            StatsControlArrCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTriggerConditionEntriesType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixTriggerConditionEntriesType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(minConfidence);
    PARAMETER_INITIALIZE(minDefocus);
    PARAMETER_INITIALIZE(maxDefocus);
    PARAMETER_INITIALIZE(maxGyro);
    PARAMETER_INITIALIZE(minDist);
    PARAMETER_INITIALIZE(maxDist);
    PARAMETER_INITIALIZE(minAmb);
    PARAMETER_INITIALIZE(maxAmb);
    PARAMETER_INITIALIZE(minExp);
    PARAMETER_INITIALIZE(maxExp);
    PARAMETER_INITIALIZE(minDrcGain);
    PARAMETER_INITIALIZE(maxDrcGain);
    PARAMETER_INITIALIZE(minStableCount);
    PARAMETER_INITIALIZE(maxEscapeCount);
    PARAMETER_INITIALIZE(MFDOFScene);
    PARAMETER_INITIALIZE(sceneFlag);

    SYMBOL_TABLE_ENTRY_READ(entry, result, minConfidence, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minDefocus, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxDefocus, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxGyro, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minDist, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxDist, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minAmb, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxAmb, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minExp, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxExp, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minDrcGain, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxDrcGain, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minStableCount, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxEscapeCount, alignment)
    if (result)
    {
        result = chromatixTriggerConditionEntriesType::ReadEnum_MFDOFSceneEnum(entry, MFDOFScene, alignment);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, sceneFlag, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixDualFaceFocus
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixDualFaceFocus::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(enableControlExtension);
    PARAMETER_INITIALIZE(rearToFrontFocusWeight);
    PARAMETER_INITIALIZE(overlapPrevRoiIouRatio);
    PARAMETER_INITIALIZE(convergeConditions);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, enableControlExtension, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, rearToFrontFocusWeight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, overlapPrevRoiIouRatio, alignment)
    if (result)
    {
        result = convergeConditions.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTriggerConditionListType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixTriggerConditionListType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(triggerConditionEntries);


    // Reading Array triggerConditionEntries from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        triggerConditionEntriesCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, triggerConditionEntriesCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            triggerConditionEntriesID = pointerEntry->ID;
            DupObjInfo* triggerConditionEntriesDupInfo = pointerEntry->GetDupObject(triggerConditionEntriesCount, file, line);
            if (triggerConditionEntriesDupInfo != nullptr && triggerConditionEntriesDupInfo->Object != nullptr)
            {
                triggerConditionEntries = (chromatixTriggerConditionEntriesType*)triggerConditionEntriesDupInfo->Object;
                if (triggerConditionEntries == nullptr)
                {
                    if (triggerConditionEntriesDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "triggerConditionEntries duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            triggerConditionEntriesDupInfo->File, triggerConditionEntriesDupInfo->Line, triggerConditionEntriesDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "triggerConditionEntries duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            triggerConditionEntriesDupInfo->Line, triggerConditionEntriesDupInfo->RefCount);
                    }
                }
            }

            if (triggerConditionEntries == nullptr)
            {
                if (result && triggerConditionEntriesCount > 0)
                {
                    triggerConditionEntries = PARAMETER_NEW chromatixTriggerConditionEntriesType[triggerConditionEntriesCount];
                    (void)pointerEntry->SetDupObject(triggerConditionEntries, triggerConditionEntriesCount, file, line);
                }
                if (!result || triggerConditionEntries == nullptr)
                {
                    if (triggerConditionEntriesCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate triggerConditionEntries\n");
                    }
                    triggerConditionEntriesCount = 0;
                }
                for (UINT32 i = 0; result && i < triggerConditionEntriesCount; i++)
                {
                    result = triggerConditionEntries[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (triggerConditionEntries == nullptr)
        {
            triggerConditionEntriesCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixCoordinateEntriesType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixCoordinateEntriesType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(x);
    PARAMETER_INITIALIZE(y);

    SYMBOL_TABLE_ENTRY_READ(entry, result, x, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, y, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixCoordinateListType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixCoordinateListType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(coordinateEntries);


    // Reading Array coordinateEntries from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        coordinateEntriesCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, coordinateEntriesCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            coordinateEntriesID = pointerEntry->ID;
            DupObjInfo* coordinateEntriesDupInfo = pointerEntry->GetDupObject(coordinateEntriesCount, file, line);
            if (coordinateEntriesDupInfo != nullptr && coordinateEntriesDupInfo->Object != nullptr)
            {
                coordinateEntries = (chromatixCoordinateEntriesType*)coordinateEntriesDupInfo->Object;
                if (coordinateEntries == nullptr)
                {
                    if (coordinateEntriesDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "coordinateEntries duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            coordinateEntriesDupInfo->File, coordinateEntriesDupInfo->Line, coordinateEntriesDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "coordinateEntries duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            coordinateEntriesDupInfo->Line, coordinateEntriesDupInfo->RefCount);
                    }
                }
            }

            if (coordinateEntries == nullptr)
            {
                if (result && coordinateEntriesCount > 0)
                {
                    coordinateEntries = PARAMETER_NEW chromatixCoordinateEntriesType[coordinateEntriesCount];
                    (void)pointerEntry->SetDupObject(coordinateEntries, coordinateEntriesCount, file, line);
                }
                if (!result || coordinateEntries == nullptr)
                {
                    if (coordinateEntriesCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate coordinateEntries\n");
                    }
                    coordinateEntriesCount = 0;
                }
                for (UINT32 i = 0; result && i < coordinateEntriesCount; i++)
                {
                    result = coordinateEntries[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (coordinateEntries == nullptr)
        {
            coordinateEntriesCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixMFDOF
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixMFDOF::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(touchMaxDistanceFromCenter);
    PARAMETER_INITIALIZE(minTiltedDefocus);
    PARAMETER_INITIALIZE(cornerStatsMerger);
    PARAMETER_INITIALIZE(force2Output);
    PARAMETER_INITIALIZE(multiDepthAbort);
    PARAMETER_INITIALIZE(focusDoneThreshold);
    PARAMETER_INITIALIZE(convergeDoneFilterThreshold);
    PARAMETER_INITIALIZE(coordinateList);
    PARAMETER_INITIALIZE(triggerConditionList);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, touchMaxDistanceFromCenter, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minTiltedDefocus, alignment)
    if (result)
    {
        result = chromatixMFDOF::ReadEnum_cornerStatsMergerEnum(entry, cornerStatsMerger, alignment);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, force2Output, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, multiDepthAbort, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, focusDoneThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, convergeDoneFilterThreshold, alignment)
    if (result)
    {
        result = coordinateList.Load(entry, alignment);
    }
    if (result)
    {
        result = triggerConditionList.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load FocusMapConfidenceEntryType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool FocusMapConfidenceEntryType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(triggerPoint);
    PARAMETER_INITIALIZE(confidenceThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, triggerPoint, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, confidenceThreshold, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load FocusMapDefocusEntryType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool FocusMapDefocusEntryType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(triggerPoint);
    PARAMETER_INITIALIZE(defocusThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, triggerPoint, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, defocusThreshold, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFFocusMapControlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFocusMapControlType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(enableDepthSensorFocusmap);
    PARAMETER_INITIALIZE(enableDistanceMap);
    PARAMETER_INITIALIZE(resolution);
    PARAMETER_INITIALIZE(defocusTable);
    PARAMETER_INITIALIZE(confidenceTable);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, enableDepthSensorFocusmap, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, enableDistanceMap, alignment)
    if (result)
    {
        result = resolution.Load(entry, alignment);
    }
    if (result)
    {
        result = defocusTable.Load(entry, alignment);
    }
    if (result)
    {
        result = confidenceTable.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFFocusMapControlType_resolutionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFocusMapControlType::resolutionStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(width);
    PARAMETER_INITIALIZE(height);

    SYMBOL_TABLE_ENTRY_READ(entry, result, width, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, height, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFFocusMapControlType_defocusTableStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFocusMapControlType::defocusTableStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(triggerMode);
    PARAMETER_INITIALIZE(triggerEntries);

    result = chromatixAFFocusMapControlType::defocusTableStruct::ReadEnum_triggerModeEnum(entry, triggerMode, alignment);

    // Reading Array triggerEntries from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        triggerEntriesCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, triggerEntriesCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            triggerEntriesID = pointerEntry->ID;
            DupObjInfo* triggerEntriesDupInfo = pointerEntry->GetDupObject(triggerEntriesCount, file, line);
            if (triggerEntriesDupInfo != nullptr && triggerEntriesDupInfo->Object != nullptr)
            {
                triggerEntries = (FocusMapDefocusEntryType*)triggerEntriesDupInfo->Object;
                if (triggerEntries == nullptr)
                {
                    if (triggerEntriesDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "triggerEntries duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            triggerEntriesDupInfo->File, triggerEntriesDupInfo->Line, triggerEntriesDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "triggerEntries duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            triggerEntriesDupInfo->Line, triggerEntriesDupInfo->RefCount);
                    }
                }
            }

            if (triggerEntries == nullptr)
            {
                if (result && triggerEntriesCount > 0)
                {
                    triggerEntries = PARAMETER_NEW FocusMapDefocusEntryType[triggerEntriesCount];
                    (void)pointerEntry->SetDupObject(triggerEntries, triggerEntriesCount, file, line);
                }
                if (!result || triggerEntries == nullptr)
                {
                    if (triggerEntriesCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate triggerEntries\n");
                    }
                    triggerEntriesCount = 0;
                }
                for (UINT32 i = 0; result && i < triggerEntriesCount; i++)
                {
                    result = triggerEntries[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (triggerEntries == nullptr)
        {
            triggerEntriesCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFFocusMapControlType_confidenceTableStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFocusMapControlType::confidenceTableStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(triggerMode);
    PARAMETER_INITIALIZE(triggerEntries);

    result = chromatixAFFocusMapControlType::confidenceTableStruct::ReadEnum_triggerModeEnum(entry, triggerMode, alignment);

    // Reading Array triggerEntries from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        triggerEntriesCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, triggerEntriesCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            triggerEntriesID = pointerEntry->ID;
            DupObjInfo* triggerEntriesDupInfo = pointerEntry->GetDupObject(triggerEntriesCount, file, line);
            if (triggerEntriesDupInfo != nullptr && triggerEntriesDupInfo->Object != nullptr)
            {
                triggerEntries = (FocusMapConfidenceEntryType*)triggerEntriesDupInfo->Object;
                if (triggerEntries == nullptr)
                {
                    if (triggerEntriesDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "triggerEntries duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            triggerEntriesDupInfo->File, triggerEntriesDupInfo->Line, triggerEntriesDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "triggerEntries duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            triggerEntriesDupInfo->Line, triggerEntriesDupInfo->RefCount);
                    }
                }
            }

            if (triggerEntries == nullptr)
            {
                if (result && triggerEntriesCount > 0)
                {
                    triggerEntries = PARAMETER_NEW FocusMapConfidenceEntryType[triggerEntriesCount];
                    (void)pointerEntry->SetDupObject(triggerEntries, triggerEntriesCount, file, line);
                }
                if (!result || triggerEntries == nullptr)
                {
                    if (triggerEntriesCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate triggerEntries\n");
                    }
                    triggerEntriesCount = 0;
                }
                for (UINT32 i = 0; result && i < triggerEntriesCount; i++)
                {
                    result = triggerEntries[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (triggerEntries == nullptr)
        {
            triggerEntriesCount = 0;
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAdaptiveLensMap
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAdaptiveLensMap::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(convergeStats);
    PARAMETER_INITIALIZE(settledStats);
    PARAMETER_INITIALIZE(sampleCollection);
    PARAMETER_INITIALIZE(prediction);
    PARAMETER_INITIALIZE(temperatureCompensation);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    if (result)
    {
        result = convergeStats.Load(entry, alignment);
    }
    if (result)
    {
        result = settledStats.Load(entry, alignment);
    }
    if (result)
    {
        result = sampleCollection.Load(entry, alignment);
    }
    if (result)
    {
        result = prediction.Load(entry, alignment);
    }
    if (result)
    {
        result = temperatureCompensation.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAdaptiveLensMap_convergeStatsStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAdaptiveLensMap::convergeStatsStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(minConvergeFrame);
    PARAMETER_INITIALIZE(maxConvergeFrame);
    PARAMETER_INITIALIZE(minPDConfidence);
    PARAMETER_INITIALIZE(maxGyroSQR);
    PARAMETER_INITIALIZE(MaxTOFDistanceVariation);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minConvergeFrame, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxConvergeFrame, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minPDConfidence, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxGyroSQR, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, MaxTOFDistanceVariation, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAdaptiveLensMap_settledStatsStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAdaptiveLensMap::settledStatsStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(frameRequired);
    PARAMETER_INITIALIZE(minPDConfidence);
    PARAMETER_INITIALIZE(maxPDDefocus);
    PARAMETER_INITIALIZE(maxGyroSQR);
    PARAMETER_INITIALIZE(maxSADValue);
    PARAMETER_INITIALIZE(MaxTOFDistanceVariation);

    SYMBOL_TABLE_ENTRY_READ(entry, result, frameRequired, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minPDConfidence, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxPDDefocus, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxGyroSQR, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxSADValue, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, MaxTOFDistanceVariation, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAdaptiveLensMap_sampleCollectionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAdaptiveLensMap::sampleCollectionStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(minDistance);
    PARAMETER_INITIALIZE(maxDistance);
    PARAMETER_INITIALIZE(ROIDistanceEnable);
    PARAMETER_INITIALIZE(maxLensBiasFromOTPEstimation);
    PARAMETER_INITIALIZE(maxSampleCount);

    SYMBOL_TABLE_ENTRY_READ(entry, result, minDistance, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxDistance, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, ROIDistanceEnable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxLensBiasFromOTPEstimation, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxSampleCount, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAdaptiveLensMap_predictionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAdaptiveLensMap::predictionStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(minSampleRequired);
    PARAMETER_INITIALIZE(minRangeRequired);
    PARAMETER_INITIALIZE(enableOutlierRemoval);
    PARAMETER_INITIALIZE(outlierRemovalRatio);

    SYMBOL_TABLE_ENTRY_READ(entry, result, minSampleRequired, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minRangeRequired, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, enableOutlierRemoval, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, outlierRemovalRatio, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAdaptiveLensMap_temperatureCompensationStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAdaptiveLensMap::temperatureCompensationStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(minTemp);
    PARAMETER_INITIALIZE(maxTemp);
    PARAMETER_INITIALIZE(diffusionRatio1);
    PARAMETER_INITIALIZE(diffusionRatio2);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minTemp, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxTemp, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, diffusionRatio1, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, diffusionRatio2, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFDistancemapControlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFDistancemapControlType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(useOTPData);
    PARAMETER_INITIALIZE(adaptiveLensMap);

    SYMBOL_TABLE_ENTRY_READ(entry, result, useOTPData, alignment)
    if (result)
    {
        result = adaptiveLensMap.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixSagCompensation
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixSagCompensation::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(fDAC);
    PARAMETER_INITIALIZE(fDistance);
    PARAMETER_INITIALIZE(triggerThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)

    // Reading Array fDAC from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        fDACCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, fDACCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            fDACID = pointerEntry->ID;
            DupObjInfo* fDACDupInfo = pointerEntry->GetDupObject(fDACCount, file, line);
            if (fDACDupInfo != nullptr && fDACDupInfo->Object != nullptr)
            {
                fDAC = (UINT32*)fDACDupInfo->Object;
                if (fDAC == nullptr)
                {
                    if (fDACDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "fDAC duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            fDACDupInfo->File, fDACDupInfo->Line, fDACDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "fDAC duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            fDACDupInfo->Line, fDACDupInfo->RefCount);
                    }
                }
            }

            if (fDAC == nullptr)
            {
                if (result && fDACCount > 0)
                {
                    fDAC = pointerEntry->ReadArray<UINT32>(fDACCount, alignment);
                    result = fDAC != nullptr;
                }
                if (!result || fDAC == nullptr)
                {
                    if (fDACCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate fDAC\n");
                    }
                    fDACCount = 0;
                }
            }
        }
        if (fDAC == nullptr)
        {
            fDACCount = 0;
        }
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, fDistance, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, triggerThreshold, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixModuleTuningReserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixModuleTuningReserveType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(lensSagCompensation);
    PARAMETER_INITIALIZE(enableHysteresisOffset);

    result = lensSagCompensation.Load(entry, alignment);
    SYMBOL_TABLE_ENTRY_READ(entry, result, enableHysteresisOffset, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFOutdoorConfigurationReserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFOutdoorConfigurationReserveType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(EnableOutdoorROITune);
    PARAMETER_INITIALIZE(OutdoorROIRatioX);
    PARAMETER_INITIALIZE(OutdoorROIRatioY);

    SYMBOL_TABLE_ENTRY_READ(entry, result, EnableOutdoorROITune, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, OutdoorROIRatioX, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, OutdoorROIRatioY, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFOrientationDetectionReserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFOrientationDetectionReserveType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(gravityXLandscapeThreshold);
    PARAMETER_INITIALIZE(gravityYLandscapeThreshold);
    PARAMETER_INITIALIZE(gravityXPortraitThreshold);
    PARAMETER_INITIALIZE(gravityYPortraitThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, gravityXLandscapeThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gravityYLandscapeThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gravityXPortraitThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gravityYPortraitThreshold, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFFaceDetectionROITuningReserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFaceDetectionROITuningReserveType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(FDROITune);
    PARAMETER_INITIALIZE(FDROIRatio);

    SYMBOL_TABLE_ENTRY_READ(entry, result, FDROITune, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, FDROIRatio, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFFaceROIExtensionReserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFaceROIExtensionReserveType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(ROIFaceExtensionEnable);
    PARAMETER_INITIALIZE(ROIFaceScaleX);
    PARAMETER_INITIALIZE(ROIFaceScaleY);
    PARAMETER_INITIALIZE(ROIFaceSymmetricX);
    PARAMETER_INITIALIZE(ROIFaceSymmetricY);

    SYMBOL_TABLE_ENTRY_READ(entry, result, ROIFaceExtensionEnable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, ROIFaceScaleX, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, ROIFaceScaleY, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, ROIFaceSymmetricX, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, ROIFaceSymmetricY, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixFaceDetectionTuningType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixFaceDetectionTuningType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(faceROIExtension);
    PARAMETER_INITIALIZE(faceDetectionROITuning);
    PARAMETER_INITIALIZE(faceHVWeight);
    PARAMETER_INITIALIZE(faceFarEnd);
    PARAMETER_INITIALIZE(faceROITypeSelection);

    result = faceROIExtension.Load(entry, alignment);
    if (result)
    {
        result = faceDetectionROITuning.Load(entry, alignment);
    }
    if (result)
    {
        result = faceHVWeight.Load(entry, alignment);
    }
    if (result)
    {
        result = faceFarEnd.Load(entry, alignment);
    }
    if (result)
    {
        result = afalgotuningelements::ReadEnum_chromatixAFFaceROITypeSelection(entry, faceROITypeSelection, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixFaceDetectionTuningType_faceHVWeightStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixFaceDetectionTuningType::faceHVWeightStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(hWeight);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, hWeight, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixFaceDetectionTuningType_faceFarEndStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixFaceDetectionTuningType::faceFarEndStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(farEnd);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, farEnd, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixFocusModeSearchLimitType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixFocusModeSearchLimitType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(nearEnd);
    PARAMETER_INITIALIZE(farEnd);
    PARAMETER_INITIALIZE(defaultPosition);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, nearEnd, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, farEnd, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, defaultPosition, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixFOVCorrection
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixFOVCorrection::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(fudgeFactor);
    PARAMETER_INITIALIZE(anchorLensPosition1);
    PARAMETER_INITIALIZE(anchorLensPosition2);
    PARAMETER_INITIALIZE(anchorDistanceMM1);
    PARAMETER_INITIALIZE(anchorDistanceMM2);
    PARAMETER_INITIALIZE(focusConvergeStepSizeBrightLight);
    PARAMETER_INITIALIZE(fineSearchStepSizeBrightLight);
    PARAMETER_INITIALIZE(focusConvergeStepSizeLowLight);
    PARAMETER_INITIALIZE(fineSearchStepSizeLowLight);
    PARAMETER_INITIALIZE(iFOVCenable);
    PARAMETER_INITIALIZE(short_exp_time);
    PARAMETER_INITIALIZE(short_ts_offset);
    PARAMETER_INITIALIZE(short_duration);
    PARAMETER_INITIALIZE(long_exp_time);
    PARAMETER_INITIALIZE(long_ts_offset);
    PARAMETER_INITIALIZE(long_duration);
    PARAMETER_INITIALIZE(is_clamp);
    PARAMETER_INITIALIZE(enable_framebased);
    PARAMETER_INITIALIZE(generalROI_only);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, fudgeFactor, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, anchorLensPosition1, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, anchorLensPosition2, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, anchorDistanceMM1, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, anchorDistanceMM2, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, focusConvergeStepSizeBrightLight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, fineSearchStepSizeBrightLight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, focusConvergeStepSizeLowLight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, fineSearchStepSizeLowLight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, iFOVCenable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, short_exp_time, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, short_ts_offset, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, short_duration, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, long_exp_time, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, long_ts_offset, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, long_duration, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, is_clamp, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, enable_framebased, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, generalROI_only, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFCommonType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFCommonType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(positionNearEnd);
    PARAMETER_INITIALIZE(positionFarEnd);
    PARAMETER_INITIALIZE(positionNormalHyperfocal);
    PARAMETER_INITIALIZE(lowLightGainThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, positionNearEnd, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionFarEnd, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionNormalHyperfocal, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, lowLightGainThreshold, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFAlgoTuningType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(commonElements);
    PARAMETER_INITIALIZE(FOVCorrection);
    PARAMETER_INITIALIZE(searchLimit);
    PARAMETER_INITIALIZE(faceDetection);
    PARAMETER_INITIALIZE(statsROIProcess);
    PARAMETER_INITIALIZE(orientationDetection);
    PARAMETER_INITIALIZE(outdoorROIConfiguration);
    PARAMETER_INITIALIZE(moduleTuning);
    PARAMETER_INITIALIZE(handJitter);
    PARAMETER_INITIALIZE(spotlightDetection);
    PARAMETER_INITIALIZE(distanceMapControl);
    PARAMETER_INITIALIZE(focusMapControl);
    PARAMETER_INITIALIZE(motionControl);
    PARAMETER_INITIALIZE(MultiFrameDepthOfField);
    PARAMETER_INITIALIZE(DualFaceFocus);
    PARAMETER_INITIALIZE(HDRControl);
    PARAMETER_INITIALIZE(TouchAssistControl);
    PARAMETER_INITIALIZE(AFROILowLumaAlert);
    PARAMETER_INITIALIZE(eyeTrackingCtrl);
    PARAMETER_INITIALIZE(multiROIConfigCtrl);
    PARAMETER_INITIALIZE(minROISizeCtrl);
    PARAMETER_INITIALIZE(AFRackFocus);
    PARAMETER_INITIALIZE(touchROIScalingFactor);

    result = module_version.Load(entry, alignment);
    if (result)
    {
        result = parameter_version.Load(entry, alignment);
    }
    if (result)
    {
        result = commonElements.Load(entry, alignment);
    }
    if (result)
    {
        result = FOVCorrection.Load(entry, alignment);
    }

    // Reading Array searchLimit from symbol table
    // Do not check result value here because the count value needs to be initialized in this block
    {
        searchLimitCount = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, searchLimitCount, alignment)
        constexpr const CHAR* const file {__FILE__};
        constexpr INT32 line {LINE_CONST};
        ParameterFileSymbolTableEntry  pointerEntryCls;
        ParameterFileSymbolTableEntry* const pointerEntry = &pointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(pointerEntryCls, entry, alignment);
        }

        if (result)
        {
            searchLimitID = pointerEntry->ID;
            DupObjInfo* searchLimitDupInfo = pointerEntry->GetDupObject(searchLimitCount, file, line);
            if (searchLimitDupInfo != nullptr && searchLimitDupInfo->Object != nullptr)
            {
                searchLimit = (chromatixFocusModeSearchLimitType*)searchLimitDupInfo->Object;
                if (searchLimit == nullptr)
                {
                    if (searchLimitDupInfo->File != nullptr)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "searchLimit duplicate found but object is nullptr: %s:%d, RefCount: %d\n",
                            searchLimitDupInfo->File, searchLimitDupInfo->Line, searchLimitDupInfo->RefCount);
                    }
                    else
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "searchLimit duplicate found but Object is nullptr: <nullptr file ptr>:%d, RefCount: %d\n",
                            searchLimitDupInfo->Line, searchLimitDupInfo->RefCount);
                    }
                }
            }

            if (searchLimit == nullptr)
            {
                if (result && searchLimitCount > 0)
                {
                    searchLimit = PARAMETER_NEW chromatixFocusModeSearchLimitType[searchLimitCount];
                    (void)pointerEntry->SetDupObject(searchLimit, searchLimitCount, file, line);
                }
                if (!result || searchLimit == nullptr)
                {
                    if (searchLimitCount > 0)
                    {
                        PARAMETER_LOG_ERROR(entry->SetManager, "Failed to allocate searchLimit\n");
                    }
                    searchLimitCount = 0;
                }
                for (UINT32 i = 0; result && i < searchLimitCount; i++)
                {
                    result = searchLimit[i].Load(pointerEntry, alignment);
                }
            }
        }
        if (searchLimit == nullptr)
        {
            searchLimitCount = 0;
        }
    }
    if (result)
    {
        result = faceDetection.Load(entry, alignment);
    }
    if (result)
    {
        result = statsROIProcess.Load(entry, alignment);
    }
    if (result)
    {
        result = orientationDetection.Load(entry, alignment);
    }
    if (result)
    {
        result = outdoorROIConfiguration.Load(entry, alignment);
    }
    if (result)
    {
        result = moduleTuning.Load(entry, alignment);
    }
    if (result)
    {
        result = handJitter.Load(entry, alignment);
    }
    if (result)
    {
        result = spotlightDetection.Load(entry, alignment);
    }
    if (result)
    {
        result = distanceMapControl.Load(entry, alignment);
    }
    if (result)
    {
        result = focusMapControl.Load(entry, alignment);
    }
    if (result)
    {
        result = motionControl.Load(entry, alignment);
    }
    if (result)
    {
        result = MultiFrameDepthOfField.Load(entry, alignment);
    }
    if (result)
    {
        result = DualFaceFocus.Load(entry, alignment);
    }
    if (result)
    {
        result = HDRControl.Load(entry, alignment);
    }
    if (result)
    {
        result = TouchAssistControl.Load(entry, alignment);
    }
    if (result)
    {
        result = AFROILowLumaAlert.Load(entry, alignment);
    }
    if (result)
    {
        result = eyeTrackingCtrl.Load(entry, alignment);
    }
    if (result)
    {
        result = multiROIConfigCtrl.Load(entry, alignment);
    }
    if (result)
    {
        result = minROISizeCtrl.Load(entry, alignment);
    }
    if (result)
    {
        result = AFRackFocus.Load(entry, alignment);
    }
    if (result)
    {
        result = touchROIScalingFactor.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::module_versionStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(major_revision);
    PARAMETER_INITIALIZE(minor_revision);
    PARAMETER_INITIALIZE(incr_revision);

    SYMBOL_TABLE_ENTRY_READ(entry, result, major_revision, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minor_revision, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, incr_revision, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::parameter_versionStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(revision);


    // Reading String revision from symbol table
    {
        UINT32 count = 0;
        SYMBOL_TABLE_ENTRY_READ(entry, result, count, alignment)
        ParameterFileSymbolTableEntry stringPointerEntryCls;
        ParameterFileSymbolTableEntry* const stringPointerEntry = &stringPointerEntryCls;
        if (result)
        {
            result = entry->Table->ReadPointerEntry(stringPointerEntryCls, entry, alignment);
        }
        SYMBOL_TABLE_ENTRY_READ_STRING(stringPointerEntry, result, revision, count, alignment)
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load statsROIProcessStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::statsROIProcessStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(ROIProcessEnable);
    PARAMETER_INITIALIZE(statsROIPriority);
    PARAMETER_INITIALIZE(trackROIPriority);
    PARAMETER_INITIALIZE(saliencyROIEnable);
    PARAMETER_INITIALIZE(saliencyROIPriority);
    PARAMETER_INITIALIZE(touchMWROI);

    SYMBOL_TABLE_ENTRY_READ(entry, result, ROIProcessEnable, alignment)
    if (result)
    {
        result = statsROIPriority.Load(entry, alignment);
    }
    if (result)
    {
        result = trackROIPriority.Load(entry, alignment);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, saliencyROIEnable, alignment)
    if (result)
    {
        result = saliencyROIPriority.Load(entry, alignment);
    }
    if (result)
    {
        result = touchMWROI.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load handJitterStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::handJitterStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(AFSingle);
    PARAMETER_INITIALIZE(HAFFineSearch);
    PARAMETER_INITIALIZE(samplingRate);
    PARAMETER_INITIALIZE(reportingRate);

    result = AFSingle.Load(entry, alignment);
    if (result)
    {
        result = HAFFineSearch.Load(entry, alignment);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, samplingRate, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, reportingRate, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load handJitterStruct_AFSingleStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(maxFVInBeginning);
    PARAMETER_INITIALIZE(coarseSearch);
    PARAMETER_INITIALIZE(fineSearch);
    PARAMETER_INITIALIZE(redoRateThreshold);
    PARAMETER_INITIALIZE(handleNeedCount);
    PARAMETER_INITIALIZE(resetDataBeforeFineSearch);
    PARAMETER_INITIALIZE(workingExposureIndex);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, maxFVInBeginning, alignment)
    if (result)
    {
        result = coarseSearch.Load(entry, alignment);
    }
    if (result)
    {
        result = fineSearch.Load(entry, alignment);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, redoRateThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, handleNeedCount, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, resetDataBeforeFineSearch, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, workingExposureIndex, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load handJitterStruct_AFSingleStruct_coarseSearchStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::coarseSearchStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(minSampleSize);
    PARAMETER_INITIALIZE(currentGyroscopeThreshold);
    PARAMETER_INITIALIZE(currentGyroscopeSTDThreshold);
    PARAMETER_INITIALIZE(gyroscopeThresholdForDifferenceRatio);
    PARAMETER_INITIALIZE(gyroscodeDifferenceRatioThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, minSampleSize, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, currentGyroscopeThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, currentGyroscopeSTDThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gyroscopeThresholdForDifferenceRatio, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gyroscodeDifferenceRatioThreshold, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load handJitterStruct_AFSingleStruct_fineSearchStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::fineSearchStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(minSampleSize);
    PARAMETER_INITIALIZE(currentGyroscopeThreshold);
    PARAMETER_INITIALIZE(currentGyroscopeSTDThreshold);
    PARAMETER_INITIALIZE(gyroscopeThresholdForDifferenceRatio);
    PARAMETER_INITIALIZE(gyroscodeDifferenceRatioThreshold);
    PARAMETER_INITIALIZE(FVNormalized);

    SYMBOL_TABLE_ENTRY_READ(entry, result, minSampleSize, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, currentGyroscopeThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, currentGyroscopeSTDThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gyroscopeThresholdForDifferenceRatio, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gyroscodeDifferenceRatioThreshold, alignment)
    if (result)
    {
        result = FVNormalized.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load handJitterStruct_AFSingleStruct_fineSearchStruct_FVNormalizedStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::handJitterStruct::AFSingleStruct::fineSearchStruct::FVNormalizedStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(highGyroscopeDifferenceThreshold);
    PARAMETER_INITIALIZE(lowGyroscopeDifferenceThreshold);
    PARAMETER_INITIALIZE(highGryoscopeFVWeight);
    PARAMETER_INITIALIZE(weightType);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, highGyroscopeDifferenceThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, lowGyroscopeDifferenceThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, highGryoscopeFVWeight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, weightType, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load handJitterStruct_HAFFineSearchStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(fineSearch);
    PARAMETER_INITIALIZE(handleNeedCount);
    PARAMETER_INITIALIZE(workingExposureIndex);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    if (result)
    {
        result = fineSearch.Load(entry, alignment);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, handleNeedCount, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, workingExposureIndex, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load handJitterStruct_HAFFineSearchStruct_fineSearchStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::fineSearchStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(minSampleSize);
    PARAMETER_INITIALIZE(currentGyroscopeThreshold);
    PARAMETER_INITIALIZE(currentGyroscopeSTDThreshold);
    PARAMETER_INITIALIZE(gyroscopeThresholdForDifferenceRatio);
    PARAMETER_INITIALIZE(gyroscodeDifferenceRatioThreshold);
    PARAMETER_INITIALIZE(FVNormalized);

    SYMBOL_TABLE_ENTRY_READ(entry, result, minSampleSize, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, currentGyroscopeThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, currentGyroscopeSTDThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gyroscopeThresholdForDifferenceRatio, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, gyroscodeDifferenceRatioThreshold, alignment)
    if (result)
    {
        result = FVNormalized.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load handJitterStruct_HAFFineSearchStruct_fineSearchStruct_FVNormalizedStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::handJitterStruct::HAFFineSearchStruct::fineSearchStruct::FVNormalizedStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(highGyroscopeDifferenceThreshold);
    PARAMETER_INITIALIZE(lowGyroscopeDifferenceThreshold);
    PARAMETER_INITIALIZE(highGryoscopeFVWeight);
    PARAMETER_INITIALIZE(weightType);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, highGyroscopeDifferenceThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, lowGyroscopeDifferenceThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, highGryoscopeFVWeight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, weightType, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load spotlightDetectionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::spotlightDetectionStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(statsType);
    PARAMETER_INITIALIZE(bgStatsThreshAutoConvertEnable);
    PARAMETER_INITIALIZE(bgStatsBrightRegionSatRatioThresh);
    PARAMETER_INITIALIZE(far_flat_th);
    PARAMETER_INITIALIZE(marco_flat_th);
    PARAMETER_INITIALIZE(inc_flat_th);
    PARAMETER_INITIALIZE(dec_flat_th);
    PARAMETER_INITIALIZE(spotlight_zone_start_h);
    PARAMETER_INITIALIZE(spotlight_zone_end_h);
    PARAMETER_INITIALIZE(spotlight_zone_start_v);
    PARAMETER_INITIALIZE(spotlight_zone_end_v);
    PARAMETER_INITIALIZE(background_zone_start_h);
    PARAMETER_INITIALIZE(background_zone_end_h);
    PARAMETER_INITIALIZE(background_zone_start_v);
    PARAMETER_INITIALIZE(background_zone_end_v);
    PARAMETER_INITIALIZE(exposure_index_trigger_th);
    PARAMETER_INITIALIZE(background_luma_avg_th);
    PARAMETER_INITIALIZE(region_low_grey_th);
    PARAMETER_INITIALIZE(region_low_dark_th);
    PARAMETER_INITIALIZE(background_low_grey_pct_th);
    PARAMETER_INITIALIZE(background_dark_grey_pct_th);
    PARAMETER_INITIALIZE(bright_region_luma_delta_background_zone);
    PARAMETER_INITIALIZE(bright_region_luma_delta_spotlight_zone_low_grey);
    PARAMETER_INITIALIZE(bright_region_luma_delta_spotlight_zone_dark_grey);
    PARAMETER_INITIALIZE(square_cluster_inc_size);
    PARAMETER_INITIALIZE(vertical_cluster_inc_size);
    PARAMETER_INITIALIZE(horizontal_cluster_inc_size);
    PARAMETER_INITIALIZE(square_cluster_pct_th);
    PARAMETER_INITIALIZE(vertical_cluster_pct_th);
    PARAMETER_INITIALIZE(horizontal_cluster_pct_th);
    PARAMETER_INITIALIZE(spotlight_detect_cnt_th);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, statsType, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, bgStatsThreshAutoConvertEnable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, bgStatsBrightRegionSatRatioThresh, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, far_flat_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, marco_flat_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, inc_flat_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, dec_flat_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, spotlight_zone_start_h, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, spotlight_zone_end_h, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, spotlight_zone_start_v, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, spotlight_zone_end_v, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, background_zone_start_h, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, background_zone_end_h, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, background_zone_start_v, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, background_zone_end_v, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, exposure_index_trigger_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, background_luma_avg_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, region_low_grey_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, region_low_dark_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, background_low_grey_pct_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, background_dark_grey_pct_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, bright_region_luma_delta_background_zone, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, bright_region_luma_delta_spotlight_zone_low_grey, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, bright_region_luma_delta_spotlight_zone_dark_grey, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, square_cluster_inc_size, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, vertical_cluster_inc_size, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, horizontal_cluster_inc_size, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, square_cluster_pct_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, vertical_cluster_pct_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, horizontal_cluster_pct_th, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, spotlight_detect_cnt_th, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load motionControlStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::motionControlStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(motionDetection);
    PARAMETER_INITIALIZE(HAFFineSearch);

    result = motionDetection.Load(entry, alignment);
    if (result)
    {
        result = HAFFineSearch.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load motionControlStruct_motionDetectionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::motionControlStruct::motionDetectionStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(statsType);
    PARAMETER_INITIALIZE(detection_alpha);
    PARAMETER_INITIALIZE(detection_level);
    PARAMETER_INITIALIZE(flow_scale);
    PARAMETER_INITIALIZE(motion_level_min_thres);
    PARAMETER_INITIALIZE(motion_level_max_thres);
    PARAMETER_INITIALIZE(motion_replace_sad);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, statsType, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, detection_alpha, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, detection_level, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, flow_scale, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, motion_level_min_thres, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, motion_level_max_thres, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, motion_replace_sad, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load motionControlStruct_HAFFineSearchStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::motionControlStruct::HAFFineSearchStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(currentMotionLevelThreshold);
    PARAMETER_INITIALIZE(minSampleSize);
    PARAMETER_INITIALIZE(FVNormalized);
    PARAMETER_INITIALIZE(handleNeedCount);
    PARAMETER_INITIALIZE(workingExposureIndex);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, currentMotionLevelThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, minSampleSize, alignment)
    if (result)
    {
        result = FVNormalized.Load(entry, alignment);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, handleNeedCount, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, workingExposureIndex, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load motionControlStruct_HAFFineSearchStruct_FVNormalizedStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningType::motionControlStruct::HAFFineSearchStruct::FVNormalizedStruct::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(enable);
    PARAMETER_INITIALIZE(highMotionDifferenceThreshold);
    PARAMETER_INITIALIZE(lowMotionDifferenceThreshold);
    PARAMETER_INITIALIZE(highMotionFVWeight);
    PARAMETER_INITIALIZE(weightType);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, highMotionDifferenceThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, lowMotionDifferenceThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, highMotionFVWeight, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, weightType, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFMinROISizeControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFMinROISizeControl::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(roiTypeBasedOverrideConfigArr))
    {
        PARAMETER_DELETE[] roiTypeBasedOverrideConfigArr;
    }
    roiTypeBasedOverrideConfigArr = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFROISizeBasedGridConfig
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFROISizeBasedGridConfig::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(sizeGridConfigList))
    {
        PARAMETER_DELETE[] sizeGridConfigList;
    }
    sizeGridConfigList = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixROIScaleFactorList
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixROIScaleFactorList::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(scaleFactors))
    {
        PARAMETER_DELETE[] scaleFactors;
    }
    scaleFactors = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFMultiROIScaleAndGridConfig
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFMultiROIScaleAndGridConfig::Unload(ParameterFileSymbolTable* const __table)
{
    scaleFactorList.Unload(__table);
    sizeBasedMWConfig.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFMultiROIExtension
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFMultiROIExtension::Unload(ParameterFileSymbolTable* const __table)
{
    multiROITouch.Unload(__table);
    multiROITrack.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFMultiROIConfigControl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFMultiROIConfigControl::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(roiTypeSelectionArr))
    {
        PARAMETER_DELETE[] roiTypeSelectionArr;
    }
    roiTypeSelectionArr = nullptr;
    multiROIExtension.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload HDRProcessingTypeGrid
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HDRProcessingTypeGrid::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(entries))
    {
        PARAMETER_DELETE[] entries;
    }
    entries = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload HDRProcessingTypeGlobal
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void HDRProcessingTypeGlobal::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(entries))
    {
        PARAMETER_DELETE[] entries;
    }
    entries = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFHDRControlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFHDRControlType::Unload(ParameterFileSymbolTable* const __table)
{
    bias.Unload(__table);
    statsTypeGlobal.Unload(__table);
    statsTypeGrid.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFHDRControlType_biasStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFHDRControlType::biasStruct::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(entries))
    {
        PARAMETER_DELETE[] entries;
    }
    entries = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFHDRControlType_statsTypeGlobalStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFHDRControlType::statsTypeGlobalStruct::Unload(ParameterFileSymbolTable* const __table)
{
    for (UINT32 i = 0; i < StatsControlArrCount; i++)
    {
        StatsControlArr[i].Unload(__table);
    }
    if (__table != nullptr && __table->ReleaseDupObject(StatsControlArr))
    {
        PARAMETER_DELETE[] StatsControlArr;
    }
    StatsControlArr = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFHDRControlType_statsTypeGridStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFHDRControlType::statsTypeGridStruct::Unload(ParameterFileSymbolTable* const __table)
{
    for (UINT32 i = 0; i < StatsControlArrCount; i++)
    {
        StatsControlArr[i].Unload(__table);
    }
    if (__table != nullptr && __table->ReleaseDupObject(StatsControlArr))
    {
        PARAMETER_DELETE[] StatsControlArr;
    }
    StatsControlArr = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixTriggerConditionListType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTriggerConditionListType::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(triggerConditionEntries))
    {
        PARAMETER_DELETE[] triggerConditionEntries;
    }
    triggerConditionEntries = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixCoordinateListType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixCoordinateListType::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(coordinateEntries))
    {
        PARAMETER_DELETE[] coordinateEntries;
    }
    coordinateEntries = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixMFDOF
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixMFDOF::Unload(ParameterFileSymbolTable* const __table)
{
    coordinateList.Unload(__table);
    triggerConditionList.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFFocusMapControlType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFFocusMapControlType::Unload(ParameterFileSymbolTable* const __table)
{
    defocusTable.Unload(__table);
    confidenceTable.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFFocusMapControlType_defocusTableStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFFocusMapControlType::defocusTableStruct::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(triggerEntries))
    {
        PARAMETER_DELETE[] triggerEntries;
    }
    triggerEntries = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFFocusMapControlType_confidenceTableStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFFocusMapControlType::confidenceTableStruct::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(triggerEntries))
    {
        PARAMETER_DELETE[] triggerEntries;
    }
    triggerEntries = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixSagCompensation
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixSagCompensation::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(fDAC))
    {
        PARAMETER_DELETE[] fDAC;
    }
    fDAC = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixModuleTuningReserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixModuleTuningReserveType::Unload(ParameterFileSymbolTable* const __table)
{
    lensSagCompensation.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFAlgoTuningType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFAlgoTuningType::Unload(ParameterFileSymbolTable* const __table)
{
    parameter_version.Unload(__table);
    if (__table != nullptr && __table->ReleaseDupObject(searchLimit))
    {
        PARAMETER_DELETE[] searchLimit;
    }
    searchLimit = nullptr;
    statsROIProcess.Unload(__table);
    moduleTuning.Unload(__table);
    focusMapControl.Unload(__table);
    MultiFrameDepthOfField.Unload(__table);
    HDRControl.Unload(__table);
    multiROIConfigCtrl.Unload(__table);
    minROISizeCtrl.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFAlgoTuningType::parameter_versionStruct::Unload(ParameterFileSymbolTable* const __table)
{
    if (__table != nullptr && __table->ReleaseDupObject(revision))
    {
        PARAMETER_DELETE[] revision;
    }
    revision = nullptr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload statsROIProcessStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFAlgoTuningType::statsROIProcessStruct::Unload(ParameterFileSymbolTable* const __table)
{
    statsROIPriority.Unload(__table);
    trackROIPriority.Unload(__table);
    saliencyROIPriority.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Release the ParameterModule object
/// Requires that this object was created via a ParameterSetManager::GetModule call
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFAlgoTuningType::Release()
{
    ((chromatixAFAlgoTuningTypeClass*)this)->Release();
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Returns the ParameterModule::Modified value
/// The Modified value is incremented when the module's data or pointer values change
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
UINT32 chromatixAFAlgoTuningType::GetModified()
{
    return ((chromatixAFAlgoTuningTypeClass*)this)->Modified;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Create module, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixAFAlgoTuningTypeClass::Create(
    ModuleData*    moduleData,
    DefaultModule* const defModule) const
{
    chromatixAFAlgoTuningTypeClass* cls = nullptr;

    if (PARAMETER_STRCMP(Type, moduleData->Type) == 0 && Version.Value == moduleData->Version.Value)
    {
        const UINT32 id = moduleData->DuplicateID > 0 ? moduleData->DuplicateID : moduleData->ID;

        ParameterModule* const module = defModule->Find(id);
        if (module != nullptr)
        {
            cls = (chromatixAFAlgoTuningTypeClass*)module;
        }
        else
        {
            cls = PARAMETER_NEW chromatixAFAlgoTuningTypeClass(GetName(moduleData->Type), moduleData);
            cls->SymbolTableID = id;
            defModule->AddModule((ParameterModule*)cls);
        }
    }
    else if (Version.Value != moduleData->Version.Value)
    {
        PARAMETER_LOG_ERROR(moduleData->SetManager, "Unable to create chromatixAFAlgoTuningTypeClass, binary version (%lld) does not match source version (%lld)\n",
            moduleData->Version.Value, Version.Value);
    }
    else
    {
        PARAMETER_LOG_ERROR(moduleData->SetManager, "Unable to create chromatixAFAlgoTuningTypeClass, binary name (%s) does not match source name (%s)\n",
            moduleData->Type, Type);
    }

    return (ParameterModule*)cls;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module data, return true is successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFAlgoTuningTypeClass::LoadModule(
    ParameterFileSymbolTable* const table)
{
    bool result = true;

    if (!Loaded)
    {
        BYTE const alignment = table->Alignment;
        chromatixAFAlgoTuningTypeClass* const cls = this;

        ParameterFileSymbolTableEntry  entryObj;
        ParameterFileSymbolTableEntry* const entry = &entryObj;
        // With EzTune enabled, the unused upper byte of SymbolTableID value can change, so clear it
        result = table->Find(entryObj, SymbolTableID & 0x00ffffff);

        if (!result)
        {
            PARAMETER_LOG_ERROR(entry->SetManager, "chromatixAFAlgoTuningTypeClass::LoadModule Failed to find module ID (%d) in Symbol Table\n", SymbolTableID);
        }

        if (result)
        {
            result = cls->Load(entry, alignment);
        }
        Modified++;
        Loaded = true;
    }

    if (!result)
    {
        /// Module failed to fully load, unload it
        UnloadModule();
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload module data
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFAlgoTuningTypeClass::UnloadModule()
{
    if (Loaded)
    {
        if (Data != nullptr && Data->SymbolTable != nullptr)
        {
            Unload(Data->SymbolTable);
        }
        else
        {
            PARAMETER_LOG_ERROR(Data != nullptr ? Data->SetManager : nullptr, "UnloadModule %s called with nullptr "
                "Data->SymbolTable object\n", Name);
            Unload(nullptr);
        }
        Loaded = false;
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// /// Release the ParameterModule object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFAlgoTuningTypeClass::Release()
{
    ParameterModule::Release();
}

AFALGOTUNINGELEMENTS_NAMESPACE_END
