]> gerrit.simantics Code Review - simantics/fmil.git/blobdiff - org.simantics.fmil.core/native/FMUSimulator/src/fmu_control.cpp
Add atomic counter for instanceName and update README, fix loadFMU
[simantics/fmil.git] / org.simantics.fmil.core / native / FMUSimulator / src / fmu_control.cpp
index 285be84e42627582224722227a789c39fd9436a5..bb8e0762d041dee5d821784ab570b246a716b5d6 100644 (file)
@@ -19,6 +19,7 @@
 #include <vector>
 #include <iostream>
 #include <regex>
+#include <atomic>
 
 #include <org_simantics_fmil_FMILJNI.h>
 
@@ -33,6 +34,12 @@ extern "C" {
 
 using namespace std;
 
+static std::atomic<int> instanceNameID;
+
+int create_id() {
+    return instanceNameID++;
+}
+
 struct FMI1 {
 
        void *fmu;
@@ -472,14 +479,16 @@ JNIEXPORT jdoubleArray JNICALL Java_org_simantics_fmil_core_FMIL_getSubscribedRe
 JNIEXPORT jint JNICALL Java_org_simantics_fmil_core_FMIL_instantiateSimulation_1
   (JNIEnv *env, jobject obj, jint id) {
 
+         int uniqueId = create_id();
+         std::string instanceName = std::to_string(uniqueId);
          int returnValue;
          const char *error = "";
 
          FMI1 &fmi = fmus[id];
          if (fmi.version == 1) {
-               returnValue = FMI1_CS_INSTANTIATE(fmi.fmu, "", &error);
+                 returnValue = FMI1_CS_INSTANTIATE(fmi.fmu, instanceName, &error);
          } else if (fmi.version == 2) {
-                 returnValue = FMI2_CS_INSTANTIATE(fmi.fmu, "", &error);
+                 returnValue = FMI2_CS_INSTANTIATE(fmi.fmu, instanceName, &error);
          }
          if(returnValue != 0) {
                string message = "No FMU loaded: ";