X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.fmil.core%2Fnative%2FFMUSimulator%2Fsrc%2Ffmu_control.cpp;h=bb8e0762d041dee5d821784ab570b246a716b5d6;hb=d6e8999a4b5c9e57d7b22b2f7a703c2d3549eb8c;hp=310e9066fa7bdb0137ed280ff2c2b5f47a56a6e3;hpb=9dcc8cac323b2fc064007203ef76e57e152699db;p=simantics%2Ffmil.git diff --git a/org.simantics.fmil.core/native/FMUSimulator/src/fmu_control.cpp b/org.simantics.fmil.core/native/FMUSimulator/src/fmu_control.cpp index 310e906..bb8e076 100644 --- a/org.simantics.fmil.core/native/FMUSimulator/src/fmu_control.cpp +++ b/org.simantics.fmil.core/native/FMUSimulator/src/fmu_control.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -31,11 +32,14 @@ extern "C" { #define PRINT(fmt,args) { FILE *fp = fopen("R:\\Simantics\\Sysdyn\\log.txt", "ab"); fprintf(fp, fmt, args); fclose(fp); } -#include -#define GetCurrentDir _getcwd - using namespace std; +static std::atomic instanceNameID; + +int create_id() { + return instanceNameID++; +} + struct FMI1 { void *fmu; @@ -142,7 +146,6 @@ bool exists(string id) { JNIEXPORT jint JNICALL Java_org_simantics_fmil_core_FMIL_loadFMUFile_1 (JNIEnv *env, jobject obj, jstring path, jstring tempDir) { - HMODULE module = NULL; FMI1 fmi1; FMIL_Variable *vars; FMIL_DeclaredType *types; @@ -455,7 +458,6 @@ JNIEXPORT jdoubleArray JNICALL Java_org_simantics_fmil_core_FMIL_getSubscribedRe jsize n = env -> GetArrayLength(result); int *vrs; const char *error = ""; - int returnValue = 0; FMI1 fmi = fmus[id]; if(n > 0) { @@ -477,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]; + 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: "; @@ -525,7 +529,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariables env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].variables[i].c_str())); } @@ -540,7 +544,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariableD env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].descriptions[i].c_str())); } @@ -555,7 +559,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariableD env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].declaredTypes[i].c_str())); } @@ -610,8 +614,7 @@ JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariableVari jint* resultElements = env -> GetIntArrayElements(result, &isCopy); jsize n = env -> GetArrayLength(result); - int i; - for (i = 0; i < n; i++) { + for (jsize i = 0; i < n; i++) { resultElements[i] = fmus[id].variabilities[i]; } @@ -630,8 +633,7 @@ JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariableCaus jint* resultElements = env -> GetIntArrayElements(result, &isCopy); jsize n = env -> GetArrayLength(result); - int i; - for (i = 0; i < n; i++) { + for (jsize i = 0; i < n; i++) { resultElements[i] = fmus[id].causalities[i]; } @@ -650,7 +652,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllDeclaredT env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].declaredTypeNames[i].c_str())); } @@ -665,7 +667,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllDeclaredT env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].typeDescriptions[i].c_str())); } @@ -680,7 +682,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllDeclaredT env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].quantities[i].c_str())); } @@ -695,7 +697,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllDeclaredT env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].units[i].c_str())); } @@ -719,7 +721,7 @@ JNIEXPORT jint JNICALL Java_org_simantics_fmil_core_FMIL_simulateStep_1 int returnValue; const char *error = ""; - FMI1 fmi = fmus[id]; + FMI1 &fmi = fmus[id]; if (fmi.version == 1) { returnValue = FMI1_CS_STEP(fmi.fmu, fmi.currentTime, fmi.timeStep, &error); } else if (fmi.version == 2) { @@ -981,4 +983,4 @@ JNIEXPORT jstring JNICALL Java_org_simantics_fmil_core_FMIL_getStringValue_1 */ return 0; -} \ No newline at end of file +}