Skip to content

Commit

Permalink
Use different call sequence logics for ME and CS
Browse files Browse the repository at this point in the history
  • Loading branch information
lochel authored and OpenModelica-Hudson committed Jun 14, 2017
1 parent 71eeb5f commit b11bb97
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 14 deletions.
56 changes: 48 additions & 8 deletions SimulationRuntime/fmi/export/fmi2/fmu2_model_interface.c
Expand Up @@ -636,8 +636,18 @@ fmi2Status fmi2GetString(fmi2Component c, const fmi2ValueReference vr[], size_t
fmi2Status fmi2SetReal(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Real value[]) {
int i;
ModelInstance *comp = (ModelInstance *)c;
if (invalidState(comp, "fmi2SetReal", modelInstantiated|modelInitializationMode|modelEventMode|modelContinuousTimeMode))
return fmi2Error;

if (fmi2ModelExchange == comp->type)
{
if (invalidState(comp, "fmi2SetReal", modelInstantiated|modelInitializationMode|modelEventMode|modelContinuousTimeMode))
return fmi2Error;
}
else /* fmi2CoSimulation */
{
if (invalidState(comp, "fmi2SetReal", modelInstantiated|modelInitializationMode|modelEventMode|modelContinuousTimeMode))
return fmi2Error;
}

if (nvr > 0 && nullPointer(comp, "fmi2SetReal", "vr[]", vr))
return fmi2Error;
if (nvr > 0 && nullPointer(comp, "fmi2SetReal", "value[]", value))
Expand All @@ -658,8 +668,18 @@ fmi2Status fmi2SetReal(fmi2Component c, const fmi2ValueReference vr[], size_t nv
fmi2Status fmi2SetInteger(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer value[]) {
int i;
ModelInstance *comp = (ModelInstance *)c;
if (invalidState(comp, "fmi2SetInteger", modelInstantiated|modelInitializationMode|modelEventMode|modelContinuousTimeMode))
return fmi2Error;

if (fmi2ModelExchange == comp->type)
{
if (invalidState(comp, "fmi2SetInteger", modelInstantiated|modelInitializationMode|modelEventMode))
return fmi2Error;
}
else /* fmi2CoSimulation */
{
if (invalidState(comp, "fmi2SetInteger", modelInstantiated|modelInitializationMode|modelEventMode|modelContinuousTimeMode))
return fmi2Error;
}

if (nvr > 0 && nullPointer(comp, "fmi2SetInteger", "vr[]", vr))
return fmi2Error;
if (nvr > 0 && nullPointer(comp, "fmi2SetInteger", "value[]", value))
Expand All @@ -680,8 +700,18 @@ fmi2Status fmi2SetInteger(fmi2Component c, const fmi2ValueReference vr[], size_t
fmi2Status fmi2SetBoolean(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Boolean value[]) {
int i;
ModelInstance *comp = (ModelInstance *)c;
if (invalidState(comp, "fmi2SetBoolean", modelInstantiated|modelInitializationMode|modelEventMode))
return fmi2Error;

if (fmi2ModelExchange == comp->type)
{
if (invalidState(comp, "fmi2SetBoolean", modelInstantiated|modelInitializationMode|modelEventMode))
return fmi2Error;
}
else /* fmi2CoSimulation */
{
if (invalidState(comp, "fmi2SetBoolean", modelInstantiated|modelInitializationMode|modelEventMode|modelContinuousTimeMode))
return fmi2Error;
}

if (nvr>0 && nullPointer(comp, "fmi2SetBoolean", "vr[]", vr))
return fmi2Error;
if (nvr>0 && nullPointer(comp, "fmi2SetBoolean", "value[]", value))
Expand All @@ -702,8 +732,18 @@ fmi2Status fmi2SetBoolean(fmi2Component c, const fmi2ValueReference vr[], size_t
fmi2Status fmi2SetString(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2String value[]) {
int i, n;
ModelInstance *comp = (ModelInstance *)c;
if (invalidState(comp, "fmi2SetString", modelInstantiated|modelInitializationMode|modelEventMode))
return fmi2Error;

if (fmi2ModelExchange == comp->type)
{
if (invalidState(comp, "fmi2SetString", modelInstantiated|modelInitializationMode|modelEventMode))
return fmi2Error;
}
else /* fmi2CoSimulation */
{
if (invalidState(comp, "fmi2SetString", modelInstantiated|modelInitializationMode|modelEventMode|modelContinuousTimeMode))
return fmi2Error;
}

if (nvr>0 && nullPointer(comp, "fmi2SetString", "vr[]", vr))
return fmi2Error;
if (nvr>0 && nullPointer(comp, "fmi2SetString", "value[]", value))
Expand Down
13 changes: 7 additions & 6 deletions SimulationRuntime/fmi/export/fmi2/fmu2_model_interface.h
Expand Up @@ -55,12 +55,13 @@ extern "C" {
#define NUMBER_OF_CATEGORIES 11

typedef enum {
modelInstantiated = 1<<0,
modelInitializationMode = 1<<1,
modelEventMode = 1<<2,
modelContinuousTimeMode = 1<<3,
modelTerminated = 1<<4,
modelError = 1<<5
modelInstantiated = 1<<0, /* ME and CS */
modelInitializationMode = 1<<1, /* ME and CS */
modelContinuousTimeMode = 1<<2, /* ME only */
modelEventMode = 1<<3, /* ME */
modelSlaveInitialized = 1<<4, /* CS only */
modelTerminated = 1<<5, /* ME and CS */
modelError = 1<<6 /* ME and CS*/
} ModelState;

typedef struct {
Expand Down

0 comments on commit b11bb97

Please sign in to comment.