#ifndef fmi2Functions_h1#define fmi2Functions_h23/* This header file must be utilized when compiling a FMU.4It defines all functions of the5FMI 2.0.1 Model Exchange and Co-Simulation Interface.67In order to have unique function names even if several FMUs8are compiled together (e.g. for embedded systems), every "real" function name9is constructed by prepending the function name by "FMI2_FUNCTION_PREFIX".10Therefore, the typical usage is:1112#define FMI2_FUNCTION_PREFIX MyModel_13#include "fmi2Functions.h"1415As a result, a function that is defined as "fmi2GetDerivatives" in this header file,16is actually getting the name "MyModel_fmi2GetDerivatives".1718This only holds if the FMU is shipped in C source code, or is compiled in a19static link library. For FMUs compiled in a DLL/sharedObject, the "actual" function20names are used and "FMI2_FUNCTION_PREFIX" must not be defined.2122Revisions:23- Sep. 29, 2019: License changed to 2-clause BSD License (without extensions)24- Apr. 9, 2014: All prefixes "fmi" renamed to "fmi2" (decision from April 8)25- Mar. 26, 2014: FMI_Export set to empty value if FMI_Export and FMI_FUNCTION_PREFIX26are not defined (#173)27- Oct. 11, 2013: Functions of ModelExchange and CoSimulation merged:28fmiInstantiateModel , fmiInstantiateSlave -> fmiInstantiate29fmiFreeModelInstance, fmiFreeSlaveInstance -> fmiFreeInstance30fmiEnterModelInitializationMode, fmiEnterSlaveInitializationMode -> fmiEnterInitializationMode31fmiExitModelInitializationMode , fmiExitSlaveInitializationMode -> fmiExitInitializationMode32fmiTerminateModel, fmiTerminateSlave -> fmiTerminate33fmiResetSlave -> fmiReset (now also for ModelExchange and not only for CoSimulation)34Functions renamed:35fmiUpdateDiscreteStates -> fmiNewDiscreteStates36- June 13, 2013: Functions removed:37fmiInitializeModel38fmiEventUpdate39fmiCompletedEventIteration40fmiInitializeSlave41Functions added:42fmiEnterModelInitializationMode43fmiExitModelInitializationMode44fmiEnterEventMode45fmiUpdateDiscreteStates46fmiEnterContinuousTimeMode47fmiEnterSlaveInitializationMode;48fmiExitSlaveInitializationMode;49- Feb. 17, 2013: Portability improvements:50o DllExport changed to FMI_Export51o FUNCTION_PREFIX changed to FMI_FUNCTION_PREFIX52o Allow undefined FMI_FUNCTION_PREFIX (meaning no prefix is used)53Changed function name "fmiTerminate" to "fmiTerminateModel" (due to #113)54Changed function name "fmiGetNominalContinuousState" to55"fmiGetNominalsOfContinuousStates"56Removed fmiGetStateValueReferences.57- Nov. 14, 2011: Adapted to FMI 2.0:58o Split into two files (fmiFunctions.h, fmiTypes.h) in order59that code that dynamically loads an FMU can directly60utilize the header files).61o Added C++ encapsulation of C-part, in order that the header62file can be directly utilized in C++ code.63o fmiCallbackFunctions is passed as pointer to fmiInstantiateXXX64o stepFinished within fmiCallbackFunctions has as first65argument "fmiComponentEnvironment" and not "fmiComponent".66o New functions to get and set the complete FMU state67and to compute partial derivatives.68- Nov. 4, 2010: Adapted to specification text:69o fmiGetModelTypesPlatform renamed to fmiGetTypesPlatform70o fmiInstantiateSlave: Argument GUID replaced by fmuGUID71Argument mimetype replaced by mimeType72o tabs replaced by spaces73- Oct. 16, 2010: Functions for FMI for Co-simulation added74- Jan. 20, 2010: stateValueReferencesChanged added to struct fmiEventInfo (ticket #27)75(by M. Otter, DLR)76Added WIN32 pragma to define the struct layout (ticket #34)77(by J. Mauss, QTronic)78- Jan. 4, 2010: Removed argument intermediateResults from fmiInitialize79Renamed macro fmiGetModelFunctionsVersion to fmiGetVersion80Renamed macro fmiModelFunctionsVersion to fmiVersion81Replaced fmiModel by fmiComponent in decl of fmiInstantiateModel82(by J. Mauss, QTronic)83- Dec. 17, 2009: Changed extension "me" to "fmi" (by Martin Otter, DLR).84- Dez. 14, 2009: Added eventInfo to meInitialize and added85meGetNominalContinuousStates (by Martin Otter, DLR)86- Sept. 9, 2009: Added DllExport (according to Peter Nilsson's suggestion)87(by A. Junghanns, QTronic)88- Sept. 9, 2009: Changes according to FMI-meeting on July 21:89meInquireModelTypesVersion -> meGetModelTypesPlatform90meInquireModelFunctionsVersion -> meGetModelFunctionsVersion91meSetStates -> meSetContinuousStates92meGetStates -> meGetContinuousStates93removal of meInitializeModelClass94removal of meGetTime95change of arguments of meInstantiateModel96change of arguments of meCompletedIntegratorStep97(by Martin Otter, DLR):98- July 19, 2009: Added "me" as prefix to file names (by Martin Otter, DLR).99- March 2, 2009: Changed function definitions according to the last design100meeting with additional improvements (by Martin Otter, DLR).101- Dec. 3 , 2008: First version by Martin Otter (DLR) and Hans Olsson (Dynasim).102103104Copyright (C) 2008-2011 MODELISAR consortium,1052012-2019 Modelica Association Project "FMI"106All rights reserved.107108This file is licensed by the copyright holders under the 2-Clause BSD License109(https://opensource.org/licenses/BSD-2-Clause):110111----------------------------------------------------------------------------112Redistribution and use in source and binary forms, with or without113modification, are permitted provided that the following conditions are met:114115- Redistributions of source code must retain the above copyright notice,116this list of conditions and the following disclaimer.117118- Redistributions in binary form must reproduce the above copyright notice,119this list of conditions and the following disclaimer in the documentation120and/or other materials provided with the distribution.121122THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS123"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED124TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR125PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR126CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,127EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,128PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;129OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,130WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR131OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF132ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.133----------------------------------------------------------------------------134*/135136#ifdef __cplusplus137extern "C" {138#endif139140#include "fmi2TypesPlatform.h"141#include "fmi2FunctionTypes.h"142#include <stdlib.h>143144145/*146Export FMI2 API functions on Windows and under GCC.147If custom linking is desired then the FMI2_Export must be148defined before including this file. For instance,149it may be set to __declspec(dllimport).150*/151#if !defined(FMI2_Export)152#if !defined(FMI2_FUNCTION_PREFIX)153#if defined _WIN32 || defined __CYGWIN__154/* Note: both gcc & MSVC on Windows support this syntax. */155#define FMI2_Export __declspec(dllexport)156#else157#if __GNUC__ >= 4158#define FMI2_Export __attribute__ ((visibility ("default")))159#else160#define FMI2_Export161#endif162#endif163#else164#define FMI2_Export165#endif166#endif167168/* Macros to construct the real function name169(prepend function name by FMI2_FUNCTION_PREFIX) */170#if defined(FMI2_FUNCTION_PREFIX)171#define fmi2Paste(a,b) a ## b172#define fmi2PasteB(a,b) fmi2Paste(a,b)173#define fmi2FullName(name) fmi2PasteB(FMI2_FUNCTION_PREFIX, name)174#else175#define fmi2FullName(name) name176#endif177178/***************************************************179Common Functions180****************************************************/181#define fmi2GetTypesPlatform fmi2FullName(fmi2GetTypesPlatform)182#define fmi2GetVersion fmi2FullName(fmi2GetVersion)183#define fmi2SetDebugLogging fmi2FullName(fmi2SetDebugLogging)184#define fmi2Instantiate fmi2FullName(fmi2Instantiate)185#define fmi2FreeInstance fmi2FullName(fmi2FreeInstance)186#define fmi2SetupExperiment fmi2FullName(fmi2SetupExperiment)187#define fmi2EnterInitializationMode fmi2FullName(fmi2EnterInitializationMode)188#define fmi2ExitInitializationMode fmi2FullName(fmi2ExitInitializationMode)189#define fmi2Terminate fmi2FullName(fmi2Terminate)190#define fmi2Reset fmi2FullName(fmi2Reset)191#define fmi2GetReal fmi2FullName(fmi2GetReal)192#define fmi2GetInteger fmi2FullName(fmi2GetInteger)193#define fmi2GetBoolean fmi2FullName(fmi2GetBoolean)194#define fmi2GetString fmi2FullName(fmi2GetString)195#define fmi2SetReal fmi2FullName(fmi2SetReal)196#define fmi2SetInteger fmi2FullName(fmi2SetInteger)197#define fmi2SetBoolean fmi2FullName(fmi2SetBoolean)198#define fmi2SetString fmi2FullName(fmi2SetString)199#define fmi2GetFMUstate fmi2FullName(fmi2GetFMUstate)200#define fmi2SetFMUstate fmi2FullName(fmi2SetFMUstate)201#define fmi2FreeFMUstate fmi2FullName(fmi2FreeFMUstate)202#define fmi2SerializedFMUstateSize fmi2FullName(fmi2SerializedFMUstateSize)203#define fmi2SerializeFMUstate fmi2FullName(fmi2SerializeFMUstate)204#define fmi2DeSerializeFMUstate fmi2FullName(fmi2DeSerializeFMUstate)205#define fmi2GetDirectionalDerivative fmi2FullName(fmi2GetDirectionalDerivative)206207208/***************************************************209Functions for FMI2 for Model Exchange210****************************************************/211#define fmi2EnterEventMode fmi2FullName(fmi2EnterEventMode)212#define fmi2NewDiscreteStates fmi2FullName(fmi2NewDiscreteStates)213#define fmi2EnterContinuousTimeMode fmi2FullName(fmi2EnterContinuousTimeMode)214#define fmi2CompletedIntegratorStep fmi2FullName(fmi2CompletedIntegratorStep)215#define fmi2SetTime fmi2FullName(fmi2SetTime)216#define fmi2SetContinuousStates fmi2FullName(fmi2SetContinuousStates)217#define fmi2GetDerivatives fmi2FullName(fmi2GetDerivatives)218#define fmi2GetEventIndicators fmi2FullName(fmi2GetEventIndicators)219#define fmi2GetContinuousStates fmi2FullName(fmi2GetContinuousStates)220#define fmi2GetNominalsOfContinuousStates fmi2FullName(fmi2GetNominalsOfContinuousStates)221222223/***************************************************224Functions for FMI2 for Co-Simulation225****************************************************/226#define fmi2SetRealInputDerivatives fmi2FullName(fmi2SetRealInputDerivatives)227#define fmi2GetRealOutputDerivatives fmi2FullName(fmi2GetRealOutputDerivatives)228#define fmi2DoStep fmi2FullName(fmi2DoStep)229#define fmi2CancelStep fmi2FullName(fmi2CancelStep)230#define fmi2GetStatus fmi2FullName(fmi2GetStatus)231#define fmi2GetRealStatus fmi2FullName(fmi2GetRealStatus)232#define fmi2GetIntegerStatus fmi2FullName(fmi2GetIntegerStatus)233#define fmi2GetBooleanStatus fmi2FullName(fmi2GetBooleanStatus)234#define fmi2GetStringStatus fmi2FullName(fmi2GetStringStatus)235236/* Version number */237#define fmi2Version "2.0"238239240/***************************************************241Common Functions242****************************************************/243244/* Inquire version numbers of header files */245FMI2_Export fmi2GetTypesPlatformTYPE fmi2GetTypesPlatform;246FMI2_Export fmi2GetVersionTYPE fmi2GetVersion;247FMI2_Export fmi2SetDebugLoggingTYPE fmi2SetDebugLogging;248249/* Creation and destruction of FMU instances */250FMI2_Export fmi2InstantiateTYPE fmi2Instantiate;251FMI2_Export fmi2FreeInstanceTYPE fmi2FreeInstance;252253/* Enter and exit initialization mode, terminate and reset */254FMI2_Export fmi2SetupExperimentTYPE fmi2SetupExperiment;255FMI2_Export fmi2EnterInitializationModeTYPE fmi2EnterInitializationMode;256FMI2_Export fmi2ExitInitializationModeTYPE fmi2ExitInitializationMode;257FMI2_Export fmi2TerminateTYPE fmi2Terminate;258FMI2_Export fmi2ResetTYPE fmi2Reset;259260/* Getting and setting variables values */261FMI2_Export fmi2GetRealTYPE fmi2GetReal;262FMI2_Export fmi2GetIntegerTYPE fmi2GetInteger;263FMI2_Export fmi2GetBooleanTYPE fmi2GetBoolean;264FMI2_Export fmi2GetStringTYPE fmi2GetString;265266FMI2_Export fmi2SetRealTYPE fmi2SetReal;267FMI2_Export fmi2SetIntegerTYPE fmi2SetInteger;268FMI2_Export fmi2SetBooleanTYPE fmi2SetBoolean;269FMI2_Export fmi2SetStringTYPE fmi2SetString;270271/* Getting and setting the internal FMU state */272FMI2_Export fmi2GetFMUstateTYPE fmi2GetFMUstate;273FMI2_Export fmi2SetFMUstateTYPE fmi2SetFMUstate;274FMI2_Export fmi2FreeFMUstateTYPE fmi2FreeFMUstate;275FMI2_Export fmi2SerializedFMUstateSizeTYPE fmi2SerializedFMUstateSize;276FMI2_Export fmi2SerializeFMUstateTYPE fmi2SerializeFMUstate;277FMI2_Export fmi2DeSerializeFMUstateTYPE fmi2DeSerializeFMUstate;278279/* Getting partial derivatives */280FMI2_Export fmi2GetDirectionalDerivativeTYPE fmi2GetDirectionalDerivative;281282283/***************************************************284Functions for FMI2 for Model Exchange285****************************************************/286287/* Enter and exit the different modes */288FMI2_Export fmi2EnterEventModeTYPE fmi2EnterEventMode;289FMI2_Export fmi2NewDiscreteStatesTYPE fmi2NewDiscreteStates;290FMI2_Export fmi2EnterContinuousTimeModeTYPE fmi2EnterContinuousTimeMode;291FMI2_Export fmi2CompletedIntegratorStepTYPE fmi2CompletedIntegratorStep;292293/* Providing independent variables and re-initialization of caching */294FMI2_Export fmi2SetTimeTYPE fmi2SetTime;295FMI2_Export fmi2SetContinuousStatesTYPE fmi2SetContinuousStates;296297/* Evaluation of the model equations */298FMI2_Export fmi2GetDerivativesTYPE fmi2GetDerivatives;299FMI2_Export fmi2GetEventIndicatorsTYPE fmi2GetEventIndicators;300FMI2_Export fmi2GetContinuousStatesTYPE fmi2GetContinuousStates;301FMI2_Export fmi2GetNominalsOfContinuousStatesTYPE fmi2GetNominalsOfContinuousStates;302303304/***************************************************305Functions for FMI2 for Co-Simulation306****************************************************/307308/* Simulating the slave */309FMI2_Export fmi2SetRealInputDerivativesTYPE fmi2SetRealInputDerivatives;310FMI2_Export fmi2GetRealOutputDerivativesTYPE fmi2GetRealOutputDerivatives;311312FMI2_Export fmi2DoStepTYPE fmi2DoStep;313FMI2_Export fmi2CancelStepTYPE fmi2CancelStep;314315/* Inquire slave status */316FMI2_Export fmi2GetStatusTYPE fmi2GetStatus;317FMI2_Export fmi2GetRealStatusTYPE fmi2GetRealStatus;318FMI2_Export fmi2GetIntegerStatusTYPE fmi2GetIntegerStatus;319FMI2_Export fmi2GetBooleanStatusTYPE fmi2GetBooleanStatus;320FMI2_Export fmi2GetStringStatusTYPE fmi2GetStringStatus;321322#ifdef __cplusplus323} /* end of extern "C" { */324#endif325326#endif /* fmi2Functions_h */327328329