2 Copyright (C) 2012 Modelon AB
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the BSD style license.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 FMILIB_License.txt file for more details.
12 You should have received a copy of the FMILIB_License.txt file
13 along with this program. If not, contact Modelon AB <http://www.modelon.com>.
16 #include "fmi1_xml_parser.h"
17 #include "fmi1_xml_capabilities_impl.h"
18 #include "fmi1_xml_model_description_impl.h"
20 int fmi1_xml_get_canHandleVariableCommunicationStepSize(fmi1_xml_capabilities_t* c ) {
21 return c->canHandleVariableCommunicationStepSize;
23 int fmi1_xml_get_canHandleEvents(fmi1_xml_capabilities_t* c ) {
24 return c->canHandleEvents;
26 int fmi1_xml_get_canRejectSteps(fmi1_xml_capabilities_t* c ) {
27 return c->canRejectSteps;
29 int fmi1_xml_get_canInterpolateInputs(fmi1_xml_capabilities_t* c ) {
30 return c->canInterpolateInputs;
32 unsigned int fmi1_xml_get_maxOutputDerivativeOrder(fmi1_xml_capabilities_t* c ) {
33 return c->maxOutputDerivativeOrder;
35 int fmi1_xml_get_canRunAsynchronuously(fmi1_xml_capabilities_t* c ) {
36 return c->canRunAsynchronuously;
38 int fmi1_xml_get_canSignalEvents(fmi1_xml_capabilities_t* c ) {
39 return c->canSignalEvents;
41 int fmi1_xml_get_canBeInstantiatedOnlyOncePerProcess(fmi1_xml_capabilities_t* c ) {
42 return c->canBeInstantiatedOnlyOncePerProcess;
44 int fmi1_xml_get_canNotUseMemoryManagementFunctions(fmi1_xml_capabilities_t* c ) {
45 return c->canNotUseMemoryManagementFunctions;
48 fmi1_xml_capabilities_t *fmi1_xml_default_capabilities(jm_callbacks *cb) {
49 return cb->calloc(1, sizeof(fmi1_xml_capabilities_t));
52 int fmi1_xml_handle_Capabilities(fmi1_xml_parser_context_t *context, const char* data) {
53 fmi1_xml_model_description_t* md = context->modelDescription;
54 jm_callbacks *cb = context->callbacks;
58 md->capabilities = cb->calloc(1, sizeof(fmi1_xml_capabilities_t));
60 if (fmi1_xml_is_attr_defined(context, fmi_attr_id_canSignalEvents)) {
61 fmi1_xml_parse_error(context, "Found capability flag canSignalEvents "
62 "which have been deprecated as it fills no function");
66 /* <xs:attribute name="canHandleVariableCommunicationStepSize" type="xs:boolean" default="false"/> */
67 fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canHandleVariableCommunicationStepSize,0,
68 &md->capabilities->canHandleVariableCommunicationStepSize,0) ||
69 /* <xs:attribute name="canHandleEvents" type="xs:boolean" default="false"/> */
70 fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canHandleEvents,0,
71 &md->capabilities->canHandleEvents,0) ||
72 /* <xs:attribute name="canRejectSteps" type="xs:boolean" default="false"/> */
73 fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canRejectSteps,0,
74 &md->capabilities->canRejectSteps,0) ||
75 /* <xs:attribute name="canInterpolateInputs" type="xs:boolean" default="false"/> */
76 fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canInterpolateInputs,0,
77 &md->capabilities->canInterpolateInputs,0) ||
78 /* <xs:attribute name="maxOutputDerivativeOrder" type="xs:unsignedInt" default="0"/> */
79 fmi1_xml_set_attr_uint(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_maxOutputDerivativeOrder,0,
80 &md->capabilities->maxOutputDerivativeOrder,0) ||
81 /* <xs:attribute name="canRunAsynchronuously" type="xs:boolean" default="false"/> */
82 fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canRunAsynchronuously,0,
83 &md->capabilities->canRunAsynchronuously,0) ||
84 /* <xs:attribute name="canSignalEvents" type="xs:boolean" default="false"/> */
85 fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canSignalEvents,0,
86 &md->capabilities->canSignalEvents,0) ||
87 /* <xs:attribute name="canBeInstantiatedOnlyOncePerProcess" type="xs:boolean" default="false"/> */
88 fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canBeInstantiatedOnlyOncePerProcess,0,
89 &md->capabilities->canBeInstantiatedOnlyOncePerProcess,0) ||
90 /* <xs:attribute name="canNotUseMemoryManagementFunctions" type="xs:boolean" default="false"/> */
91 fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canNotUseMemoryManagementFunctions,0,
92 &md->capabilities->canNotUseMemoryManagementFunctions,0)