]> gerrit.simantics Code Review - simantics/fmil.git/blob - org.simantics.fmil.core/native/FMILibrary/ThirdParty/FMI/default/FMI2/fmi2Functions.h
Add FMILibrary-2.0.3 to org.simantics.fmil.core\native.
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / ThirdParty / FMI / default / FMI2 / fmi2Functions.h
1 #ifndef fmi2Functions_h\r
2 #define fmi2Functions_h\r
3 \r
4 /* This header file must be utilized when compiling a FMU.\r
5    It defines all functions of the\r
6          FMI 2.0 Model Exchange and Co-Simulation Interface.\r
7 \r
8    In order to have unique function names even if several FMUs\r
9    are compiled together (e.g. for embedded systems), every "real" function name\r
10    is constructed by prepending the function name by "FMI2_FUNCTION_PREFIX".\r
11    Therefore, the typical usage is:\r
12 \r
13       #define FMI2_FUNCTION_PREFIX MyModel_\r
14       #include "fmi2Functions.h"\r
15 \r
16    As a result, a function that is defined as "fmi2GetDerivatives" in this header file,\r
17    is actually getting the name "MyModel_fmi2GetDerivatives".\r
18 \r
19    This only holds if the FMU is shipped in C source code, or is compiled in a\r
20    static link library. For FMUs compiled in a DLL/sharedObject, the "actual" function\r
21    names are used and "FMI2_FUNCTION_PREFIX" must not be defined.\r
22 \r
23    Revisions:\r
24    - Apr.  9, 2014: all prefixes "fmi" renamed to "fmi2" (decision from April 8)\r
25    - Mar. 26, 2014: FMI_Export set to empty value if FMI_Export and FMI_FUNCTION_PREFIX\r
26                     are not defined (#173)\r
27    - Oct. 11, 2013: Functions of ModelExchange and CoSimulation merged:\r
28                       fmiInstantiateModel , fmiInstantiateSlave  -> fmiInstantiate\r
29                       fmiFreeModelInstance, fmiFreeSlaveInstance -> fmiFreeInstance\r
30                       fmiEnterModelInitializationMode, fmiEnterSlaveInitializationMode -> fmiEnterInitializationMode\r
31                       fmiExitModelInitializationMode , fmiExitSlaveInitializationMode  -> fmiExitInitializationMode\r
32                       fmiTerminateModel, fmiTerminateSlave  -> fmiTerminate\r
33                       fmiResetSlave -> fmiReset (now also for ModelExchange and not only for CoSimulation)\r
34                     Functions renamed:\r
35                       fmiUpdateDiscreteStates -> fmiNewDiscreteStates\r
36    - June 13, 2013: Functions removed:\r
37                        fmiInitializeModel\r
38                        fmiEventUpdate\r
39                        fmiCompletedEventIteration\r
40                        fmiInitializeSlave\r
41                     Functions added:\r
42                        fmiEnterModelInitializationMode\r
43                        fmiExitModelInitializationMode\r
44                        fmiEnterEventMode\r
45                        fmiUpdateDiscreteStates\r
46                        fmiEnterContinuousTimeMode\r
47                        fmiEnterSlaveInitializationMode;\r
48                        fmiExitSlaveInitializationMode;\r
49    - Feb. 17, 2013: Portability improvements:\r
50                        o DllExport changed to FMI_Export\r
51                        o FUNCTION_PREFIX changed to FMI_FUNCTION_PREFIX\r
52                        o Allow undefined FMI_FUNCTION_PREFIX (meaning no prefix is used)\r
53                     Changed function name "fmiTerminate" to "fmiTerminateModel" (due to #113)\r
54                     Changed function name "fmiGetNominalContinuousState" to\r
55                                           "fmiGetNominalsOfContinuousStates"\r
56                     Removed fmiGetStateValueReferences.\r
57    - Nov. 14, 2011: Adapted to FMI 2.0:\r
58                        o Split into two files (fmiFunctions.h, fmiTypes.h) in order\r
59                          that code that dynamically loads an FMU can directly\r
60                          utilize the header files).\r
61                        o Added C++ encapsulation of C-part, in order that the header\r
62                          file can be directly utilized in C++ code.\r
63                        o fmiCallbackFunctions is passed as pointer to fmiInstantiateXXX\r
64                        o stepFinished within fmiCallbackFunctions has as first\r
65                          argument "fmiComponentEnvironment" and not "fmiComponent".\r
66                        o New functions to get and set the complete FMU state\r
67                          and to compute partial derivatives.\r
68    - Nov.  4, 2010: Adapted to specification text:\r
69                        o fmiGetModelTypesPlatform renamed to fmiGetTypesPlatform\r
70                        o fmiInstantiateSlave: Argument GUID     replaced by fmuGUID\r
71                                               Argument mimetype replaced by mimeType\r
72                        o tabs replaced by spaces\r
73    - Oct. 16, 2010: Functions for FMI for Co-simulation added\r
74    - Jan. 20, 2010: stateValueReferencesChanged added to struct fmiEventInfo (ticket #27)\r
75                     (by M. Otter, DLR)\r
76                     Added WIN32 pragma to define the struct layout (ticket #34)\r
77                     (by J. Mauss, QTronic)\r
78    - Jan.  4, 2010: Removed argument intermediateResults from fmiInitialize\r
79                     Renamed macro fmiGetModelFunctionsVersion to fmiGetVersion\r
80                     Renamed macro fmiModelFunctionsVersion to fmiVersion\r
81                     Replaced fmiModel by fmiComponent in decl of fmiInstantiateModel\r
82                     (by J. Mauss, QTronic)\r
83    - Dec. 17, 2009: Changed extension "me" to "fmi" (by Martin Otter, DLR).\r
84    - Dez. 14, 2009: Added eventInfo to meInitialize and added\r
85                     meGetNominalContinuousStates (by Martin Otter, DLR)\r
86    - Sept. 9, 2009: Added DllExport (according to Peter Nilsson's suggestion)\r
87                     (by A. Junghanns, QTronic)\r
88    - Sept. 9, 2009: Changes according to FMI-meeting on July 21:\r
89                     meInquireModelTypesVersion     -> meGetModelTypesPlatform\r
90                     meInquireModelFunctionsVersion -> meGetModelFunctionsVersion\r
91                     meSetStates                    -> meSetContinuousStates\r
92                     meGetStates                    -> meGetContinuousStates\r
93                     removal of meInitializeModelClass\r
94                     removal of meGetTime\r
95                     change of arguments of meInstantiateModel\r
96                     change of arguments of meCompletedIntegratorStep\r
97                     (by Martin Otter, DLR):\r
98    - July 19, 2009: Added "me" as prefix to file names (by Martin Otter, DLR).\r
99    - March 2, 2009: Changed function definitions according to the last design\r
100                     meeting with additional improvements (by Martin Otter, DLR).\r
101    - Dec. 3 , 2008: First version by Martin Otter (DLR) and Hans Olsson (Dynasim).\r
102 \r
103    Copyright © 2008-2011 MODELISAR consortium,\r
104                2012-2013 Modelica Association Project "FMI"\r
105                All rights reserved.\r
106    This file is licensed by the copyright holders under the BSD 2-Clause License\r
107    (http://www.opensource.org/licenses/bsd-license.html):\r
108 \r
109    ----------------------------------------------------------------------------\r
110    Redistribution and use in source and binary forms, with or without\r
111    modification, are permitted provided that the following conditions are met:\r
112 \r
113    - Redistributions of source code must retain the above copyright notice,\r
114      this list of conditions and the following disclaimer.\r
115    - Redistributions in binary form must reproduce the above copyright notice,\r
116      this list of conditions and the following disclaimer in the documentation\r
117      and/or other materials provided with the distribution.\r
118    - Neither the name of the copyright holders nor the names of its\r
119      contributors may be used to endorse or promote products derived\r
120      from this software without specific prior written permission.\r
121 \r
122    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
123    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\r
124    TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
125    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\r
126    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
127    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
128    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
129    OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
130    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
131    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\r
132    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
133    ----------------------------------------------------------------------------\r
134 \r
135    with the extension:\r
136 \r
137    You may distribute or publicly perform any modification only under the\r
138    terms of this license.\r
139    (Note, this means that if you distribute a modified file,\r
140     the modified file must also be provided under this license).\r
141 */\r
142 \r
143 #ifdef __cplusplus\r
144 extern "C" {\r
145 #endif\r
146 \r
147 #include "fmi2TypesPlatform.h"\r
148 #include "fmi2FunctionTypes.h"\r
149 #include <stdlib.h>\r
150 \r
151 \r
152 /*\r
153   Export FMI2 API functions on Windows and under GCC.\r
154   If custom linking is desired then the FMI2_Export must be\r
155   defined before including this file. For instance,\r
156   it may be set to __declspec(dllimport).\r
157 */\r
158 #if !defined(FMI2_Export)\r
159   #if !defined(FMI2_FUNCTION_PREFIX)\r
160     #if defined _WIN32 || defined __CYGWIN__\r
161      /* Note: both gcc & MSVC on Windows support this syntax. */\r
162         #define FMI2_Export __declspec(dllexport)\r
163     #else\r
164       #if __GNUC__ >= 4\r
165         #define FMI2_Export __attribute__ ((visibility ("default")))\r
166       #else\r
167         #define FMI2_Export\r
168       #endif\r
169     #endif\r
170   #else\r
171     #define FMI2_Export\r
172   #endif\r
173 #endif\r
174 \r
175 /* Macros to construct the real function name\r
176    (prepend function name by FMI2_FUNCTION_PREFIX) */\r
177 #if defined(FMI2_FUNCTION_PREFIX)\r
178   #define fmi2Paste(a,b)     a ## b\r
179   #define fmi2PasteB(a,b)    fmi2Paste(a,b)\r
180   #define fmi2FullName(name) fmi2PasteB(FMI2_FUNCTION_PREFIX, name)\r
181 #else\r
182   #define fmi2FullName(name) name\r
183 #endif\r
184 \r
185 /***************************************************\r
186 Common Functions\r
187 ****************************************************/\r
188 #define fmi2GetTypesPlatform         fmi2FullName(fmi2GetTypesPlatform)\r
189 #define fmi2GetVersion               fmi2FullName(fmi2GetVersion)\r
190 #define fmi2SetDebugLogging          fmi2FullName(fmi2SetDebugLogging)\r
191 #define fmi2Instantiate              fmi2FullName(fmi2Instantiate)\r
192 #define fmi2FreeInstance             fmi2FullName(fmi2FreeInstance)\r
193 #define fmi2SetupExperiment          fmi2FullName(fmi2SetupExperiment)\r
194 #define fmi2EnterInitializationMode  fmi2FullName(fmi2EnterInitializationMode)\r
195 #define fmi2ExitInitializationMode   fmi2FullName(fmi2ExitInitializationMode)\r
196 #define fmi2Terminate                fmi2FullName(fmi2Terminate)\r
197 #define fmi2Reset                    fmi2FullName(fmi2Reset)\r
198 #define fmi2GetReal                  fmi2FullName(fmi2GetReal)\r
199 #define fmi2GetInteger               fmi2FullName(fmi2GetInteger)\r
200 #define fmi2GetBoolean               fmi2FullName(fmi2GetBoolean)\r
201 #define fmi2GetString                fmi2FullName(fmi2GetString)\r
202 #define fmi2SetReal                  fmi2FullName(fmi2SetReal)\r
203 #define fmi2SetInteger               fmi2FullName(fmi2SetInteger)\r
204 #define fmi2SetBoolean               fmi2FullName(fmi2SetBoolean)\r
205 #define fmi2SetString                fmi2FullName(fmi2SetString)\r
206 #define fmi2GetFMUstate              fmi2FullName(fmi2GetFMUstate)\r
207 #define fmi2SetFMUstate              fmi2FullName(fmi2SetFMUstate)\r
208 #define fmi2FreeFMUstate             fmi2FullName(fmi2FreeFMUstate)\r
209 #define fmi2SerializedFMUstateSize   fmi2FullName(fmi2SerializedFMUstateSize)\r
210 #define fmi2SerializeFMUstate        fmi2FullName(fmi2SerializeFMUstate)\r
211 #define fmi2DeSerializeFMUstate      fmi2FullName(fmi2DeSerializeFMUstate)\r
212 #define fmi2GetDirectionalDerivative fmi2FullName(fmi2GetDirectionalDerivative)\r
213 \r
214 \r
215 /***************************************************\r
216 Functions for FMI2 for Model Exchange\r
217 ****************************************************/\r
218 #define fmi2EnterEventMode                fmi2FullName(fmi2EnterEventMode)\r
219 #define fmi2NewDiscreteStates             fmi2FullName(fmi2NewDiscreteStates)\r
220 #define fmi2EnterContinuousTimeMode       fmi2FullName(fmi2EnterContinuousTimeMode)\r
221 #define fmi2CompletedIntegratorStep       fmi2FullName(fmi2CompletedIntegratorStep)\r
222 #define fmi2SetTime                       fmi2FullName(fmi2SetTime)\r
223 #define fmi2SetContinuousStates           fmi2FullName(fmi2SetContinuousStates)\r
224 #define fmi2GetDerivatives                fmi2FullName(fmi2GetDerivatives)\r
225 #define fmi2GetEventIndicators            fmi2FullName(fmi2GetEventIndicators)\r
226 #define fmi2GetContinuousStates           fmi2FullName(fmi2GetContinuousStates)\r
227 #define fmi2GetNominalsOfContinuousStates fmi2FullName(fmi2GetNominalsOfContinuousStates)\r
228 \r
229 \r
230 /***************************************************\r
231 Functions for FMI2 for Co-Simulation\r
232 ****************************************************/\r
233 #define fmi2SetRealInputDerivatives      fmi2FullName(fmi2SetRealInputDerivatives)\r
234 #define fmi2GetRealOutputDerivatives     fmi2FullName(fmi2GetRealOutputDerivatives)\r
235 #define fmi2DoStep                       fmi2FullName(fmi2DoStep)\r
236 #define fmi2CancelStep                   fmi2FullName(fmi2CancelStep)\r
237 #define fmi2GetStatus                    fmi2FullName(fmi2GetStatus)\r
238 #define fmi2GetRealStatus                fmi2FullName(fmi2GetRealStatus)\r
239 #define fmi2GetIntegerStatus             fmi2FullName(fmi2GetIntegerStatus)\r
240 #define fmi2GetBooleanStatus             fmi2FullName(fmi2GetBooleanStatus)\r
241 #define fmi2GetStringStatus              fmi2FullName(fmi2GetStringStatus)\r
242 \r
243 /* Version number */\r
244 #define fmi2Version "2.0"\r
245 \r
246 \r
247 /***************************************************\r
248 Common Functions\r
249 ****************************************************/\r
250 \r
251 /* Inquire version numbers of header files */\r
252    FMI2_Export fmi2GetTypesPlatformTYPE fmi2GetTypesPlatform;\r
253    FMI2_Export fmi2GetVersionTYPE       fmi2GetVersion;\r
254    FMI2_Export fmi2SetDebugLoggingTYPE  fmi2SetDebugLogging;\r
255 \r
256 /* Creation and destruction of FMU instances */\r
257    FMI2_Export fmi2InstantiateTYPE  fmi2Instantiate;\r
258    FMI2_Export fmi2FreeInstanceTYPE fmi2FreeInstance;\r
259 \r
260 /* Enter and exit initialization mode, terminate and reset */\r
261    FMI2_Export fmi2SetupExperimentTYPE         fmi2SetupExperiment;\r
262    FMI2_Export fmi2EnterInitializationModeTYPE fmi2EnterInitializationMode;\r
263    FMI2_Export fmi2ExitInitializationModeTYPE  fmi2ExitInitializationMode;\r
264    FMI2_Export fmi2TerminateTYPE               fmi2Terminate;\r
265    FMI2_Export fmi2ResetTYPE                   fmi2Reset;\r
266 \r
267 /* Getting and setting variables values */\r
268    FMI2_Export fmi2GetRealTYPE    fmi2GetReal;\r
269    FMI2_Export fmi2GetIntegerTYPE fmi2GetInteger;\r
270    FMI2_Export fmi2GetBooleanTYPE fmi2GetBoolean;\r
271    FMI2_Export fmi2GetStringTYPE  fmi2GetString;\r
272 \r
273    FMI2_Export fmi2SetRealTYPE    fmi2SetReal;\r
274    FMI2_Export fmi2SetIntegerTYPE fmi2SetInteger;\r
275    FMI2_Export fmi2SetBooleanTYPE fmi2SetBoolean;\r
276    FMI2_Export fmi2SetStringTYPE  fmi2SetString;\r
277 \r
278 /* Getting and setting the internal FMU state */\r
279    FMI2_Export fmi2GetFMUstateTYPE            fmi2GetFMUstate;\r
280    FMI2_Export fmi2SetFMUstateTYPE            fmi2SetFMUstate;\r
281    FMI2_Export fmi2FreeFMUstateTYPE           fmi2FreeFMUstate;\r
282    FMI2_Export fmi2SerializedFMUstateSizeTYPE fmi2SerializedFMUstateSize;\r
283    FMI2_Export fmi2SerializeFMUstateTYPE      fmi2SerializeFMUstate;\r
284    FMI2_Export fmi2DeSerializeFMUstateTYPE    fmi2DeSerializeFMUstate;\r
285 \r
286 /* Getting partial derivatives */\r
287    FMI2_Export fmi2GetDirectionalDerivativeTYPE fmi2GetDirectionalDerivative;\r
288 \r
289 \r
290 /***************************************************\r
291 Functions for FMI2 for Model Exchange\r
292 ****************************************************/\r
293 \r
294 /* Enter and exit the different modes */\r
295    FMI2_Export fmi2EnterEventModeTYPE               fmi2EnterEventMode;\r
296    FMI2_Export fmi2NewDiscreteStatesTYPE            fmi2NewDiscreteStates;\r
297    FMI2_Export fmi2EnterContinuousTimeModeTYPE      fmi2EnterContinuousTimeMode;\r
298    FMI2_Export fmi2CompletedIntegratorStepTYPE      fmi2CompletedIntegratorStep;\r
299 \r
300 /* Providing independent variables and re-initialization of caching */\r
301    FMI2_Export fmi2SetTimeTYPE             fmi2SetTime;\r
302    FMI2_Export fmi2SetContinuousStatesTYPE fmi2SetContinuousStates;\r
303 \r
304 /* Evaluation of the model equations */\r
305    FMI2_Export fmi2GetDerivativesTYPE                fmi2GetDerivatives;\r
306    FMI2_Export fmi2GetEventIndicatorsTYPE            fmi2GetEventIndicators;\r
307    FMI2_Export fmi2GetContinuousStatesTYPE           fmi2GetContinuousStates;\r
308    FMI2_Export fmi2GetNominalsOfContinuousStatesTYPE fmi2GetNominalsOfContinuousStates;\r
309 \r
310 \r
311 /***************************************************\r
312 Functions for FMI2 for Co-Simulation\r
313 ****************************************************/\r
314 \r
315 /* Simulating the slave */\r
316    FMI2_Export fmi2SetRealInputDerivativesTYPE  fmi2SetRealInputDerivatives;\r
317    FMI2_Export fmi2GetRealOutputDerivativesTYPE fmi2GetRealOutputDerivatives;\r
318 \r
319    FMI2_Export fmi2DoStepTYPE     fmi2DoStep;\r
320    FMI2_Export fmi2CancelStepTYPE fmi2CancelStep;\r
321 \r
322 /* Inquire slave status */\r
323    FMI2_Export fmi2GetStatusTYPE        fmi2GetStatus;\r
324    FMI2_Export fmi2GetRealStatusTYPE    fmi2GetRealStatus;\r
325    FMI2_Export fmi2GetIntegerStatusTYPE fmi2GetIntegerStatus;\r
326    FMI2_Export fmi2GetBooleanStatusTYPE fmi2GetBooleanStatus;\r
327    FMI2_Export fmi2GetStringStatusTYPE  fmi2GetStringStatus;\r
328 \r
329 #ifdef __cplusplus\r
330 }  /* end of extern "C" { */\r
331 #endif\r
332 \r
333 #endif /* fmi2Functions_h */