]> rtime.felk.cvut.cz Git - orte.git/blob - orte/libjorte/JORTEDomainAppCreate.c
93be29d9197686e66089ea056ca89607990c331d
[orte.git] / orte / libjorte / JORTEDomainAppCreate.c
1 /* JORTEDomainAppCreate.c */
2
3 /**
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')
8   *
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
13   * @version 0.1
14   *
15   *
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.
20   *
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.
25   *
26   */
27
28 #include <stdlib.h>
29 // origin orte headers
30 #include "orte.h"
31 // pregenerated header
32 #include "jorte/org_ocera_orte_DomainApp.h"
33 // enable TEST_STAGE run level
34 #include "jorte/4all.h"
35 // new data types
36 #include "jorte/jorte_typedefs_defines.h"
37 #include "jorte/jorte_protos_api.h"
38 #include <inttypes.h>
39
40
41 // /////////////////////////////////////////////////////////////////////
42 // create default application domain
43 // /////////////////////////////////////////////////////////////////////
44 JNIEXPORT jlong JNICALL
45 Java_org_ocera_orte_DomainApp_jORTEDomainDefaultAppCreate
46 (JNIEnv *env, jobject obj, jint jdomain, jboolean jsusp)
47 {
48   jlong     d;
49
50   #ifdef TEST_STAGE
51     printf(":c: jsem pred ORTEDomainDefaultAppCreate() \n");
52   #endif
53   // call ORTE function
54   d = (jlong) ORTEDomainAppCreate((int)jdomain,
55                                  NULL,
56                                  NULL,
57                                  (Boolean) jsusp);
58   if(!d) {
59     printf(":!c: ORTEDomainDefaultAppCreate() FAILED.. \n");
60     return 0;
61   }
62   #ifdef TEST_STAGE
63     printf(":c: ORTEDomainDefautlAppCreate() ok.. + %#"PRIxPTR"\n", (intptr_t)d);
64   #endif
65   return (d);
66 }
67
68 // //////////////////////////////////////////////////////////////////////
69 // create user application domain
70 // //////////////////////////////////////////////////////////////////////
71 JNIEXPORT jlong JNICALL
72 Java_org_ocera_orte_DomainApp_jORTEDomainAppCreate
73 (JNIEnv *env, jobject obj,
74  jint jdomain,
75  jlong propHandle,
76  jlong eventsHandle,
77  jobject obj_de,
78  jboolean jsusp)
79 {
80   // jni varibles
81   JavaVM                 *jvm;
82   jclass                  cls;
83   jfieldID                fid;
84   jlong                   d;
85   //
86   ORTEDomainAppEvents    *dom_events;
87   JORTEDomainEventsContext_t  *domain_events_cont;
88
89   #ifdef TEST_STAGE
90     printf(":c: ORTEDomainAppCreate() called.. \n");
91   #endif
92   //assign domain events only if not null
93   if(obj_de != NULL) {
94     // memory alocation
95     domain_events_cont = (JORTEDomainEventsContext_t *) malloc(sizeof(JORTEDomainEventsContext_t));
96     // get jvm
97     jint b = (*env)->GetJavaVM(env,&jvm);
98     if (b < 0)
99     {
100       printf(":!c: getJavaVM() failed! \n");
101       return 0;
102     }
103     // create global references
104     domain_events_cont->jvm = jvm;
105     // domain events
106     domain_events_cont->obj_de = (*env)->NewGlobalRef(env, obj_de);
107     // get new events
108     dom_events = (ORTEDomainAppEvents *) eventsHandle;
109     ////////////////////////////////////////////////
110     // set new events & their prarameters
111     // onRegFail
112     dom_events->onRegFail = (ORTEOnRegFail) onRegFail;
113     dom_events->onRegFailParam = (void *) domain_events_cont;
114     // onMgrNew
115     dom_events->onMgrNew = (ORTEOnMgrNew) onMgrNew;
116     dom_events->onMgrNewParam = (void *) domain_events_cont;
117     // onMgrDelete
118     dom_events->onMgrDelete = (ORTEOnMgrDelete) onMgrDelete;
119     dom_events->onMgrDeleteParam = (void *) domain_events_cont;
120     // onAppRemoteNew
121     dom_events->onAppRemoteNew = (ORTEOnAppRemoteNew) onAppRemoteNew;
122     dom_events->onAppRemoteNewParam = (void *) domain_events_cont;
123     // onAppDelete
124     dom_events->onAppDelete = (ORTEOnAppDelete) onAppDelete;
125     dom_events->onAppDeleteParam = (void *) domain_events_cont;
126     // onPubRemoteNew
127     dom_events->onPubRemoteNew = (ORTEOnPubRemote) onPubRemoteNew;
128     dom_events->onPubRemoteNewParam = (void *) domain_events_cont;
129     // onPubRemoteChanged
130     dom_events->onPubRemoteChanged = (ORTEOnPubRemote) onPubRemoteChanged;
131     dom_events->onPubRemoteChangedParam = (void *) domain_events_cont;
132     // onPubDelete
133     dom_events->onPubDelete = (ORTEOnPubDelete) onPubDelete;
134     dom_events->onPubDeleteParam = (void *) domain_events_cont;
135     // onSubRemoteNew
136     dom_events->onSubRemoteNew = (ORTEOnSubRemote) onSubRemoteNew;
137     dom_events->onSubRemoteNewParam = (void *) domain_events_cont;
138     // onSubRemoteChanged
139     dom_events->onSubRemoteChanged = (ORTEOnSubRemote) onSubRemoteChanged;
140     dom_events->onSubRemoteChangedParam = (void *) domain_events_cont;
141     // onSubDelete
142     dom_events->onSubDelete = (ORTEOnSubDelete) onSubDelete;
143     dom_events->onSubDeleteParam = (void *) domain_events_cont;
144     ////////////////////////////////////////////////
145     cls = (*env)->GetObjectClass(env, obj);
146     if(cls == 0)
147     {
148       #ifdef TEST_STAGE
149         printf(":!c: cls = NULL \n");
150       #endif
151       return 0;
152     }
153     // fieldID - domainEventsContextHandle
154     fid = (*env)->GetFieldID(env,
155                              cls,
156                              "domainEventsContextHandle",
157                              "J");
158     if(fid == 0)
159     {
160       #ifdef TEST_STAGE
161         printf(":!c: fid = NULL \n");
162       #endif
163       return 0;
164     }
165     (*env)->SetLongField(env,
166                         obj,
167                         fid,
168                         (jlong) domain_events_cont);
169   }
170   // call ORTE function
171   d = (jlong) ORTEDomainAppCreate((int)jdomain,
172                                  (ORTEDomainProp *) propHandle,
173                                  (ORTEDomainAppEvents *) eventsHandle,
174                                  (Boolean) jsusp);
175   if(!d) {
176     printf(":!c: creating app domain failed! [NULL handle]  \n");
177     return 0;
178   }
179   #ifdef TEST_STAGE
180     printf(":c: ORTEDomainAppCreate() ok.. + %#"PRIxPTR"\n", (intptr_t)d);
181   #endif
182   return (d);
183 }