1 /* JORTEPublicationSend.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.
30 // library header file's path
32 // pregenerated header
33 #include "jorte/org_ocera_orte_Publication.h"
34 // enable TEST_STAGE run level
35 #include "jorte/4all.h"
38 JNIEXPORT jboolean JNICALL
39 Java_org_ocera_orte_Publication_jORTEPublicationSend
40 (JNIEnv *env, jobject obj, jlong pub_handle, jobject obj_msg)
49 int buff_length,i = 0;
52 ORTEPublicationSendParam psp;
55 printf(":c: jORTEPublicationSend() called.. \n");
60 // get class MessageData
61 cls = (*env)->GetObjectClass(env, obj_msg);
65 printf(":!c: cls = NULL \n");
70 mid = (*env)->GetMethodID(env,
77 printf(":!c: mid = NULL \n");
82 buff_length = (*env)->CallIntMethod(env,
85 // get fieldID - buffer
86 fid = (*env)->GetFieldID(env,
89 "Ljava/nio/ByteBuffer;");
93 printf(":!c: fid = NULL \n");
98 obj_bb = (*env)->GetObjectField(env,obj_msg,fid);
102 printf(":!c: obj_bb = NULL \n");
107 cls = (*env)->GetObjectClass(env, obj_bb);
111 printf(":!c: cls = NULL \n");
116 mid = (*env)->GetMethodID(env,
123 printf(":!c: mid = NULL \n");
127 /////////////////////////////////////////////////
128 // get handle to data buffer
129 orte_instance = ORTEPublicationGetInstance((ORTEPublication *) pub_handle);
130 // copy the bytes from JAVA to C buffer
131 /////////////////////////////////////////////////
132 for(i = 0; i < buff_length; i++)
137 b = (*env)->CallByteMethod(env,
141 orte_instance[i] = b;
144 printf(":c: #7.%d: znak %c [%d] \n",
145 i,orte_instance[i],orte_instance[i]);
148 /////////////////////////////////////////////////
149 psp.instance = (void *) orte_instance;
150 psp.data_endian = 1; /* BIG -pak tahat z headeru !!*/
152 printf(":c: endian? \n");
154 /////////////////////////////////////////////////
155 // call ORTE function
156 b = ORTEPublicationSendEx((ORTEPublication *) pub_handle, &psp);
158 printf(":c: b = ORTEPublicationSendEx() = %d \n",b);
160 if (b == ORTE_BAD_HANDLE)
163 printf(":!c: data not sent! [bad pub handle] \n");
170 printf(":c: data sent succesfuly.. \n");