FMI Library: part of JModelica.org
fmi2_functions.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2012 Modelon AB
3 
4  This program is free software: you can redistribute it and/or modify
5  it under the terms of the BSD style license.
6 
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.
11 
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>.
14 */
15 
16 #ifndef _FMI2_FUNCTION_TYPES_H_
17 #define _FMI2_FUNCTION_TYPES_H_
18 
19 #include <string.h>
20 #include <fmilib_config.h>
21 
22 #include "fmi2_types.h"
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 /* make sure all compiler use the same alignment policies for structures */
34 #if defined _MSC_VER || defined __GNUC__
35 #pragma pack(push,8)
36 #endif
37 
38 
40 typedef enum {
48 
49 typedef enum {
52 } fmi2_type_t;
53 
54 
55 /* Type definitions */
56 
58 FMILIB_EXPORT const char* fmi2_status_to_string(fmi2_status_t status);
59 
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, ...);
63 typedef void* (*fmi2_callback_allocate_memory_ft)(size_t nobj, size_t size);
65 typedef void (*fmi2_callback_free_memory_ft) (void* obj);
67 typedef void (*fmi2_step_finished_ft) (fmi2_component_environment_t env, fmi2_status_t status);
68 
70 typedef struct {
75  fmi2_component_environment_t componentEnvironment;
77 
79 /* TODO: reuse from fmiFunctions.h */
80 typedef struct {
81  fmi2_boolean_t newDiscreteStatesNeeded;
82  fmi2_boolean_t terminateSimulation;
85  fmi2_boolean_t nextEventTimeDefined;
86  fmi2_real_t nextEventTime;
88 
90 /* TODO: reuse from fmiFunctions.h */
91 typedef enum {
97 
98 
99 
100 /* reset alignment policy to the one set before reading this file */
101 #if defined _MSC_VER || defined __GNUC__
102 #pragma pack(pop)
103 #endif
104 
105 /* Define fmi function pointer types to simplify dynamic loading */
106 
107 /***************************************************
108 Types for Common Functions
109 ****************************************************/
110 
111 /* Inquire version numbers of header files and setting logging status */
112  typedef const char* (*fmi2_get_types_platform_ft)();
113  typedef const char* (*fmi2_get_version_ft)();
114  typedef fmi2_status_t (*fmi2_set_debug_logging_ft)(fmi2_component_t, fmi2_boolean_t,size_t nCategories, const fmi2_string_t categories[]);
115 
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);
119 
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);
126 
127 /* Getting and setting variable values */
128  typedef fmi2_status_t (*fmi2_get_real_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_real_t []);
129  typedef fmi2_status_t (*fmi2_get_integer_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_integer_t[]);
130  typedef fmi2_status_t (*fmi2_get_boolean_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_boolean_t[]);
131  typedef fmi2_status_t (*fmi2_get_string_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_string_t []);
132 
133  typedef fmi2_status_t (*fmi2_set_real_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_real_t []);
134  typedef fmi2_status_t (*fmi2_set_integer_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_integer_t[]);
135  typedef fmi2_status_t (*fmi2_set_boolean_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_boolean_t[]);
136  typedef fmi2_status_t (*fmi2_set_string_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_string_t []);
137 
138 /* Getting and setting the internal _fmu_ state */
139  typedef fmi2_status_t (*fmi2_get_fmu_state_ft) (fmi2_component_t, fmi2_FMU_state_t*);
140  typedef fmi2_status_t (*fmi2_set_fmu_state_ft) (fmi2_component_t, fmi2_FMU_state_t);
141  typedef fmi2_status_t (*fmi2_free_fmu_state_ft) (fmi2_component_t, fmi2_FMU_state_t*);
142  typedef fmi2_status_t (*fmi2_serialized_fmu_state_size_ft)(fmi2_component_t, fmi2_FMU_state_t, size_t*);
143  typedef fmi2_status_t (*fmi2_serialize_fmu_state_ft) (fmi2_component_t, fmi2_FMU_state_t, fmi2_byte_t[], size_t);
144  typedef fmi2_status_t (*fmi2_de_serialize_fmu_state_ft) (fmi2_component_t, const fmi2_byte_t[], size_t, fmi2_FMU_state_t*);
145 
146 /* Getting directional derivatives */
147  typedef fmi2_status_t (*fmi2_get_directional_derivative_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t,
148  const fmi2_value_reference_t[], size_t,
149  const fmi2_real_t[], fmi2_real_t[]);
150 
151 /***************************************************
152 Types for Functions for FMI for Model Exchange
153 ****************************************************/
154 
155 /* Enter and exit the different modes */
156  typedef fmi2_status_t (*fmi2_enter_event_mode_ft) (fmi2_component_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*);
160 
161 /* Providing independent variables and re-initialization of caching */
162  typedef fmi2_status_t (*fmi2_set_time_ft) (fmi2_component_t, fmi2_real_t);
163  typedef fmi2_status_t (*fmi2_set_continuous_states_ft) (fmi2_component_t, const fmi2_real_t[], size_t);
164 
165 /* Evaluation of the model equations */
166  typedef fmi2_status_t (*fmi2_get_derivatives_ft) (fmi2_component_t, fmi2_real_t[], size_t);
167  typedef fmi2_status_t (*fmi2_get_event_indicators_ft) (fmi2_component_t, fmi2_real_t[], size_t);
168  typedef fmi2_status_t (*fmi2_get_continuous_states_ft) (fmi2_component_t, fmi2_real_t[], size_t);
169  typedef fmi2_status_t (*fmi2_get_nominals_of_continuous_states_ft)(fmi2_component_t, fmi2_real_t[], size_t);
170 
171 
172 /***************************************************
173 Types for_functions for FMI for Co-_simulation
174 ****************************************************/
175 
176 /* Simulating the slave */
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 []);
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 []);
179 
180  typedef fmi2_status_t (*fmi2_do_step_ft) (fmi2_component_t, fmi2_real_t, fmi2_real_t, fmi2_boolean_t);
181  typedef fmi2_status_t (*fmi2_cancel_step_ft) (fmi2_component_t);
182 
183 /* Inquire slave status */
184  typedef fmi2_status_t (*fmi2_get_status_ft) (fmi2_component_t, const fmi2_status_kind_t, fmi2_status_t* );
185  typedef fmi2_status_t (*fmi2_get_real_status_ft) (fmi2_component_t, const fmi2_status_kind_t, fmi2_real_t* );
186  typedef fmi2_status_t (*fmi2_get_integer_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_integer_t*);
187  typedef fmi2_status_t (*fmi2_get_boolean_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_boolean_t*);
188  typedef fmi2_status_t (*fmi2_get_string_status_ft) (fmi2_component_t, const fmi2_status_kind_t, fmi2_string_t* );
189 
193 #ifdef __cplusplus
194 } /* end of extern "C" { */
195 #endif
196 
197 #endif /* fmi2_function_types_h */
void *(* fmi2_callback_allocate_memory_ft)(size_t nobj, size_t size)
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,...)
fmi2_status_t(* fmi2_get_event_indicators_ft)(fmi2_component_t, fmi2_real_t[], size_t)
Library configuration file generated by the build system.
fmi2_status_t(* fmi2_get_directional_derivative_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_value_reference_t[], size_t, const fmi2_real_t[], fmi2_real_t[])
fmi2_boolean_t valuesOfContinuousStatesChanged
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)
fmi2_status_t(* fmi2_do_step_ft)(fmi2_component_t, fmi2_real_t, fmi2_real_t, fmi2_boolean_t)
fmi2_type_t
fmi2_status_t(* fmi2_free_fmu_state_ft)(fmi2_component_t, fmi2_FMU_state_t *)
fmi2_step_finished_ft stepFinished
fmi2_status_t(* fmi2_get_string_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_string_t[])
fmi2_status_t(* fmi2_get_continuous_states_ft)(fmi2_component_t, fmi2_real_t[], size_t)
fmi2_status_t(* fmi2_exit_initialization_mode_ft)(fmi2_component_t)
fmi2_status_t(* fmi2_get_derivatives_ft)(fmi2_component_t, fmi2_real_t[], size_t)
fmi2_callback_allocate_memory_ft allocateMemory
v size
fmi2_status_t(* fmi2_get_boolean_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_boolean_t *)
fmi2_status_t(* fmi2_terminate_ft)(fmi2_component_t)
fmi2_real_t nextEventTime
fmi2_boolean_t terminateSimulation
#define FMILIB_EXPORT
Used to declare the public API of the library needed for dynamic linking.
fmi2_boolean_t newDiscreteStatesNeeded
fmi2_status_t
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)
fmi2_callback_logger_ft logger
fmi2_status_t(* fmi2_de_serialize_fmu_state_ft)(fmi2_component_t, const fmi2_byte_t[], size_t, fmi2_FMU_state_t *)
fmi2_status_t(* fmi2_enter_continuous_time_mode_ft)(fmi2_component_t)
fmi2_status_t(* fmi2_get_fmu_state_ft)(fmi2_component_t, fmi2_FMU_state_t *)
fmi2_status_t(* fmi2_set_fmu_state_ft)(fmi2_component_t, fmi2_FMU_state_t)
fmi2_callback_free_memory_ft freeMemory
fmi2_status_t(* fmi2_get_string_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_string_t *)
fmi2_status_t(* fmi2_set_real_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_real_t[])
fmi2_component_environment_t componentEnvironment
void(* fmi2_free_instance_ft)(fmi2_component_t)
fmi2_status_t(* fmi2_completed_integrator_step_ft)(fmi2_component_t, fmi2_boolean_t, fmi2_boolean_t *, fmi2_boolean_t *)
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[])
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[])
fmi2_status_t(* fmi2_set_boolean_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_boolean_t[])
FMILIB_EXPORT const char * fmi2_status_to_string(fmi2_status_t status)
fmi2_status_t(* fmi2_set_time_ft)(fmi2_component_t, fmi2_real_t)
fmi2_boolean_t nominalsOfContinuousStatesChanged
fmi2_status_t(* fmi2_set_debug_logging_ft)(fmi2_component_t, fmi2_boolean_t, size_t nCategories, const fmi2_string_t categories[])
fmi2_status_t(* fmi2_set_string_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_string_t[])
fmi2_status_t(* fmi2_enter_event_mode_ft)(fmi2_component_t)
void(* fmi2_callback_free_memory_ft)(void *obj)
fmi2_status_t(* fmi2_set_continuous_states_ft)(fmi2_component_t, const fmi2_real_t[], size_t)
fmi2_boolean_t nextEventTimeDefined
fmi2_status_t(* fmi2_enter_initialization_mode_ft)(fmi2_component_t)
fmi2_status_t(* fmi2_get_boolean_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_boolean_t[])
fmi2_status_t(* fmi2_get_real_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_real_t *)
fmi2_status_t(* fmi2_serialized_fmu_state_size_ft)(fmi2_component_t, fmi2_FMU_state_t, size_t *)
fmi2_status_t(* fmi2_cancel_step_ft)(fmi2_component_t)
fmi2_status_t(* fmi2_set_integer_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_integer_t[])
fmi2_status_t(* fmi2_get_integer_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_integer_t *)
fmi2_status_t(* fmi2_new_discrete_states_ft)(fmi2_component_t, fmi2_event_info_t *)
fmi2_status_t(* fmi2_get_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_status_t *)
fmi2_status_t(* fmi2_serialize_fmu_state_ft)(fmi2_component_t, fmi2_FMU_state_t, fmi2_byte_t[], size_t)
fmi2_status_t(* fmi2_get_real_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_real_t[])
void(* fmi2_step_finished_ft)(fmi2_component_environment_t env, fmi2_status_t status)
fmi2_status_t(* fmi2_reset_ft)(fmi2_component_t)
fmi2_status_t(* fmi2_get_nominals_of_continuous_states_ft)(fmi2_component_t, fmi2_real_t[], size_t)
fmi2_status_t(* fmi2_get_integer_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_integer_t[])
int jm_diff jm_diff size_t
Definition: jm_vector.h:371
fmi2_status_kind_t