%implements IntrusiveAccessor "C"
%include "logging_sup.tlc"
%function BlockInstanceSetup(block, system) void
%<LibBlockSetIsExpressionCompliant(block)>
%endfunction
%function CreateDimsArray(nDims, dims, prefix, idx) Output
%assign dimsArrayName = prefix + "%<idx>"
%<CreateDims(nDims, dims, dimsArrayName)>
%return dimsArrayName
%endfunction
%function CreateOffsets(parentDatatypeId, numChildren) Output
%assign offsets = "uint_T offsets[%<numChildren>] = {"
%foreach childNo = numChildren
%assign offVal = LibDataTypeElementOffset(parentDatatypeId, childNo)
%assign offsets = offsets + "%<offVal>"
%if childNo != numChildren-1
%assign offsets = offsets + ", "
%endif
%endforeach
%assign offsets = offsets + "};"
%<offsets>
%endfunction
%function CreateDims(nDims, dims, dimsArrayName) Output
%if nDims == 1
uint_T %<dimsArrayName>[1] = {%};
%else
%assign dimsInit = "uint_T %<dimsArrayName>[%<nDims>] = {"
%foreach dimsIdx = nDims
%assign dimsInit = dimsInit + "%"
%if dimsIdx != nDims-1
%assign dimsInit = dimsInit + ", "
%endif
%endforeach
%assign dimsInit = dimsInit + "};"
%<dimsInit>
%endif
%endfunction
%function Start(block, system) Output
%assign pworkAddress = LibBlockPWork(SignalProbe, "", "", 0)
%assign dTypeId = LibBlockInputSignalDataTypeId(0)
%assign isNvBus = LibDataTypeIsBus(dTypeId)
%assign hierInfoIdx = ParamSettings.HierInfoIndex[0]
%if hierInfoIdx == -1
%<StartSlioSignalDef(block, system, pworkAddress)>
%elseif isNvBus
%<StartSlioNVBusSignalDef(block, system, pworkAddress)>
%else
%<StartSlioVirtualBusSignalDef(block, system, pworkAddress)>
%endif
%endfunction
%function StartSlioNonVirtualBus(block, system, treeVector) Output
{
%assign dTypeId = LibBlockInputSignalDataTypeId(0)
%if block.ParamSettings.BusDatatypeIdSpecifiedAtOutport > 0
%assign dTypeId = block.ParamSettings.BusDatatypeIdSpecifiedAtOutport
%endif
%assign signalName = STRING(ParamSettings.ElementNames[0])
%assign nChildren = LibDataTypeNumElements(dTypeId)
%assign nDims = LibBlockInputSignalNumDimensions(0)
%assign dims = LibBlockInputSignalDimensions(0)
%assign dimsArrayName = "aobDims"
%<CreateDims(nDims, dims, dimsArrayName)>
%assign hierInfoIdx = ParamSettings.HierInfoIndex[0]
%with ::CompiledModel.BlockHierarchyMap
%assign nChildren = SignalHierLoggingInfo[hierInfoIdx].NumChildren
%endwith
%assign root = "root"
%assign isLinearInterp = ParamSettings.LinearInterpolation[0]
%assign interpMethod = ""
%if isLinearInterp
%assign interpolationMethod = "linear"
%else
%assign interpolationMethod = "zoh"
%endif
%assign sampleTime = ParamSettings.SampleTimeLabels[0]
%if IsModelReferenceSimTarget() && !MdlRefDisallowSampleTimeInheritance()
%assign discreteInterval = 0
%else
%assign discreteInterval = ParamSettings.DiscreteInterval[0]
%endif
%assign stopTime = RTMGet("TFinal")
%assign parentSignalName = ...
STRING(ParamSettings.ElementNames[0])
%assign busSize = LibGetDataTypeSLSizeFromId(dTypeId)
{
%<CreateOffsets(dTypeId, nChildren)>
rtwAddTopNVBusNode(...
%<dTypeId>, ...
"%<parentSignalName>", ...
%<nChildren>, ...
%<dimsArrayName>, ...
%<nDims>, ...
%<busSize>, ...
offsets, ...
"%<sampleTime>", ...
%<discreteInterval>, ...
%<stopTime>, ...
treeVector);
}
%<getNVBusNodeLeaves(block, system, dTypeId, ...
hierInfoIdx, interpolationMethod, sampleTime, ...
discreteInterval, stopTime, treeVector)>
}
%endfunction
%function addEnumLeafNode(...
dTypeId, ...
signalLabel, ...
interpolationMethod, ...
dimsArrayName, ...
nDims, ...
datatypeName, ...
units, ...
resolvedDatatypeName, ...
sampleTime, ...
discreteInterval, ...
stopTime, ...
treeVector) Output
%assign nEnums = FcnGetEnumTypeNumEnums(dTypeId)
%assign allEnumValues = Vector(%<nEnums>) [0@%<nEnums>]
%assign allEnumLabels = Vector(%<nEnums>) [""@%<nEnums>]
%foreach enumIdx = nEnums
%assign allEnumValues[enumIdx] = SLibGetEnumTypeValueFromIndex(dTypeId, enumIdx)
%assign allEnumLabels[enumIdx] = SLibGetEnumTypeStringFromIndex(dTypeId, enumIdx)
%endforeach
%<OutputTypedVectorForDatasetVariable(nEnums, allEnumValues, "int_T", "enumValues")>
%<OutputTypedVectorForDatasetVariable(nEnums, allEnumLabels, "char_T*", "enumLabels")>
rtwAddEnumLeafNode(...
%<dTypeId>, ...
"%<signalLabel>", ...
"%<interpolationMethod>", ...
%<dimsArrayName>, ...
%<nDims>, ...
"%<datatypeName>", ...
"%<units>", ...
"%<resolvedDatatypeName>", ...
"%<sampleTime>", ...
%<discreteInterval>, ...
%<stopTime>, ...
(const unsigned int*)enumValues, ...
(const char**)enumLabels, ...
%<nEnums>, ...
%<treeVector>);
%endfunction
%function getNVBusNodeLeaves(...
block, system, parentDatatypeId, ...
parentHierinfoidx, ...
interpolationMethod, sampleTime, discreteInterval, ...
stopTime, treeVector) Output
%assign nChildren = LibDataTypeNumElements(parentDatatypeId)
%foreach childNo = nChildren
%assign childDTypeId = LibDataTypeElementDataTypeId(...
parentDatatypeId, childNo)
%with ::CompiledModel.BlockHierarchyMap
%assign childHierInfoIdx = ...
SignalHierLoggingInfo[parentHierinfoidx].Children[childNo]
%assign childSignalLabel = ...
SignalHierLoggingInfo[childHierInfoIdx].SignalName
%endwith
%assign childNDims = LibDataTypeElementNumDimensions(...
parentDatatypeId, childNo)
%assign childDims = LibDataTypeElementDimensions(...
parentDatatypeId, childNo)
%assign childDimsArrayName = "dims"
%assign isChildNvBus = LibDataTypeIsBus(childDTypeId)
%if isChildNvBus
%assign childNumberOfChildren = ...
LibDataTypeNumElements(childDTypeId)
{
%<CreateDims(childNDims, childDims, childDimsArrayName)>
%<CreateOffsets(childDTypeId, childNumberOfChildren)>
%assign busSize = LibGetDataTypeSLSizeFromId(childDTypeId)
rtwAddNVBusNode(...
%<childDTypeId>, ...
"%<childSignalLabel>", ...
%<childNumberOfChildren>, ...
%<childDimsArrayName>, ...
%<childNDims>, ...
%<busSize>, ...
offsets, ...
%<treeVector>);
}
%<getNVBusNodeLeaves(block, system, childDTypeId, ...
childHierInfoIdx, interpolationMethod, sampleTime, ...
discreteInterval, stopTime, treeVector)>
%else
%assign childComplex = LibDataTypeElementIsComplex(...
parentDatatypeId, childNo)
%assign datatypeName = getDatatypeNameFromId(childDTypeId)
%assign childUnits = LibDataTypeElementASCIIEscapedUnits(parentDatatypeId, childNo)
{
%<CreateDims(childNDims, childDims, childDimsArrayName)>
%if LibIsBuiltInDataType(childDTypeId)
rtwAddLeafNode(...
%<childDTypeId>, ...
"%<childSignalLabel>", ...
"%<interpolationMethod>", ...
%<childComplex>, ...
%<childDimsArrayName>, ...
%<childNDims>, ...
"%<datatypeName>", ...
"%<childUnits>", ...
"%<sampleTime>", ...
%<discreteInterval>, ...
%<stopTime>, ...
%<treeVector>);
%elseif LibIsDataTypeFixpt(childDTypeId)
%assign curDT = FixPt_GetDataTypeFromIndex(childDTypeId)
%assign fxp_isSigned = curDT.IsSigned
%assign fxp_wordLen = curDT.RequiredBits
%assign fxp_slope = curDT.FracSlope
%assign fxp_fixedExp = curDT.FixedExp
%assign fxp_bias = curDT.Bias
rtwAddFixedPointLeafNode(...
%<childDTypeId>, ...
"%<childSignalLabel>", ...
"%<interpolationMethod>", ...
%<childComplex>, ...
%<childDimsArrayName>, ...
%<childNDims>, ...
"%<datatypeName>", ...
"%<childUnits>", ...
%<fxp_isSigned>, ...
%<fxp_wordLen>, ...
%<fxp_slope>, ...
%<fxp_fixedExp>, ...
%<fxp_bias>, ...
"%<sampleTime>", ...
%<discreteInterval>, ...
%<stopTime>, ...
%<treeVector>);
%elseif LibIsEnumDataType(childDTypeId)
%assign storageID = -1
%if LibIsEnumTypeStoredAsInt(childDTypeId)
%assign storageID = 6
%else
%assign storageID = LibGetEnumTypeStorageType(childDTypeId)
%endif
%assign resolvedDatatypeName = SLibGetMLDataTypeFromId(storageID)
%assign nEnums = FcnGetEnumTypeNumEnums(childDTypeId)
%assign allEnumValues = Vector(%<nEnums>) [0@%<nEnums>]
%assign allEnumLabels = Vector(%<nEnums>) [""@%<nEnums>]
%<addEnumLeafNode(...
childDTypeId, ...
childSignalLabel, ...
interpolationMethod, ...
childDimsArrayName, ...
childNDims, ...
datatypeName, ...
childUnits, ...
resolvedDatatypeName, ...
sampleTime, ...
discreteInterval, ...
stopTime, ...
treeVector)>
%else
%assert TLC_FALSE
%endif
}
%endif
%endforeach
rtwPopNVBusNode(%<treeVector>);
%endfunction
%function StartSlioNVBusSignalDef(block, system, pworkAddress) Output
%assign porttype = 1
%assign clientType = ParamSettings.ClientType[0]
%assign portOrder = 0
%assign datasetName = "tmp_raccel_ia_output"
{
%assign nulldef = SLibGetNullDefinitionFromTfl()
%assign treeVector = "treeVector"
void * treeVector = rtwGetTreeVector();
%if 0 < block.NumForEachLevels
uint_T numForEachLevels = %<block.NumForEachLevels>;
%<CreateDims(block.NumForEachLevels,block.ForEachDims,"forEachDims")>
%assign foreachSubDims = "forEachDims, " + STRING(block.NumForEachLevels)
%else
%assign foreachSubDims = nulldef + ", 0"
%endif
%if IsModelReferenceSimTarget()
int_T forEachMdlRefDimsArray[32];
int_T forEachMdlRefDimsArraySize = 0;
if(!slIsRapidAcceleratorSimulating()) {
forEachMdlRefDimsArraySize = slSigLogGetForEachDimsForRefModel(...
%<RTMsGet(system, "MdlRefSfcnS")>, ...
forEachMdlRefDimsArray);
}
%assign foreachTopDims = "forEachMdlRefDimsArraySize ? (const uint_T*)forEachMdlRefDimsArray : " + nulldef + ", forEachMdlRefDimsArraySize"
%else
%assign foreachTopDims = nulldef + ", 0"
%endif
%<StartSlioNonVirtualBus(block, system, treeVector)>
%assign numberOfInputPorts = 1
%assign maxpoints = 0
%assign decimation = 1
%assign propagatedName = STRING(ParamSettings.PropagatedName)
%assign loggedName = STRING(ParamSettings.ElementNames[0])
{
%assign blockPath = STRING(ParamSettings.LogBlockPath)
%if IsModelReferenceTarget()
%assign mapInfo = RTMsGet(system, "DataMapInfo")
char* pathToTopModel = %<mapInfo>.mmi.InstanceMap.fullPath;
%else
char* pathToTopModel = "";
%endif
%assign logPortIdx = ParamSettings.ConnectedPortIdx[0]
const void * signalDescriptor = rtwGetSignalDescriptor (...
treeVector, ...
%<numberOfInputPorts>, ...
%<porttype>,
%<maxpoints>, ...
%<decimation>, ...
"%<loggedName>", ...
"%<propagatedName>", ...
pathToTopModel, ...
"%<blockPath>", ...
%<logPortIdx>, ...
%<portOrder>, ...
rtwGetPointerFromUniquePtr(rt_slioCatalogue()), ...
%<foreachTopDims>, ...
%<foreachSubDims>);
%if IsModelReferenceTarget()
void * loggingInterval = ...
rtliGetLoggingInterval(%<RTMGet("MdlRefSfcnS")>->mdlInfo->rtwLogInfo);
%else
void * loggingInterval = ...
rtliGetLoggingInterval(%<RTMsGet(system, "RootSS")>->mdlInfo->rtwLogInfo);
%endif
void * accessor = %<nulldef>;
accessor = rtwGetAccessor(signalDescriptor, loggingInterval);
rtwAddIntrusiveClient(accessor, signalDescriptor, ...
rtwGetPointerFromUniquePtr(rt_slioCatalogue()),"%<datasetName>", %<clientType>);
%<pworkAddress> = accessor;
}
}
%endfunction
%function StartSlioVirtualBusSignalDef(block, system, pworkAddress) Output
%assign porttype = 1
%assign clientType = ParamSettings.ClientType[0]
%assign datasetName = "tmp_raccel_ia_output"
%assign portOrder = 0
{
%assign nulldef = SLibGetNullDefinitionFromTfl()
%assign treeVector = "treeVector"
%assign dTypeId = block.ParamSettings.BusDatatypeIdSpecifiedAtOutport
void * treeVector = rtwGetTreeVector();
%if 0 < block.NumForEachLevels
uint_T numForEachLevels = %<block.NumForEachLevels>;
%<CreateDims(block.NumForEachLevels,block.ForEachDims,"forEachDims")>
%assign foreachSubDims = "forEachDims, " + STRING(block.NumForEachLevels)
%else
%assign foreachSubDims = nulldef + ", 0"
%endif
%if IsModelReferenceSimTarget()
int_T forEachMdlRefDimsArray[32];
int_T forEachMdlRefDimsArraySize = 0;
if(!slIsRapidAcceleratorSimulating()) {
forEachMdlRefDimsArraySize = slSigLogGetForEachDimsForRefModel(...
%<RTMsGet(system, "MdlRefSfcnS")>, ...
forEachMdlRefDimsArray);
}
%assign foreachTopDims = "forEachMdlRefDimsArraySize ? (const uint_T*)forEachMdlRefDimsArray : " + nulldef + ", forEachMdlRefDimsArraySize"
%else
%assign foreachTopDims = nulldef + ", 0"
%endif
%<StartSlioVirtualBus(block, system, dTypeId, treeVector)>
%assign numberOfInputPorts = block.NumDataInputPorts
%assign maxpoints = 0
%assign decimation = 1
%assign propagatedName = STRING(ParamSettings.PropagatedName)
%assign loggedName = STRING(ParamSettings.ElementNames[0])
{
%assign blockPath = STRING(ParamSettings.LogBlockPath)
%if IsModelReferenceTarget()
%assign mapInfo = RTMsGet(system, "DataMapInfo")
char* pathToTopModel = %<mapInfo>.mmi.InstanceMap.fullPath;
%else
char* pathToTopModel = "";
%endif
%assign logPortIdx = ParamSettings.ConnectedPortIdx[0]
const void * signalDescriptor = rtwGetSignalDescriptor(...
treeVector, ...
%<numberOfInputPorts>, ...
%<porttype>,
%<maxpoints>, ...
%<decimation>, ...
"%<loggedName>", ...
"%<propagatedName>", ...
pathToTopModel, ...
"%<blockPath>", ...
%<logPortIdx>, ...
%<portOrder>, ...
rtwGetPointerFromUniquePtr(rt_slioCatalogue()), ...
%<foreachTopDims>, ...
%<foreachSubDims>);
%if IsModelReferenceTarget()
void * loggingInterval = ...
rtliGetLoggingInterval(%<RTMGet("MdlRefSfcnS")>->mdlInfo->rtwLogInfo);
%else
void * loggingInterval = ...
rtliGetLoggingInterval(%<RTMsGet(system, "RootSS")>->mdlInfo->rtwLogInfo);
%endif
void * accessor = %<nulldef>;
accessor = rtwGetAccessor(signalDescriptor, loggingInterval);
rtwAddIntrusiveClient(accessor, signalDescriptor, ...
rtwGetPointerFromUniquePtr(rt_slioCatalogue()),"%<datasetName>", %<clientType>);
if (rtwIsLoggingToFile(rtwGetPointerFromUniquePtr(rt_slioCatalogue()))){
rtwAddR2Client(accessor, signalDescriptor, ...
rtwGetPointerFromUniquePtr(rt_slioCatalogue()),"%<datasetName>", %<clientType>);
} else {
rtwAddMemoryClient(accessor, signalDescriptor, ...
rtwGetPointerFromUniquePtr(rt_slioCatalogue()),"%<datasetName>", %<clientType>);
}
%<pworkAddress> = accessor;
}
}
%endfunction
%function StartSlioVirtualBus(block, system, parentDatatypeId, treeVector) Output
{
%assign signalName = STRING(ParamSettings.ElementNames[0])
%assign hierInfoIdx = ParamSettings.HierInfoIndex[0]
%with ::CompiledModel.BlockHierarchyMap
%assign nChildren = SignalHierLoggingInfo[hierInfoIdx].NumChildren
%endwith
%assign isLinearInterp = ParamSettings.LinearInterpolation[0]
%assign interpMethod = ""
%if isLinearInterp
%assign interpolationMethod = "linear"
%else
%assign interpolationMethod = "zoh"
%endif
rtwAddTopBusNode(...
"%<signalName>", ...
%<nChildren>, ...
treeVector);
%assign portIdx = 0
%with ::CompiledModel.BlockHierarchyMap
%foreach childNo = nChildren
%assign childHierInfoIdx = SignalHierLoggingInfo[hierInfoIdx].Children[childNo]
%assign portIdx = getBusNodeLeaves(block, system, childHierInfoIdx, ...
portIdx, parentDatatypeId, childNo, treeVector)
%endforeach
%endwith
rtwPopNVBusNode(%<treeVector>);
}
%endfunction
%function getBusNodeLeaves(...
block, system, hierInfoIdx, ...
portIdx, parentDatatypeId, currentChildNo, treeVector) Output
%with ::CompiledModel.BlockHierarchyMap
%assign sigName = SignalHierLoggingInfo[hierInfoIdx].SignalName
%assign nChildren = SignalHierLoggingInfo[hierInfoIdx].NumChildren
%if nChildren > 0
rtwAddBusNode(...
"%<sigName>", ...
%<nChildren>, ...
treeVector);
%if parentDatatypeId != -1
%assign currentDatatypeId = LibDataTypeElementDataTypeId(...
parentDatatypeId, currentChildNo)
%else
%assign currentDatatypeId = -1
%endif
%foreach childNo = nChildren
%assign childHierInfoIdx = SignalHierLoggingInfo[hierInfoIdx].Children[childNo]
%assign portIdx = getBusNodeLeaves(block, system, childHierInfoIdx, ...
portIdx, currentDatatypeId, childNo, treeVector)
%endforeach
rtwPopNVBusNode(%<treeVector>);
%return portIdx
%else
%if parentDatatypeId != -1
%assign units = LibDataTypeElementASCIIEscapedUnits(parentDatatypeId, currentChildNo)
%else
%assign units = LibBlockInputSignalASCIIEscapedUnitExpr(portIdx)
%endif
%<getLeafNode(block, system, portIdx, sigName, units, treeVector)>
%return portIdx + 1
%endif
%endwith
%endfunction
%function getLeafNode(block, system, portIdx, sigName, units, treeVector) Output
{
%assign portDT = LibBlockInputSignalDataTypeId(portIdx)
%assign dtID = LibGetDataTypeIdAliasedThruToFromId(portDT)
%assign complexity = LibBlockInputSignalIsComplex(portIdx)
%assign isLinearInterp = ParamSettings.LinearInterpolation[portIdx]
%assign interpMethod = ""
%if isLinearInterp
%assign interpMethod = "linear"
%else
%assign interpMethod = "zoh"
%endif
%assign nDims = LibBlockInputSignalNumDimensions(portIdx)
%assign dims = LibBlockInputSignalDimensions(portIdx)
%assign sampleTime = ParamSettings.SampleTimeLabels[portIdx]
%if IsModelReferenceSimTarget() && !MdlRefDisallowSampleTimeInheritance()
%assign discreteInterval = 0
%else
%assign discreteInterval = ParamSettings.DiscreteInterval[portIdx]
%endif
%assign stopTime = RTMGet("TFinal")
%<addLeafNode(...
dtID,...
dims, ...
nDims, ...
complexity, ...
interpMethod, ...
sigName, ...
units, ...
sampleTime, ...
discreteInterval, ...
stopTime, ...
treeVector)>
}
%endfunction
%function addLeafNode(...
dtID, dims, nDims, complexity, ...
interpMethod, sigName, sigUnits, ...
sampleTime, discreteInterval, stopTime, treeVector) Output
%assign datatypeName = getDatatypeNameFromId(dtID)
%assign arrayName = "dims"
%<CreateDims(nDims, dims, arrayName)>
%if LibIsBuiltInDataType(dtID)
rtwAddLeafNode(...
%<dtID>, ...
"%<sigName>", ...
"%<interpMethod>", ...
%<complexity>, ...
(unsigned int*)dims, ...
%<nDims>, ...
"%<datatypeName>", ...
"%<sigUnits>", ...
"%<sampleTime>", ...
%<discreteInterval>, ...
%<stopTime>, ...
%<treeVector>);
%elseif LibIsDataTypeFixpt(dtID)
%assign curDT = FixPt_GetDataTypeFromIndex(dtID)
%assign fxp_isSigned = curDT.IsSigned
%assign fxp_wordLen = curDT.RequiredBits
%assign fxp_slope = curDT.FracSlope
%assign fxp_fixedExp = curDT.FixedExp
%assign fxp_bias = curDT.Bias
rtwAddFixedPointLeafNode(...
%<dtID>, ...
"%<sigName>", ...
"%<interpMethod>", ...
%<complexity>, ...
(unsigned int*)dims, ...
%<nDims>, ...
"%<datatypeName>", ...
"%<sigUnits>", ...
%<fxp_isSigned>, ...
%<fxp_wordLen>, ...
%<fxp_slope>, ...
%<fxp_fixedExp>, ...
%<fxp_bias>, ...
"%<sampleTime>", ...
%<discreteInterval>, ...
%<stopTime>, ...
%<treeVector>);
%elseif LibIsEnumDataType(dtID)
%assign storageID = -1
%if LibIsEnumTypeStoredAsInt(dtID)
%assign storageID = 6
%else
%assign storageID = LibGetEnumTypeStorageType(dtID)
%endif
%assign resolvedDatatypeName = SLibGetMLDataTypeFromId(storageID)
%<addEnumLeafNode(...
dtID, ...
sigName, ...
interpMethod, ...
"(unsigned int*)dims", ...
nDims, ...
datatypeName, ...
sigUnits, ...
resolvedDatatypeName, ...
sampleTime, ...
discreteInterval, ...
stopTime, ...
treeVector)>
%else
%assign warnTxt = "User-defined data types not supported for logging to mat-file."
%<LibBlockReportWarning(block, warnTxt)>
%endif
%endfunction
%function StartSlioSignalDef(block, system, pworkAddress) Output
%assign porttype = 2
%assign clientType = ParamSettings.ClientType[0]
%assign datasetName = "tmp_raccel_ia_output"
%assign portOrder = -1
{
%assign elementName = STRING(ParamSettings.ElementNames[0])
%assign isLinearInterp = ParamSettings.LinearInterpolation[0]
%assign interpMethod = ""
%if isLinearInterp
%assign interpMethod = "linear"
%else
%assign interpMethod = "zoh"
%endif
%assign dimsArrayPrefix = "signalDimensions"
%assign nDims = LibBlockInputSignalNumDimensions(0)
%assign dims = LibBlockInputSignalDimensions(0)
%assign dimsArrayName = ...
"%<CreateDimsArray(nDims, dims, dimsArrayPrefix, 0)>"
%assign complexity = LibBlockInputSignalIsComplex(0)
%assign units = LibBlockInputSignalASCIIEscapedUnitExpr(0)
%assign datatypeName = getDatatypeNameFromId(LibBlockInputSignalDataTypeId(0))
%assign maxpoints = 0
%assign decimation = 1
%assign logPortIdx = ParamSettings.ConnectedPortIdx[0]
%assign propagatedName = STRING(ParamSettings.PropagatedName)
%assign loggedName = STRING(ParamSettings.ElementNames[0])
%assign sigName = STRING(ParamSettings.SignalNames[0])
%assign blockPath = STRING(ParamSettings.LogBlockPath)
%if IsModelReferenceTarget()
%assign mapInfo = RTMsGet(system, "DataMapInfo")
char* pathToTopModel = %<mapInfo>.mmi.InstanceMap.fullPath;
%else
char* pathToTopModel = "";
%endif
%assign numberOfInputPorts = 1
%assign sampleTime = ParamSettings.SampleTimeLabels[0]
%if IsModelReferenceSimTarget() && !MdlRefDisallowSampleTimeInheritance()
%assign discreteInterval = 0
%else
%assign discreteInterval = ParamSettings.DiscreteInterval[0]
%endif
%assign dTypeId = LibBlockInputSignalDataTypeId(0)
%assign nulldef = SLibGetNullDefinitionFromTfl()
%assign treeVector = "treeVector"
void * treeVector = rtwGetTreeVector();
void * loggingInterval = %<nulldef>;
void * accessor = %<nulldef>;
%assign foreachSubDims = nulldef + ", 0"
%if IsModelReferenceSimTarget()
int_T forEachMdlRefDimsArray[32];
int_T forEachMdlRefDimsArraySize = 0;
if(!slIsRapidAcceleratorSimulating()) {
forEachMdlRefDimsArraySize = slSigLogGetForEachDimsForRefModel(...
%<RTMsGet(system, "MdlRefSfcnS")>, ...
forEachMdlRefDimsArray);
}
%assign foreachTopDims = "forEachMdlRefDimsArraySize ? (const uint_T*)forEachMdlRefDimsArray : " + nulldef + ", forEachMdlRefDimsArraySize"
%else
%assign foreachTopDims = nulldef + ", 0"
%endif
%if LibIsBuiltInDataType(dTypeId)
rtwAddLeafNode(...
%<dTypeId>, ...
"%<sigName>", ...
"%<interpMethod>", ...
%<complexity>, ...
%<dimsArrayName>, ...
%<nDims>, ...
"%<datatypeName>", ...
"%<units>", ...
"%<sampleTime>", ...
%<discreteInterval>, ...
%<RTMGet("TFinal")>, ...
%<treeVector>);
%elseif LibIsDataTypeFixpt(dTypeId)
%assign curDT = FixPt_GetDataTypeFromIndex(dTypeId)
%assign fxp_isSigned = curDT.IsSigned
%assign fxp_wordLen = curDT.RequiredBits
%assign fxp_slope = curDT.FracSlope
%assign fxp_fixedExp = curDT.FixedExp
%assign fxp_bias = curDT.Bias
rtwAddFixedPointLeafNode(...
%<dTypeId>, ...
"%<elementName>", ...
"%<interpMethod>", ...
%<complexity>, ...
%<dimsArrayName>, ...
%<nDims>, ...
"%<datatypeName>", ...
"%<units>", ...
%<fxp_isSigned>, ...
%<fxp_wordLen>, ...
%<fxp_slope>, ...
%<fxp_fixedExp>, ...
%<fxp_bias>, ...
"%<sampleTime>", ...
%<discreteInterval>, ...
%<RTMGet("TFinal")>, ...
%<treeVector>);
%elseif LibIsEnumDataType(dTypeId)
%assign storageID = -1
%if LibIsEnumTypeStoredAsInt(dTypeId)
%assign storageID = 6
%else
%assign storageID = LibGetEnumTypeStorageType(dTypeId)
%endif
%assign resolvedDatatypeName = SLibGetMLDataTypeFromId(storageID)
%<addEnumLeafNode(...
dTypeId, ...
elementName, ...
interpMethod, ...
dimsArrayName, ...
nDims, ...
datatypeName, ...
units, ...
resolvedDatatypeName, ...
sampleTime, ...
discreteInterval, ...
RTMGet("TFinal"), ...
treeVector)>
%else
%assert TLC_FALSE
%endif
{
const void * signalDescriptor = ...
rtwGetSignalDescriptor (...
treeVector, ...
%<numberOfInputPorts>, ...
%<porttype>,
%<maxpoints>, ...
%<decimation>, ...
"%<loggedName>", ...
"%<propagatedName>", ...
pathToTopModel, ...
"%<blockPath>", ...
%<logPortIdx>,
%<portOrder>, ...
rtwGetPointerFromUniquePtr(rt_slioCatalogue()), ...
%<foreachTopDims>, ...
%<foreachSubDims>);
%if IsModelReferenceTarget()
loggingInterval = ...
rtliGetLoggingInterval(%<RTMGet("MdlRefSfcnS")>->mdlInfo->rtwLogInfo);
%else
loggingInterval = ...
rtliGetLoggingInterval(%<RTMsGet(system, "RootSS")>->mdlInfo->rtwLogInfo);
%endif
accessor = rtwGetAccessor(signalDescriptor, loggingInterval);
rtwAddIntrusiveClient(accessor, signalDescriptor, ...
rtwGetPointerFromUniquePtr(rt_slioCatalogue()),"%<datasetName>", %<clientType>);
%<pworkAddress> = accessor;
}
}
%endfunction
%function getDatatypeNameFromId(datatypeId)
%if LibIsBuiltInDataType(datatypeId)
%assign typeName = SLibGetMLDataTypeFromId(datatypeId)
%if typeName == "boolean"
%assign typeName = "logical"
%endif
%assign isFxp = TLC_FALSE
%elseif LibIsDataTypeFixpt(datatypeId)
%assign curDT = FixPt_GetDataTypeFromIndex(datatypeId)
%if fxpIsDataTypeFixPt(curDT)
%assign typeName = "fixed-point"
%assign isFxp = TLC_TRUE
%elseif fxpIsDataTypeScaledDouble(curDT)
%assign typeName = "scaled-double"
%assign isFxp = TLC_TRUE
%elseif FixPt_DataTypeIsDouble(curDT)
%assign typeName = "double"
%assign isFxp = TLC_FALSE
%elseif FixPt_DatatTypeIsSingle(curDT)
%assign typeName = "single"
%assign isFxp = TLC_FALSE
%elseif FixPt_DatatTypeIsBoolean(curDT)
%assign typeName = "logical"
%assign isFxp = TLC_FALSE
%else
%assert TLC_FALSE
%endif
%assign fxp_isSigned = curDT.IsSigned
%assign fxp_wordLen = curDT.RequiredBits
%assign fxp_slope = curDT.FracSlope
%assign fxp_fixedExp = curDT.FixedExp
%assign fxp_bias = curDT.Bias
%elseif LibIsEnumDataType(datatypeId)
%assign typeName = LibGetDataTypeNameFromId(datatypeId)
%assign isFxp = TLC_FALSE
%else
%assert TLC_FALSE
%endif
%return typeName
%endfunction
%function Outputs(block, system) Output
%if Accelerator
%<SLibCallBlockInSimulink(system, block, "SS_CALL_MDL_OUTPUTS")>
%else
%foreach idx = SIZE(TID, 1)
%foreach portIdx = block.NumDataInputPorts
%assign tid = block.TID[idx]
%assign tt = tid2time(block, system, tid)
%<slioUpdateAccessor(block, system, portIdx, tt)>
%endforeach
%endforeach
%endif
%endfunction
%function OutputsForTID(block, system, tid) Output
%<logMultitasking(block, system, tid)>
%endfunction
%function OutputTypedVectorForDatasetVariable(nValues, values, valueType, varname) Output
%if nValues == 1
%if valueType == "char_T*"
%<valueType> %<varname>[1] = {"%"};
%else
%<valueType> %<varname>[1] = {%};
%endif
%else
%assign valuesInit = "%<valueType> %<varname>[%<nValues>] = {"
%foreach valuesIdx = nValues
%if valueType == "char_T*"
%assign valuesInit = valuesInit + "/"%/""
%else
%assign valuesInit = valuesInit + "%"
%endif
%if valuesIdx != nValues-1
%assign valuesInit = valuesInit + ", "
%endif
%endforeach
%assign valuesInit = valuesInit + "};"
%<valuesInit>
%endif
%endfunction
%function Terminate(block, system) Output
%endfunction