]> gerrit.simantics Code Review - simantics/fmil.git/blob - org.simantics.fmil.core/native/FMILibrary/src/CAPI/src/FMI1/fmi1_capi_me.c
Switch to full JavaSE-11+ compatibility
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / src / CAPI / src / FMI1 / fmi1_capi_me.c
1 /*\r
2     Copyright (C) 2012 Modelon AB\r
3 \r
4     This program is free software: you can redistribute it and/or modify\r
5     it under the terms of the BSD style license.\r
6 \r
7     This program is distributed in the hope that it will be useful,\r
8     but WITHOUT ANY WARRANTY; without even the implied warranty of\r
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
10     FMILIB_License.txt file for more details.\r
11 \r
12     You should have received a copy of the FMILIB_License.txt file\r
13     along with this program. If not, contact Modelon AB <http://www.modelon.com>.\r
14 */\r
15 \r
16 #ifdef __cplusplus \r
17 extern "C" {\r
18 #endif\r
19 #include <assert.h>\r
20 #include <FMI1/fmi1_capi.h>\r
21 #include <FMI1/fmi1_capi_impl.h>\r
22 \r
23 \r
24 fmi1_component_t fmi1_capi_instantiate_model(fmi1_capi_t* fmu, fmi1_string_t instanceName, fmi1_string_t GUID, fmi1_boolean_t loggingOn)\r
25 {\r
26         fmi1_me_callback_functions_t cb;\r
27         assert(fmu);\r
28         cb.logger = fmu->callBackFunctions.logger;\r
29     cb.allocateMemory = fmu->callBackFunctions.allocateMemory;\r
30     cb.freeMemory = fmu->callBackFunctions.freeMemory;\r
31         jm_log_verbose(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiInstantiateModel");\r
32         return fmu->c = fmu->fmiInstantiateModel(instanceName, GUID, cb, loggingOn);\r
33 }\r
34 \r
35 void fmi1_capi_free_model_instance(fmi1_capi_t* fmu)\r
36 {\r
37         jm_log_verbose(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiFreeModelInstance");\r
38         fmu->fmiFreeModelInstance(fmu->c);\r
39 }\r
40 \r
41 fmi1_status_t fmi1_capi_initialize(fmi1_capi_t* fmu, fmi1_boolean_t toleranceControlled, fmi1_real_t relativeTolerance, fmi1_event_info_t* eventInfo)\r
42 {\r
43         assert(fmu);\r
44         jm_log_verbose(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiInitialize");\r
45         return fmu->fmiInitialize(fmu->c, toleranceControlled, relativeTolerance, eventInfo);   \r
46 }\r
47 \r
48 const char* fmi1_capi_get_model_types_platform(fmi1_capi_t* fmu)\r
49 {\r
50         assert(fmu);\r
51         jm_log_verbose(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiGetModelTypesPlatform");\r
52         return fmu->fmiGetModelTypesPlatform();\r
53 }\r
54 \r
55 fmi1_status_t fmi1_capi_set_time(fmi1_capi_t* fmu, fmi1_real_t time)\r
56 {\r
57         assert(fmu);\r
58         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiGetModelTypesPlatform");\r
59         return fmu->fmiSetTime(fmu->c, time);\r
60 }\r
61 \r
62 fmi1_status_t fmi1_capi_set_continuous_states(fmi1_capi_t* fmu, const fmi1_real_t x[], size_t nx)\r
63 {\r
64         assert(fmu);\r
65         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiSetContinuousStates");\r
66         return fmu->fmiSetContinuousStates(fmu->c, x, nx);\r
67 }\r
68 \r
69 fmi1_status_t fmi1_capi_completed_integrator_step(fmi1_capi_t* fmu, fmi1_boolean_t* callEventUpdate)\r
70 {\r
71         assert(fmu);\r
72         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiCompletedIntegratorStep");\r
73         return fmu->fmiCompletedIntegratorStep(fmu->c, callEventUpdate);\r
74 }\r
75 \r
76 fmi1_status_t fmi1_capi_get_derivatives(fmi1_capi_t* fmu, fmi1_real_t derivatives[], size_t nx)\r
77 {\r
78         assert(fmu);\r
79         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiGetDerivatives");\r
80         return fmu->fmiGetDerivatives(fmu->c, derivatives, nx);\r
81 }\r
82 \r
83 fmi1_status_t fmi1_capi_get_event_indicators(fmi1_capi_t* fmu, fmi1_real_t eventIndicators[], size_t ni)\r
84 {\r
85         assert(fmu);\r
86         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiGetEventIndicators");\r
87         return fmu->fmiGetEventIndicators(fmu->c, eventIndicators, ni);\r
88 }\r
89 \r
90 fmi1_status_t fmi1_capi_eventUpdate(fmi1_capi_t* fmu, fmi1_boolean_t intermediateResults, fmi1_event_info_t* eventInfo)\r
91 {\r
92         assert(fmu);\r
93         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiEventUpdate");\r
94         return fmu->fmiEventUpdate(fmu->c, intermediateResults, eventInfo);\r
95 }\r
96 \r
97 fmi1_status_t fmi1_capi_get_continuous_states(fmi1_capi_t* fmu, fmi1_real_t states[], size_t nx)\r
98 {\r
99         assert(fmu);\r
100         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiGetContinuousStates");\r
101         return fmu->fmiGetContinuousStates(fmu->c, states, nx);\r
102 }\r
103 \r
104 fmi1_status_t fmi1_capi_get_nominal_continuous_states(fmi1_capi_t* fmu, fmi1_real_t x_nominal[], size_t nx)\r
105 {\r
106         assert(fmu);\r
107         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiGetNominalContinuousStates");\r
108         return fmu->fmiGetNominalContinuousStates(fmu->c, x_nominal, nx);\r
109 }\r
110 \r
111 fmi1_status_t fmi1_capi_get_state_value_references(fmi1_capi_t* fmu, fmi1_value_reference_t vrx[], size_t nx)\r
112 {\r
113         assert(fmu);\r
114         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiGetStateValueReferences");\r
115         return fmu->fmiGetStateValueReferences(fmu->c, vrx, nx);\r
116 }\r
117 \r
118 fmi1_status_t fmi1_capi_terminate(fmi1_capi_t* fmu)\r
119 {\r
120         assert(fmu);\r
121         jm_log_debug(fmu->callbacks, FMI_CAPI_MODULE_NAME, "Calling fmiTerminate");\r
122         return fmu->fmiTerminate(fmu->c);\r
123 }\r
124 \r
125 #ifdef __cplusplus\r
126 }\r
127 #endif\r