]> gerrit.simantics Code Review - simantics/fmil.git/blobdiff - org.simantics.fmil.core/native/FMILibrary/src/Util/include/FMI2/fmi2_enums.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_enums.h
diff --git a/org.simantics.fmil.core/native/FMILibrary/src/Util/include/FMI2/fmi2_enums.h b/org.simantics.fmil.core/native/FMILibrary/src/Util/include/FMI2/fmi2_enums.h
new file mode 100644 (file)
index 0000000..5ff4194
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+    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_ENUMS_H_\r
+#define FMI2_ENUMS_H_\r
+\r
+#include <fmilib_config.h>\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/** \file fmi2_enums.h \r
+       \brief Definions the enum types used with FMI 2.0 libs\r
+*/\r
+\r
+/**    \addtogroup fmi2_utils\r
+       @{\r
+       \addtogroup fmi2_enums\r
+       @}\r
+*/
+/** \addtogroup fmi2_enums Enum types used with FMI 2.0 libs\r
+       @{\r
+*/\r
+/** \brief Naming convention for the variables in XML file*/\r
+typedef enum fmi2_variable_naming_convension_enu_t\r
+{ \r
+        fmi2_naming_enu_flat,\r
+        fmi2_naming_enu_structured,\r
+        fmi2_naming_enu_unknown\r
+} fmi2_variable_naming_convension_enu_t;\r
+\r
+/** \brief Convert a #fmi2_variable_naming_convension_enu_t constant into string */\r
+FMILIB_EXPORT const char* fmi2_naming_convention_to_string(fmi2_variable_naming_convension_enu_t convention);\r
+\r
+/**  \brief FMU 2.0 kinds */\r
+typedef enum fmi2_fmu_kind_enu_t\r
+{\r
+               fmi2_fmu_kind_unknown = 0,\r
+        fmi2_fmu_kind_me = 1,\r
+        fmi2_fmu_kind_cs = 2,\r
+        fmi2_fmu_kind_me_and_cs = 3 /* defined to be equal to (fmi2_fmu_kind_me|fmi2_fmu_kind_cs) */\r
+} fmi2_fmu_kind_enu_t;\r
+\r
+/** \brief Convert a #fmi2_fmu_kind_enu_t constant into string  */\r
+FMILIB_EXPORT const char* fmi2_fmu_kind_to_string(fmi2_fmu_kind_enu_t kind);\r
+\r
+/**  \brief Variability property for variables */\r
+typedef enum fmi2_variability_enu_t {
+        fmi2_variability_enu_constant = 0,
+        fmi2_variability_enu_fixed  = 1,
+        fmi2_variability_enu_tunable  = 2,
+        fmi2_variability_enu_discrete  = 3,
+        fmi2_variability_enu_continuous  = 4,
+               fmi2_variability_enu_unknown  = 5
+} fmi2_variability_enu_t;
+
+/** \brief Convert a #fmi2_variability_enu_t constant into string  */
+FMILIB_EXPORT const char* fmi2_variability_to_string(fmi2_variability_enu_t v);
+
+/**  \brief Causality property for variables */
+typedef enum fmi2_causality_enu_t {
+        fmi2_causality_enu_parameter = 0,
+        fmi2_causality_enu_calculated_parameter = 1,
+        fmi2_causality_enu_input  = 2,
+        fmi2_causality_enu_output  = 3,
+        fmi2_causality_enu_local  = 4,
+        fmi2_causality_enu_independent = 5,
+        fmi2_causality_enu_unknown = 6
+} fmi2_causality_enu_t;
+
+/** \brief Convert a #fmi2_causality_enu_t constant into string  */
+FMILIB_EXPORT const char* fmi2_causality_to_string(fmi2_causality_enu_t c);
+\r
+/**  \brief Initial property for variables */
+typedef enum fmi2_initial_enu_t {
+        fmi2_initial_enu_exact,
+        fmi2_initial_enu_approx,
+        fmi2_initial_enu_calculated,
+        fmi2_initial_enu_unknown /* must be last*/
+} fmi2_initial_enu_t;
+
+/** \brief Convert a #fmi2_initial_enu_t constant into string  */
+FMILIB_EXPORT const char* fmi2_initial_to_string(fmi2_initial_enu_t c);
+\r
+/** \r
+       \brief Get default initial attribute value for the given variability and causality combination.\r
+       \return The default initial attribute or fmi2_initial_enu_unknown if combination of causality\r
+                       and variability is not valid.\r
+*/\r
+FMILIB_EXPORT fmi2_initial_enu_t fmi2_get_default_initial(fmi2_variability_enu_t v, fmi2_causality_enu_t c);\r
+\r
+/** \r
+       \brief Check if the combination of variability, causality and initial is valid.\r
+       \return Same initial as submitted if the combination is valid. Otherwise, same as fmi2_get_default_initial.\r
+*/\r
+FMILIB_EXPORT fmi2_initial_enu_t fmi2_get_valid_initial(fmi2_variability_enu_t v, fmi2_causality_enu_t c, fmi2_initial_enu_t i);\r
+\r
+/** \brief Alias property for variables */\r
+typedef enum fmi2_variable_alias_kind_enu_t {
+    fmi2_variable_is_not_alias = 0,
+    fmi2_variable_is_alias = 1
+} fmi2_variable_alias_kind_enu_t;
+
+/** \brief Base types used in type definitions */
+typedef enum fmi2_base_type_enu_t
+{
+       fmi2_base_type_real,
+       fmi2_base_type_int,
+       fmi2_base_type_bool,
+       fmi2_base_type_str,
+       fmi2_base_type_enum
+} fmi2_base_type_enu_t;
+
+/**  \brief Convert base type constant to string 
+       \param bt Base type identifier.
+       \return Corresponding base type name.
+       */
+FMILIB_EXPORT const char* fmi2_base_type_to_string(fmi2_base_type_enu_t bt);
+
+/** \brief List of capability flags for ModelExchange */
+#define FMI2_ME_CAPABILITIES(H) \
+       H(needsExecutionTool) \\r
+       H(completedIntegratorStepNotNeeded) \\r
+       H(canBeInstantiatedOnlyOncePerProcess) \\r
+       H(canNotUseMemoryManagementFunctions) \\r
+       H(canGetAndSetFMUstate) \\r
+       H(canSerializeFMUstate) \\r
+       H(providesDirectionalDerivatives)\\r
+       H(completedEventIterationIsProvided)\r
+
+/** \brief List of capability flags for CoSimulation */
+#define FMI2_CS_CAPABILITIES(H) \
+       H(needsExecutionTool) \\r
+       H(canHandleVariableCommunicationStepSize) \\r
+       H(canInterpolateInputs) \\r
+       H(maxOutputDerivativeOrder) \\r
+       H(canRunAsynchronuously) \\r
+       H(canBeInstantiatedOnlyOncePerProcess) \\r
+       H(canNotUseMemoryManagementFunctions) \\r
+       H(canGetAndSetFMUstate) \\r
+       H(canSerializeFMUstate) \\r
+       H(providesDirectionalDerivatives)\r
+
+/** \brief Capability flags for ModelExchange and CoSimulation */
+typedef enum fmi2_capabilities_enu_t {
+#define FMI2_EXPAND_ME_CAPABILITIES_ENU(c) fmi2_me_ ## c,
+#define FMI2_EXPAND_CS_CAPABILITIES_ENU(c) fmi2_cs_ ## c,
+       FMI2_ME_CAPABILITIES(FMI2_EXPAND_ME_CAPABILITIES_ENU)
+       FMI2_CS_CAPABILITIES(FMI2_EXPAND_CS_CAPABILITIES_ENU)
+       fmi2_capabilities_Num
+} fmi2_capabilities_enu_t;
+
+/** \brief Convert capability flag to a string 
+       \param id Capability flag ID.
+       \return Name of the flag or Unknown if the id is out of range.
+*/
+FMILIB_EXPORT const char * fmi2_capability_to_string(fmi2_capabilities_enu_t id);
+
+/** \brief List of SI base units used in Unit defitions*/
+#define FMI2_SI_BASE_UNITS(H) \
+       H(kg) H(m) H(s) H(A) H(K) H(mol) H(cd) H(rad)
+
+/** \brief SI base units used in Unit defitions*/
+typedef enum fmi2_SI_base_units_enu_t {
+#define FMI2_EXPAND_SI_BASE_UNIT_ENU(c) fmi2_SI_base_unit_ ## c,
+       FMI2_SI_BASE_UNITS(FMI2_EXPAND_SI_BASE_UNIT_ENU)
+       fmi2_SI_base_units_Num
+} fmi2_SI_base_units_enu_t;
+
+/** \brief Convert SI base unit ID a string 
+       \param id SI base unit ID.
+       \return Name of the base unit or "unknown" if the id is out of range.
+*/
+FMILIB_EXPORT const char * fmi2_SI_base_unit_to_string(fmi2_SI_base_units_enu_t id);
+
+/** \brief Convert a list of SI base unit exponents (corresponding to the IDs from  fmi2_SI_base_units_enu_t)
+       to a string of the form kg*m^2/s^2. Prints '-' if all the exponents are zero.
+       \param exp An array of SI base units exponents.
+       \param bufSize Size of the buffer to store the string. 
+       \param buf Buffer to store the string
+       \return Required size of the buffer to store the string. This most likely be under [8*fmi2_SI_base_units_Num].
+       If the return value is larger or equal than bufSize than the string could not be fitted in the buffer. 
+*/
+FMILIB_EXPORT size_t fmi2_SI_base_unit_exp_to_string(const int exp[fmi2_SI_base_units_Num], size_t bufSize, char buf[]);
+
+
+/** \brief Dependency factor kinds are used as part of ModelStructure definition */
+typedef enum fmi2_dependency_factor_kind_enu_t
+{
+       fmi2_dependency_factor_kind_dependent = 0,
+       fmi2_dependency_factor_kind_constant,
+       fmi2_dependency_factor_kind_fixed,
+       fmi2_dependency_factor_kind_tunable,
+       fmi2_dependency_factor_kind_discrete,
+       fmi2_dependency_factor_kind_num
+} fmi2_dependency_factor_kind_enu_t;
+
+/**  \brief Convert dependency factor kind constant to string 
+       \param fc Dependency factor kind identifier.
+       \return Corresponding factor kind as string.
+       */
+FMILIB_EXPORT const char* fmi2_dependency_factor_kind_to_string(fmi2_dependency_factor_kind_enu_t fc);
+/**    \r
+ @}\r
+*/
+#ifdef __cplusplus\r
+}\r
+#endif\r
+
+#endif /* End of header file FMI2_ENUMS_H_ */