////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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  camxbitmlconfig.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "camxbitmlconfig.h"
#include "parametersetmanager.h"

CAMXBITMLCONFIG_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// SetValue/GetValue Functions
/// Gets or sets the requested value
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BITMLConfigTypeClass::BITMLConfigTypeClass(
    const CHAR* const name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, nullptr)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(DLFL);
    PARAMETER_INITIALIZE(DLFD);
    PARAMETER_INITIALIZE(QSN_video);
    PARAMETER_INITIALIZE(QSN_snapshot);
    PARAMETER_INITIALIZE(MLAWB);
    PARAMETER_INITIALIZE(SaliNet);
    PARAMETER_INITIALIZE(MLPD);
    PARAMETER_INITIALIZE(DLT2T);
    PARAMETER_INITIALIZE(QLL);
    PARAMETER_INITIALIZE(PDNet);
    PARAMETER_INITIALIZE(QSNVideoSemantic);
    PARAMETER_INITIALIZE(QSNSnapshotPP);
    PARAMETER_INITIALIZE(QSNVideoPP);
    PARAMETER_INITIALIZE(QSNVideoSemanticPP);
    PARAMETER_INITIALIZE(AIDEV2);
    PARAMETER_INITIALIZE(ARTNetV);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BITMLConfigTypeClass::BITMLConfigTypeClass(
    const CHAR* const name,
    ModuleData* const moduleData)
    : ParameterModule(name, MAJOR, MINOR, PATCH, moduleData)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(DLFL);
    PARAMETER_INITIALIZE(DLFD);
    PARAMETER_INITIALIZE(QSN_video);
    PARAMETER_INITIALIZE(QSN_snapshot);
    PARAMETER_INITIALIZE(MLAWB);
    PARAMETER_INITIALIZE(SaliNet);
    PARAMETER_INITIALIZE(MLPD);
    PARAMETER_INITIALIZE(DLT2T);
    PARAMETER_INITIALIZE(QLL);
    PARAMETER_INITIALIZE(PDNet);
    PARAMETER_INITIALIZE(QSNVideoSemantic);
    PARAMETER_INITIALIZE(QSNSnapshotPP);
    PARAMETER_INITIALIZE(QSNVideoPP);
    PARAMETER_INITIALIZE(QSNVideoSemanticPP);
    PARAMETER_INITIALIZE(AIDEV2);
    PARAMETER_INITIALIZE(ARTNetV);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BITMLConfigTypeClass::~BITMLConfigTypeClass()
{
    if (Loaded)
    {
        UnloadModule();
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* BITMLConfigTypeClass::GetName(
    const CHAR* const type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ModuleData::GetType(temp, "BITMLConfig")) == 0)
    {
        name = "BITMLConfig";
    }
    return name;
}

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

    PARAMETER_INITIALIZE(Q6Corner);
    PARAMETER_INITIALIZE(HMXCorner);

    SYMBOL_TABLE_ENTRY_READ(entry, result, Q6Corner, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, HMXCorner, alignment)

    return result;
}

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

    PARAMETER_INITIALIZE(priority);
    PARAMETER_INITIALIZE(dutyCycleMode);
    PARAMETER_INITIALIZE(powerCorners);

    SYMBOL_TABLE_ENTRY_READ(entry, result, priority, alignment)
    SYMBOL_TABLE_ENTRY_READ(entry, result, dutyCycleMode, alignment)
    if (result)
    {
        result = powerCorners.Load(entry, alignment);
    }

    return result;
}

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

    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(DLFL);
    PARAMETER_INITIALIZE(DLFD);
    PARAMETER_INITIALIZE(QSN_video);
    PARAMETER_INITIALIZE(QSN_snapshot);
    PARAMETER_INITIALIZE(MLAWB);
    PARAMETER_INITIALIZE(SaliNet);
    PARAMETER_INITIALIZE(MLPD);
    PARAMETER_INITIALIZE(DLT2T);
    PARAMETER_INITIALIZE(QLL);
    PARAMETER_INITIALIZE(PDNet);
    PARAMETER_INITIALIZE(QSNVideoSemantic);
    PARAMETER_INITIALIZE(QSNSnapshotPP);
    PARAMETER_INITIALIZE(QSNVideoPP);
    PARAMETER_INITIALIZE(QSNVideoSemanticPP);
    PARAMETER_INITIALIZE(AIDEV2);
    PARAMETER_INITIALIZE(ARTNetV);

    result = module_version.Load(entry, alignment);
    if (result)
    {
        result = DLFL.Load(entry, alignment);
    }
    if (result)
    {
        result = DLFD.Load(entry, alignment);
    }
    if (result)
    {
        result = QSN_video.Load(entry, alignment);
    }
    if (result)
    {
        result = QSN_snapshot.Load(entry, alignment);
    }
    if (result)
    {
        result = MLAWB.Load(entry, alignment);
    }
    if (result)
    {
        result = SaliNet.Load(entry, alignment);
    }
    if (result)
    {
        result = MLPD.Load(entry, alignment);
    }
    if (result)
    {
        result = DLT2T.Load(entry, alignment);
    }
    if (result)
    {
        result = QLL.Load(entry, alignment);
    }
    if (result)
    {
        result = PDNet.Load(entry, alignment);
    }
    if (result)
    {
        result = QSNVideoSemantic.Load(entry, alignment);
    }
    if (result)
    {
        result = QSNSnapshotPP.Load(entry, alignment);
    }
    if (result)
    {
        result = QSNVideoPP.Load(entry, alignment);
    }
    if (result)
    {
        result = QSNVideoSemanticPP.Load(entry, alignment);
    }
    if (result)
    {
        result = AIDEV2.Load(entry, alignment);
    }
    if (result)
    {
        result = ARTNetV.Load(entry, alignment);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool BITMLConfigType::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;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Release the ParameterModule object
/// Requires that this object was created via a ParameterSetManager::GetModule call
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void BITMLConfigType::Release()
{
    ((BITMLConfigTypeClass*)this)->Release();
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Returns the ParameterModule::Modified value
/// The Modified value is incremented when the module's data or pointer values change
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
UINT32 BITMLConfigType::GetModified()
{
    return ((BITMLConfigTypeClass*)this)->Modified;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Create module, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* BITMLConfigTypeClass::Create(
    ModuleData*    moduleData,
    DefaultModule* const defModule) const
{
    BITMLConfigTypeClass* 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 = (BITMLConfigTypeClass*)module;
        }
        else
        {
            cls = PARAMETER_NEW BITMLConfigTypeClass(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 BITMLConfigTypeClass, binary version (%lld) does not match source version (%lld)\n",
            moduleData->Version.Value, Version.Value);
    }
    else
    {
        PARAMETER_LOG_ERROR(moduleData->SetManager, "Unable to create BITMLConfigTypeClass, binary name (%s) does not match source name (%s)\n",
            moduleData->Type, Type);
    }

    return (ParameterModule*)cls;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module data, return true is successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool BITMLConfigTypeClass::LoadModule(
    ParameterFileSymbolTable* const table)
{
    bool result = true;

    if (!Loaded)
    {
        BYTE const alignment = table->Alignment;
        BITMLConfigTypeClass* const cls = this;

        ParameterFileSymbolTableEntry  entryObj;
        ParameterFileSymbolTableEntry* const entry = &entryObj;
        result = table->Find(entryObj, SymbolTableID);

        if (!result)
        {
            PARAMETER_LOG_ERROR(entry->SetManager, "BITMLConfigTypeClass::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 BITMLConfigTypeClass::UnloadModule()
{
    if (Loaded)
    {
        Loaded = false;
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// /// Release the ParameterModule object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void BITMLConfigTypeClass::Release()
{
    ParameterModule::Release();
}

CAMXBITMLCONFIG_NAMESPACE_END
