/* * Copyright 1990-2004 The MathWorks, Inc. * * File: rtw_continuous.h $Revision: 1.1.6.3 $ * * Abstract: * Type definitions for continuous-time support. * */ #ifndef __RTW_CONTINUOUS_H__ #define __RTW_CONTINUOUS_H__ /* For models registering MassMatrix */ typedef enum { SS_MATRIX_NONE, SS_MATRIX_CONSTANT, SS_MATRIX_TIMEDEP, SS_MATRIX_STATEDEP } ssMatrixType; typedef enum { SOLVER_MODE_AUTO, /* only occurs in mdlInitializeSizes/mdlInitializeSampleTimes */ SOLVER_MODE_SINGLETASKING, SOLVER_MODE_MULTITASKING } SolverMode; typedef enum { MINOR_TIME_STEP, MAJOR_TIME_STEP } SimTimeStep; /* ============================================================================= * Model methods object * ============================================================================= */ typedef void (*rtMdlInitializeSizesFcn)(void *rtModel); typedef void (*rtMdlInitializeSampleTimesFcn)(void *rtModel); typedef void (*rtMdlStartFcn)(void *rtModel); typedef void (*rtMdlOutputsFcn)(void *rtModel, int_T tid); typedef void (*rtMdlUpdateFcn)(void *rtModel, int_T tid); typedef void (*rtMdlDerivativesFcn)(void *rtModel); typedef void (*rtMdlProjectionFcn)(void *rtModel); typedef void (*rtMdlTerminateFcn)(void *rtModel); typedef struct _RTWRTModelMethodsInfo_tag { void *rtModelPtr; rtMdlInitializeSizesFcn rtmInitSizesFcn; rtMdlInitializeSampleTimesFcn rtmInitSampTimesFcn; rtMdlStartFcn rtmStartFcn; rtMdlOutputsFcn rtmOutputsFcn; rtMdlUpdateFcn rtmUpdateFcn; rtMdlDerivativesFcn rtmDervisFcn; rtMdlProjectionFcn rtmProjectionFcn; rtMdlTerminateFcn rtmTerminateFcn; } RTWRTModelMethodsInfo; #define rtmiSetRTModelPtr(M,rtmp) ((M).rtModelPtr = (rtmp)) #define rtmiGetRTModelPtr(M) (M).rtModelPtr #define rtmiSetInitSizesFcn(M,fp) \ ((M).rtmInitSizesFcn = ((rtMdlInitializeSizesFcn)(fp))) #define rtmiSetInitSampTimesFcn(M,fp) \ ((M).rtmInitSampTimesFcn = ((rtMdlInitializeSampleTimesFcn)(fp))) #define rtmiSetStartFcn(M,fp) \ ((M).rtmStartFcn = ((rtMdlStartFcn)(fp))) #define rtmiSetOutputsFcn(M,fp) \ ((M).rtmOutputsFcn = ((rtMdlOutputsFcn)(fp))) #define rtmiSetUpdateFcn(M,fp) \ ((M).rtmUpdateFcn = ((rtMdlUpdateFcn)(fp))) #define rtmiSetDervisFcn(M,fp) \ ((M).rtmDervisFcn = ((rtMdlDerivativesFcn)(fp))) #define rtmiSetProjectionFcn(M,fp) \ ((M).rtmProjectionFcn = ((rtMdlProjectionFcn)(fp))) #define rtmiSetTerminateFcn(M,fp) \ ((M).rtmTerminateFcn = ((rtMdlTerminateFcn)(fp))) #define rtmiInitializeSizes(M) \ (*(M).rtmInitSizesFcn)((M).rtModelPtr) #define rtmiInitializeSampleTimes(M) \ (*(M).rtmInitSampTimesFcn)((M).rtModelPtr) #define rtmiStart(M) \ (*(M).rtmStartFcn)((M).rtModelPtr) #define rtmiOutputs(M, tid) \ (*(M).rtmOutputsFcn)((M).rtModelPtr,tid) #define rtmiUpdate(M, tid) \ (*(M).rtmUpdateFcn)((M).rtModelPtr,tid) #define rtmiDerivatives(M) \ (*(M).rtmDervisFcn)((M).rtModelPtr) #define rtmiProjection(M) \ (*(M).rtmProjectionFcn)((M).rtModelPtr) #define rtmiTerminate(M) \ (*(M).rtmTerminateFcn)((M).rtModelPtr) #endif /* __RTW_CONTINUOUS_H__ */