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 #ifndef FMI1_FUNCTIONS_H_
\r
17 #define FMI1_FUNCTIONS_H_
\r
19 #include <fmilib_config.h>
\r
21 #include "fmi1_types.h"
\r
23 /** \file fmi1_functions.h
\r
24 Mapping for the standard FMI 1.0 functions into fmi1_ namespace.
\r
26 \addtogroup fmi1_utils
\r
30 /** FMI 1.0 status codes */
\r
33 fmi1_status_warning,
\r
34 fmi1_status_discard,
\r
40 /** Convert #fmi1_status_t variable to string */
\r
41 FMILIB_EXPORT const char* fmi1_status_to_string(fmi1_status_t status);
\r
43 /** FMI 1.0 logger function type */
\r
44 typedef void (*fmi1_callback_logger_ft) (fmi1_component_t c, fmi1_string_t instanceName, fmi1_status_t status, fmi1_string_t category, fmi1_string_t message, ...);
\r
45 /** FMI 1.0 allocate memory function type */
\r
46 typedef void* (*fmi1_callback_allocate_memory_ft)(size_t nobj, size_t size);
\r
47 /** FMI 1.0 free memory function type */
\r
48 typedef void (*fmi1_callback_free_memory_ft) (void* obj);
\r
49 /** FMI 1.0 step finished callback function type */
\r
50 typedef void (*fmi1_step_finished_ft) (fmi1_component_t c, fmi1_status_t status);
\r
52 /** Functions for FMI 1.0 ME */
\r
54 fmi1_callback_logger_ft logger;
\r
55 fmi1_callback_allocate_memory_ft allocateMemory;
\r
56 fmi1_callback_free_memory_ft freeMemory;
\r
57 } fmi1_me_callback_functions_t;
\r
59 /** The FMI 1.0 CS strcuture adds one field to the ME, otherwize compatible */
\r
61 fmi1_callback_logger_ft logger;
\r
62 fmi1_callback_allocate_memory_ft allocateMemory;
\r
63 fmi1_callback_free_memory_ft freeMemory;
\r
64 fmi1_step_finished_ft stepFinished;
\r
65 } fmi1_callback_functions_t;
\r
67 /** Event info structure as used in FMI 1.0 ME */
\r
69 fmi1_boolean_t iterationConverged;
\r
70 fmi1_boolean_t stateValueReferencesChanged;
\r
71 fmi1_boolean_t stateValuesChanged;
\r
72 fmi1_boolean_t terminateSimulation;
\r
73 fmi1_boolean_t upcomingTimeEvent;
\r
74 fmi1_real_t nextEventTime;
\r
75 } fmi1_event_info_t;
\r
77 /** FMI 1.0 asyncronous co-simulation status */
\r
79 fmi1_do_step_status,
\r
80 fmi1_pending_status,
\r
81 fmi1_last_successful_time
\r
82 } fmi1_status_kind_t;
\r
84 /* FMI 1.0 common functions */
\r
85 typedef const char* (*fmi1_get_version_ft) (void);
\r
86 typedef fmi1_status_t (*fmi1_set_debug_logging_ft) (fmi1_component_t c, fmi1_boolean_t loggingOn);
\r
87 typedef fmi1_status_t (*fmi1_set_real_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, const fmi1_real_t value[]);
\r
88 typedef fmi1_status_t (*fmi1_set_integer_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, const fmi1_integer_t value[]);
\r
89 typedef fmi1_status_t (*fmi1_set_boolean_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, const fmi1_boolean_t value[]);
\r
90 typedef fmi1_status_t (*fmi1_set_string_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, const fmi1_string_t value[]);
\r
91 typedef fmi1_status_t (*fmi1_get_real_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, fmi1_real_t value[]);
\r
92 typedef fmi1_status_t (*fmi1_get_integer_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, fmi1_integer_t value[]);
\r
93 typedef fmi1_status_t (*fmi1_get_boolean_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, fmi1_boolean_t value[]);
\r
94 typedef fmi1_status_t (*fmi1_get_string_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, fmi1_string_t value[]);
\r
96 /* FMI ME 1.0 functions */
\r
97 typedef const char* (*fmi1_get_model_typesPlatform_ft) (void);
\r
98 typedef fmi1_component_t (*fmi1_instantiate_model_ft) (fmi1_string_t instanceName, fmi1_string_t GUID, fmi1_me_callback_functions_t functions, fmi1_boolean_t loggingOn);
\r
99 typedef void (*fmi1_free_model_instance_ft) (fmi1_component_t c);
\r
100 typedef fmi1_status_t (*fmi1_set_time_ft) (fmi1_component_t c, fmi1_real_t time);
\r
101 typedef fmi1_status_t (*fmi1_set_continuous_states_ft) (fmi1_component_t c, const fmi1_real_t x[], size_t nx);
\r
102 typedef fmi1_status_t (*fmi1_completed_integrator_step_ft) (fmi1_component_t c, fmi1_boolean_t* callEventUpdate);
\r
103 typedef fmi1_status_t (*fmi1_initialize_ft) (fmi1_component_t c, fmi1_boolean_t toleranceControlled, fmi1_real_t relativeTolerance, fmi1_event_info_t* eventInfo);
\r
104 typedef fmi1_status_t (*fmi1_get_derivatives_ft) (fmi1_component_t c, fmi1_real_t derivatives[] , size_t nx);
\r
105 typedef fmi1_status_t (*fmi1_get_event_indicators_ft) (fmi1_component_t c, fmi1_real_t eventIndicators[], size_t ni);
\r
106 typedef fmi1_status_t (*fmi1_event_update_ft) (fmi1_component_t c, fmi1_boolean_t intermediateResults, fmi1_event_info_t* eventInfo);
\r
107 typedef fmi1_status_t (*fmi1_get_continuous_states_ft) (fmi1_component_t c, fmi1_real_t states[], size_t nx);
\r
108 typedef fmi1_status_t (*fmi1_get_nominal_continuousStates_ft) (fmi1_component_t c, fmi1_real_t x_nominal[], size_t nx);
\r
109 typedef fmi1_status_t (*fmi1_get_state_valueReferences_ft) (fmi1_component_t c, fmi1_value_reference_t vrx[], size_t nx);
\r
110 typedef fmi1_status_t (*fmi1_terminate_ft) (fmi1_component_t c);
\r
113 /* FMI CS 1.0 functions */
\r
114 typedef const char* (*fmi1_get_types_platform_ft) (void );
\r
115 typedef fmi1_component_t (*fmi1_instantiate_slave_ft) (fmi1_string_t instanceName, fmi1_string_t fmuGUID, fmi1_string_t fmuLocation,
\r
116 fmi1_string_t mimeType, fmi1_real_t timeout, fmi1_boolean_t visible, fmi1_boolean_t interactive,
\r
117 fmi1_callback_functions_t functions, fmi1_boolean_t loggingOn);
\r
118 typedef fmi1_status_t (*fmi1_initialize_slave_ft) (fmi1_component_t c, fmi1_real_t tStart, fmi1_boolean_t StopTimeDefined, fmi1_real_t tStop);
\r
119 typedef fmi1_status_t (*fmi1_terminate_slave_ft) (fmi1_component_t c);
\r
120 typedef fmi1_status_t (*fmi1_reset_slave_ft) (fmi1_component_t c);
\r
121 typedef void (*fmi1_free_slave_instance_ft) (fmi1_component_t c);
\r
122 typedef fmi1_status_t (*fmi1_set_real_inputDerivatives_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, const fmi1_integer_t order[], const fmi1_real_t value[]);
\r
123 typedef fmi1_status_t (*fmi1_get_real_outputDerivatives_ft) (fmi1_component_t c, const fmi1_value_reference_t vr[], size_t nvr, const fmi1_integer_t order[], fmi1_real_t value[]);
\r
124 typedef fmi1_status_t (*fmi1_cancel_step_ft) (fmi1_component_t c);
\r
125 typedef fmi1_status_t (*fmi1_do_step_ft) (fmi1_component_t c, fmi1_real_t currentCommunicationPoint, fmi1_real_t communicationStepSize, fmi1_boolean_t newStep);
\r
127 typedef fmi1_status_t (*fmi1_get_status_ft) (fmi1_component_t c, const fmi1_status_kind_t s, fmi1_status_t* value);
\r
128 typedef fmi1_status_t (*fmi1_get_real_status_ft) (fmi1_component_t c, const fmi1_status_kind_t s, fmi1_real_t* value);
\r
129 typedef fmi1_status_t (*fmi1_get_integer_status_ft) (fmi1_component_t c, const fmi1_status_kind_t s, fmi1_integer_t* value);
\r
130 typedef fmi1_status_t (*fmi1_get_boolean_status_ft) (fmi1_component_t c, const fmi1_status_kind_t s, fmi1_boolean_t* value);
\r
131 typedef fmi1_status_t (*fmi1_get_string_status_ft) (fmi1_component_t c, const fmi1_status_kind_t s, fmi1_string_t* value);
\r
136 #endif /* End of header file FMI_FUNCTIONS_H_ */
\r