1 /* JORTEDomainAppCreate.c */
4 * This code provides conversion between JAVA a C environments.
5 * The C functions are calling here and results are send to JAVA
6 * native functions. It uses the header pregenerated by JAVA
7 * (by command 'javah -jni class_with_native_function')
9 * @author Lukas Pokorny (lukas_pokorny@centrum.cz)
10 * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz)
11 * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org)
12 * @author dedication to Kj
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 2 of the License, or
19 * (at your option) any later version.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
29 // origin orte headers
31 // pregenerated header
32 #include "jorte/org_ocera_orte_DomainApp.h"
33 // enable TEST_STAGE run level
34 #include "jorte/4all.h"
36 #include "jorte/jorte_typedefs_defines.h"
37 #include "jorte/jorte_protos_api.h"
39 // /////////////////////////////////////////////////////////////////////
40 // public void onRegFail()
41 // /////////////////////////////////////////////////////////////////////
43 onRegFail(void *param)
45 // ///////////////////////////////// SPOLECNA CAST //
47 JNIEnv *env = NULL; // local reference
51 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
55 printf(":c: event func. 'onRegFail()' called.. \n");
60 // ///////////////////////////////// SPOLECNA CAST //
61 if(domain_events_cont->jvm == 0)
64 printf(":!c: jvm = NULL! \n");
68 jvm = domain_events_cont->jvm;
70 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
74 printf(":!c: env = NULL! \n");
79 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
83 printf(":!c: cls = NULL! \n");
87 // ///////////////////////////////// SPOLECNA CAST //
89 mid = (*env)->GetMethodID(env,
96 printf(":!c: mid = NULL! \n");
101 (*env)->CallVoidMethod(env,
102 domain_events_cont->obj_de,
109 if((*jvm)->DetachCurrentThread(jvm) != 0)
111 printf(":c!: DetachCurrentThread fault! \n");
120 // /////////////////////////////////////////////////////////////////////
121 // Event - public void onMgrNew()
122 // /////////////////////////////////////////////////////////////////////
124 onMgrNew(const struct ORTEAppInfo *appInfo, void *param)
126 // ///////////////////////////////// SPOLECNA CAST //
128 JNIEnv *env = NULL; // local reference
133 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
137 printf(":c: event func. 'onMgrNew()' called.. \n");
142 // ///////////////////////////////// SPOLECNA CAST //
143 if(domain_events_cont->jvm == 0)
146 printf(":!c: jvm = NULL! \n");
150 jvm = domain_events_cont->jvm;
152 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
156 printf(":!c: env = NULL! \n");
161 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
165 printf(":!c: cls = NULL! \n");
169 // create AppInfo instance
170 obj_ainfo = createAppInfo(env, appInfo);
174 printf(":!c: obj_ainfo = NULL! \n");
178 // ///////////////////////////////// SPOLECNA CAST //
180 mid = (*env)->GetMethodID(env,
183 "(Lorg/ocera/orte/types/AppInfo;)V");
187 printf(":!c: mid = NULL! \n");
192 (*env)->CallVoidMethod(env,
193 domain_events_cont->obj_de,
201 if((*jvm)->DetachCurrentThread(jvm) != 0)
203 printf(":c!: DetachCurrentThread fault! \n");
212 // /////////////////////////////////////////////////////////////////////
213 // Event - public void onMgrDelete()
214 // /////////////////////////////////////////////////////////////////////
216 onMgrDelete(const struct ORTEAppInfo *appInfo, void *param)
218 // ///////////////////////////////// SPOLECNA CAST //
220 JNIEnv *env = NULL; // local reference
225 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
229 printf(":c: event func. 'onMgrDelete()' called.. \n");
234 // ///////////////////////////////// SPOLECNA CAST //
235 if(domain_events_cont->jvm == 0)
238 printf(":!c: jvm = NULL! \n");
242 jvm = domain_events_cont->jvm;
244 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
248 printf(":!c: env = NULL! \n");
253 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
257 printf(":!c: cls = NULL! \n");
261 // create AppInfo instance
262 obj_ainfo = createAppInfo(env, appInfo);
266 printf(":!c: obj_ainfo = NULL! \n");
270 // ///////////////////////////////// SPOLECNA CAST //
272 mid = (*env)->GetMethodID(env,
275 "(Lorg/ocera/orte/types/AppInfo;)V");
279 printf(":!c: mid = NULL! \n");
284 (*env)->CallVoidMethod(env,
285 domain_events_cont->obj_de,
293 if((*jvm)->DetachCurrentThread(jvm) != 0)
295 printf(":c!: DetachCurrentThread fault! \n");
305 // /////////////////////////////////////////////////////////////////////
306 // Event - onAppRemoteNew
307 // /////////////////////////////////////////////////////////////////////
309 onAppRemoteNew(const struct ORTEAppInfo *appInfo, void *param)
311 // ///////////////////////////////// SPOLECNA CAST //
313 JNIEnv *env = NULL; // local reference
318 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
322 printf(":c: event func. 'onAppRemoteNew()' called.. \n");
327 // ///////////////////////////////// SPOLECNA CAST //
328 if(domain_events_cont->jvm == 0)
331 printf(":!c: jvm = NULL! \n");
335 jvm = domain_events_cont->jvm;
337 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
341 printf(":!c: env = NULL! \n");
346 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
350 printf(":!c: cls = NULL! \n");
354 // create AppInfo instance
355 obj_ainfo = createAppInfo(env, appInfo);
359 printf(":!c: obj_ainfo = NULL! \n");
363 // ///////////////////////////////// SPOLECNA CAST //
366 mid = (*env)->GetMethodID(env,
369 "(Lorg/ocera/orte/types/AppInfo;)V");
373 printf(":!c: mid = NULL! \n");
378 (*env)->CallVoidMethod(env,
379 domain_events_cont->obj_de,
387 if((*jvm)->DetachCurrentThread(jvm) != 0)
389 printf(":c!: DetachCurrentThread fault! \n");
398 // /////////////////////////////////////////////////////////////////////
399 // public void onAppDelete() { }
400 // /////////////////////////////////////////////////////////////////////
402 onAppDelete(const struct ORTEAppInfo *appInfo, void *param)
404 // ///////////////////////////////// SPOLECNA CAST //
406 JNIEnv *env = NULL; // local reference
411 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
415 printf(":c: event func. 'onAppDelete()' called.. \n");
420 // ///////////////////////////////// SPOLECNA CAST //
421 if(domain_events_cont->jvm == 0)
424 printf(":!c: jvm = NULL! \n");
428 jvm = domain_events_cont->jvm;
430 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
434 printf(":!c: env = NULL! \n");
439 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
443 printf(":!c: cls = NULL! \n");
447 // create AppInfo instance
448 obj_ainfo = createAppInfo(env, appInfo);
452 printf(":!c: obj_ainfo = NULL! \n");
456 // ///////////////////////////////// SPOLECNA CAST //
458 mid = (*env)->GetMethodID(env,
461 "(Lorg/ocera/orte/types/AppInfo;)V");
465 printf(":!c: mid = NULL! \n");
470 (*env)->CallVoidMethod(env,
471 domain_events_cont->obj_de,
479 if((*jvm)->DetachCurrentThread(jvm) != 0)
481 printf(":c!: DetachCurrentThread fault! \n");
490 // /////////////////////////////////////////////////////////////////////
491 // public void onPubRemoteNew()
492 // /////////////////////////////////////////////////////////////////////
494 onPubRemoteNew(const struct ORTEAppInfo *appInfo,
495 const struct ORTEPubInfo *pubInfo,
498 // ///////////////////////////////// SPOLECNA CAST //
500 JNIEnv *env = NULL; // local reference
506 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
510 printf(":c: event func. 'onPubRemoteNew()' called.. \n");
515 // ///////////////////////////////// SPOLECNA CAST //
516 if(domain_events_cont->jvm == 0)
519 printf(":!c: jvm = NULL! \n");
523 jvm = domain_events_cont->jvm;
525 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
529 printf(":!c: env = NULL! \n");
534 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
538 printf(":!c: cls = NULL! \n");
542 // create AppInfo instance
543 obj_ainfo = createAppInfo(env, appInfo);
547 printf(":!c: obj_ainfo = NULL! \n");
551 // create PubInfo instance
552 obj_pinfo = createPubInfo(env, pubInfo);
556 printf(":!c: obj_pinfo = NULL! \n");
560 // ///////////////////////////////// SPOLECNA CAST //
562 mid = (*env)->GetMethodID(env,
565 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
569 printf(":!c: mid = NULL! \n");
574 (*env)->CallVoidMethod(env,
575 domain_events_cont->obj_de,
584 if((*jvm)->DetachCurrentThread(jvm) != 0)
586 printf(":c!: DetachCurrentThread fault! \n");
595 // /////////////////////////////////////////////////////////////////////
596 //public void onPubRemoteChanged()
597 // /////////////////////////////////////////////////////////////////////
599 onPubRemoteChanged(const struct ORTEAppInfo *appInfo,
600 const struct ORTEPubInfo *pubInfo,
603 // ///////////////////////////////// SPOLECNA CAST //
605 JNIEnv *env = NULL; // local reference
611 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
615 printf(":c: event func. 'onPubRemoteChanged()' called.. \n");
620 // ///////////////////////////////// SPOLECNA CAST //
621 if(domain_events_cont->jvm == 0)
624 printf(":!c: jvm = NULL! \n");
628 jvm = domain_events_cont->jvm;
630 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
634 printf(":!c: env = NULL! \n");
639 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
643 printf(":!c: cls = NULL! \n");
647 // create AppInfo instance
648 obj_ainfo = createAppInfo(env, appInfo);
652 printf(":!c: obj_ainfo = NULL! \n");
656 // create PubInfo instance
657 obj_pinfo = createPubInfo(env, pubInfo);
661 printf(":!c: obj_pinfo = NULL! \n");
665 // ///////////////////////////////// SPOLECNA CAST //
667 mid = (*env)->GetMethodID(env,
669 "onPubRemoteChanged",
670 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
674 printf(":!c: mid = NULL! \n");
679 (*env)->CallVoidMethod(env,
680 domain_events_cont->obj_de,
689 if((*jvm)->DetachCurrentThread(jvm) != 0)
691 printf(":c!: DetachCurrentThread fault! \n");
702 // /////////////////////////////////////////////////////////////////////
703 // public void onPubDelete()
704 // /////////////////////////////////////////////////////////////////////
706 onPubDelete(const struct ORTEAppInfo *appInfo,
707 const struct ORTEPubInfo *pubInfo,
710 // ///////////////////////////////// SPOLECNA CAST //
712 JNIEnv *env = NULL; // local reference
718 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
722 printf(":c: event func. 'onPubDelete()' called.. \n");
727 // ///////////////////////////////// SPOLECNA CAST //
728 if(domain_events_cont->jvm == 0)
731 printf(":!c: jvm = NULL! \n");
735 jvm = domain_events_cont->jvm;
737 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
741 printf(":!c: env = NULL! \n");
746 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
750 printf(":!c: cls = NULL! \n");
754 // create AppInfo instance
755 obj_ainfo = createAppInfo(env, appInfo);
759 printf(":!c: obj_ainfo = NULL! \n");
763 // create PubInfo instance
764 obj_pinfo = createPubInfo(env, pubInfo);
768 printf(":!c: obj_pinfo = NULL! \n");
772 // ///////////////////////////////// SPOLECNA CAST //
774 mid = (*env)->GetMethodID(env,
777 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
781 printf(":!c: mid = NULL! \n");
786 (*env)->CallVoidMethod(env,
787 domain_events_cont->obj_de,
796 if((*jvm)->DetachCurrentThread(jvm) != 0)
798 printf(":c!: DetachCurrentThread fault! \n");
807 // /////////////////////////////////////////////////////////////////////
808 // Event - onSubRemoteNew
809 // /////////////////////////////////////////////////////////////////////
811 onSubRemoteNew(const struct ORTEAppInfo *appInfo,
812 const struct ORTESubInfo *subInfo,
815 // ///////////////////////////////// SPOLECNA CAST //
817 JNIEnv *env = NULL; // local reference
823 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
827 printf(":c: event func. 'onSubRemoteNew()' called.. \n");
832 // ///////////////////////////////// SPOLECNA CAST //
833 if(domain_events_cont->jvm == 0)
836 printf(":!c: jvm = NULL! \n");
840 jvm = domain_events_cont->jvm;
842 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
846 printf(":!c: env = NULL! \n");
851 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
855 printf(":!c: cls = NULL! \n");
859 // create AppInfo instance
860 obj_ainfo = createAppInfo(env, appInfo);
864 printf(":!c: obj_ainfo = NULL! \n");
868 // create SubInfo instance
869 obj_sinfo = createSubInfo(env, subInfo);
873 printf(":!c: obj_sinfo = NULL! \n");
877 // ///////////////////////////////// SPOLECNA CAST //
879 mid = (*env)->GetMethodID(env,
882 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
886 printf(":!c: mid = NULL! \n");
891 (*env)->CallVoidMethod(env,
892 domain_events_cont->obj_de,
901 if((*jvm)->DetachCurrentThread(jvm) != 0)
903 printf(":c!: DetachCurrentThread fault! \n");
912 // /////////////////////////////////////////////////////////////////////
913 // public void onSubRemoteChanged() { }
914 // /////////////////////////////////////////////////////////////////////
916 onSubRemoteChanged(const struct ORTEAppInfo *appInfo,
917 const struct ORTESubInfo *subInfo,
920 // ///////////////////////////////// SPOLECNA CAST //
922 JNIEnv *env = NULL; // local reference
928 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
932 printf(":c: event func. 'onSubRemoteChanged()' called.. \n");
937 // ///////////////////////////////// SPOLECNA CAST //
938 if(domain_events_cont->jvm == 0)
941 printf(":!c: jvm = NULL! \n");
945 jvm = domain_events_cont->jvm;
947 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
951 printf(":!c: env = NULL! \n");
956 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
960 printf(":!c: cls = NULL! \n");
964 // create AppInfo instance
965 obj_ainfo = createAppInfo(env, appInfo);
969 printf(":!c: obj_ainfo = NULL! \n");
973 // create SubInfo instance
974 obj_sinfo = createSubInfo(env, subInfo);
978 printf(":!c: obj_sinfo = NULL! \n");
982 // ///////////////////////////////// SPOLECNA CAST //
984 mid = (*env)->GetMethodID(env,
986 "onSubRemoteChanged",
987 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
991 printf(":!c: mid = NULL! \n");
996 (*env)->CallVoidMethod(env,
997 domain_events_cont->obj_de,
1006 if((*jvm)->DetachCurrentThread(jvm) != 0)
1008 printf(":c!: DetachCurrentThread fault! \n");
1017 // /////////////////////////////////////////////////////////////////////
1018 // public void onSubDelete() { }
1019 // /////////////////////////////////////////////////////////////////////
1021 onSubDelete(const struct ORTEAppInfo *appInfo,
1022 const struct ORTESubInfo *subInfo,
1025 // ///////////////////////////////// SPOLECNA CAST //
1027 JNIEnv *env = NULL; // local reference
1033 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
1037 printf(":c: event func. 'onSubDelete()' called.. \n");
1042 // ///////////////////////////////// SPOLECNA CAST //
1043 if(domain_events_cont->jvm == 0)
1046 printf(":!c: jvm = NULL! \n");
1050 jvm = domain_events_cont->jvm;
1052 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
1056 printf(":!c: env = NULL! \n");
1061 cls = (*env)->FindClass(env, "org/ocera/orte/types/DomainEvents");
1065 printf(":!c: cls = NULL! \n");
1069 // create AppInfo instance
1070 obj_ainfo = createAppInfo(env, appInfo);
1074 printf(":!c: obj_ainfo = NULL! \n");
1078 // create SubInfo instance
1079 obj_sinfo = createSubInfo(env, subInfo);
1083 printf(":!c: obj_sinfo = NULL! \n");
1087 // ///////////////////////////////// SPOLECNA CAST //
1089 mid = (*env)->GetMethodID(env,
1092 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
1096 printf(":!c: mid = NULL! \n");
1101 (*env)->CallVoidMethod(env,
1102 domain_events_cont->obj_de,
1111 if((*jvm)->DetachCurrentThread(jvm) != 0)
1113 printf(":c!: DetachCurrentThread fault! \n");
1122 // /////////////////////////////////////////////////////////////////////
1123 // create default application domain
1124 // /////////////////////////////////////////////////////////////////////
1125 JNIEXPORT jint JNICALL
1126 Java_org_ocera_orte_DomainApp_jORTEDomainDefaultAppCreate
1127 (JNIEnv *env, jclass class, jint jdomain, jboolean jsusp)
1132 printf(":c: jsem pred ORTEDomainDefaultAppCreate() \n");
1134 // call ORTE function
1135 d = (jint) ORTEDomainAppCreate((int)jdomain,
1140 printf(":!c: ORTEDomainDefaultAppCreate() FAILED.. \n");
1144 printf(":c: ORTEDomainDefautlAppCreate() ok.. + %d \n", d);
1149 // //////////////////////////////////////////////////////////////////////
1150 // create user application domain
1151 // //////////////////////////////////////////////////////////////////////
1152 JNIEXPORT jint JNICALL
1153 Java_org_ocera_orte_DomainApp_jORTEDomainAppCreate
1154 (JNIEnv *env, jclass cls,
1165 ORTEDomainAppEvents *dom_events;
1166 JORTEDomainEventsContext_t *domain_events_cont;
1169 printf(":c: ORTEDomainAppCreate() called.. \n");
1172 // don't forget free memory - free()!!
1173 domain_events_cont = (JORTEDomainEventsContext_t *) malloc(sizeof(JORTEDomainEventsContext_t));
1175 jint b = (*env)->GetJavaVM(env,&jvm);
1178 printf(":!c: getJavaVM() failed! \n");
1181 // create global references
1182 domain_events_cont->jvm = jvm;
1184 domain_events_cont->obj_de = (*env)->NewGlobalRef(env, obj_de);
1186 dom_events = (ORTEDomainAppEvents *) eventsHandle;
1187 ////////////////////////////////////////////////
1188 // set new events & their prarameters
1190 dom_events->onRegFail = (ORTEOnRegFail) onRegFail;
1191 dom_events->onRegFailParam = (void *) domain_events_cont;
1193 dom_events->onMgrNew = (ORTEOnMgrNew) onMgrNew;
1194 dom_events->onMgrNewParam = (void *) domain_events_cont;
1196 dom_events->onMgrDelete = (ORTEOnMgrDelete) onMgrDelete;
1197 dom_events->onMgrDeleteParam = (void *) domain_events_cont;
1199 dom_events->onAppRemoteNew = (ORTEOnAppRemoteNew) onAppRemoteNew;
1200 dom_events->onAppRemoteNewParam = (void *) domain_events_cont;
1202 dom_events->onAppDelete = (ORTEOnAppDelete) onAppDelete;
1203 dom_events->onAppDeleteParam = (void *) domain_events_cont;
1205 dom_events->onPubRemoteNew = (ORTEOnPubRemote) onPubRemoteNew;
1206 dom_events->onPubRemoteNewParam = (void *) domain_events_cont;
1207 // onPubRemoteChanged
1208 dom_events->onPubRemoteChanged = (ORTEOnPubRemote) onPubRemoteChanged;
1209 dom_events->onPubRemoteChangedParam = (void *) domain_events_cont;
1211 dom_events->onPubDelete = (ORTEOnPubDelete) onPubDelete;
1212 dom_events->onPubDeleteParam = (void *) domain_events_cont;
1214 dom_events->onSubRemoteNew = (ORTEOnSubRemote) onSubRemoteNew;
1215 dom_events->onSubRemoteNewParam = (void *) domain_events_cont;
1216 // onSubRemoteChanged
1217 dom_events->onSubRemoteChanged = (ORTEOnSubRemote) onSubRemoteChanged;
1218 dom_events->onSubRemoteChangedParam = (void *) domain_events_cont;
1220 dom_events->onSubDelete = (ORTEOnSubDelete) onSubDelete;
1221 dom_events->onSubDeleteParam = (void *) domain_events_cont;
1222 ////////////////////////////////////////////////
1223 // call ORTE function
1224 d = (jint) ORTEDomainAppCreate((int)jdomain,
1225 (ORTEDomainProp *) propHandle,
1226 (ORTEDomainAppEvents *) eventsHandle,
1229 printf(":!c: creating app domain failed! [NULL handle] \n");
1233 printf(":c: ORTEDomainAppCreate() ok.. + %d \n", d);