%if EXISTS("_CACHEGLOBALPARAMS_") == 0
%assign _CACHEGLOBALPARAMS_ = 1
%function GenStringVarListForListOfValues(values)
%assign varList = "/"/""
%if !ISEMPTY(values)
%assign comma = ","
%assign varList = "/""
%foreach idx = SIZE(values,1)
%assign varList = varList + values[idx] + comma
%endforeach
%assign varList[SIZE(varList,1)-1] = "/""
%endif
%return varList
%endfunction
%function GenAndCacheGlobalParamsInMatFile() void
%with ::CompiledModel
%assign rootIdx = NumSystems-1
%assign sysIdx = NumSystems-2
%if IsModelReferenceTarget()
%assign thisSystem = System[sysIdx]
%else
%assign thisSystem = System[rootIdx]
%endif
%assign interface = thisSystem.Interface
%with interface
%createrecord blkInterface { Name "%<Name>"}
%if InlineParameters == 1
%addtorecord blkInterface InlineParameters TLC_TRUE
%else
%addtorecord blkInterface InlineParameters TLC_FALSE
%endif
%addtorecord blkInterface IgnoreCustomStorageClasses %<IgnoreCustomStorageClasses>
%assign values = ::CompiledModel.ModelParameters.GlobalParamsList
%assign varList = GenStringVarListForListOfValues(values)
%assign tunVars = ::CompiledModel.ModelParameters.CollapsedTunableParameters
%assign tunVarList = GenStringVarListForListOfValues(tunVars)
%if ISFIELD(::CompiledModel.CustomStorageClasses, "CSCReg")
%assign cscPackages = FIELDNAMES(::CompiledModel.CustomStorageClasses.CSCReg)
%assign cscPackageList = GenStringVarListForListOfValues(cscPackages)
%else
%assign cscPackageList = "/"/""
%endif
%with ModelParameters
%createrecord globalParamInfo { /
VarList %<varList> /
CollapsedTunableList %<tunVarList> /
CSCPackageList %<cscPackageList> /
}
%endwith
%addtorecord blkInterface GlobalParamInfo %<globalParamInfo>
%if ISFIELD(::CompiledModel.ModelParameters, "ProtectedModelInterfaceVariables")
%assign values = ::CompiledModel.ModelParameters.ProtectedModelInterfaceVariables
%assign varList = GenStringVarListForListOfValues(values)
%addtorecord blkInterface ProtectedModelInterfaceVariables %<varList>
%endif
%endwith
%endwith
%<CacheDataInMatInfoFile(Name, "addGlobalsInfo", blkInterface)>
%endfunction
%function CacheDataInMatInfoFile(mdlref, type, interface) void
%if IsModelReferenceTarget()
%assign targetType = IsModelReferenceSimTarget() ? "SIM" : "RTW"
%else
%assign targetType = "NONE"
%endif
%assign rtwinfomat = FEVAL("coder.internal.infoMATFileMgr", ...
type, "binfo", "%<mdlref>", "%<targetType>", interface)
%endfunction
%endif