static void mdlInitializeConditions(SimStruct *S) { if (ssGetNumPWork(S) > 0) { wbt::Block *block = static_cast<wbt::Block*>(ssGetPWorkValue(S, 0)); wbt::Error error; if (!block || !block->initializeInitialConditions(S, &error)) { static char errorBuffer[1024]; sprintf(errorBuffer, "[mdlInitializeConditions]%s", error.message.substr(0, 1023 - strlen("[mdlInitializeConditions]")).c_str()); ssSetErrorStatus(S, errorBuffer); } } }
static void mdlUpdate(SimStruct *S, int_T tid) { UNUSED_ARG(tid); if (ssGetNumPWork(S) > 0) { wbt::Block *block = static_cast<wbt::Block*>(ssGetPWorkValue(S, 0)); wbt::Error error; if (!block || !block->updateDiscreteState(S, &error)) { static char errorBuffer[1024]; sprintf(errorBuffer, "[mdlOutputs]%s", error.message.substr(0, 1023 - strlen("[mdlOutputs]")).c_str()); ssSetErrorStatus(S, errorBuffer); } } }
static void mdlTerminate(SimStruct *S) { PCONFIG_DATA config; /* Retrieve and destroy C object */ if( ssGetNumPWork(S) > 0 ) { config = ssGetPWork(S)[0]; if( config ) { free(config); ssGetPWork(S)[0] = 0; } } }
static void mdlTerminate(SimStruct *S) { if (ssGetNumPWork(S) > 0 && ssGetPWork(S)) { wbt::Block *block = static_cast<wbt::Block*>(ssGetPWorkValue(S, 0)); wbt::Error error; if (block) { if (block->terminate(S, &error)) { delete block; ssSetPWorkValue(S, 0, NULL); } else { static char errorBuffer[1024]; sprintf(errorBuffer, "[mdlTerminate]%s", error.message.substr(0, 1023 - strlen("[mdlTerminate]")).c_str()); ssSetErrorStatus(S, errorBuffer); } } } }