2 Copyright (C) 2012 Modelon AB
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the BSD style license.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 FMILIB_License.txt file for more details.
12 You should have received a copy of the FMILIB_License.txt file
13 along with this program. If not, contact Modelon AB <http://www.modelon.com>.
19 #include <JM/jm_named_ptr.h>
20 #include <FMI/fmi_import_context.h>
21 #include <FMI/fmi_zip_unzip.h>
22 #include <FMI/fmi_import_util.h>
24 #include "fmi_import_context_impl.h"
26 #define MODULE "FMILIB"
28 fmi_import_context_t* fmi_import_allocate_context( jm_callbacks* callbacks) {
\r
29 jm_log_verbose(callbacks, MODULE, "Allocating FMIL context");
\r
30 return fmi_xml_allocate_context(callbacks);
\r
33 void fmi_import_free_context( fmi_import_context_t* c) {
\r
34 fmi_xml_free_context(c);
\r
37 void fmi_import_set_configuration( fmi_import_context_t* c, int conf) {
38 fmi_xml_set_configuration(c, conf);
41 fmi_version_enu_t fmi_import_get_fmi_version( fmi_import_context_t* c, const char* fileName, const char* dirName) {
42 fmi_version_enu_t ret = fmi_version_unknown_enu;
43 jm_status_enu_t status;
45 jm_log_verbose(c->callbacks, MODULE, "Detecting FMI standard version");
46 if(!fileName || !*fileName) {
47 jm_log_fatal(c->callbacks, MODULE, "No FMU filename specified");
48 return fmi_version_unknown_enu;
50 if(!dirName || !*dirName) {
51 jm_log_fatal(c->callbacks, MODULE, "No temporary directory name specified");
52 return fmi_version_unknown_enu;
54 status = fmi_zip_unzip(fileName, dirName, c->callbacks);
55 if(status == jm_status_error) return fmi_version_unknown_enu;
56 mdpath = fmi_import_get_model_description_path(dirName, c->callbacks);
57 ret = fmi_xml_get_fmi_version(c, mdpath);
58 jm_log_info(c->callbacks, MODULE, "XML specifies FMI standard version %s", fmi_version_to_string(ret));
59 c->callbacks->free(mdpath);