%%
%%
%%
%%
%%Copyright1994-2019TheMathWorks,Inc.
%%
%%Abstract:
%%LibrarytoinitializethefieldsoftherootrtModelrecordsobject
%%
 
%if EXISTS("_RTMDLDEFS_") == 0
%assign _RTMDLDEFS_ = 1
 
%%Function:SLibInitRTMdlRecs=================================================
%%Abstract:
%%CreateandinitializethefieldsoftherootrtModelrecordforcoderdatagroups.
%%ThisneedstobedoneseperatefromtherestofthertModelsincethesegroups
%%requireCustomstorageclassinformation
%%NOTE:Thisfunctionsshouldonlybeinvokedonceonsetup
%%
%function SLibInitCoderDataGroupRTMdlRecs() void
  %% rtMdl should have already been initialized by this point
  %assert !RTMCreateRTModelRecShell()
  %assign NO_QUALIFIER = ""
  %assign ERT_MACRO_NONE = [0, 0, 0, 0]
  %assign ERT_MACRO_PUB_SET_PUB_GET = [1, 1, 0, 0]
  %if ::CompiledModel.GenerateSampleERTMain || ...
    (SLibAutosarActive() && MultiInstanceERTCode)
    %assign MACRO_FOR_MODEL_DATA = ERT_MACRO_NONE
  %else
    %assign MACRO_FOR_MODEL_DATA = ERT_MACRO_PUB_SET_PUB_GET
  %endif
 
  %if ::CompiledModel.SLCI == "on"
    %assign MODELDATA = "ModelData"
  %else
    %assign MODELDATA = ""
  %endif
 
  %%
  %% Initialize records belonging in CoderDataGroups
  %%
  %foreach idx = ::CompiledModel.NumCoderDataGroups
    %assign group = ::CompiledModel.CoderDataGroup[idx]
    %if SLibStandAloneSingleInstance(group)
      %continue
    %endif
    %assign baseSystem = ::CompiledModel.System[GetBaseSystemIdx()]
    %assign varGroupIndex = FcnSysVarGroupIndex(baseSystem, "CoderDataGroup" + group.Name, 0)
    %if varGroupIndex < 0 || !SLibHaveRootDataGroupVarGroup(group)
      %continue
    %endif
    %assign fieldName = SLibCoderDataGroupRTMFieldName(group)
    %assign typeKey = "CoderDataGroup" + group.Name
    %assign typeString = FcnSysVarGroupType(::CompiledModel.System[GetBaseSystemIdx()], typeKey)
       
    %% typeString will be empty if the vargroup for the data group is empty
    %% fieldName will be empty if the vargroup does not belong
    %if !ISEMPTY(typeString) && !ISEMPTY(fieldName)
 
      %if group.AsStructure == "InSelf"
        %<RTMAddRecSclr(...
          fieldName, ...
          fieldName, ...
          MODELDATA, ...
          typeString, ...
          NO_QUALIFIER, ...
          MACRO_FOR_MODEL_DATA, ...
          "RTMModelPtrsToCoderDataGroupIsReqFcn(%<group.GroupIndex>)")>
      %else
        %<RTMAddRecPntr(...
          fieldName, ...
          fieldName, ...
          MODELDATA, ...
          typeString, ...
          SLibTypeQualifierForGroup(group), ...
          MACRO_FOR_MODEL_DATA, ...
          "RTMModelPtrsToCoderDataGroupIsReqFcn(%<group.GroupIndex>)")>
      %endif
    %endif
  %endforeach
%endfunction
%%Function:SLibInitRTMdlRecs=================================================
%%Abstract:
%%CreateandinitializethefieldsoftherootrtModelrecord.
%%Thisfunctionisresponsibleforcreatingtwobasictypesofrecords:
%%-recordsthathelpinthecreationofdatafieldsinthertModel.
%%-recordsthathelpperformsimpleinlineoperationsoncertainrtModel
%%fields
%%
%function SLibInitRTMdlRecs() void
  %%
  %% Create an empty root record
  %%
  %assign created = RTMCreateRTModelRecShell()
 
  %if !created
    %return
  %endif
 
  %%
  %% Initialize field values that help readability
  %%
  %assign NO_PARENT = ""
  %if ::CompiledModel.SLCI == "on"
    %assign MODELDATA = "ModelData"
  %else
    %assign MODELDATA = ""
  %endif
 
  %assign CONST_QUALIFIER = "CONST"
  %assign NO_QUALIFIER = ""
 
  %assign NO_GET_FCN = ""
  %assign NO_SET_FCN = ""
  %assign NO_IS_FCN = ""
 
  %% These values are used to determine if a special access
  %% macro needs the rtModel passed in. For model reference
  %% with global timing engine, some macros do not use
  %% the rtModel. The values mean:
  %%
  %% 0 : No argument in any referenced model
  %% 1 : Only the model reference target does not
  %% need the rtModel arg.
  %% 2 : Always has an rtModel arg.
  %% 3 : If the ErrorStatus is suppressed, no rtModel arg is
  %% needed.
  %assign NO_RTM_ARG_WHEN_ERRSTAT_SUPPRESSED = 3
  %assign HAS_RTM_ARG = 2
  %assign NO_RTM_ARG_FOR_RTWMR = 1
  %assign NO_RTM_ARG_FOR_MR = 0
   
  %% When using the global timing engine, we may generate
  %% special access macros which require the timing bridge.
  %% Use these values to state whether the get, set or is
  %% functions use the timing bridge. We do this to keep
  %% track of when these macros are needed, if the timing
  %% bridge is never accessed, then we can avoid generating
  %% the infrastructure to handle it.
  %%
  %% [getFcn, setFcn, isFcn]
  %%
  %% If the value is 1, this means the timing bridge
  %% is needed for that function. If the value is 2, this
  %% means that both the timing bridge and globalTID are needed.
  %assign NO_TIMING_BRIDGE = [0, 0, 0]
  %assign GET_FCN_USE_TIMING_BRIDGE = [1, 0, 0]
  %assign GET_FCN_USE_TIMING_BRIDGE_GLOBAL_TID = [2, 0, 0]
  %assign SET_FCN_USE_TIMING_BRIDGE = [0, 1, 0]
  %assign IS_FCN_USE_TIMING_BRIDGE = [0, 0, 1]
  %assign IS_FCN_USE_TIMING_BRIDGE_GLOBAL_TID = [0, 0, 2]
  %assign GET_SET_FCN_USE_TIMING_BRIDGE = [1, 1, 0]
  %assign GET_IS_FCN_USE_TIMING_BRIDGE = [1, 0, 1]
  %assign SET_IS_FCN_USE_TIMING_BRIDGE = [0, 1, 1]
  %assign SET_IS_FCN_USE_TIMING_BRIDGE_GLOBAL_TID = [0, 2, 2]
  %assign GET_SET_IS_FCN_USE_TIMING_BRIDGE = [1, 1, 1]
   
  %assign ERT_MACRO_NONE = [0, 0, 0, 0]
  %assign ERT_MACRO_PUB_SET_PUB_GET = [1, 1, 0, 0]
  %assign ERT_MACRO_NO_SET_PUB_GET = [0, 1, 0, 0]
  %assign ERT_MACRO_PRV_IS = [0, 0, 2, 0]
  %assign ERT_MACRO_PUB_IS = [0, 0, 1, 0]
  %assign ERT_MACRO_PRV_OTHER = [0, 0, 0, 2]
  %assign ERT_MACRO_PUB_OTHER = [0, 0, 0, 1]
  %assign ERT_MACRO_PRV_SET_PUB_GET = [2, 1, 0, 0]
  %assign ERT_MACRO_PRV_SET_PRV_GET = [2, 2, 0, 0]
  %assign ERT_MACRO_NO_SET_PRV_GET = [0, 2, 0, 0]
  %assign ERT_MACRO_PRV_SET_PRV_IS = [2, 0, 2, 0]
  %assign ERT_MACRO_PUB_SET_PUB_IS = [1, 0, 1, 0]
  %assign FORCE_NO_MACRO = [-1, -1, -1, -1]
 
  %if (::CompiledModel.Solver == "ode14x")
    %assign solverODE14X = TLC_TRUE
  %elseif (::CompiledModel.Solver == "ode1be")
    %assign solverODE1BE = TLC_TRUE
    %assign solverODE14X = TLC_FALSE
    %assign solverODE8 = TLC_FALSE
  %elseif (::CompiledModel.Solver == "ode8")
    %assign solverODE8 = TLC_TRUE
    %assign solverODE1BE = TLC_FALSE
    %assign solverODE14X = TLC_FALSE
    %assign solverOrder = IDNUM(::CompiledModel.Solver)[1]
    %% ode8 requires 13 outputs
    %if (solverOrder == 8)
     %assign solverOrder = 13
    %endif
  %else
    %assign solverODE1BE = TLC_FALSE
    %assign solverODE14X = TLC_FALSE
    %assign solverODE8 = TLC_FALSE
    %assign solverOrder = IDNUM(::CompiledModel.Solver)[1]
    %% ode5 requires 6 outputs
    %if (solverOrder == 5)
     %assign solverOrder = solverOrder + 1
    %endif
  %endif
 
  %if ::CompiledModel.GenerateSampleERTMain || ...
    (SLibAutosarActive() && MultiInstanceERTCode)
    %assign MACRO_FOR_MODEL_DATA = ERT_MACRO_NONE
  %else
    %assign MACRO_FOR_MODEL_DATA = ERT_MACRO_PUB_SET_PUB_GET
  %endif
   
  %%===========================================================================
  %% Register the data records of the rtModel
  %%============================================================================
 
  %%
  %% Initialize records belonging at the root level
  %%
  %<RTMAddRecPntr(...
    "Path", ...
    "path", ...
    NO_PARENT, ...
    "CHAR", ...
    CONST_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMModelPtrsForNonERTIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "ModelName", ...
    "modelName", ...
    NO_PARENT, ...
    "CHAR", ...
    CONST_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMModelPtrsForNonERTIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "SFunctions", ...
    "childSfunctions", ...
    NO_PARENT, ...
    "SIMSTRUCT_PTR", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %if IsModelReferenceForASimstructBasedTarget()
 
    %<RTMAddRecPntr(...
      "MdlRefSfcnS", ...
      tMdlRefSfcnS, ...
      NO_PARENT, ...
      "SIMSTRUCT", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMAlwaysReqIsReqFcn()")>
     
    %<RTMAddRecSclr(...
      "NonContDerivMemory", ...
      "NonContDerivMemory", ...
      "", ...
      "NONCONT_DERIV_SIGS_MEMORY", ...
      NO_QUALIFIER, ...
      ERT_MACRO_PUB_SET_PUB_GET, ...
      "RTMNeedsNonContDerivSigs()")>
 
    %<RTMAddRecArry(...
      "NonContDerivSignal", ...
      "nonContDerivSignal", ...
      NO_PARENT, ...
      "NONCONT_SIGS", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      ["%<GetNumberOfNoncontSignalsFeedingDerivPorts()>"], ...
      "RTMNeedsNonContDerivSigs()")>
  %endif
 
  %if IsModelReferenceTarget()
    %if !IsSimstructBasedTarget()
      %<RTMAddRecPntrPntr(...
    "ErrorStatusFlag", ...
    "errorStatus", ...
    NO_PARENT, ...
    "CHAR", ...
    CONST_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMErrorStatusIsReqFcn()")>
    %endif
  %else
    %if RTMErrorStatusNeedVolatile()
      %<RTMAddRecVolatilePntr(...
        "ErrorStatusFlag", ...
        "errorStatus", ...
        NO_PARENT, ...
        "CHAR", ...
        CONST_QUALIFIER, ...
        ERT_MACRO_NONE, ...
        "RTMErrorStatusIsReqFcn()")>
    %else
      %<RTMAddRecPntr(...
        "ErrorStatusFlag", ...
        "errorStatus", ...
        NO_PARENT, ...
        "CHAR", ...
        CONST_QUALIFIER, ...
        ERT_MACRO_NONE, ...
        "RTMErrorStatusIsReqFcn()")>
    %endif
  %endif
 
  %%
  %% MassMatrix base pointer for referenced models
  %%
  %if (::CompiledModel.ModelIsLinearlyImplicit == "yes")
    %if IsModelReferenceTarget()
      %<RTMAddRecPntr(...
        "MassMatrixBasePr", ...
        "massMatrixBasePr", ...
        NO_PARENT, ...
        "REAL", ...
        NO_QUALIFIER, ...
        ERT_MACRO_NONE, ...
        "RTMAlwaysReqIsReqFcn()")>
    %endif
  %endif
      
  %<RTMAddRecSclr(...
    "SimMode", ...
    "simMode", ...
    NO_PARENT, ...
    "SS_SIMMODE", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %if !::CompiledModel.GenerateSampleERTMain
    %<RTMAddRecPntr(...
      "RTWLogInfo", ...
      "rtwLogInfo", ...
      NO_PARENT, ...
      "RTW_LOG_INFO", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NO_SET_PUB_GET, ...
      "RTMLogInfoIsReqFcn()")>
  %else
    %<RTMAddRecPntr(...
    "RTWLogInfo", ...
    "rtwLogInfo", ...
    NO_PARENT, ...
    "RTW_LOG_INFO", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMLogInfoIsReqFcn()")>
  %endif
   
  %if !::CompiledModel.GenerateSampleERTMain
    %<RTMAddRecPntr(...
      "RTWExtModeInfo", ...
      "extModeInfo", ...
      NO_PARENT, ...
      "EXT_MODE_INFO", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NO_SET_PUB_GET, ...
      "RTMExtModeInfoIsReqFcn()")>
  %else
    %<RTMAddRecPntr(...
      "RTWExtModeInfo", ...
      "extModeInfo", ...
      NO_PARENT, ...
      "EXT_MODE_INFO", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMExtModeInfoIsReqFcn()")>
  %endif
 
  %<RTMAddRecSclr(...
    "RTWRTModelMethodsInfo", ...
    "modelMethodsInfo", ...
    NO_PARENT, ...
    "MODEL_METHODS_INFO", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMMdlMthIsReqFcn()")>
 
  %% Currently only ERT places RTWSolverInfo instance into RTModel
  %% Additionally, if there are non-inlined s-functions, a pointer
  %% to the solver info is created so the s-function can access the solver info
  %if SLibIsERTCodeFormat()
    %if IsModelReferenceNonSimstructBasedRTWTarget() || UsingMalloc
      %<RTMAddRecPntr(...
        "RTWSolverInfo", ...
        "solverInfo", ...
        NO_PARENT, ...
        "SOLVER_INFO", ...
        NO_QUALIFIER, ...
        ERT_MACRO_NONE, ...
        "RTMContTimeErtOnlyIsReqFcn() || RTMChildSfunctionIsReqFcn() || GenerateGRTWrapper")>
    %elseif !ConfigSet.PurelyIntegerCode
      %<RTMAddRecSclr(...
        "RTWSolverInfo", ...
        "solverInfo", ...
        NO_PARENT, ...
        "SOLVER_INFO", ...
        NO_QUALIFIER, ...
        ERT_MACRO_NONE, ...
        "RTMContTimeErtOnlyIsReqFcn() || RTMChildSfunctionIsReqFcn() || GenerateGRTWrapper")>
    %endif
    %<RTMAddRecPntr(...
      "RTWSolverInfoPtr", ...
      "solverInfoPtr", ...
      NO_PARENT, ...
      "SOLVER_INFO", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMChildSfunctionIsReqFcn()")>
  %else
    %% All other formats place pointer to RTWSolverInfo into RTModel
    %<RTMAddRecPntr(...
      "RTWSolverInfo", ...
      "solverInfo", ...
      NO_PARENT, ...
      "SOLVER_INFO", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMModelPtrsForNonERTIsReqFcn()")>
  %endif
 
  %<RTMAddRecPntr(...
    "RTWSfcnInfo", ...
    "sfcnInfo", ...
    NO_PARENT, ...
    "VOID", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
   
  %if SLibIsERTCodeFormat()
  %<RTMAddRecSclr(...
    "NonInlinedSFcns", ...
    "NonInlinedSFcns", ...
    NO_PARENT, ...
    "NONINLINED_SFCS", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMNonInlinedSFcnsIsReqFcn()")>
  %endif
 
  %%
  %% Initialize records belonging in "Sizes"
  %%
  %<RTMAddRecArry(...
    "Checksums", ...
    "checksums", ...
    "Sizes", ...
    "UINT32", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    [4], ...
    "RTMExtModeInfoIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "Options", ...
    "options", ...
    "Sizes", ...
    "UINT32", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumContStates", ...
    "numContStates", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMContStateErtNoMdlRefIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumPeriodicContStates", ...
    "numPeriodicContStates", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMContStateErtNoMdlRefIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumU",...
    "numU",...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumY", ...
    "numY", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumSampleTimes", ...
    "numSampTimes", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMNumSampleTimesReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumBlocks", ...
    "numBlocks", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumBlockIO", ...
    "numBlockIO", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumBlockParams", ...
    "numBlockPrms", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumDWork", ...
    "numDwork", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumSFcnParams", ...
    "numSFcnPrms", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumSFunctions", ...
    "numSFcns", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumInputPorts", ...
    "numIports", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumOutputPorts", ...
    "numOports", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "NumNonSampledZCs", ...
    "numNonSampZCs", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "DirectFeedThrough", ...
    "sysDirFeedThru", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "RTWGeneratedSFcn", ...
    "rtwGenSfcn", ...
    "Sizes", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %%
  %% Initialize records belonging to "Timing"
  %%
     
  %<RTMAddRecSclr(...
    "StepSize", ...
    "stepSize", ...
    "Timing", ...
    "TIME", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NO_SET_PUB_GET, ...
    "RTMStepSizeIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
 
  %if IsModelReferenceTarget()
    %% Add Timing Bridge to RTModel
    %<RTMAddRecPntr(...
      "timingBridge", ...
      "timingBridge", ...
      NO_PARENT, ...
      "TIMING_BRIDGE", ...
      CONST_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMTimingBridgeIsReqFcn()")>
  %else
    %% Add Timing Bridge to RTModel
    %<RTMAddRecSclr(...
      "timingBridge", ...
      "timingBridge", ...
      NO_PARENT, ...
      "TIMING_BRIDGE", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMTimingBridgeIsReqFcn()")>
  %endif
   
  %foreach idx = ::CompiledModel.NumSampleTimes
    %with ::CompiledModel
      %assign dtId = SampleTime[idx].ClockTickDataTypeId
      %assign dType = DataTypes.DataType[dtId].DTName
    %endwith
 
    %if dType == "timer_uint32_pair"
      %assign dType = "UINT32"
    %endif
     
    %if !IsModelReferenceTarget() && !SLibUsingTimingServices()
 
      %<RTMAddRecSclr(...
        "TaskTime%<idx>", ...
        "taskTime%<idx>", ...
        "Timing", ...
        "TIME", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMTaskTimeIsReqFcnForTID(%<idx>)")>
     
      %<RTMAddRecSclr(...
    "ClockTick%<idx>", ...
    "clockTick%<idx>", ...
    "Timing", ...
    "%<dType>", ...
    NO_QUALIFIER, ...
    FORCE_NO_MACRO, ...
    "ClockTickForTIDIsReqFcn(%<idx>)")>
 
      %<RTMAddRecSclr(...
        "ClockTickH%<idx>", ...
        "clockTickH%<idx>", ...
        "Timing", ...
        "UINT32", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "LongClockTickForTIDIsReqFcn(%<idx>)")>
 
    %endif
       
    %<RTMAddRecSclr(...
      "StepSize%<idx>", ...
      "stepSize%<idx>", ...
      "Timing", ...
      "TIME", ...
      NO_QUALIFIER, ...
      FORCE_NO_MACRO, ...
      "RTMStepSizeForTIDIsReqFcn(%<idx>)")>
 
    %if SLibConcurrentTasks() %% multicore
      %<RTMAddRecPntr(...
        "SemIdForTask%<idx>", ...
        "semIdForTask%<idx>", ...
        "Timing", ...
        "VOID", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMAbsTimeNeedTransProtection(%<idx>)")>
       
      %<RTMAddRecSclr(...
        "ClockTickBuf%<idx>", ...
        "rtmClockTickBuf%<idx>", ...
        "Timing", ...
        "%<dType>", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMAbsTimeNeedTransProtection(%<idx>)")>
       
      %<RTMAddRecSclr(...
        "ClockTickHBuf%<idx>", ...
        "rtmBufClockTickBufH%<idx>", ...
        "Timing", ...
        "UINT32", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMAbsTimeNeedTransProtection(%<idx>) && LongClockTickForTIDIsReqFcn(0)")>
       
    %else %% single core
      %% If absolute time is read by async task
      %% whose priority is not assigned.
      %<RTMAddRecSclr(...
        "DbBufReadBuf%<idx>", ...
        "rtmDbBufReadBuf%<idx>", ...
        "Timing", ...
        "UINT8", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMClockTick0DbBufIsReqFcn(%<idx>) || RTMContTDbBufIsReqFcn(%<idx>)")>
       
      %<RTMAddRecSclr(...
        "DbBufWriteBuf%<idx>", ...
        "rtmDbBufWriteBuf%<idx>", ...
        "Timing", ...
        "UINT8", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMClockTick0DbBufIsReqFcn(%<idx>) || RTMContTDbBufIsReqFcn(%<idx>)")>
       
      %<RTMAddRecSclr(...
        "DbBufLastBufWr%<idx>", ...
        "rtmDbBufLastBufWr%<idx>", ...
        "Timing", ...
        "BOOLEAN", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMClockTick0DbBufIsReqFcn(%<idx>) || RTMContTDbBufIsReqFcn(%<idx>)")>
       
      %<RTMAddRecArry(...
        "DbBufClockTick%<idx>", ...
        "rtmDbBufClockTick%<idx>", ...
        "Timing", ...
        "%<dType>", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        [2], ...
        "RTMClockTick0DbBufIsReqFcn(%<idx>)")>
       
      %<RTMAddRecArry(...
        "DbBufClockTickH%<idx>", ...
        "rtmDbBufClockTickH%<idx>", ...
        "Timing", ...
        "UINT32", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        [2], ...
        "RTMClockTick0DbBufIsReqFcn(%<idx>) && LongClockTickForTIDIsReqFcn(0)")>
       
       
      %<RTMAddRecArry(...
        "DbBufContT%<idx>", ...
        "rtmDbBufContT%<idx>", ...
        "Timing", ...
        "DOUBLE", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        [2], ...
        "RTMContTDbBufIsReqFcn(%<idx>)")>
         
         
      %% If absolute time is read by async task
      %% that has lower priority. High to low (H2L) prioity
      %% transition occurs.
      %<RTMAddRecSclr(...
        "H2LBufBeingRead%<idx>", ...
        "rtmH2LBufBeingRead%<idx>", ...
        "Timing", ...
        "UINT8", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMClockTick0H2LIsReqFcn(%<idx>) || RTMContTH2LIsReqFcn(%<idx>)")>
       
      %<RTMAddRecSclr(...
        "H2LLastBufWr%<idx>", ...
        "rtmH2LLastBufWr%<idx>", ...
        "Timing", ...
        "UINT8", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        "RTMClockTick0H2LIsReqFcn(%<idx>) || RTMContTH2LIsReqFcn(%<idx>)")>
       
      %<RTMAddRecArry(...
        "H2LDbBufClockTick%<idx>", ...
        "rtmH2LDbBufClockTick%<idx>", ...
        "Timing", ...
        "%<dType>", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        [2], ...
        "RTMClockTick0H2LIsReqFcn(%<idx>)")>
       
      %<RTMAddRecArry(...
        "H2LDbBufClockTickH%<idx>", ...
        "rtmH2LDbBufClockTickH%<idx>", ...
        "Timing", ...
        "UINT32", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        [2], ...
        "RTMClockTick0H2LIsReqFcn(%<idx>) && LongClockTickForTIDIsReqFcn(0)")>
       
       
      %<RTMAddRecArry(...
        "H2LDbBufContT%<idx>", ...
        "rtmH2LDbBufContT%<idx>", ...
        "Timing", ...
        "DOUBLE", ...
        NO_QUALIFIER, ...
        FORCE_NO_MACRO, ...
        [2], ...
        "RTMContTH2LIsReqFcn(%<idx>)")>
       
       
      %if !IsModelReferenceTarget() && idx == 0
         
        %% If absolute time is read by async task
        %% that has higher priority. Low to High (L2H) prioity
        %% transition occurs.
        %<RTMAddRecSclr(...
          "L2HLastBufWr", ...
          "rtmL2HLastBufWr", ...
          "Timing", ...
          "UINT8", ...
          NO_QUALIFIER, ...
          FORCE_NO_MACRO, ...
          "RTMClockTick0L2HIsReqFcn() || RTMContTL2HIsReqFcn()")>
         
        %<RTMAddRecArry(...
          "L2HDbBufClockTick", ...
          "rtmL2HDbBufClockTick", ...
          "Timing", ...
          "%<dType>", ...
          NO_QUALIFIER, ...
          FORCE_NO_MACRO, ...
          [2], ...
          "RTMClockTick0L2HIsReqFcn()")>
         
        %<RTMAddRecArry(...
          "L2HDbBufClockTickH", ...
          "rtmL2HDbBufClockTickH", ...
          "Timing", ...
          "UINT32", ...
          NO_QUALIFIER, ...
          FORCE_NO_MACRO, ...
          [2], ...
          "RTMClockTick0L2HIsReqFcn() && LongClockTickForTIDIsReqFcn(0)")>
         
        %<RTMAddRecArry(...
          "L2HDbBufContT", ...
          "rtmL2HDbBufContT", ...
          "Timing", ...
          "DOUBLE", ...
          NO_QUALIFIER, ...
          FORCE_NO_MACRO, ...
          [2], ...
          "RTMContTL2HIsReqFcn()")>
      %endif %% !IsModelReferenceTarget() && idx == 0
    %endif %% single core
  %endforeach
     
  %% When a model reference target has an inherited
  %% sample time, we will put the global TID map into
  %% the Timing structure of the rtModel so that each
  %% instance can have a different TID.
  %with ::CompiledModel
    %<RTMAddRecArry(...
      "MdlRefGlobalTID", ...
      "mdlref_GlobalTID", ...
      "Timing", ...
      "INT", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      ["%<SLibGetNumTIDsForGlobalTIDMap()>"], ...
      "RTMMdlRefGlobalTIDIsReqFcn()")>
  %endwith
 
  %<RTMAddRecSclr(...
    "MdlRefTriggerTID", ...
    "mdlref_TriggerTID", ...
    "Timing", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMMdlRefTriggerTIDIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "FirstInitCondFlag", ...
    "firstInitCondFlag", ...
    "Timing", ...
    "BOOLEAN", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMFirstInitCondFlagIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "TaskCounters", ...
    "TaskCounters", ...
    "Timing", ...
    "TASK_COUNTERS", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMTaskCountersIsReqFcn()")>
   
  %<RTMAddRecArry(...
    "CtrlRateNumTicksToNextHit", ...
    "CtrlRateNumTicksToNextHit", ...
    "Timing", ...
    "UINT32", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    ["%<::CompiledModel.NumControllableSampleTimes>"], ...
    "RTMCtrlRateNumTicksToNextHitIsReqFcn() ")>
   
  %<RTMAddRecSclr(...
    "CtrlRateMdlRefTiming", ...
    "CtrlRateMdlRefTiming", ...
    "Timing", ...
    "CTRLRATE_TIMING", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMCtrlRateMdlRefTimingIsReqFcn() ")>
   
  %<RTMAddRecPntr(...
    "CtrlRateMdlRefTimingPtr", ...
    "CtrlRateMdlRefTimingPtr", ...
    "Timing", ...
    "CTRLRATE_TIMING", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMCtrlRateMdlRefTimingPtrIsReqFcn()")>
   
  %<RTMAddRecSclr(...
    "PerTaskSampleHits", ...
    "RateInteraction", ...
    "Timing", ...
    "RATE_INTERACTION", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMERTPerTaskSampleHitsIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "StartTime", ...
    "tStart", ...
    "Timing", ...
    "TIME", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "FinalTime", ...
    "tFinal", ...
    "Timing", ...
    "TIME", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NO_SET_PUB_GET, ...
    "RTMTFinalIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "_TimeOfLastOutput", ...
    "timeOfLastOutput", ...
    "Timing", ...
    "TIME", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NO_SET_PUB_GET, ...
    "RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "TimingData", ...
    "timingData", ...
    "Timing", ...
    "VOID", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMModelPtrsForNonERTIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "VarNextHitTimesListPtr", ...
    "varNextHitTimesList", ...
    "Timing", ...
    "REAL", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMModelPtrsForNonERTIsReqFcn()")>
 
  %if IsModelReferenceRTWTarget()
    %<RTMAddRecPntr(...
      "SimTimeStepPtr", ...
      "simTimeStep", ...
      "Timing", ...
      "SIM_TIME_STEP", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMContTimeErtIsReqFcn()")>
  %else
    %<RTMAddRecSclr(...
      "SimTimeStep", ...
      "simTimeStep", ...
      "Timing", ...
      "SIM_TIME_STEP", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMContTimeErtIsReqFcn() || GenerateGRTWrapper")>
  %endif
   
  %if IsModelReferenceTarget()
    %if !IsSimstructBasedTarget()
      %% For model reference coder target it is a boolean_T *
      %<RTMAddRecPntr(...
    "StopRequestedFlag", ...
    "stopRequestedFlag", ...
    "Timing", ...
    "BOOLEAN", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMMdlStopReqIsReqFcn()")>
    %endif
  %else
    %% For standalone model, it is boolean_T
    %<RTMAddRecSclr(...
      "StopRequestedFlag", ...
      "stopRequestedFlag", ...
      "Timing", ...
      "BOOLEAN", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMMdlStopReqIsReqFcn()")>
  %endif
 
  %<RTMAddRecPntr(...
    "SampleTimePtr", ...
    "sampleTimes", ...
    "Timing", ...
    "TIME", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMModelPtrsForNonERTIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
   
  %<RTMAddRecPntr(...
    "OffsetTimePtr", ...
    "offsetTimes", ...
    "Timing", ...
    "TIME", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMModelPtrsForNonERTIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
   
  %<RTMAddRecPntr(...
    "SampleTimeTaskIDPtr", ...
    "sampleTimeTaskIDPtr", ...
    "Timing", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMModelPtrsForNonERTIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
  %if GenerateGRTWrapper
    %<RTMAddRecPntr(...
      "SampleHitPtr", ...
      "sampleHits", ...
      "Timing", ...
      "INT", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NO_SET_PUB_GET, ...
      "TLC_TRUE")>
  %else
    %<RTMAddRecPntr(...
      "SampleHitPtr", ...
      "sampleHits", ...
      "Timing", ...
      "INT", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      "RTMChildSfunctionIsReqFcn()")>
  %endif
   
  %<RTMAddRecPntr(...
    "PerTaskSampleHitsPtr", ...
    "perTaskSampleHits", ...
    "Timing", ...
    "INT", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMChildSfunctionIsReqFcn()")>
     
  %<RTMAddRecPntr(...
    "TimePtr", ...
    "t", ...
    "Timing", ...
    "TIME", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMTimePtrIsReqFcn()")>
  %if SLibIsERTCodeFormat()
    %with ::CompiledModel
      %<RTMAddRecArry(...
      "SampleTimeArray", ...
      "sampleTimesArray", ...
      "Timing", ...
      "TIME", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      ["%<NumRuntimeExportedRates>"], ...
      "RTMModelPtrsForNonERTIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
     
    %<RTMAddRecArry(...
      "OffsetTimeArray", ...
      "offsetTimesArray", ...
      "Timing", ...
      "TIME", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      ["%<NumRuntimeExportedRates>"], ...
      "RTMModelPtrsForNonERTIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
     
    %<RTMAddRecArry(...
      "SampleTimeTaskIDArray", ...
      "sampleTimeTaskIDArray", ...
      "Timing", ...
      "INT", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      ["%<NumRuntimeExportedRates>"], ...
      "RTMModelPtrsForNonERTIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
     
    %<RTMAddRecArry(...
      "SampleHitArray", ...
      "sampleHitArray", ...
      "Timing", ...
      "INT", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NO_SET_PUB_GET, ...
      ["%<NumRuntimeExportedRates>"], ...
      "GenerateGRTWrapper || RTMChildSfunctionIsReqFcn()")>
     
    %<RTMAddRecArry(...
      "PerTaskSampleHitsArray", ...
      "perTaskSampleHitsArray", ...
      "Timing", ...
      "INT", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      ["%"], ...
      "RTMChildSfunctionIsReqFcn()")>
     
    %<RTMAddRecArry(...
      "TaskTimeArray", ...
      "tArray", ...
      "Timing", ...
      "TIME", ...
      NO_QUALIFIER, ...
      ERT_MACRO_NONE, ...
      ["%<NumSampleTimes>"], ...
      "RTMTimePtrIsReqFcn()")>
    %endwith
  %endif
 
  %if GenerateGRTWrapper || isGRTMalloc
    %assign RTMBlockIOType = "VOID"
  %else
    %assign RTMBlockIOType = "BLOCKIO"
  %endif
  %<RTMAddRecPntr(...
    "BlockIO", ...
    "blockIO", ...
    MODELDATA, ...
    RTMBlockIOType, ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMModelPtrsToBlockIOIsReqFcn()")>
     
  %<RTMAddRecPntr(...
    "ConstBlockIO", ...
    "constBlockIO", ...
    MODELDATA, ...
    "VOID", ...
    CONST_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMModelPtrsToConstBlockIOIsReqFcn()")>
 
  %if GenerateGRTWrapper || isGRTMalloc
    %assign RTMParameterType = "VOID"
  %else
    %assign RTMParameterType = "PARAMETER"
  %endif
   %<RTMAddRecPntr(...
    "DefaultParam", ...
    "defaultParam", ...
    MODELDATA, ...
    RTMParameterType, ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMModelPtrsToDefaultParamIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "PrevZCSigState", ...
    "prevZCSigState", ...
    MODELDATA, ...
    "ZC_SIG_STATE", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMModelPtrsToPrevZcSigStateIsReqFcn()")>
 
  %if GRTInterface || isGRTMalloc
    %assign RTMContStatesType = "REAL"
  %else
    %assign RTMContStatesType = "CONT_STATES"
  %endif
  %<RTMAddRecPntr(...
    "ContStates", ...
    "contStates", ...
    MODELDATA, ...
    RTMContStatesType, ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContStateErtNoMdlRefIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "PeriodicContStateIndices", ...
    "periodicContStateIndices", ...
    MODELDATA, ...
    "INT", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContStateErtNoMdlRefIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "PeriodicContStateRanges", ...
    "periodicContStateRanges", ...
    MODELDATA, ...
    "REAL", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContStateErtNoMdlRefIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "dX", ...
    "derivs", ...
    MODELDATA, ...
    "REAL", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContStateErtNoMdlRefIsReqFcn()")>
   
    %if (::CompiledModel.SolverType == "VariableStep")
      %<RTMAddRecPntr(...
        "AbsTolVector", ...
        "absTol", ...
        MODELDATA, ...
        "REAL", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        "RTMContStateErtNoMdlRefIsReqFcn()")>
    %endif
     
    %if (::CompiledModel.SolverType == "VariableStep")
      %<RTMAddRecPntr(...
        "JacobianPerturbationBoundsMinVec", ...
        "JacobianPerturbationBoundsMin", ...
        MODELDATA, ...
        "REAL", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        "RTMContStateErtNoMdlRefIsReqFcn()")>
    %endif
     
    %if (::CompiledModel.SolverType == "VariableStep")
      %<RTMAddRecPntr(...
        "JacobianPerturbationBoundsMaxVec", ...
        "JacobianPerturbationBoundsMax", ...
        MODELDATA, ...
        "REAL", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        "RTMContStateErtNoMdlRefIsReqFcn()")>
    %endif
     
         
  %<RTMAddRecPntr(...
    "ZCSignalValues", ...
    "zcSignalValues", ...
    MODELDATA, ...
    "VOID", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMModelPtrsToZCSignalValuesIsReqFcn()")>
 
  %if GenerateGRTWrapper || isGRTMalloc
    %assign RTMInputsType = "VOID"
  %else
    %assign RTMInputsType = "INPUTS"
  %endif
  %<RTMAddRecPntr(...
    "U", ...
    "inputs", ...
    MODELDATA, ...
    RTMInputsType, ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMModelPtrsToInputsIsReqFcn()")>
   
  %if GenerateGRTWrapper || isGRTMalloc
    %assign RTMOutputsType = "VOID"
  %else
    %assign RTMOutputsType = "OUTPUTS"
  %endif
  %<RTMAddRecPntr(...
    "Y", ...
    "outputs", ...
    MODELDATA, ...
    RTMOutputsType, ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMModelPtrsToOutputsIsReqFcn()")>
   
  %<RTMAddRecPntr(...
    "ContStateDisabled", ...
    "contStateDisabled", ...
    MODELDATA, ...
    "BOOLEAN", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContStateErtNoMdlRefIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "ZCCacheNeedsReset", ...
    "zCCacheNeedsReset", ...
    MODELDATA, ...
    "BOOLEAN", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContStateErtNoMdlRefIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "DerivCacheNeedsReset", ...
    "derivCacheNeedsReset", ...
    MODELDATA, ...
    "BOOLEAN", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContStateErtNoMdlRefIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "ContTimeOutputInconsistentWithStateAtMajorStepFlag", ...
    "CTOutputIncnstWithState", ...
    MODELDATA, ...
    "BOOLEAN", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContStateErtNoMdlRefIsReqFcn() || RTMChildSfunctionIsReqFcn()")>
 
  %<RTMAddRecSclr(...
    "ParamIsMalloced", ...
    "paramIsMalloced", ...
    MODELDATA, ...
    "BOOLEAN", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMParamIsMallocedIsReqFcn()")>
 
  %if (::CompiledModel.ModelIsLinearlyImplicit == "yes")
 
    %<RTMAddRecSclr(...
        "MassMatrixType", ...
        "massMatrixType", ...
        MODELDATA, ...
        "INT", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        "RTMContStateErtNoMdlRefIsReqFcn()")>
 
    %<RTMAddRecSclr(...
        "MassMatrixNzMax", ...
        "massMatrixNzMax", ...
        MODELDATA, ...
        "INT", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        "RTMContStateErtNoMdlRefIsReqFcn()")>
       
    %<RTMAddRecPntr(...
        "MassMatrixIr", ...
        "massMatrixIr", ...
        MODELDATA, ...
        "INT", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        "RTMContStateErtNoMdlRefIsReqFcn()")>
 
    %<RTMAddRecPntr(...
        "MassMatrixJc", ...
        "massMatrixJc", ...
        MODELDATA, ...
        "INT", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        "RTMContStateErtNoMdlRefIsReqFcn()")>
 
    %<RTMAddRecPntr(...
        "MassMatrixPr", ...
        "massMatrixPr", ...
        MODELDATA, ...
        "REAL", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        "RTMContStateErtNoMdlRefIsReqFcn()")>
 
  %endif
   
  %if solverODE14X
 
    %% special memory requirement for ODE14x
 
    %<RTMAddRecArry(...
      "OdeX0", ...
      "odeX0", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeF0", ...
      "odeF0", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeX1START", ...
      "odeX1START", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeF1", ...
      "odeF1", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeDELTA", ...
      "odeDELTA", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeE", ...
      "odeE", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["4*%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeFAC", ...
      "odeFAC", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeDFDX", ...
      "odeDFDX", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>*%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeW", ...
      "odeW", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>*%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
     %<RTMAddRecArry(...
      "OdePIVOTS", ...
      "odePIVOTS", ...
      MODELDATA, ...
      "INT", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeXTMP", ...
      "odeXTMP", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
     
    %<RTMAddRecArry(...
      "OdeZTMP", ...
      "odeZTMP", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %if (::CompiledModel.ModelIsLinearlyImplicit == "yes")
      %<RTMAddRecArry(...
        "OdeMASSMATRIX_M", ...
        "odeMASSMATRIX_M", ...
        MODELDATA, ...
        "REAL", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        ["%<::CompiledModel.ModelMassMatrixNzMax>"], ...
        "RTMContainerErtIsReqFcn()")>
       
      %if (SLibModelMassMatrixType() != "constant")
 
        %<RTMAddRecArry(...
          "OdeMASSMATRIX_M1", ...
          "odeMASSMATRIX_M1", ...
          MODELDATA, ...
          "REAL", ...
          NO_QUALIFIER, ...
          MACRO_FOR_MODEL_DATA, ...
          ["%<::CompiledModel.ModelMassMatrixNzMax>"], ...
          "RTMContainerErtIsReqFcn()")>
         
      %endif
       
      %if (SLibModelMassMatrixType() == "statedep")
         
        %<RTMAddRecArry(...
          "OdeEDOT", ...
          "odeEDOT", ...
          MODELDATA, ...
          "REAL", ...
          NO_QUALIFIER, ...
          MACRO_FOR_MODEL_DATA, ...
          ["4*%<::CompiledModel.NumContStates>"], ...
          "RTMContainerErtIsReqFcn()")>
 
        %<RTMAddRecArry(...
          "OdeXDOT", ...
          "odeXDOT", ...
          MODELDATA, ...
          "REAL", ...
          NO_QUALIFIER, ...
          MACRO_FOR_MODEL_DATA, ...
          ["%<::CompiledModel.NumContStates>"], ...
          "RTMContainerErtIsReqFcn()")>
         
        %<RTMAddRecArry(...
          "OdeFMXDOT", ...
          "odeFMXDOT", ...
          MODELDATA, ...
          "REAL", ...
          NO_QUALIFIER, ...
          MACRO_FOR_MODEL_DATA, ...
          ["%<::CompiledModel.NumContStates>"], ...
          "RTMContainerErtIsReqFcn()")>
 
      %endif
                  
    %endif
     
    %elseif solverODE1BE
 
    %% special memory requirement for ODE1BE
 
    %<RTMAddRecArry(...
      "OdeX0", ...
      "odeX0", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeF0", ...
      "odeF0", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeF1", ...
      "odeF1", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeDELTA", ...
      "odeDELTA", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeFAC", ...
      "odeFAC", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeDFDX", ...
      "odeDFDX", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>*%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeW", ...
      "odeW", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>*%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
     %<RTMAddRecArry(...
      "OdePIVOTS", ...
      "odePIVOTS", ...
      MODELDATA, ...
      "INT", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
     
    %<RTMAddRecArry(...
      "OdeZ", ...
      "odeZ", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
    %if (::CompiledModel.ModelIsLinearlyImplicit == "yes")
      %<RTMAddRecArry(...
        "OdeMASSMATRIX_M", ...
        "odeMASSMATRIX_M", ...
        MODELDATA, ...
        "REAL", ...
        NO_QUALIFIER, ...
        MACRO_FOR_MODEL_DATA, ...
        ["%<::CompiledModel.ModelMassMatrixNzMax>"], ...
        "RTMContainerErtIsReqFcn()")>
                  
    %endif
     
  %elseif solverODE8
    %<RTMAddRecArry(...
      "OdeDeltaY", ...
      "OdeDeltaY", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMSolverYIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeF", ...
      "odeF", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<solverOrder>", "%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
       
    %<RTMAddRecArry(...
      "OdeX0", ...
      "odeX0", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMSolverYIsReqFcn()")>
         
  %else
 
    %<RTMAddRecArry(...
      "OdeY", ...
      "odeY", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<::CompiledModel.NumContStates>"], ...
      "RTMSolverYIsReqFcn()")>
 
    %<RTMAddRecArry(...
      "OdeF", ...
      "odeF", ...
      MODELDATA, ...
      "REAL", ...
      NO_QUALIFIER, ...
      MACRO_FOR_MODEL_DATA, ...
      ["%<solverOrder>", "%<::CompiledModel.NumContStates>"], ...
      "RTMContainerErtIsReqFcn()")>
 
  %endif
 
  %<RTMAddRecSclr(...
    "IntgData", ...
    "intgData", ...
    MODELDATA, ...
    "INTG", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMContainerErtIsReqFcn()")>
 
  %%
  %% Initialize records belonging in "Work"
  %%
  %if GenerateGRTWrapper || isGRTMalloc
    %assign RTMDWorkType = "VOID"
  %else
    %assign RTMDWorkType = "DWORK"
  %endif
  %<RTMAddRecPntr(...
    "RootDWork", ...
    "dwork", ...
    MODELDATA, ...
    RTMDWorkType, ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMModelPtrsToRootDWorkIsReqFcn()")>
 
  %% Placeholder for Self Vargroup which is
  %% this is populated through the cgType
  %<RTMAddRecPntr(...
    "Self", ...
    "self", ...
    MODELDATA, ...
    "SELF", ...
    NO_QUALIFIER, ...
    MACRO_FOR_MODEL_DATA, ...
    "RTMNeverReqIsReqFcn()")>
 
  %%
  %% Initialize records belonging in "SpecialInfo"
  %%
  %<RTMAddRecPntr(...
    "ModelMappingInfo", ...
    "mappingInfo", ...
    "SpecialInfo", ...
    "VOID", ...
    CONST_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMMappingInfoIsReqFcn()")>
 
  %<RTMAddRecPntr(...
    "ReservedForXPC", ...
    "xpcData", ...
    "SpecialInfo", ...
    "VOID", ...
    NO_QUALIFIER, ...
    ERT_MACRO_NONE, ...
    "RTMModelPtrsToReservedForXPCIsReqFcn()")>
 
  %%
  %% Initialize records belonging in DataMapInfo
  %%
  %<RTMAddRecSclr(...
    "DataMapInfo", ...
    "DataMapInfo", ...
    "", ...
    "DATA_MAP_INFO", ...
    NO_QUALIFIER, ...
    ERT_MACRO_PUB_SET_PUB_GET, ...
    "RTMDataMapInfoIsReqFcn()")>
 
  %%
  %% Initialize dummy records for backwards compat
  %%
  %<RTMAddRecDummy("MdlInfoPtr")>
  %<RTMAddRecDummy("RootSS")>
  %<RTMAddRecDummy("Version")>
 
  %%===========================================================================
  %% Register the fields that help setup simple inline accesses to data
  %% fields in the rtModel
  %%============================================================================
 
  %%
  %% The first set of records that help setup inline accesses to rtModel fields
  %% are geared towards simple indexing operations. For instance, in the days
  %% of the SimStruct, we would have done ssGetSampleTime(S, 4) to get the
  %% fourth sample time. To support the same functionality, we set up a
  %% rtModel rrcord of type "IndexedAccess" that helps perform the same
  %% function. The record is given information on the data field of the
  %% rtModel that it is supposed to index. Then we we see the library
  %% call "RTMSetIdxed("SampleTime", "4")", we will automatically generated
  %% "rtM->SampleTime.sampleTimes[4]"
  %%
  %<RTMAddRecIdxedAccs(...
    "SFunction", ...
    "SFunctions")>
 
  %<RTMAddRecIdxedAccs(...
    "VarNextHitTimeList", ...
    "VarNextHitTimesListPtr")>
 
  %<RTMAddRecIdxedAccs(...
    "SampleTime", ...
    "SampleTimePtr")>
 
  %<RTMAddRecIdxedAccs(...
    "OffsetTime", ...
    "OffsetTimePtr")>
 
  %<RTMAddRecIdxedAccs(...
    "SampleTimeTaskID", ...
    "SampleTimeTaskIDPtr")>
 
  %<RTMAddRecIdxedAccs(...
    "DWork", ...
    "RootDWork")>
 
  %<RTMAddRecIdxedAccs(...
    "ChecksumVal", ...
    "Checksums")>
 
  %%
  %% The second set of records helps create accesses to the rtModel
  %% through special macros. For instance, in the TLC code, we would
  %% see %<RTMIsSampleHit(sti,tid)>. In the generated code, this
  %% appears as "rtmIsSampleHit(rtM, sti, tid)". The records listed
  %% below help capture the generation of such accesses and their
  %% associated macros.
  %%
  %% Each record contains the following information
  %% - Name by which users will request the access in TLC code
  %% E.g. A record with the name "SampleHit"
  %% - The TLC function that will be called to generate the
  %% body of the macro "rtmGet%<recName>(rtM)".
  %% - The TLC function that will be called to generate the
  %% body of the macro "rtmSet%<recName>(rtM,sVal)".
  %% - The TLC function that will be called to generate the
  %% body of the macro "rtmIs%<recName>(rtM)".
  %% - The additional args besides rtM that are used by the
  %% macro "rtmIs%<recName>". E.g. rtmIsSampleHit takes two
  %% additional args - sti, tid.
  %% - Where the macros should be generated for ERT. ERT allows
  %% macros to be generated in the public/private header file.
  %%
 
  %assign NO_ARG_FOR_SET = TLC_FALSE
  %assign ARG_FOR_SET = TLC_TRUE
  %assign NO_OTHER_FCN = ""
 
  %<RTMAddRecSpecialAccs(...
    "T", ...
    "RTMSpecAccsGetT", ...
    "RTMSpecAccsSetT", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
    GET_FCN_USE_TIMING_BRIDGE, ...
    RTMTimingBridgeIsInstanceBased() ? HAS_RTM_ARG : NO_RTM_ARG_FOR_RTWMR, ...
    ERT_MACRO_NO_SET_PUB_GET)>
 
  %<RTMAddRecSpecialAccs(...
    "TimeOfLastOutput", ...
    "RTMSpecAccsGetTimeOfLastOutput", ...
    "RTMSpecAccsSetTimeOfLastOutput", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_NO_SET_PUB_GET)>
 
  %<RTMAddRecSpecialAccs(...
    "TStart", ...
    "RTMSpecAccsGetTStart", ...
    "RTMSpecAccsSetTStart", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_NO_SET_PUB_GET)>
   
  %if (IsModelReferenceRTWTarget() && IsSimstructBasedTarget()) ||...
    IsModelReferenceSimTarget()
    %<RTMAddRecSpecialAccs(...
      "RaiseEventWithEnqueueUsingRateIndex", ...
      NO_GET_FCN, ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      "RTMSpecAccsRaiseEventWithEnqueueUsingRateIndex", ...
      NO_ARG_FOR_SET, ...
      1, ...
      ["sti"], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PRV_OTHER)>
     
    %<RTMAddRecSpecialAccs(...
      "DisableTaskUsingRateIndex", ...
      NO_GET_FCN, ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      "RTMSpecAccsDisableTaskUsingRateIndex", ...
      NO_ARG_FOR_SET, ...
      1, ...
      ["sti"], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PRV_OTHER)>
     
    %<RTMAddRecSpecialAccs(...
      "EnableTaskUsingRateIndex", ...
      NO_GET_FCN, ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      "RTMSpecAccsEnableTaskUsingRateIndex", ...
      NO_ARG_FOR_SET, ...
      1, ...
      ["sti"], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PRV_OTHER)>
  %endif
 
 %% This is for model reference target for RSIM
 %% when the solver module is used. and for the
 %% sim target when variable step is used. Logging
 %% is controlled by ssSetLogOutput, the equivalent
 %% of which is defined in the rtModel below
 %if (IsModelReferenceRTWTarget() && IsSimstructBasedTarget()) ||...
   IsModelReferenceSimTarget()
   %<RTMAddRecSpecialAccs(...
     "LogOutput", ...
     "RTMSpecAccsGetLogOutput", ...
     NO_SET_FCN,...
     NO_IS_FCN, ...
     NO_OTHER_FCN, ...
     ARG_FOR_SET, ...
     0, ...
     [], ...
     NO_TIMING_BRIDGE, ...
     HAS_RTM_ARG, ...
     ERT_MACRO_NO_SET_PUB_GET)>
 %endif
  
 %if GenerateGRTWrapper
   %<RTMAddRecSpecialAccs(...
     "TFinal", ...
     "RTMSpecAccsGetTFinal", ...
    "RTMSpecAccsSetTFinal", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_PUB_SET_PUB_GET)>
 
    %<RTMAddRecSpecialAccs(...
    "TPtr", ...
    "RTMSpecAccsGetTPtr", ...
    "RTMSpecAccsSetTPtr", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    NO_RTM_ARG_FOR_RTWMR, ...
    ERT_MACRO_PRV_SET_PUB_GET)>
  %else
    %<RTMAddRecSpecialAccs(...
    "TFinal", ...
    "RTMSpecAccsGetTFinal", ...
    "RTMSpecAccsSetTFinal", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_PRV_SET_PUB_GET)>
 
    %<RTMAddRecSpecialAccs(...
      "TPtr", ...
      "RTMSpecAccsGetTPtr", ...
      "RTMSpecAccsSetTPtr", ...
      NO_IS_FCN, ...
      NO_OTHER_FCN, ...
      ARG_FOR_SET, ...
      0, ...
      [], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PRV_SET_PUB_GET)>
  %endif
   
  %if IsModelReferenceTarget()
    %if !IsSimstructBasedTarget()
      %<RTMAddRecSpecialAccs(...
        "StopRequested", ...
        "RTMSpecAccsGetStopRequestedValStoredAsPtr", ...
        "RTMSpecAccsSetStopRequestedValStoredAsPtr", ...
        NO_IS_FCN, ...
        NO_OTHER_FCN, ...
        ARG_FOR_SET, ...
        0, ...
        [], ...
        NO_TIMING_BRIDGE, ...
        HAS_RTM_ARG, ...
        ERT_MACRO_PUB_SET_PUB_GET)>
       
      %<RTMAddRecSpecialAccs(...
        "StopRequestedPtr", ...
        "RTMSpecAccsGetStopRequestedPtrStoredAsPtr", ...
        "RTMSpecAccsSetStopRequestedPtrStoredAsPtr", ...
        NO_IS_FCN, ...
        NO_OTHER_FCN, ...
        ARG_FOR_SET, ...
        0, ...
        [], ...
        NO_TIMING_BRIDGE, ...
        HAS_RTM_ARG, ...
        ERT_MACRO_PUB_SET_PUB_GET)>
    %endif
  %else
    %<RTMAddRecSpecialAccs(...
      "StopRequested", ...
      "RTMSpecAccsGetStopRequested", ...
      "RTMSpecAccsSetStopRequested", ...
      NO_IS_FCN, ...
      NO_OTHER_FCN, ...
      ARG_FOR_SET, ...
      0, ...
      [], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_SET_PUB_GET)>
 
    %<RTMAddRecSpecialAccs(...
      "StopRequestedPtr", ...
      "RTMSpecAccsGetStopRequestedPtr", ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      NO_OTHER_FCN, ...
      ARG_FOR_SET, ...
      0, ...
      [], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_SET_PUB_GET)>
 
  %endif
 
  %if IsModelReferenceTarget()
    %if !IsSimstructBasedTarget()
      %<RTMAddRecSpecialAccs(...
    "ErrorStatus", ...
    "RTMSpecAccsGetErrorStatusPointer", ...
    "RTMSpecAccsSetErrorStatusPointer", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
        NO_TIMING_BRIDGE, ...
        NO_RTM_ARG_WHEN_ERRSTAT_SUPPRESSED, ...
    ERT_MACRO_PUB_SET_PUB_GET)>
 
      %<RTMAddRecSpecialAccs(...
    "ErrorStatusPointer", ...
    "RTMSpecAccsGetErrorStatusPointerPointer", ...
    "RTMSpecAccsSetErrorStatusPointerPointer", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
        NO_TIMING_BRIDGE, ...
        NO_RTM_ARG_WHEN_ERRSTAT_SUPPRESSED, ...
    ERT_MACRO_PUB_SET_PUB_GET)>
       
      %<RTMAddRecSpecialAccs(...
    "SimTimeStep", ...
    "RTMSpecAccsGetSimTimeStepPointer", ...
        NO_SET_FCN, ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
        NO_TIMING_BRIDGE, ...
        HAS_RTM_ARG, ...
    ERT_MACRO_PUB_SET_PUB_GET)>
       
      %<RTMAddRecSpecialAccs(...
    "SimTimeStepPointer", ...
    "RTMSpecAccsGetSimTimeStepPointerPointer", ...
    "RTMSpecAccsSetSimTimeStepPointerPointer", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
        NO_TIMING_BRIDGE, ...
        HAS_RTM_ARG, ...
    ERT_MACRO_PUB_SET_PUB_GET)>
    %endif
  %else
    %<RTMAddRecSpecialAccs(...
      "ErrorStatus", ...
      "RTMSpecAccsGetErrorStatus", ...
      "RTMSpecAccsSetErrorStatus", ...
      NO_IS_FCN, ...
      NO_OTHER_FCN, ...
      ARG_FOR_SET, ...
      0, ...
      [], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_SET_PUB_GET)>
 
    %<RTMAddRecSpecialAccs(...
      "ErrorStatusPointer", ...
      "RTMSpecAccsGetErrorStatusPointerPointer", ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      NO_OTHER_FCN, ...
      ARG_FOR_SET, ...
      0, ...
      [], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_SET_PUB_GET)>
  %endif
 
  %<RTMAddRecSpecialAccs(...
    "MajorTimeStep", ...
    NO_GET_FCN, ...
    NO_SET_FCN, ...
    "RTMSpecAccsIsMajorTimeStep", ...
    NO_OTHER_FCN, ...
    NO_ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_PRV_IS)>
 
  %<RTMAddRecSpecialAccs(...
    "MinorTimeStep", ...
    NO_GET_FCN, ...
    NO_SET_FCN, ...
    "RTMSpecAccsIsMinorTimeStep", ...
    NO_OTHER_FCN, ...
    NO_ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_PRV_IS)>
 
  %<RTMAddRecSpecialAccs(...
    "FirstInitCond", ...
    NO_GET_FCN, ...
    "RTMSpecAccsSetFirstInitCond", ...
    "RTMSpecAccsIsFirstInitCond", ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    0, ...
    [], ...
    IS_FCN_USE_TIMING_BRIDGE, ...
    RTMTimingBridgeIsInstanceBased() ? HAS_RTM_ARG : NO_RTM_ARG_FOR_RTWMR, ...
    ERT_MACRO_PRV_SET_PRV_IS)>
 
  %<RTMAddRecSpecialAccs(...
    "SampleHitInTask", ...
    NO_GET_FCN, ...
    "RTMSpecAccsSetSampleHitInTask", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    2, ...
    ["tIdxj", "tIdxi"], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_NONE)>
 
  %<RTMAddRecSpecialAccs(...
    "ContinuousTask", ...
    NO_GET_FCN, ...
    NO_SET_FCN, ...
    "RTMSpecAccsIsContinuousTask", ...
    NO_OTHER_FCN, ...
    NO_ARG_FOR_SET, ...
    1, ...
    ["tid"], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_NONE)>
   
  %<RTMAddRecSpecialAccs(...
    "TaskTime", ...
    "RTMSpecAccsGetTaskTime", ...
    "RTMSpecAccsSetTaskTime", ...
    NO_IS_FCN, ...
    NO_OTHER_FCN, ...
    ARG_FOR_SET, ...
    1, ...
    ["sti"], ...
    NO_TIMING_BRIDGE, ...
    NO_RTM_ARG_FOR_RTWMR, ...
    IsModelReferenceForASimstructBasedTarget() ? ...
    ERT_MACRO_PUB_SET_PUB_GET : ...
    ERT_MACRO_NO_SET_PUB_GET)>
   
  %if IsModelReferenceTarget() && ...
    SLibModelHasControllableRate()
    %<RTMAddRecSpecialAccs( ...
      "NumTicksToNextHitForCtrlRateInMdlRef", ...
      "RTMSpecAccsGetNumTicksToNextHit", ...
      "RTMSpecAccsSetNumTicksToNextHit", ...
      NO_IS_FCN, ...
      NO_OTHER_FCN, ...
      ARG_FOR_SET, ...
      1, ...
      ["sti"], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_SET_PUB_GET)>
  %endif
     
  %if IsModelReferenceForASimstructBasedTarget()
    %% The data fields for variable sample time operations
    %% Currently only for modelreference for a simstruct based target.
    %<RTMAddRecSpecialAccs(...
      "SampleHit", ...
      NO_GET_FCN, ...
      "RTMSpecAccsSetSampleHit", ...
      "RTMSpecAccsIsSampleHit", ...
      NO_OTHER_FCN, ...
      ARG_FOR_SET, ...
      2, ...
      ["sti", "tid"], ...
      SET_IS_FCN_USE_TIMING_BRIDGE_GLOBAL_TID, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_SET_PUB_IS)>
     
    %<RTMAddRecSpecialAccs( ...
      "VarNextHitTime", ...
      "RTMSpecAccsGetVarNextHitTime", ...
      "RTMSpecAccsSetVarNextHitTime", ...
      NO_IS_FCN, ...
      NO_OTHER_FCN, ...
      ARG_FOR_SET, ...
      1, ...
      ["sti"], ...
      SET_FCN_USE_TIMING_BRIDGE, ...
      RTMMdlRefGlobalTIDIsInstanceBased() ? ...
      HAS_RTM_ARG : NO_RTM_ARG_FOR_RTWMR, ...
      ERT_MACRO_PUB_SET_PUB_GET)>
     
    %<RTMAddRecSpecialAccs( ...
      "TNextWasAdjusted", ...
      "RTMSpecAccsGetTNextWasAdjusted", ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      NO_OTHER_FCN, ...
      NO_ARG_FOR_SET, ...
      1, ...
      ["sti"], ...
      SET_FCN_USE_TIMING_BRIDGE, ...
      RTMMdlRefGlobalTIDIsInstanceBased() ? ...
      HAS_RTM_ARG : NO_RTM_ARG_FOR_RTWMR, ...
      ERT_MACRO_NO_SET_PUB_GET)>
     
  %else
    %if GenerateGRTWrapper && ExtMode
      %<RTMAddRecSpecialAccs(...
        "SampleHit", ...
        NO_GET_FCN, ...
        NO_SET_FCN, ...
        "RTMSpecAccsIsSampleHit", ...
        NO_OTHER_FCN, ...
        NO_ARG_FOR_SET, ...
        2, ...
        ["sti", "tid"], ...
        IS_FCN_USE_TIMING_BRIDGE_GLOBAL_TID, ...
        HAS_RTM_ARG, ...
        ERT_MACRO_PUB_IS)>
    %else
      %<RTMAddRecSpecialAccs(...
        "SampleHit", ...
        NO_GET_FCN, ...
        NO_SET_FCN, ...
        "RTMSpecAccsIsSampleHit", ...
        NO_OTHER_FCN, ...
        NO_ARG_FOR_SET, ...
        2, ...
        ["sti", "tid"], ...
        IS_FCN_USE_TIMING_BRIDGE_GLOBAL_TID, ...
        RTMMdlRefGlobalTIDIsInstanceBased() || RTMTimingBridgeIsInstanceBased() ? ...
        HAS_RTM_ARG : NO_RTM_ARG_FOR_RTWMR, ...
        ERT_MACRO_PRV_IS)>
    %endif
  %endif
 
  %<RTMAddRecSpecialAccs(...
    "SpecialSampleHit", ...
    NO_GET_FCN, ...
    NO_SET_FCN, ...
    "RTMSpecAccsIsSpecialSampleHit", ...
    NO_OTHER_FCN, ...
    NO_ARG_FOR_SET, ...
    3, ...
    ["sti", "prom_sti", "tid"], ...
    IS_FCN_USE_TIMING_BRIDGE_GLOBAL_TID, ...
    RTMMdlRefGlobalTIDIsInstanceBased() || RTMTimingBridgeIsInstanceBased() ? ...
    HAS_RTM_ARG : NO_RTM_ARG_FOR_RTWMR, ...
    ERT_MACRO_PRV_IS)>
 
  %<RTMAddRecSpecialAccs(...
    "UpdateSubrateTaskTime", ...
    NO_GET_FCN, ...
    NO_SET_FCN, ...
    NO_IS_FCN, ...
    "RTMSpecAccsUpdateSubrateTaskTime", ...
    NO_ARG_FOR_SET, ...
    1, ...
    ["tid"], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_PRV_OTHER)>
 
  %<RTMAddRecSpecialAccs(...
    "UpdateRealAbsoluteTime", ...
    NO_GET_FCN, ...
    NO_SET_FCN, ...
    NO_IS_FCN, ...
    "RTMSpecAccsUpdateRealAbsoluteTime", ...
    NO_ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_PRV_OTHER)>
 
  %<RTMAddRecSpecialAccs(...
    "UpdateIntegerAbsoluteTime", ...
    NO_GET_FCN, ...
    NO_SET_FCN, ...
    NO_IS_FCN, ...
    "RTMSpecAccsUpdateIntegerAbsoluteTime", ...
    NO_ARG_FOR_SET, ...
    0, ...
    [], ...
    NO_TIMING_BRIDGE, ...
    HAS_RTM_ARG, ...
    ERT_MACRO_PRV_OTHER)>
   
  %if RTMTaskCountersIsReqFcn()
    %<RTMAddRecSpecialAccs(...
      "StepTask", ...
      NO_GET_FCN, ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      "RTMSpecAccsTaskRunsThisBaseStep", ...
      NO_ARG_FOR_SET, ...
      1, ...
      ["idx"], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_OTHER)>
  %endif
   
  %if RTMTaskCountersIsReqFcn()
    %<RTMAddRecSpecialAccs(...
      "TaskCounter", ...
      NO_GET_FCN, ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      "RTMSpecAccsTaskCounter", ...
      NO_ARG_FOR_SET, ...
      1, ...
      ["idx"], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_OTHER)>
  %endif
  %if ::CompiledModel.SuppressMultiTaskScheduler && ...
    !::CompiledModel.GenerateSampleERTMain
    %<RTMAddRecSpecialAccs(...
      "CounterLimit", ...
      NO_GET_FCN, ...
      NO_SET_FCN, ...
      NO_IS_FCN, ...
      "RTMSpecAccsCounterLimit", ...
      NO_ARG_FOR_SET, ...
      1, ...
      ["idx"], ...
      NO_TIMING_BRIDGE, ...
      HAS_RTM_ARG, ...
      ERT_MACRO_PUB_OTHER)>
  %endif
   
   
  %% For the global timing engine, we need macros
  %% to access the clock ticks, because we have to
  %% go through the timing bridge.
  %if IsModelReferenceTarget()
    %foreach idx = ::CompiledModel.NumSampleTimes
      %% Async tid is not on timing bridge, must use local timer.
      %if SLibExplicitTaskingTID(idx) && ...
        (::CompiledModel.SampleTime[idx].TimeSource == "Self_internal")
        %<RTMAddRecSclr(...
          "ClockTick%<idx>", ...
          "clockTick%<idx>", ...
          "Timing", ...
          "%<dType>", ...
          NO_QUALIFIER, ...
          FORCE_NO_MACRO, ...
          "ClockTickForTIDIsReqFcn(%<idx>)")>
           
        %<RTMAddRecSclr(...
          "ClockTickH%<idx>", ...
          "clockTickH%<idx>", ...
          "Timing", ...
          "UINT32", ...
          NO_QUALIFIER, ...
          FORCE_NO_MACRO, ...
          "LongClockTickForTIDIsReqFcn(%<idx>)")>
      %else
        %<RTMAddRecSpecialAccs(...
          "ClockTick%<idx>", ...
          "RTMSpecAccsGetClockTick", ...
          NO_SET_FCN, ...
          NO_IS_FCN, ...
          NO_OTHER_FCN, ...
          NO_ARG_FOR_SET, ...
          0, ...
          [], ...
          GET_FCN_USE_TIMING_BRIDGE_GLOBAL_TID, ...
          RTMMdlRefGlobalTIDIsInstanceBased() || RTMMdlRefTriggerTIDMayBeRequired() || ...
          RTMTimingBridgeIsInstanceBased() ? HAS_RTM_ARG : NO_RTM_ARG_FOR_RTWMR, ...
          ERT_MACRO_NO_SET_PUB_GET)>
         
        %<RTMAddRecSpecialAccs(...
          "ClockTickH%<idx>", ...
          "RTMSpecAccsGetClockTickH", ...
          NO_SET_FCN, ...
          NO_IS_FCN, ...
          NO_OTHER_FCN, ...
          NO_ARG_FOR_SET, ...
          0, ...
          [], ...
          GET_FCN_USE_TIMING_BRIDGE_GLOBAL_TID, ...
          RTMMdlRefGlobalTIDIsInstanceBased() || RTMMdlRefTriggerTIDMayBeRequired() || ...
          RTMTimingBridgeIsInstanceBased() ? HAS_RTM_ARG : NO_RTM_ARG_FOR_RTWMR, ...
          ERT_MACRO_NO_SET_PUB_GET)>
        %endif
    %endforeach
  %endif
   
%endfunction %% LibInitRTMdlRecs
 
 
%%Function:SLibGetRTMSubStructCommentStr=====================================
%%Abstract:
%%GenerateacommentforthegivenrtModelsubstructure.
%%
%function SLibGetRTMSubStructCommentStr(ssName) void
  %openfile tmpBuff
  %switch ssName
    %case "Sizes"
      * The following substructure contains sizes information
      * for many of the model attributes such as inputs, outputs,
      * dwork, sample times, etc.
      %break
    %case "ModelData"
      * The following substructure contains information regarding
      * the data used in the model.
      %break
    %case "Timing"
      * The following substructure contains information regarding
      * the timing information for the model.
      %break
    %case "Work"
      * The following substructure contains information regarding
      * the work vectors in the model.
      %break
    %case "SpecialInfo"
      * The following substructure contains special information
      * related to other components that are dependent on RTW.
      %break
    %default
      %break
  %endswitch
  %closefile tmpBuff
  %openfile cmntBuff
  %if !WHITE_SPACE(tmpBuff)
    /*
     * %<ssName>:
     %<tmpBuff> /
     */
   %endif
   %closefile cmntBuff
  %return cmntBuff
%endfunction
 
 
%%Function:RTMGetLoggingObject===============================================
%%Abstract:
%%Returntheloggingobjectaccordingtothecodeformat
%%
%function RTMGetLoggingObject() void
  %assign retVal = ""
  %if GenRTModel
    %assign retVal = "%<RTMGetModelSS()>->rtwLogInfo"
  %else
    %assign retVal = "ssGetRTWLogInfo(%<RTMGetModelSS()>)"
  %endif
  %return retVal
%endfunction %% RTMGetLoggingObject
 
 
%%Function:RTMGetSolverInfo==================================================
%%Abstract:
%%Returntheloggingobjectaccordingtothecodeformat
%%
%function RTMGetSolverInfo() void
  %assign retVal = ""
  %if SLibIsERTCodeFormat() && !UsingMalloc && ...
    !IsModelReferenceNonSimstructBasedRTWTarget()
    %assign retVal = "&%<RTMGet("RTWSolverInfo")>"
  %else
    %assign retVal = "%<RTMGet("RTWSolverInfo")>"
  %endif
  %return retVal
%endfunction %% RTMGetSolverInfo
 
%%Function:RTMGetSolverInfoBuffer==================================================
%%Abstract:
%%Returnthesolverinfoobjectaccordingtothecodeformat
%%
%function RTMGetSolverInfoBuffer() void
  %assign retVal = ""
  %if UsingMalloc
    %assign retVal = "&%<RTMGet("RTWSolverInfoBuffer")>"
  %else
    %assign retVal = "#error /"Unexpected code format in RTMGetSolverInfoBuffer()/""
  %endif
  %return retVal
%endfunction %% RTMGetSolverInfo
 
 
%endif %% _RTMDLDEFS_
 
%%[EOF]rtmdldefs.ttlc