%if EXISTS("_SFLIB_") == 0
%assign _SFLIB_ = 1
%addtorecord CompiledModel MachineInitializeCache ""
%addtorecord CompiledModel MachineTerminateCache ""
%function SFLibRegSignalLogging(blkIdx, sysIdx) Output
%assign system = ::CompiledModel.System[sysIdx]
%assign block = system.Block[blkIdx]
%with system
%with block
%generatefile "chartSource" "%<block.SFInfo.ChartTLCFile>.tlc"
%<GENERATE_TYPE(block, "USLRegCode", "chartSource", system)>
%assign unused = UNLOAD_GENERATE_TYPE(block, "chartSource")
%endwith
%endwith
%endfunction
%function SFLibGetSimS(sysIdx) Output
%if ::isRAccel
%return RTMGetModelSS()
%else
%assign system = ::CompiledModel.System[sysIdx]
%return RTMsGet(system, "MdlRefSfcnS")
%endif
%endfunction
%function SFGetDataMapInfoForSystem(system) void
%if ::isRAccel
%return ::RSimRTWCAPIVar
%else
%return RTMsGet(system, "DataMapInfo")
%endif
%endfunction
%function SFLibGetInstancePath(blkIdx, sysIdx) void
%assign system = ::CompiledModel.System[sysIdx]
%assign mapInfo = SFGetDataMapInfoForSystem(system)
%return mapInfo + ".mmi.InstanceMap.fullPath"
%endfunction
%function SLibSetMachineInitialize(code) void
%if MachineInitializeCache != ""
%<LibReportFatalError("MachineInitializeCache should be empty")>
%endif
%if !WHITE_SPACE(code)
%assign CompiledModel.MachineInitializeCache = code
%endif
%endfunction
%function SLibSetMachineTerminate(code) void
%if MachineTerminateCache != ""
%<LibReportFatalError("MachineTerminateCache should be empty")>
%endif
%if !WHITE_SPACE(code)
%assign CompiledModel.MachineTerminateCache = code
%endif
%endfunction
%function SLibWriteMachineInitialize() void
%return MachineInitializeCache
%endfunction
%function SLibWriteMachineTerminate() void
%return MachineTerminateCache
%endfunction
%function LibSFGetCurrentTaskTime(block) void
%return LibGetTaskTimeFromTID(block)
%endfunction
%function LibSFChartInstance(block) void
%<SETFIELD(block,"ChartInstanceAccessed",1)>
%return "%<LibBlockDWork(ChartInstance,"","",0)>."
%endfunction
%function LibSFDWork(block, dWorkIdx, eleIdx) void
%return LibBlockDWork(DWork[dWorkIdx], eleIdx, "", 0)
%endfunction
%function LibSFAssignDWork(block, dWorkIdx, eleIdx, u) Output
%<LibBlockAssignDWork(DWork[dWorkIdx], eleIdx, "", 0, u)>
%endfunction
%function LibSFDWorkAddr(block, dWorkIdx, eleIdx) void
%return LibBlockDWorkAddr(DWork[dWorkIdx], eleIdx, "", 0)
%endfunction
%function LibSFMachineParentedData(block, machineDataIdx, eleIdx) void
%assign vgIdx = ...
CompiledModel.VarGroups.StateflowMachineVarGroupVarIdx[machineDataIdx]
%assign vgCGTypeIdx = SLibVarGroupCGTypeIdx(vgIdx[0])
%assign memberCgTypeIdx = LibCGTypeMemberCGTypeIdx(vgCGTypeIdx, vgIdx[1])
%assign width = LibCGTypeWidth(memberCgTypeIdx)
%assign sigIndexer = SLibGet1DArrayIndexer(width, eleIdx, "", 0)
%return SLibCG_GetVarGroupElementPath(vgIdx, ...
HStructDeclSystemIdx, CrossNoArgFcnBound) + sigIndexer
%endfunction
%function LibSFAssignMachineParentedData(block, machineDataIdx, eleIdx, u) Output
%<LibSFMachineParentedData(block, machineDataIdx, eleIdx)> = %<u>;
%endfunction
%function LibSFMachineParentedDataAddr(block, machineDataIdx, eleIdx) void
%return "&" + LibSFMachineParentedData(block, machineDataIdx, eleIdx)
%endfunction
%function LibSFParameter(block, param, eleIdx) void
%return LibBlockParameter(param, eleIdx, "", 0)
%endfunction
%function LibSFParameterAddr(block, param, eleIdx) void
%return LibBlockParameterAddr(param, eleIdx, "", 0)
%endfunction
%function LibSFOutput(block, portIdx, eleIdx) void
%if portIdx == 0
%error LibSFOutput cannot be called for port 0 reserved for function calls
%endif
%if portIdx >= NumDataOutputPorts
%error Invalid port number %<portIdx> passed to LibSFOutputs
%endif
%return LibBlockOutputSignal(portIdx, eleIdx, "", 0)
%endfunction
%function LibSFAssignOutput(block, portIdx, eleIdx, u) Output
%if portIdx == 0
%error LibSFAssignOutput cannot be called for port 0 reserved for function calls
%endif
%if portIdx >= NumDataOutputPorts
%error Invalid port number %<portIdx> passed to LibSFAssignOutput
%endif
%<LibBlockAssignOutputSignal(portIdx, eleIdx, "", 0, u)>
%endfunction
%function LibSFOutputAddr(block, portIdx, eleIdx) void
%if portIdx == 0
%error LibSFOutputAddr cannot be called for port 0 reserved for function calls
%endif
%if portIdx >= NumDataOutputPorts
%error Invalid port number %<portIdx> passed to LibSFOutputAddr
%endif
%return LibBlockOutputSignalAddr(portIdx, eleIdx, "", 0)
%endfunction
%function LibSFOutputs(block, port, idx) void
%if port==0
%error LibSfOutputs cannot be called for port 0 reserved for function calls
%endif
%if port>=NumDataOutputPorts
%error Invalid port number %<port> passed to LibSFOutputs
%endif
%if TYPE(idx) == "Number"
%if idx >= LibBlockOutputSignalWidth(port)
%error Invalid idx: %<idx> arg in LibSFOutputs, outside valid range.
%endif
%return LibBlockOutputSignal(port,"","",idx)
%else
%return LibBlockOutputSignal(port,idx,"",0)
%endif
%endfunction
%function LibSFOutputArray(block, port, unused) void
%if port==0
%error LibSfOutputs cannot be called for port 0 reserved for function calls
%endif
%if port>=NumDataOutputPorts
%error Invalid port number %<port> passed to LibSFOutputs
%endif
%return LibBlockOutputSignalAddr(port,"","",0)
%endfunction
%function LibSFInput(block, portIdx, eleIdx) void
%if portIdx >= NumDataInputPorts
%error Invalid port number %<portIdx> passed to LibSFInput
%endif
%return LibBlockInputSignal(portIdx, eleIdx, "", 0)
%endfunction
%function LibSFInputAddr(block, portIdx, eleIdx) void
%if portIdx >= NumDataInputPorts
%error Invalid port number %<portIdx> passed to LibSFInputAddr
%endif
%return LibBlockInputSignalAddr(portIdx, eleIdx, "", 0)
%endfunction
%function LibSFInputs(block, port, idx) void
%if port>=NumDataInputPorts
%error Invalid port number %<port> passed to LibSFInputs
%endif
%if NumDataInputPorts > 0
%if TYPE(idx) == "Number"
%if !(LibGetRecordWidth(DataInputPort[port]) >= idx && idx >=0)
%error Invalid idx: %<idx> arg in LibSFInputs, outside valid range.
%endif
%return LibBlockInputSignal(port,"","",idx)
%else
%return LibBlockInputSignal(port,idx,"",0)
%endif
%else
%error Invalid call to LibSFInputs, no inputs for %<LibGetFormattedBlockPath(block)>
%endif
%endfunction
%function LibSFInputArray(block, port, unused) void
%if port>=NumDataInputPorts
%error Invalid port number %<port> passed to LibSFInputs
%endif
%if NumDataInputPorts > 0
%return LibBlockInputSignalAddr(port,"","",0)
%else
%error Invalid call to LibSFInputArray, no inputs for %<LibGetFormattedBlockPath(block)>
%endif
%endfunction
%function LibSFInputSize(block, port, idx)
%return SLibGetCurrentInputPortDimensions(port, idx)
%endfunction
%function LibSFInputSizeAddr(block, port, idx)
%return "&" + SLibGetCurrentInputPortDimensions(port, idx)
%endfunction
%function LibSFOutputSize(block, port, idx)
%return SLibGetCurrentOutputPortDimensions(port, idx)
%endfunction
%function LibSFOutputSizeAddr(block, port, idx)
%return "&" + SLibGetCurrentOutputPortDimensions(port, idx)
%endfunction
%endif