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"
40 // /////////////////////////////////////////////////////////////////////
41 // public void onRegFail()
42 // /////////////////////////////////////////////////////////////////////
44 onRegFail(void *param)
46 // ///////////////////////////////// SPOLECNA CAST //
48 JNIEnv *env = NULL; // local reference
52 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
56 printf(":c: event func. 'onRegFail()' called.. \n");
61 // ///////////////////////////////// SPOLECNA CAST //
62 if(domain_events_cont->jvm == 0)
65 printf(":!c: jvm = NULL! \n");
69 jvm = domain_events_cont->jvm;
71 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
75 printf(":!c: env = NULL! \n");
80 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
84 printf(":!c: cls = NULL! \n");
88 // ///////////////////////////////// SPOLECNA CAST //
90 mid = (*env)->GetMethodID(env,
97 printf(":!c: mid = NULL! \n");
102 (*env)->CallVoidMethod(env,
103 domain_events_cont->obj_de,
110 if((*jvm)->DetachCurrentThread(jvm) != 0)
112 printf(":c!: DetachCurrentThread fault! \n");
121 // /////////////////////////////////////////////////////////////////////
122 // Event - public void onMgrNew()
123 // /////////////////////////////////////////////////////////////////////
125 onMgrNew(const struct ORTEAppInfo *appInfo, void *param)
127 // ///////////////////////////////// SPOLECNA CAST //
129 JNIEnv *env = NULL; // local reference
134 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
138 printf(":c: event func. 'onMgrNew()' called.. \n");
143 // ///////////////////////////////// SPOLECNA CAST //
144 if(domain_events_cont->jvm == 0)
147 printf(":!c: jvm = NULL! \n");
151 jvm = domain_events_cont->jvm;
153 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
157 printf(":!c: env = NULL! \n");
162 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
166 printf(":!c: cls = NULL! \n");
170 // create AppInfo instance
171 obj_ainfo = createAppInfo(env, appInfo);
175 printf(":!c: obj_ainfo = NULL! \n");
179 // ///////////////////////////////// SPOLECNA CAST //
181 mid = (*env)->GetMethodID(env,
184 "(Lorg/ocera/orte/types/AppInfo;)V");
188 printf(":!c: mid = NULL! \n");
193 (*env)->CallVoidMethod(env,
194 domain_events_cont->obj_de,
202 if((*jvm)->DetachCurrentThread(jvm) != 0)
204 printf(":c!: DetachCurrentThread fault! \n");
213 // /////////////////////////////////////////////////////////////////////
214 // Event - public void onMgrDelete()
215 // /////////////////////////////////////////////////////////////////////
217 onMgrDelete(const struct ORTEAppInfo *appInfo, void *param)
219 // ///////////////////////////////// SPOLECNA CAST //
221 JNIEnv *env = NULL; // local reference
226 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
230 printf(":c: event func. 'onMgrDelete()' called.. \n");
235 // ///////////////////////////////// SPOLECNA CAST //
236 if(domain_events_cont->jvm == 0)
239 printf(":!c: jvm = NULL! \n");
243 jvm = domain_events_cont->jvm;
245 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
249 printf(":!c: env = NULL! \n");
254 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
258 printf(":!c: cls = NULL! \n");
262 // create AppInfo instance
263 obj_ainfo = createAppInfo(env, appInfo);
267 printf(":!c: obj_ainfo = NULL! \n");
271 // ///////////////////////////////// SPOLECNA CAST //
273 mid = (*env)->GetMethodID(env,
276 "(Lorg/ocera/orte/types/AppInfo;)V");
280 printf(":!c: mid = NULL! \n");
285 (*env)->CallVoidMethod(env,
286 domain_events_cont->obj_de,
294 if((*jvm)->DetachCurrentThread(jvm) != 0)
296 printf(":c!: DetachCurrentThread fault! \n");
306 // /////////////////////////////////////////////////////////////////////
307 // Event - onAppRemoteNew
308 // /////////////////////////////////////////////////////////////////////
310 onAppRemoteNew(const struct ORTEAppInfo *appInfo, void *param)
312 // ///////////////////////////////// SPOLECNA CAST //
314 JNIEnv *env = NULL; // local reference
319 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
323 printf(":c: event func. 'onAppRemoteNew()' called.. \n");
328 // ///////////////////////////////// SPOLECNA CAST //
329 if(domain_events_cont->jvm == 0)
332 printf(":!c: jvm = NULL! \n");
336 jvm = domain_events_cont->jvm;
338 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
342 printf(":!c: env = NULL! \n");
347 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
351 printf(":!c: cls = NULL! \n");
355 // create AppInfo instance
356 obj_ainfo = createAppInfo(env, appInfo);
360 printf(":!c: obj_ainfo = NULL! \n");
364 // ///////////////////////////////// SPOLECNA CAST //
367 mid = (*env)->GetMethodID(env,
370 "(Lorg/ocera/orte/types/AppInfo;)V");
374 printf(":!c: mid = NULL! \n");
379 (*env)->CallVoidMethod(env,
380 domain_events_cont->obj_de,
388 if((*jvm)->DetachCurrentThread(jvm) != 0)
390 printf(":c!: DetachCurrentThread fault! \n");
399 // /////////////////////////////////////////////////////////////////////
400 // public void onAppDelete() { }
401 // /////////////////////////////////////////////////////////////////////
403 onAppDelete(const struct ORTEAppInfo *appInfo, void *param)
405 // ///////////////////////////////// SPOLECNA CAST //
407 JNIEnv *env = NULL; // local reference
412 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
416 printf(":c: event func. 'onAppDelete()' called.. \n");
421 // ///////////////////////////////// SPOLECNA CAST //
422 if(domain_events_cont->jvm == 0)
425 printf(":!c: jvm = NULL! \n");
429 jvm = domain_events_cont->jvm;
431 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
435 printf(":!c: env = NULL! \n");
440 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
444 printf(":!c: cls = NULL! \n");
448 // create AppInfo instance
449 obj_ainfo = createAppInfo(env, appInfo);
453 printf(":!c: obj_ainfo = NULL! \n");
457 // ///////////////////////////////// SPOLECNA CAST //
459 mid = (*env)->GetMethodID(env,
462 "(Lorg/ocera/orte/types/AppInfo;)V");
466 printf(":!c: mid = NULL! \n");
471 (*env)->CallVoidMethod(env,
472 domain_events_cont->obj_de,
480 if((*jvm)->DetachCurrentThread(jvm) != 0)
482 printf(":c!: DetachCurrentThread fault! \n");
491 // /////////////////////////////////////////////////////////////////////
492 // public void onPubRemoteNew()
493 // /////////////////////////////////////////////////////////////////////
495 onPubRemoteNew(const struct ORTEAppInfo *appInfo,
496 const struct ORTEPubInfo *pubInfo,
499 // ///////////////////////////////// SPOLECNA CAST //
501 JNIEnv *env = NULL; // local reference
507 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
511 printf(":c: event func. 'onPubRemoteNew()' called.. \n");
516 // ///////////////////////////////// SPOLECNA CAST //
517 if(domain_events_cont->jvm == 0)
520 printf(":!c: jvm = NULL! \n");
524 jvm = domain_events_cont->jvm;
526 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
530 printf(":!c: env = NULL! \n");
535 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
539 printf(":!c: cls = NULL! \n");
543 // create AppInfo instance
544 obj_ainfo = createAppInfo(env, appInfo);
548 printf(":!c: obj_ainfo = NULL! \n");
552 // create PubInfo instance
553 obj_pinfo = createPubInfo(env, pubInfo);
557 printf(":!c: obj_pinfo = NULL! \n");
561 // ///////////////////////////////// SPOLECNA CAST //
563 mid = (*env)->GetMethodID(env,
566 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
570 printf(":!c: mid = NULL! \n");
575 (*env)->CallVoidMethod(env,
576 domain_events_cont->obj_de,
585 if((*jvm)->DetachCurrentThread(jvm) != 0)
587 printf(":c!: DetachCurrentThread fault! \n");
596 // /////////////////////////////////////////////////////////////////////
597 //public void onPubRemoteChanged()
598 // /////////////////////////////////////////////////////////////////////
600 onPubRemoteChanged(const struct ORTEAppInfo *appInfo,
601 const struct ORTEPubInfo *pubInfo,
604 // ///////////////////////////////// SPOLECNA CAST //
606 JNIEnv *env = NULL; // local reference
612 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
616 printf(":c: event func. 'onPubRemoteChanged()' called.. \n");
621 // ///////////////////////////////// SPOLECNA CAST //
622 if(domain_events_cont->jvm == 0)
625 printf(":!c: jvm = NULL! \n");
629 jvm = domain_events_cont->jvm;
631 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
635 printf(":!c: env = NULL! \n");
640 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
644 printf(":!c: cls = NULL! \n");
648 // create AppInfo instance
649 obj_ainfo = createAppInfo(env, appInfo);
653 printf(":!c: obj_ainfo = NULL! \n");
657 // create PubInfo instance
658 obj_pinfo = createPubInfo(env, pubInfo);
662 printf(":!c: obj_pinfo = NULL! \n");
666 // ///////////////////////////////// SPOLECNA CAST //
668 mid = (*env)->GetMethodID(env,
670 "onPubRemoteChanged",
671 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
675 printf(":!c: mid = NULL! \n");
680 (*env)->CallVoidMethod(env,
681 domain_events_cont->obj_de,
690 if((*jvm)->DetachCurrentThread(jvm) != 0)
692 printf(":c!: DetachCurrentThread fault! \n");
703 // /////////////////////////////////////////////////////////////////////
704 // public void onPubDelete()
705 // /////////////////////////////////////////////////////////////////////
707 onPubDelete(const struct ORTEAppInfo *appInfo,
708 const struct ORTEPubInfo *pubInfo,
711 // ///////////////////////////////// SPOLECNA CAST //
713 JNIEnv *env = NULL; // local reference
719 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
723 printf(":c: event func. 'onPubDelete()' called.. \n");
728 // ///////////////////////////////// SPOLECNA CAST //
729 if(domain_events_cont->jvm == 0)
732 printf(":!c: jvm = NULL! \n");
736 jvm = domain_events_cont->jvm;
738 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
742 printf(":!c: env = NULL! \n");
747 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
751 printf(":!c: cls = NULL! \n");
755 // create AppInfo instance
756 obj_ainfo = createAppInfo(env, appInfo);
760 printf(":!c: obj_ainfo = NULL! \n");
764 // create PubInfo instance
765 obj_pinfo = createPubInfo(env, pubInfo);
769 printf(":!c: obj_pinfo = NULL! \n");
773 // ///////////////////////////////// SPOLECNA CAST //
775 mid = (*env)->GetMethodID(env,
778 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/PubInfo;)V");
782 printf(":!c: mid = NULL! \n");
787 (*env)->CallVoidMethod(env,
788 domain_events_cont->obj_de,
797 if((*jvm)->DetachCurrentThread(jvm) != 0)
799 printf(":c!: DetachCurrentThread fault! \n");
808 // /////////////////////////////////////////////////////////////////////
809 // Event - onSubRemoteNew
810 // /////////////////////////////////////////////////////////////////////
812 onSubRemoteNew(const struct ORTEAppInfo *appInfo,
813 const struct ORTESubInfo *subInfo,
816 // ///////////////////////////////// SPOLECNA CAST //
818 JNIEnv *env = NULL; // local reference
824 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
828 printf(":c: event func. 'onSubRemoteNew()' called.. \n");
833 // ///////////////////////////////// SPOLECNA CAST //
834 if(domain_events_cont->jvm == 0)
837 printf(":!c: jvm = NULL! \n");
841 jvm = domain_events_cont->jvm;
843 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
847 printf(":!c: env = NULL! \n");
852 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
856 printf(":!c: cls = NULL! \n");
860 // create AppInfo instance
861 obj_ainfo = createAppInfo(env, appInfo);
865 printf(":!c: obj_ainfo = NULL! \n");
869 // create SubInfo instance
870 obj_sinfo = createSubInfo(env, subInfo);
874 printf(":!c: obj_sinfo = NULL! \n");
878 // ///////////////////////////////// SPOLECNA CAST //
880 mid = (*env)->GetMethodID(env,
883 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
887 printf(":!c: mid = NULL! \n");
892 (*env)->CallVoidMethod(env,
893 domain_events_cont->obj_de,
902 if((*jvm)->DetachCurrentThread(jvm) != 0)
904 printf(":c!: DetachCurrentThread fault! \n");
913 // /////////////////////////////////////////////////////////////////////
914 // public void onSubRemoteChanged() { }
915 // /////////////////////////////////////////////////////////////////////
917 onSubRemoteChanged(const struct ORTEAppInfo *appInfo,
918 const struct ORTESubInfo *subInfo,
921 // ///////////////////////////////// SPOLECNA CAST //
923 JNIEnv *env = NULL; // local reference
929 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
933 printf(":c: event func. 'onSubRemoteChanged()' called.. \n");
938 // ///////////////////////////////// SPOLECNA CAST //
939 if(domain_events_cont->jvm == 0)
942 printf(":!c: jvm = NULL! \n");
946 jvm = domain_events_cont->jvm;
948 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
952 printf(":!c: env = NULL! \n");
957 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
961 printf(":!c: cls = NULL! \n");
965 // create AppInfo instance
966 obj_ainfo = createAppInfo(env, appInfo);
970 printf(":!c: obj_ainfo = NULL! \n");
974 // create SubInfo instance
975 obj_sinfo = createSubInfo(env, subInfo);
979 printf(":!c: obj_sinfo = NULL! \n");
983 // ///////////////////////////////// SPOLECNA CAST //
985 mid = (*env)->GetMethodID(env,
987 "onSubRemoteChanged",
988 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
992 printf(":!c: mid = NULL! \n");
997 (*env)->CallVoidMethod(env,
998 domain_events_cont->obj_de,
1007 if((*jvm)->DetachCurrentThread(jvm) != 0)
1009 printf(":c!: DetachCurrentThread fault! \n");
1018 // /////////////////////////////////////////////////////////////////////
1019 // public void onSubDelete() { }
1020 // /////////////////////////////////////////////////////////////////////
1022 onSubDelete(const struct ORTEAppInfo *appInfo,
1023 const struct ORTESubInfo *subInfo,
1026 // ///////////////////////////////// SPOLECNA CAST //
1028 JNIEnv *env = NULL; // local reference
1034 JORTEDomainEventsContext_t *domain_events_cont = (JORTEDomainEventsContext_t*) param;
1038 printf(":c: event func. 'onSubDelete()' called.. \n");
1043 // ///////////////////////////////// SPOLECNA CAST //
1044 if(domain_events_cont->jvm == 0)
1047 printf(":!c: jvm = NULL! \n");
1051 jvm = domain_events_cont->jvm;
1053 (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
1057 printf(":!c: env = NULL! \n");
1062 cls = findClass(env, "org.ocera.orte.types.DomainEvents");
1066 printf(":!c: cls = NULL! \n");
1070 // create AppInfo instance
1071 obj_ainfo = createAppInfo(env, appInfo);
1075 printf(":!c: obj_ainfo = NULL! \n");
1079 // create SubInfo instance
1080 obj_sinfo = createSubInfo(env, subInfo);
1084 printf(":!c: obj_sinfo = NULL! \n");
1088 // ///////////////////////////////// SPOLECNA CAST //
1090 mid = (*env)->GetMethodID(env,
1093 "(Lorg/ocera/orte/types/AppInfo;Lorg/ocera/orte/types/SubInfo;)V");
1097 printf(":!c: mid = NULL! \n");
1102 (*env)->CallVoidMethod(env,
1103 domain_events_cont->obj_de,
1112 if((*jvm)->DetachCurrentThread(jvm) != 0)
1114 printf(":c!: DetachCurrentThread fault! \n");
1123 // /////////////////////////////////////////////////////////////////////
1124 // create default application domain
1125 // /////////////////////////////////////////////////////////////////////
1126 JNIEXPORT jlong JNICALL
1127 Java_org_ocera_orte_DomainApp_jORTEDomainDefaultAppCreate
1128 (JNIEnv *env, jclass class, jint jdomain, jboolean jsusp)
1133 printf(":c: jsem pred ORTEDomainDefaultAppCreate() \n");
1135 // call ORTE function
1136 d = (jlong) ORTEDomainAppCreate((int)jdomain,
1141 printf(":!c: ORTEDomainDefaultAppCreate() FAILED.. \n");
1145 printf(":c: ORTEDomainDefautlAppCreate() ok.. + %#"PRIxPTR"\n", (intptr_t)d);
1150 // //////////////////////////////////////////////////////////////////////
1151 // create user application domain
1152 // //////////////////////////////////////////////////////////////////////
1153 JNIEXPORT jlong JNICALL
1154 Java_org_ocera_orte_DomainApp_jORTEDomainAppCreate
1155 (JNIEnv *env, jclass cls,
1166 ORTEDomainAppEvents *dom_events;
1167 JORTEDomainEventsContext_t *domain_events_cont;
1170 printf(":c: ORTEDomainAppCreate() called.. \n");
1173 // don't forget free memory - free()!!
1174 domain_events_cont = (JORTEDomainEventsContext_t *) malloc(sizeof(JORTEDomainEventsContext_t));
1176 jint b = (*env)->GetJavaVM(env,&jvm);
1179 printf(":!c: getJavaVM() failed! \n");
1182 // create global references
1183 domain_events_cont->jvm = jvm;
1185 domain_events_cont->obj_de = (*env)->NewGlobalRef(env, obj_de);
1187 dom_events = (ORTEDomainAppEvents *) eventsHandle;
1188 ////////////////////////////////////////////////
1189 // set new events & their prarameters
1191 dom_events->onRegFail = (ORTEOnRegFail) onRegFail;
1192 dom_events->onRegFailParam = (void *) domain_events_cont;
1194 dom_events->onMgrNew = (ORTEOnMgrNew) onMgrNew;
1195 dom_events->onMgrNewParam = (void *) domain_events_cont;
1197 dom_events->onMgrDelete = (ORTEOnMgrDelete) onMgrDelete;
1198 dom_events->onMgrDeleteParam = (void *) domain_events_cont;
1200 dom_events->onAppRemoteNew = (ORTEOnAppRemoteNew) onAppRemoteNew;
1201 dom_events->onAppRemoteNewParam = (void *) domain_events_cont;
1203 dom_events->onAppDelete = (ORTEOnAppDelete) onAppDelete;
1204 dom_events->onAppDeleteParam = (void *) domain_events_cont;
1206 dom_events->onPubRemoteNew = (ORTEOnPubRemote) onPubRemoteNew;
1207 dom_events->onPubRemoteNewParam = (void *) domain_events_cont;
1208 // onPubRemoteChanged
1209 dom_events->onPubRemoteChanged = (ORTEOnPubRemote) onPubRemoteChanged;
1210 dom_events->onPubRemoteChangedParam = (void *) domain_events_cont;
1212 dom_events->onPubDelete = (ORTEOnPubDelete) onPubDelete;
1213 dom_events->onPubDeleteParam = (void *) domain_events_cont;
1215 dom_events->onSubRemoteNew = (ORTEOnSubRemote) onSubRemoteNew;
1216 dom_events->onSubRemoteNewParam = (void *) domain_events_cont;
1217 // onSubRemoteChanged
1218 dom_events->onSubRemoteChanged = (ORTEOnSubRemote) onSubRemoteChanged;
1219 dom_events->onSubRemoteChangedParam = (void *) domain_events_cont;
1221 dom_events->onSubDelete = (ORTEOnSubDelete) onSubDelete;
1222 dom_events->onSubDeleteParam = (void *) domain_events_cont;
1223 ////////////////////////////////////////////////
1224 // call ORTE function
1225 d = (jlong) ORTEDomainAppCreate((int)jdomain,
1226 (ORTEDomainProp *) propHandle,
1227 (ORTEDomainAppEvents *) eventsHandle,
1230 printf(":!c: creating app domain failed! [NULL handle] \n");
1234 printf(":c: ORTEDomainAppCreate() ok.. + %#"PRIxPTR"\n", (intptr_t)d);