]> gerrit.simantics Code Review - simantics/fmil.git/blobdiff - org.simantics.fmil/native/FMUSimulator/src/fmu_control.cpp
(refs #6290) Import initial FMI Studio codebase
[simantics/fmil.git] / org.simantics.fmil / native / FMUSimulator / src / fmu_control.cpp
index 43fe42c87d05cd1d12071ab4c00038d062e74774..45d75862789430ac1562fbda250a77e15c34929c 100644 (file)
@@ -39,9 +39,15 @@ using namespace std;
 struct FMI1 {\r
 \r
        void *fmu;\r
-       vector<string> variables;       // all variables in an initialized model\r
-       vector<int> valueReferences;            // all value references\r
-       vector<int> subscription;               // subscribed value references\r
+\r
+       vector<string> variables;\r
+       vector<string> descriptions;\r
+       vector<int> valueReferences;\r
+       vector<int> types;\r
+       vector<int> variabilities;\r
+       vector<int> causalities;\r
+\r
+       vector<int> subscription;\r
        double currentTime;\r
        double timeStep;\r
 \r
@@ -128,6 +134,13 @@ JNIEXPORT jint JNICALL Java_org_simantics_fmil_FMIL_loadFMUFile_1
    vars = FMI1_CS_GET_VARIABLES(fmi1.fmu, &variableCount);\r
    for(int i=0;i<variableCount;i++) {\r
           fmi1.variables.push_back(string(vars[i].name));\r
+          if(vars[i].description)\r
+                       fmi1.descriptions.push_back(string(vars[i].description));\r
+          else\r
+                       fmi1.descriptions.push_back(string(""));\r
+          fmi1.types.push_back(vars[i].type);\r
+          fmi1.causalities.push_back(vars[i].causality);\r
+          fmi1.variabilities.push_back(vars[i].variability);\r
           fmi1.valueReferences.push_back(vars[i].vr);\r
    }\r
 \r
@@ -405,6 +418,21 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariables_1
 \r
 }\r
 \r
+JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableDescriptions_1\r
+  (JNIEnv *env, jobject obj, jint id) {\r
+\r
+       jobjectArray ret= (jobjectArray)env->NewObjectArray(fmus[id].descriptions.size(),  \r
+                       env->FindClass("java/lang/String"),  \r
+                       env->NewStringUTF(""));  \r
+   \r
+       for(int i=0;i<fmus[id].descriptions.size();i++) {  \r
+               env->SetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].descriptions[i].c_str()));  \r
+       }  \r
+\r
+       return ret;  \r
+\r
+}\r
+\r
 JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableReferences_1\r
   (JNIEnv *env, jobject obj, jint id, jintArray result) {\r
 \r
@@ -425,6 +453,66 @@ JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableReference
 \r
 }\r
 \r
+JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableTypes_1\r
+  (JNIEnv *env, jobject obj, jint id, jintArray result) {\r
+\r
+       jboolean isCopy;\r
+       jint* resultElements = env -> GetIntArrayElements(result, &isCopy);\r
+       jsize n = env -> GetArrayLength(result);\r
+\r
+       int i;\r
+       for (i = 0; i < n; i++) {\r
+               resultElements[i] = fmus[id].types[i];\r
+       } \r
+         \r
+       if (isCopy == JNI_TRUE) {\r
+               env -> ReleaseIntArrayElements(result, resultElements, 0);\r
+       }\r
+\r
+       return result;\r
+\r
+}\r
+\r
+JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableVariabilities_1\r
+  (JNIEnv *env, jobject obj, jint id, jintArray result) {\r
+\r
+       jboolean isCopy;\r
+       jint* resultElements = env -> GetIntArrayElements(result, &isCopy);\r
+       jsize n = env -> GetArrayLength(result);\r
+\r
+       int i;\r
+       for (i = 0; i < n; i++) {\r
+               resultElements[i] = fmus[id].variabilities[i];\r
+       } \r
+         \r
+       if (isCopy == JNI_TRUE) {\r
+               env -> ReleaseIntArrayElements(result, resultElements, 0);\r
+       }\r
+\r
+       return result;\r
+\r
+}\r
+\r
+JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_FMIL_getAllVariableCausalities_1\r
+  (JNIEnv *env, jobject obj, jint id, jintArray result) {\r
+\r
+       jboolean isCopy;\r
+       jint* resultElements = env -> GetIntArrayElements(result, &isCopy);\r
+       jsize n = env -> GetArrayLength(result);\r
+\r
+       int i;\r
+       for (i = 0; i < n; i++) {\r
+               resultElements[i] = fmus[id].causalities[i];\r
+       } \r
+         \r
+       if (isCopy == JNI_TRUE) {\r
+               env -> ReleaseIntArrayElements(result, resultElements, 0);\r
+       }\r
+\r
+       return result;\r
+\r
+}\r
+\r
 /*\r
 JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_FMIL_filterVariables_1\r
   (JNIEnv *env, jobject obj, jstring id, jstring regexp) {\r