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 _FMI2_FUNCTION_TYPES_H_
\r
17 #define _FMI2_FUNCTION_TYPES_H_
\r
20 #include <fmilib_config.h>
\r
22 #include "fmi2_types.h"
\r
23 /** \file fmi2_functions.h
\r
24 Mapping for the standard FMI 2.0 functions into fmi2_ namespace.
\r
26 \addtogroup fmi2_utils
\r
33 /* make sure all compiler use the same alignment policies for structures */
\r
34 #if defined _MSC_VER || defined __GNUC__
\r
35 #pragma pack(push,8)
\r
39 /** FMI 2.0 status codes */
\r
42 fmi2_status_warning,
\r
43 fmi2_status_discard,
\r
55 /* Type definitions */
\r
57 /** Convert #fmi2_status_t variable to string */
\r
58 FMILIB_EXPORT const char* fmi2_status_to_string(fmi2_status_t status);
\r
60 /** FMI 2.0 logger function type */
\r
61 typedef void (*fmi2_callback_logger_ft) (fmi2_component_environment_t env, fmi2_string_t instanceName, fmi2_status_t status, fmi2_string_t category, fmi2_string_t message, ...);
\r
62 /** FMI 2.0 allocate memory function type */
\r
63 typedef void* (*fmi2_callback_allocate_memory_ft)(size_t nobj, size_t size);
\r
64 /** FMI 2.0 free memory function type */
\r
65 typedef void (*fmi2_callback_free_memory_ft) (void* obj);
\r
66 /** FMI 2.0 step finished callback function type */
\r
67 typedef void (*fmi2_step_finished_ft) (fmi2_component_environment_t env, fmi2_status_t status);
\r
69 /** The FMI 2.0 callbacks */
\r
71 fmi2_callback_logger_ft logger;
\r
72 fmi2_callback_allocate_memory_ft allocateMemory;
\r
73 fmi2_callback_free_memory_ft freeMemory;
\r
74 fmi2_step_finished_ft stepFinished;
\r
75 fmi2_component_environment_t componentEnvironment;
\r
76 } fmi2_callback_functions_t;
\r
78 /** Event info structure as used in FMI 2.0 ME */
\r
79 /* TODO: reuse from fmiFunctions.h */
81 fmi2_boolean_t newDiscreteStatesNeeded;
82 fmi2_boolean_t terminateSimulation;
83 fmi2_boolean_t nominalsOfContinuousStatesChanged;
84 fmi2_boolean_t valuesOfContinuousStatesChanged;
85 fmi2_boolean_t nextEventTimeDefined;
86 fmi2_real_t nextEventTime;
89 /** Co-simulation status for FMI 2.0 CS */
\r
90 /* TODO: reuse from fmiFunctions.h */
92 fmi2_do_step_status,
\r
93 fmi2_pending_status,
\r
94 fmi2_last_successful_time,
\r
96 } fmi2_status_kind_t;
\r
100 /* reset alignment policy to the one set before reading this file */
\r
101 #if defined _MSC_VER || defined __GNUC__
\r
105 /* Define fmi function pointer types to simplify dynamic loading */
\r
107 /***************************************************
\r
108 Types for Common Functions
\r
109 ****************************************************/
\r
111 /* Inquire version numbers of header files and setting logging status */
\r
112 typedef const char* (*fmi2_get_types_platform_ft)();
\r
113 typedef const char* (*fmi2_get_version_ft)();
\r
114 typedef fmi2_status_t (*fmi2_set_debug_logging_ft)(fmi2_component_t, fmi2_boolean_t,size_t nCategories, const fmi2_string_t categories[]);
\r
116 /* Creation and destruction of fmu instances and setting debug status */
117 typedef fmi2_component_t (*fmi2_instantiate_ft) (fmi2_string_t, fmi2_type_t, fmi2_string_t, fmi2_string_t, const fmi2_callback_functions_t*, fmi2_boolean_t, fmi2_boolean_t);
118 typedef void (*fmi2_free_instance_ft)(fmi2_component_t);
120 /* Enter and exit initialization mode, terminate and reset */
121 typedef fmi2_status_t (*fmi2_setup_experiment_ft) (fmi2_component_t, fmi2_boolean_t, fmi2_real_t, fmi2_real_t, fmi2_boolean_t, fmi2_real_t);
122 typedef fmi2_status_t (*fmi2_enter_initialization_mode_ft) (fmi2_component_t);
123 typedef fmi2_status_t (*fmi2_exit_initialization_mode_ft) (fmi2_component_t);
124 typedef fmi2_status_t (*fmi2_terminate_ft) (fmi2_component_t);
125 typedef fmi2_status_t (*fmi2_reset_ft) (fmi2_component_t);
127 /* Getting and setting variable values */
\r
128 typedef fmi2_status_t (*fmi2_get_real_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_real_t []);
\r
129 typedef fmi2_status_t (*fmi2_get_integer_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_integer_t[]);
\r
130 typedef fmi2_status_t (*fmi2_get_boolean_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_boolean_t[]);
\r
131 typedef fmi2_status_t (*fmi2_get_string_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_string_t []);
\r
133 typedef fmi2_status_t (*fmi2_set_real_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_real_t []);
\r
134 typedef fmi2_status_t (*fmi2_set_integer_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_integer_t[]);
\r
135 typedef fmi2_status_t (*fmi2_set_boolean_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_boolean_t[]);
\r
136 typedef fmi2_status_t (*fmi2_set_string_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_string_t []);
\r
138 /* Getting and setting the internal _fmu_ state */
\r
139 typedef fmi2_status_t (*fmi2_get_fmu_state_ft) (fmi2_component_t, fmi2_FMU_state_t*);
\r
140 typedef fmi2_status_t (*fmi2_set_fmu_state_ft) (fmi2_component_t, fmi2_FMU_state_t);
\r
141 typedef fmi2_status_t (*fmi2_free_fmu_state_ft) (fmi2_component_t, fmi2_FMU_state_t*);
\r
142 typedef fmi2_status_t (*fmi2_serialized_fmu_state_size_ft)(fmi2_component_t, fmi2_FMU_state_t, size_t*);
\r
143 typedef fmi2_status_t (*fmi2_serialize_fmu_state_ft) (fmi2_component_t, fmi2_FMU_state_t, fmi2_byte_t[], size_t);
\r
144 typedef fmi2_status_t (*fmi2_de_serialize_fmu_state_ft) (fmi2_component_t, const fmi2_byte_t[], size_t, fmi2_FMU_state_t*);
\r
146 /* Getting directional derivatives */
147 typedef fmi2_status_t (*fmi2_get_directional_derivative_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t,
\r
148 const fmi2_value_reference_t[], size_t,
\r
149 const fmi2_real_t[], fmi2_real_t[]);
\r
151 /***************************************************
\r
152 Types for Functions for FMI for Model Exchange
\r
153 ****************************************************/
\r
155 /* Enter and exit the different modes */
156 typedef fmi2_status_t (*fmi2_enter_event_mode_ft) (fmi2_component_t);
157 typedef fmi2_status_t (*fmi2_new_discrete_states_ft) (fmi2_component_t, fmi2_event_info_t*);
158 typedef fmi2_status_t (*fmi2_enter_continuous_time_mode_ft)(fmi2_component_t);
159 typedef fmi2_status_t (*fmi2_completed_integrator_step_ft) (fmi2_component_t, fmi2_boolean_t, fmi2_boolean_t*, fmi2_boolean_t*);
161 /* Providing independent variables and re-initialization of caching */
\r
162 typedef fmi2_status_t (*fmi2_set_time_ft) (fmi2_component_t, fmi2_real_t);
\r
163 typedef fmi2_status_t (*fmi2_set_continuous_states_ft) (fmi2_component_t, const fmi2_real_t[], size_t);
\r
165 /* Evaluation of the model equations */
\r
166 typedef fmi2_status_t (*fmi2_get_derivatives_ft) (fmi2_component_t, fmi2_real_t[], size_t);
\r
167 typedef fmi2_status_t (*fmi2_get_event_indicators_ft) (fmi2_component_t, fmi2_real_t[], size_t);
\r
168 typedef fmi2_status_t (*fmi2_get_continuous_states_ft) (fmi2_component_t, fmi2_real_t[], size_t);
\r
169 typedef fmi2_status_t (*fmi2_get_nominals_of_continuous_states_ft)(fmi2_component_t, fmi2_real_t[], size_t);
\r
172 /***************************************************
\r
173 Types for_functions for FMI for Co-_simulation
\r
174 ****************************************************/
\r
176 /* Simulating the slave */
\r
177 typedef fmi2_status_t (*fmi2_set_real_input_derivatives_ft) (fmi2_component_t, const fmi2_value_reference_t [], size_t, const fmi2_integer_t [], const fmi2_real_t []);
\r
178 typedef fmi2_status_t (*fmi2_get_real_output_derivatives_ft)(fmi2_component_t, const fmi2_value_reference_t [], size_t, const fmi2_integer_t [], fmi2_real_t []);
\r
180 typedef fmi2_status_t (*fmi2_do_step_ft) (fmi2_component_t, fmi2_real_t, fmi2_real_t, fmi2_boolean_t);
\r
181 typedef fmi2_status_t (*fmi2_cancel_step_ft) (fmi2_component_t);
\r
183 /* Inquire slave status */
\r
184 typedef fmi2_status_t (*fmi2_get_status_ft) (fmi2_component_t, const fmi2_status_kind_t, fmi2_status_t* );
\r
185 typedef fmi2_status_t (*fmi2_get_real_status_ft) (fmi2_component_t, const fmi2_status_kind_t, fmi2_real_t* );
\r
186 typedef fmi2_status_t (*fmi2_get_integer_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_integer_t*);
\r
187 typedef fmi2_status_t (*fmi2_get_boolean_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_boolean_t*);
\r
188 typedef fmi2_status_t (*fmi2_get_string_status_ft) (fmi2_component_t, const fmi2_status_kind_t, fmi2_string_t* );
\r
194 } /* end of extern "C" { */
\r
197 #endif /* fmi2_function_types_h */
\r