|
| 1 | +/* Copyright 1990-2022 The MathWorks, Inc. */ |
| 2 | + |
| 3 | +/* |
| 4 | + * File: rtw_continuous.h |
| 5 | + * |
| 6 | + * Abstract: |
| 7 | + * Type definitions for continuous-time support. |
| 8 | + * |
| 9 | + */ |
| 10 | + |
| 11 | +#ifndef RTW_CONTINUOUS_H__ |
| 12 | +#define RTW_CONTINUOUS_H__ |
| 13 | + |
| 14 | +#ifdef MATLAB_MEX_FILE |
| 15 | +#include "tmwtypes.h" |
| 16 | +#else |
| 17 | +#include "rtwtypes.h" |
| 18 | +#endif |
| 19 | + |
| 20 | +/* For models registering MassMatrix */ |
| 21 | +typedef enum { |
| 22 | + SS_MATRIX_NONE, |
| 23 | + SS_MATRIX_CONSTANT, |
| 24 | + SS_MATRIX_TIMEDEP, |
| 25 | + SS_MATRIX_STATEDEP |
| 26 | +} ssMatrixType; |
| 27 | + |
| 28 | +typedef enum { |
| 29 | + SOLVER_MODE_AUTO, /* only occurs in |
| 30 | + mdlInitializeSizes/mdlInitializeSampleTimes */ |
| 31 | + SOLVER_MODE_SINGLETASKING, |
| 32 | + SOLVER_MODE_MULTITASKING |
| 33 | +} SolverMode; |
| 34 | + |
| 35 | +typedef enum { MINOR_TIME_STEP, MAJOR_TIME_STEP } SimTimeStep; |
| 36 | + |
| 37 | +/* ============================================================================= |
| 38 | + * Model methods object |
| 39 | + * ============================================================================= |
| 40 | + */ |
| 41 | +typedef void (*rtMdlInitializeSizesFcn)(void* rtModel); |
| 42 | +typedef void (*rtMdlInitializeSampleTimesFcn)(void* rtModel); |
| 43 | +typedef void (*rtMdlStartFcn)(void* rtModel); |
| 44 | +typedef void (*rtMdlOutputsFcn)(void* rtModel, int_T tid); |
| 45 | +typedef void (*rtMdlUpdateFcn)(void* rtModel, int_T tid); |
| 46 | +typedef void (*rtMdlDerivativesFcn)(void* rtModel); |
| 47 | +typedef void (*rtMdlProjectionFcn)(void* rtModel); |
| 48 | +typedef void (*rtMdlMassMatrixFcn)(void* rtModel); |
| 49 | +typedef void (*rtMdlForcingFunctionFcn)(void* rtModel); |
| 50 | +typedef void (*rtMdlTerminateFcn)(void* rtModel); |
| 51 | +#ifdef RT_MALLOC |
| 52 | +typedef real_T (*rtMdlDiscreteEventsFcn)(void* pModel, |
| 53 | + int_T rtmNumSampTimes, |
| 54 | + void* rtmTimingData, |
| 55 | + int_T* rtmSampleHitPtr, |
| 56 | + int_T* rtmPerTaskSampleHits); |
| 57 | +#endif |
| 58 | + |
| 59 | +typedef struct _RTWRTModelMethodsInfo_tag { |
| 60 | + void* rtModelPtr; |
| 61 | + rtMdlInitializeSizesFcn rtmInitSizesFcn; |
| 62 | + rtMdlInitializeSampleTimesFcn rtmInitSampTimesFcn; |
| 63 | + rtMdlStartFcn rtmStartFcn; |
| 64 | + rtMdlOutputsFcn rtmOutputsFcn; |
| 65 | + rtMdlUpdateFcn rtmUpdateFcn; |
| 66 | + rtMdlDerivativesFcn rtmDervisFcn; |
| 67 | + rtMdlProjectionFcn rtmProjectionFcn; |
| 68 | + rtMdlMassMatrixFcn rtmMassMatrixFcn; |
| 69 | + rtMdlForcingFunctionFcn rtmForcingFunctionFcn; |
| 70 | + rtMdlTerminateFcn rtmTerminateFcn; |
| 71 | +#ifdef RT_MALLOC |
| 72 | + rtMdlDiscreteEventsFcn rtmDiscreteEventsFcn; |
| 73 | +#endif |
| 74 | +} RTWRTModelMethodsInfo; |
| 75 | + |
| 76 | +#define rtmiSetRTModelPtr(M, rtmp) ((M).rtModelPtr = (rtmp)) |
| 77 | +#define rtmiGetRTModelPtr(M) (M).rtModelPtr |
| 78 | + |
| 79 | +#define rtmiSetInitSizesFcn(M, fp) ((M).rtmInitSizesFcn = ((rtMdlInitializeSizesFcn)(fp))) |
| 80 | +#define rtmiSetInitSampTimesFcn(M, fp) \ |
| 81 | + ((M).rtmInitSampTimesFcn = ((rtMdlInitializeSampleTimesFcn)(fp))) |
| 82 | +#define rtmiSetStartFcn(M, fp) ((M).rtmStartFcn = ((rtMdlStartFcn)(fp))) |
| 83 | +#define rtmiSetOutputsFcn(M, fp) ((M).rtmOutputsFcn = ((rtMdlOutputsFcn)(fp))) |
| 84 | +#define rtmiSetUpdateFcn(M, fp) ((M).rtmUpdateFcn = ((rtMdlUpdateFcn)(fp))) |
| 85 | +#define rtmiSetDervisFcn(M, fp) ((M).rtmDervisFcn = ((rtMdlDerivativesFcn)(fp))) |
| 86 | +#define rtmiSetProjectionFcn(M, fp) ((M).rtmProjectionFcn = ((rtMdlProjectionFcn)(fp))) |
| 87 | +#define rtmiSetMassMatrixFcn(M, fp) ((M).rtmMassMatrixFcn = ((rtMdlMassMatrixFcn)(fp))) |
| 88 | +#define rtmiSetForcingFunctionFcn(M, fp) \ |
| 89 | + ((M).rtmForcingFunctionFcn = ((rtMdlForcingFunctionFcn)(fp))) |
| 90 | +#define rtmiSetTerminateFcn(M, fp) ((M).rtmTerminateFcn = ((rtMdlTerminateFcn)(fp))) |
| 91 | +#ifdef RT_MALLOC |
| 92 | +#define rtmiSetDiscreteEventsFcn(M, fp) ((M).rtmDiscreteEventsFcn = ((rtMdlDiscreteEventsFcn)(fp))) |
| 93 | +#endif |
| 94 | + |
| 95 | +#define rtmiInitializeSizes(M) ((*(M).rtmInitSizesFcn)((M).rtModelPtr)) |
| 96 | +#define rtmiInitializeSampleTimes(M) ((*(M).rtmInitSampTimesFcn)((M).rtModelPtr)) |
| 97 | +#define rtmiStart(M) ((*(M).rtmStartFcn)((M).rtModelPtr)) |
| 98 | +#define rtmiOutputs(M, tid) ((*(M).rtmOutputsFcn)((M).rtModelPtr, tid)) |
| 99 | +#define rtmiUpdate(M, tid) ((*(M).rtmUpdateFcn)((M).rtModelPtr, tid)) |
| 100 | +#define rtmiDerivatives(M) ((*(M).rtmDervisFcn)((M).rtModelPtr)) |
| 101 | +#define rtmiProjection(M) ((*(M).rtmProjectionFcn)((M).rtModelPtr)) |
| 102 | +#define rtmiMassMatrix(M) ((*(M).rtmMassMatrixFcn)((M).rtModelPtr)) |
| 103 | +#define rtmiForcingFunction(M) ((*(M).rtmForcingFunctionFcn)((M).rtModelPtr)) |
| 104 | +#define rtmiTerminate(M) ((*(M).rtmTerminateFcn)((M).rtModelPtr)) |
| 105 | +#ifdef RT_MALLOC |
| 106 | +#define rtmiDiscreteEvents(M, x1, x2, x3, x4) \ |
| 107 | + ((*(M).rtmDiscreteEventsFcn)((M).rtModelPtr, (x1), (x2), (x3), (x4))) |
| 108 | +#endif |
| 109 | +#endif /* __RTW_CONTINUOUS_H__ */ |
0 commit comments