]> gerrit.simantics Code Review - simantics/fmil.git/blob - org.simantics.fmil.core/native/FMILibrary/src/Util/include/FMI1/fmi1_functions.h
Switch to full JavaSE-11+ compatibility
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / src / Util / include / FMI1 / fmi1_functions.h
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 */\r
15 \r
16 #ifndef FMI1_FUNCTIONS_H_\r
17 #define FMI1_FUNCTIONS_H_\r
18 \r
19 #include <fmilib_config.h>\r
20 \r
21 #include "fmi1_types.h"\r
22 #include <string.h>\r
23 /**     \file fmi1_functions.h\r
24         Mapping for the standard FMI 1.0 functions into fmi1_ namespace.\r
25 \r
26         \addtogroup fmi1_utils\r
27         @{\r
28 */
29 \r
30 /** FMI 1.0 status codes */\r
31 typedef enum {\r
32         fmi1_status_ok,\r
33         fmi1_status_warning,\r
34         fmi1_status_discard,\r
35         fmi1_status_error,\r
36         fmi1_status_fatal,\r
37         fmi1_status_pending\r
38 } fmi1_status_t;\r
39 \r
40 /** Convert #fmi1_status_t variable to string  */\r
41 FMILIB_EXPORT const char* fmi1_status_to_string(fmi1_status_t status);\r
42 \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
51 \r
52 /** Functions for FMI 1.0 ME */\r
53 typedef struct {\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
58 \r
59 /** The FMI 1.0 CS strcuture adds one field to the ME, otherwize compatible */\r
60 typedef struct {\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
66 \r
67 /** Event info structure as used in FMI 1.0 ME */\r
68 typedef struct {\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
76 \r
77 /** FMI 1.0 asyncronous co-simulation  status */\r
78 typedef enum {\r
79         fmi1_do_step_status,\r
80         fmi1_pending_status,\r
81         fmi1_last_successful_time\r
82 } fmi1_status_kind_t;\r
83 \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
95 \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
111 \r
112 \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
126 \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
132 \r
133 /** @}\r
134 */
135 \r
136 #endif /* End of header file FMI_FUNCTIONS_H_ */\r