X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.fmil%2Fnative%2FFMUSimulator%2Fsrc%2Ffmu_control.cpp;h=c5c99412d644fc8752d99d039043115d982a8e1a;hb=66fb5872ade1db9ea79f072bbb22ed5dcb62f17f;hp=43fe42c87d05cd1d12071ab4c00038d062e74774;hpb=d37b372df3c35c5f89c139146422041a79a726e5;p=simantics%2Ffmil.git diff --git a/org.simantics.fmil/native/FMUSimulator/src/fmu_control.cpp b/org.simantics.fmil/native/FMUSimulator/src/fmu_control.cpp index 43fe42c..c5c9941 100644 --- a/org.simantics.fmil/native/FMUSimulator/src/fmu_control.cpp +++ b/org.simantics.fmil/native/FMUSimulator/src/fmu_control.cpp @@ -39,9 +39,21 @@ using namespace std; struct FMI1 { void *fmu; - vector variables; // all variables in an initialized model - vector valueReferences; // all value references - vector subscription; // subscribed value references + + vector variables; + vector descriptions; + vector declaredTypes; + vector valueReferences; + vector types; + vector variabilities; + vector causalities; + + vector declaredTypeNames; + vector typeDescriptions; + vector quantities; + vector units; + + vector subscription; double currentTime; double timeStep; @@ -114,7 +126,9 @@ JNIEXPORT jint JNICALL Java_org_simantics_fmil_FMIL_loadFMUFile_1 HMODULE module = NULL; FMI1 fmi1; FMIL_Variable *vars; + FMIL_DeclaredType *types; int variableCount = 0; + int typeCount = 0; const char *fmuPath = env->GetStringUTFChars(path, 0); const char *fmuTempDir = env->GetStringUTFChars(tempDir, 0); @@ -128,9 +142,38 @@ JNIEXPORT jint JNICALL Java_org_simantics_fmil_FMIL_loadFMUFile_1 vars = FMI1_CS_GET_VARIABLES(fmi1.fmu, &variableCount); for(int i=0;iReleaseStringUTFChars(path, fmuPath); @@ -405,6 +448,36 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariables_1 } +JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableDescriptions_1 + (JNIEnv *env, jobject obj, jint id) { + + jobjectArray ret= (jobjectArray)env->NewObjectArray(fmus[id].descriptions.size(), + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + + for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].descriptions[i].c_str())); + } + + return ret; + +} + +JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableDeclaredTypes_1 + (JNIEnv *env, jobject obj, jint id) { + + jobjectArray ret= (jobjectArray)env->NewObjectArray(fmus[id].declaredTypes.size(), + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + + for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].declaredTypes[i].c_str())); + } + + return ret; + +} + JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableReferences_1 (JNIEnv *env, jobject obj, jint id, jintArray result) { @@ -425,6 +498,126 @@ JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableReference } +JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableTypes_1 + (JNIEnv *env, jobject obj, jint id, jintArray result) { + + jboolean isCopy; + jint* resultElements = env -> GetIntArrayElements(result, &isCopy); + jsize n = env -> GetArrayLength(result); + + int i; + for (i = 0; i < n; i++) { + resultElements[i] = fmus[id].types[i]; + } + + if (isCopy == JNI_TRUE) { + env -> ReleaseIntArrayElements(result, resultElements, 0); + } + + return result; + +} + +JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableVariabilities_1 + (JNIEnv *env, jobject obj, jint id, jintArray result) { + + jboolean isCopy; + jint* resultElements = env -> GetIntArrayElements(result, &isCopy); + jsize n = env -> GetArrayLength(result); + + int i; + for (i = 0; i < n; i++) { + resultElements[i] = fmus[id].variabilities[i]; + } + + if (isCopy == JNI_TRUE) { + env -> ReleaseIntArrayElements(result, resultElements, 0); + } + + return result; + +} + +JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableCausalities_1 + (JNIEnv *env, jobject obj, jint id, jintArray result) { + + jboolean isCopy; + jint* resultElements = env -> GetIntArrayElements(result, &isCopy); + jsize n = env -> GetArrayLength(result); + + int i; + for (i = 0; i < n; i++) { + resultElements[i] = fmus[id].causalities[i]; + } + + if (isCopy == JNI_TRUE) { + env -> ReleaseIntArrayElements(result, resultElements, 0); + } + + return result; + +} + +JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllDeclaredTypes_1 + (JNIEnv *env, jobject obj, jint id) { + + jobjectArray ret= (jobjectArray)env->NewObjectArray(fmus[id].declaredTypeNames.size(), + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + + for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].declaredTypeNames[i].c_str())); + } + + return ret; + +} + +JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllDeclaredTypeDescriptions_1 + (JNIEnv *env, jobject obj, jint id) { + + jobjectArray ret= (jobjectArray)env->NewObjectArray(fmus[id].typeDescriptions.size(), + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + + for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].typeDescriptions[i].c_str())); + } + + return ret; + +} + +JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllDeclaredTypeQuantities_1 + (JNIEnv *env, jobject obj, jint id) { + + jobjectArray ret= (jobjectArray)env->NewObjectArray(fmus[id].quantities.size(), + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + + for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].quantities[i].c_str())); + } + + return ret; + +} + +JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllDeclaredTypeUnits_1 + (JNIEnv *env, jobject obj, jint id) { + + jobjectArray ret= (jobjectArray)env->NewObjectArray(fmus[id].units.size(), + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + + for(int i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].units[i].c_str())); + } + + return ret; + +} + /* JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_filterVariables_1 (JNIEnv *env, jobject obj, jstring id, jstring regexp) {