]> gerrit.simantics Code Review - simantics/fmil.git/blobdiff - org.simantics.fmil.core/native/FMILibrary/src/Util/include/FMI2/fmi2_functions.h
Add FMILibrary-2.0.3 to org.simantics.fmil.core\native.
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / src / Util / include / FMI2 / fmi2_functions.h
diff --git a/org.simantics.fmil.core/native/FMILibrary/src/Util/include/FMI2/fmi2_functions.h b/org.simantics.fmil.core/native/FMILibrary/src/Util/include/FMI2/fmi2_functions.h
new file mode 100644 (file)
index 0000000..abb3c04
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+    Copyright (C) 2012 Modelon AB
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the BSD style license.
+
+     This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    FMILIB_License.txt file for more details.
+
+    You should have received a copy of the FMILIB_License.txt file
+    along with this program. If not, contact Modelon AB <http://www.modelon.com>.
+*/\r
+\r
+#ifndef _FMI2_FUNCTION_TYPES_H_\r
+#define _FMI2_FUNCTION_TYPES_H_\r
+\r
+#include <string.h>\r
+#include <fmilib_config.h>\r
+\r
+#include "fmi2_types.h"\r
+/**    \file fmi2_functions.h\r
+       Mapping for the standard FMI 2.0 functions into fmi2_ namespace.\r
+\r
+       \addtogroup fmi2_utils\r
+       @{\r
+*/
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+/* make sure all compiler use the same alignment policies for structures */\r
+#if defined _MSC_VER || defined __GNUC__\r
+#pragma pack(push,8)\r
+#endif\r
+\r
+\r
+/** FMI 2.0 status codes */\r
+typedef enum {\r
+       fmi2_status_ok,\r
+       fmi2_status_warning,\r
+       fmi2_status_discard,\r
+       fmi2_status_error,\r
+       fmi2_status_fatal,\r
+       fmi2_status_pending\r
+} fmi2_status_t;\r
+
+typedef enum {
+    fmi2_model_exchange,
+    fmi2_cosimulation
+} fmi2_type_t;
+
+
+/* Type definitions */\r
+\r
+/** Convert #fmi2_status_t variable to string  */\r
+FMILIB_EXPORT const char* fmi2_status_to_string(fmi2_status_t status);\r
+\r
+/** FMI 2.0 logger function type */\r
+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
+/** FMI 2.0 allocate memory function type */\r
+typedef void* (*fmi2_callback_allocate_memory_ft)(size_t nobj, size_t size);\r
+/** FMI 2.0 free memory  function type */\r
+typedef void  (*fmi2_callback_free_memory_ft)    (void* obj);\r
+/** FMI 2.0 step finished callback function type */\r
+typedef void  (*fmi2_step_finished_ft)          (fmi2_component_environment_t env, fmi2_status_t status);\r
+\r
+/** The FMI 2.0 callbacks */\r
+typedef struct {\r
+       fmi2_callback_logger_ft         logger;\r
+       fmi2_callback_allocate_memory_ft allocateMemory;\r
+       fmi2_callback_free_memory_ft     freeMemory;\r
+       fmi2_step_finished_ft           stepFinished;\r
+       fmi2_component_environment_t    componentEnvironment;\r
+} fmi2_callback_functions_t;\r
+\r
+/** Event info structure as used in FMI 2.0 ME */\r
+/* TODO: reuse from fmiFunctions.h */
+typedef struct {
+    fmi2_boolean_t newDiscreteStatesNeeded;
+    fmi2_boolean_t terminateSimulation;
+    fmi2_boolean_t nominalsOfContinuousStatesChanged;
+    fmi2_boolean_t valuesOfContinuousStatesChanged;
+    fmi2_boolean_t nextEventTimeDefined;
+    fmi2_real_t    nextEventTime;
+} fmi2_event_info_t;
+
+/** Co-simulation status for FMI 2.0 CS */\r
+/* TODO: reuse from fmiFunctions.h */
+typedef enum {\r
+    fmi2_do_step_status,\r
+    fmi2_pending_status,\r
+    fmi2_last_successful_time,\r
+    fmi2_terminated\r
+} fmi2_status_kind_t;\r
+\r
+\r
+\r
+/* reset alignment policy to the one set before reading this file */\r
+#if defined _MSC_VER || defined __GNUC__\r
+#pragma pack(pop)\r
+#endif\r
+\r
+/* Define fmi function pointer types to simplify dynamic loading */\r
+\r
+/***************************************************\r
+Types for Common Functions\r
+****************************************************/\r
+\r
+/* Inquire version numbers of header files and setting logging status */\r
+   typedef const char* (*fmi2_get_types_platform_ft)();\r
+   typedef const char* (*fmi2_get_version_ft)();\r
+   typedef fmi2_status_t   (*fmi2_set_debug_logging_ft)(fmi2_component_t, fmi2_boolean_t,size_t nCategories, const fmi2_string_t categories[]);\r
+\r
+/* Creation and destruction of fmu instances and setting debug status */
+   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);
+   typedef void         (*fmi2_free_instance_ft)(fmi2_component_t);
+
+/* Enter and exit initialization mode, terminate and reset */
+   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);
+   typedef fmi2_status_t (*fmi2_enter_initialization_mode_ft) (fmi2_component_t);
+   typedef fmi2_status_t (*fmi2_exit_initialization_mode_ft)  (fmi2_component_t);
+   typedef fmi2_status_t (*fmi2_terminate_ft)              (fmi2_component_t);
+   typedef fmi2_status_t (*fmi2_reset_ft)     (fmi2_component_t);
+
+/* Getting and setting variable values */\r
+   typedef fmi2_status_t (*fmi2_get_real_ft)   (fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_real_t   []);\r
+   typedef fmi2_status_t (*fmi2_get_integer_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_integer_t[]);\r
+   typedef fmi2_status_t (*fmi2_get_boolean_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_boolean_t[]);\r
+   typedef fmi2_status_t (*fmi2_get_string_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, fmi2_string_t []);\r
+\r
+   typedef fmi2_status_t (*fmi2_set_real_ft)   (fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_real_t   []);\r
+   typedef fmi2_status_t (*fmi2_set_integer_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_integer_t[]);\r
+   typedef fmi2_status_t (*fmi2_set_boolean_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_boolean_t[]);\r
+   typedef fmi2_status_t (*fmi2_set_string_ft) (fmi2_component_t, const fmi2_value_reference_t[], size_t, const fmi2_string_t []);\r
+\r
+/* Getting and setting the internal _fmu_ state */\r
+   typedef fmi2_status_t (*fmi2_get_fmu_state_ft)           (fmi2_component_t, fmi2_FMU_state_t*);\r
+   typedef fmi2_status_t (*fmi2_set_fmu_state_ft)           (fmi2_component_t, fmi2_FMU_state_t);\r
+   typedef fmi2_status_t (*fmi2_free_fmu_state_ft)          (fmi2_component_t, fmi2_FMU_state_t*);\r
+   typedef fmi2_status_t (*fmi2_serialized_fmu_state_size_ft)(fmi2_component_t, fmi2_FMU_state_t, size_t*);\r
+   typedef fmi2_status_t (*fmi2_serialize_fmu_state_ft)     (fmi2_component_t, fmi2_FMU_state_t, fmi2_byte_t[], size_t);\r
+   typedef fmi2_status_t (*fmi2_de_serialize_fmu_state_ft)   (fmi2_component_t, const fmi2_byte_t[], size_t, fmi2_FMU_state_t*);\r
+\r
+/* Getting directional derivatives */
+   typedef fmi2_status_t (*fmi2_get_directional_derivative_ft)(fmi2_component_t, const fmi2_value_reference_t[], size_t,\r
+                                                                   const fmi2_value_reference_t[], size_t,\r
+                                                                   const fmi2_real_t[], fmi2_real_t[]);\r
+\r
+/***************************************************\r
+Types for Functions for FMI for Model Exchange\r
+****************************************************/\r
+\r
+/* Enter and exit the different modes */
+   typedef fmi2_status_t (*fmi2_enter_event_mode_ft)          (fmi2_component_t);
+   typedef fmi2_status_t (*fmi2_new_discrete_states_ft)       (fmi2_component_t, fmi2_event_info_t*);
+   typedef fmi2_status_t (*fmi2_enter_continuous_time_mode_ft)(fmi2_component_t);
+   typedef fmi2_status_t (*fmi2_completed_integrator_step_ft) (fmi2_component_t, fmi2_boolean_t, fmi2_boolean_t*, fmi2_boolean_t*);
+
+/* Providing independent variables and re-initialization of caching */\r
+   typedef fmi2_status_t (*fmi2_set_time_ft)                (fmi2_component_t, fmi2_real_t);\r
+   typedef fmi2_status_t (*fmi2_set_continuous_states_ft)    (fmi2_component_t, const fmi2_real_t[], size_t);\r
+\r
+/* Evaluation of the model equations */\r
+   typedef fmi2_status_t (*fmi2_get_derivatives_ft)            (fmi2_component_t, fmi2_real_t[], size_t);\r
+   typedef fmi2_status_t (*fmi2_get_event_indicators_ft)        (fmi2_component_t, fmi2_real_t[], size_t);\r
+   typedef fmi2_status_t (*fmi2_get_continuous_states_ft)       (fmi2_component_t, fmi2_real_t[], size_t);\r
+   typedef fmi2_status_t (*fmi2_get_nominals_of_continuous_states_ft)(fmi2_component_t, fmi2_real_t[], size_t);\r
+\r
+\r
+/***************************************************\r
+Types for_functions for FMI for Co-_simulation\r
+****************************************************/\r
+\r
+/* Simulating the slave */\r
+   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
+   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
+\r
+   typedef fmi2_status_t (*fmi2_do_step_ft)     (fmi2_component_t, fmi2_real_t, fmi2_real_t, fmi2_boolean_t);\r
+   typedef fmi2_status_t (*fmi2_cancel_step_ft) (fmi2_component_t);\r
+\r
+/* Inquire slave status */\r
+   typedef fmi2_status_t (*fmi2_get_status_ft)       (fmi2_component_t, const fmi2_status_kind_t, fmi2_status_t* );\r
+   typedef fmi2_status_t (*fmi2_get_real_status_ft)   (fmi2_component_t, const fmi2_status_kind_t, fmi2_real_t*   );\r
+   typedef fmi2_status_t (*fmi2_get_integer_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_integer_t*);\r
+   typedef fmi2_status_t (*fmi2_get_boolean_status_ft)(fmi2_component_t, const fmi2_status_kind_t, fmi2_boolean_t*);\r
+   typedef fmi2_status_t (*fmi2_get_string_status_ft) (fmi2_component_t, const fmi2_status_kind_t, fmi2_string_t* );\r
+\r
+/**    @}\r
+*/
+\r
+#ifdef __cplusplus\r
+}  /* end of extern "C" { */\r
+#endif\r
+\r
+#endif /* fmi2_function_types_h */\r