////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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 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, "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, "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));
    }

    // 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, "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, "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));
    }

    // 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, "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, "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));
    }

    // 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;
    }
    else if (PARAMETER_STRCMP(__name, "chromatixHysteresisOffset") == 0)
    {
        ParameterUtils::DoubleToString((double)chromatixHysteresisOffset, __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; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "chromatixHysteresisOffset") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            chromatixHysteresisOffset = (INT32)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));
    }

    // chromatixHysteresisOffset
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("chromatixHysteresisOffset", ParameterParserDataType::Int32, (double)chromatixHysteresisOffset, 0));
    }
    else if (PARAMETER_STRCMP(__name, "chromatixHysteresisOffset") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)chromatixHysteresisOffset, 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 chromatixAFFaceDetectionReserveType::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, "robustFaceDetectEnable") == 0)
    {
        ParameterUtils::DoubleToString((double)robustFaceDetectEnable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "nofaceCountThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)nofaceCountThreshold, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "stableCountThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)stableCountThreshold, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "faceDetectionROIPositionChangeThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)faceDetectionROIPositionChangeThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "faceLostTriggerEnable") == 0)
    {
        ParameterUtils::DoubleToString((double)faceLostTriggerEnable, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "faceLostStableThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)faceLostStableThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixAFFaceDetectionReserveType::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, "robustFaceDetectEnable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            robustFaceDetectEnable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "nofaceCountThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            nofaceCountThreshold = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "stableCountThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            stableCountThreshold = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceDetectionROIPositionChangeThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceDetectionROIPositionChangeThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceLostTriggerEnable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceLostTriggerEnable = (globalelements::enable_flag_type)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "faceLostStableThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            faceLostStableThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixAFFaceDetectionReserveType::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);

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

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

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

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

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

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

    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 chromatixFDPriorityCAF::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, "positionChangeThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)positionChangeThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "positionStableThresholdHigh") == 0)
    {
        ParameterUtils::DoubleToString((double)positionStableThresholdHigh, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "positionStableThresholdLow") == 0)
    {
        ParameterUtils::DoubleToString((double)positionStableThresholdLow, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "sizeChangeThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)sizeChangeThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "oldNewSizeDifferenceThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)oldNewSizeDifferenceThreshold, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "stableCountSize") == 0)
    {
        ParameterUtils::DoubleToString((double)stableCountSize, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "stableCountPosition") == 0)
    {
        ParameterUtils::DoubleToString((double)stableCountPosition, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "noFaceWaitThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)noFaceWaitThreshold, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "fpsAdjustmentThreshold") == 0)
    {
        ParameterUtils::DoubleToString((double)fpsAdjustmentThreshold, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool chromatixFDPriorityCAF::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, "positionChangeThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionChangeThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "positionStableThresholdHigh") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionStableThresholdHigh = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "positionStableThresholdLow") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionStableThresholdLow = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "sizeChangeThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            sizeChangeThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "oldNewSizeDifferenceThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            oldNewSizeDifferenceThreshold = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "stableCountSize") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            stableCountSize = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "stableCountPosition") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            stableCountPosition = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "noFaceWaitThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            noFaceWaitThreshold = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "fpsAdjustmentThreshold") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            fpsAdjustmentThreshold = (INT32)dblValue; 
        }
    }

    return __result;
}

bool chromatixFDPriorityCAF::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);

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

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

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

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

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

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

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

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

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

    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, "faceDetectionPriority") == 0)
    {
        __result = faceDetectionPriority.GetValue(&__path[__pos], __value, __size);
    }
    else 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, "faceDetection") == 0)
    {
        __result = faceDetection.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);
    }

    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, "faceDetectionPriority") == 0)
    {
        __result = faceDetectionPriority.SetValue(&__path[__pos], __value);
    }
    else 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, "faceDetection") == 0)
    {
        __result = faceDetection.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);
    }

    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);

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

    // 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);
    }

    // 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);
    }

    // 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);
    }

    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;
    }

    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; 
        }
    }

    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));
    }

    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, "positionDefaultInMacro") == 0)
    {
        ParameterUtils::DoubleToString((double)positionDefaultInMacro, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "positionBoundary") == 0)
    {
        ParameterUtils::DoubleToString((double)positionBoundary, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "positionDefaultInNormal") == 0)
    {
        ParameterUtils::DoubleToString((double)positionDefaultInNormal, __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, "positionMacroRegion") == 0)
    {
        ParameterUtils::DoubleToString((double)positionMacroRegion, __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, "positionDefaultInMacro") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionDefaultInMacro = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "positionBoundary") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionBoundary = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "positionDefaultInNormal") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionDefaultInNormal = (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, "positionMacroRegion") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            positionMacroRegion = (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));
    }

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

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

    // positionDefaultInNormal
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("positionDefaultInNormal", ParameterParserDataType::Int32, (double)positionDefaultInNormal, 0));
    }
    else if (PARAMETER_STRCMP(__name, "positionDefaultInNormal") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)positionDefaultInNormal, 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));
    }

    // positionMacroRegion
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("positionMacroRegion", ParameterParserDataType::Int32, (double)positionMacroRegion, 0));
    }
    else if (PARAMETER_STRCMP(__name, "positionMacroRegion") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)positionMacroRegion, 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, "setInvalidFrame") == 0)
    {
        ParameterUtils::DoubleToString((double)setInvalidFrame, __value, __size, 0);
        __result = true;
    }
    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);
    }

    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, "setInvalidFrame") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            setInvalidFrame = (globalelements::enable_flag_type)dblValue; 
        }
    }
    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);
    }

    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);
    }

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

    // 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);
    }

    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);
    }

    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);
    }

    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);
    }

    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;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @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_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(setInvalidFrame);
    PARAMETER_INITIALIZE(handJitter);
    PARAMETER_INITIALIZE(spotlightDetection);
    PARAMETER_INITIALIZE(distanceMapControl);
    PARAMETER_INITIALIZE(focusMapControl);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// 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(setInvalidFrame);
    PARAMETER_INITIALIZE(handJitter);
    PARAMETER_INITIALIZE(spotlightDetection);
    PARAMETER_INITIALIZE(distanceMapControl);
    PARAMETER_INITIALIZE(focusMapControl);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// 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 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(resolution);
    PARAMETER_INITIALIZE(defocusTable);
    PARAMETER_INITIALIZE(confidenceTable);

    SYMBOL_TABLE_ENTRY_READ(entry, result, enable, 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(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, 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(enableOutlierRemoval);
    PARAMETER_INITIALIZE(outlierRemovalRatio);

    SYMBOL_TABLE_ENTRY_READ(entry, result, minSampleRequired, 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);
    PARAMETER_INITIALIZE(chromatixHysteresisOffset);

    result = lensSagCompensation.Load(entry, alignment);
    SYMBOL_TABLE_ENTRY_READ(entry, result, enableHysteresisOffset, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, chromatixHysteresisOffset, 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 chromatixAFFaceDetectionReserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFFaceDetectionReserveType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(robustFaceDetectEnable);
    PARAMETER_INITIALIZE(nofaceCountThreshold);
    PARAMETER_INITIALIZE(stableCountThreshold);
    PARAMETER_INITIALIZE(faceDetectionROIPositionChangeThreshold);
    PARAMETER_INITIALIZE(faceLostTriggerEnable);
    PARAMETER_INITIALIZE(faceLostStableThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, robustFaceDetectEnable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, nofaceCountThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, stableCountThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, faceDetectionROIPositionChangeThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, faceLostTriggerEnable, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, faceLostStableThreshold, 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 chromatixFDPriorityCAF
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixFDPriorityCAF::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(positionChangeThreshold);
    PARAMETER_INITIALIZE(positionStableThresholdHigh);
    PARAMETER_INITIALIZE(positionStableThresholdLow);
    PARAMETER_INITIALIZE(sizeChangeThreshold);
    PARAMETER_INITIALIZE(oldNewSizeDifferenceThreshold);
    PARAMETER_INITIALIZE(stableCountSize);
    PARAMETER_INITIALIZE(stableCountPosition);
    PARAMETER_INITIALIZE(noFaceWaitThreshold);
    PARAMETER_INITIALIZE(fpsAdjustmentThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, positionChangeThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionStableThresholdHigh, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionStableThresholdLow, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, sizeChangeThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, oldNewSizeDifferenceThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, stableCountSize, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, stableCountPosition, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, noFaceWaitThreshold, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, fpsAdjustmentThreshold, alignment)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixFaceDetectionTuningType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixFaceDetectionTuningType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(faceDetectionPriority);
    PARAMETER_INITIALIZE(faceROIExtension);
    PARAMETER_INITIALIZE(faceDetectionROITuning);
    PARAMETER_INITIALIZE(faceDetection);
    PARAMETER_INITIALIZE(faceHVWeight);
    PARAMETER_INITIALIZE(faceFarEnd);

    result = faceDetectionPriority.Load(entry, alignment);
    if (result)
    {
        result = faceROIExtension.Load(entry, alignment);
    }
    if (result)
    {
        result = faceDetectionROITuning.Load(entry, alignment);
    }
    if (result)
    {
        result = faceDetection.Load(entry, alignment);
    }
    if (result)
    {
        result = faceHVWeight.Load(entry, alignment);
    }
    if (result)
    {
        result = faceFarEnd.Load(entry, 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);

    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)

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFCommonType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool chromatixAFCommonType::Load(
    ParameterFileSymbolTableEntry* const entry,
    BYTE const alignment)
{
    bool result = true;

    PARAMETER_INITIALIZE(positionNearEnd);
    PARAMETER_INITIALIZE(positionDefaultInMacro);
    PARAMETER_INITIALIZE(positionBoundary);
    PARAMETER_INITIALIZE(positionDefaultInNormal);
    PARAMETER_INITIALIZE(positionFarEnd);
    PARAMETER_INITIALIZE(positionNormalHyperfocal);
    PARAMETER_INITIALIZE(positionMacroRegion);
    PARAMETER_INITIALIZE(lowLightGainThreshold);

    SYMBOL_TABLE_ENTRY_READ(entry, result, positionNearEnd, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionDefaultInMacro, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionBoundary, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionDefaultInNormal, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionFarEnd, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionNormalHyperfocal, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, positionMacroRegion, 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(setInvalidFrame);
    PARAMETER_INITIALIZE(handJitter);
    PARAMETER_INITIALIZE(spotlightDetection);
    PARAMETER_INITIALIZE(distanceMapControl);
    PARAMETER_INITIALIZE(focusMapControl);

    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);
    }
    SYMBOL_TABLE_ENTRY_READ(entry, result, setInvalidFrame, 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);
    }

    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);

    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);
    }

    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;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// 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);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// 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
