import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.net.URL;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.Paths;
import java.util.UUID;
import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.osgi.framework.Bundle;
-import org.simantics.fmil.core.ExecEnvironment.ARCHType;
import org.simantics.fmil.core.ExecEnvironment.OSType;
import org.simantics.utils.FileUtils;
import org.slf4j.Logger;
*/
private static int OK = 0;
private static int ERROR = 1;
- private static String UNSATISFIED_LINK = "Method not found. DLL might not be loaded properly.";
- public static final String TEMP_FMU_DIRECTORY_NAME = "fmil";
- public static String TEMP_FMU_COMMON_DIRECTORY;
+ private static String UNSATISFIED_LINK = "Method not found. DLL might not be loaded properly.";
+ public static final String TEMP_FMU_DIRECTORY_NAME = "fmil";
+ public static String TEMP_FMU_COMMON_DIRECTORY;
public static String LOCK_FILE_NAME = "fmil.lock";
public static Object syncObject = new Object();
* Static: load native libraries required for the FMU simulation to work.
*/
static {
-
+
File[] libraries = new File[2];
- Bundle bundle = null;
-
ExecEnvironment env = ExecEnvironment.calculate();
- if (env.os == OSType.WINDOWS) {
- if (env.arch == ARCHType.X86) {
- bundle = Platform.getBundle("org.simantics.fmil.win32");
- } else if (env.arch == ARCHType.X86_64) {
- bundle = Platform.getBundle("org.simantics.fmil.win64");
- }
- }
-
- if (bundle != null) {
- try{
- String root = FileLocator.getBundleFile(bundle).getAbsolutePath();
-// if (env.arch == ARCHType.X86_64) {
-// File newFIle = new File(root, "libraries/libexpat.dll");
-// System.load(newFIle.getAbsolutePath());
-// }
-// libraries[0] = new File(root, "libraries/zlibwapi.dll");
-// libraries[1] = new File(root, "libraries/miniunz.dll");
- libraries[0] = new File(root, "libraries/fmilib_shared.dll");
- libraries[1] = new File(root, "libraries/FMUSimulator.dll");
- }
- catch (Exception e) {
- e.printStackTrace();
+
+ try {
+ URL sharedFMILIBUrl = null;
+ URL simulatorFMIUrl = null;
+ Bundle b = Platform.getBundle("org.simantics.fmil.core");
+
+ if (env.os == OSType.WINDOWS) {
+ sharedFMILIBUrl = FileLocator.find(b, new Path("libraries/fmilib_shared.dll"), null);
+ simulatorFMIUrl = FileLocator.find(b, new Path("libraries/FMUSimulator.dll"), null);
+ } else if(env.os == OSType.LINUX) {
+ sharedFMILIBUrl = FileLocator.find(b, new Path("libraries/libfmilib_shared.so"), null);
+ simulatorFMIUrl = FileLocator.find(b, new Path("libraries/FMUSimulator.so"), null);
}
+
+ libraries[0] = new File(FileLocator.toFileURL(sharedFMILIBUrl).getPath());
+ libraries[1] = new File(FileLocator.toFileURL(simulatorFMIUrl).getPath());
+ } catch (Exception e) {
+ LOGGER.error("Failed to resolve native FMU simulation library for execution environment {}.{}", env.os, env.arch, e);
}
for(File library : libraries) {
synchronized(syncObject) {
try {
- // TODO: printtaa id ja name, jotta saadaan virheessä kiinni
+ // TODO: printtaa id ja name, jotta saadaan virheessä kiinni
double result = getRealValue_(getModelIDNew(), variableMap.get(name));
System.err.println("getRealValue " + name + " = " + result);
return result;