*
*/
-#include <stdlib.h>
-#include <jni.h>
+
// library header file's path
-#include "orte_all.h"
+#include "orte.h"
// pregenerated header
#include "jorte/org_ocera_orte_DomainApp.h"
-
-#include "jorte/jorte_typedefs_defines.h"
#include "jorte/4all.h"
-void set_order(CDR_Codec *cdrCodec, void *param) {
- JNIEnv *env = 0;
- jclass cls = 0;
- jfieldID fid = 0;
- jmethodID mid = 0;
- jobject obj_bo = 0;
-
- JORTESetEndiannessContext_t *ctx = (JORTESetEndiannessContext_t*) param;
-
- //set byte order only once
- if(cdrCodec->data_endian != ctx->cur_endian) {
- // get environment
- (*ctx->jvm)->AttachCurrentThread(ctx->jvm, (void **)&env, NULL);
- if(env == 0)
- {
- #ifdef TEST_STAGE
- printf(":!c: env = NULL \n");
- #endif
- }
-
- //prepare ByteOrder
- cls = (*env)->FindClass(env, "java/nio/ByteOrder");
- if (cls == 0) {
- #ifdef TEST_STAGE
- printf(":!c: cls = NULL \n");
- #endif
- }
- if(cdrCodec->data_endian == BigEndian) {
- fid = (*env)->GetStaticFieldID(env,
- cls,
- "BIG_ENDIAN",
- "Ljava/nio/ByteOrder;");
- ctx->cur_endian = BigEndian;
- }
- else {
- fid = (*env)->GetStaticFieldID(env,
- cls,
- "LITTLE_ENDIAN",
- "Ljava/nio/ByteOrder;");
- ctx->cur_endian = LittleEndian;
- }
- if(fid == 0) {
- #ifdef TEST_STAGE
- printf(":!c: fid = NULL \n");
- #endif
- }
- obj_bo = (*env)->GetStaticObjectField(env, cls, fid);
- if(obj_bo == 0) {
- #ifdef TEST_STAGE
- printf(":!c: cls = NULL \n");
- #endif
- }
-
- // set byte order to ByteBuffer
- // get BB class
- cls = (*env)->GetObjectClass(env, ctx->obj_buf);
- if(cls == 0)
- {
- #ifdef TEST_STAGE
- printf(":!c: cls = NULL \n");
- #endif
- }
- // get methodID - order(ByteOrder)
- mid = (*env)->GetMethodID(env,
- cls,
- "order",
- "(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;");
- if(mid == 0)
- {
- #ifdef TEST_STAGE
- printf(":!c: mid = NULL \n");
- #endif
- }
-
- // set ByteOrder
- if((*env)->CallObjectMethod(env,ctx->obj_buf,mid,obj_bo) == 0)
- {
- #ifdef TEST_STAGE
- printf(":!c: set byte order failed.. \n");
- #endif
- }
-
- (*ctx->jvm)->DetachCurrentThread(ctx->jvm);
- }
-}
-
JNIEXPORT jint JNICALL
Java_org_ocera_orte_DomainApp_jORTETypeRegisterAdd
-(JNIEnv *env, jclass cls, jlong handle, jstring jname, jlong jlength, jobject obj_bb)
+ (JNIEnv *env, jclass cls, jlong handle, jstring jname, jlong jlength)
{
const char *name;
int b;
- JORTESetEndiannessContext_t *ctx = 0;
-
- jobject byte_buf = 0;
- JavaVM *jvm = 0;
-
- // TODO free() !
- ctx = (JORTESetEndiannessContext_t*) malloc(sizeof(JORTESetEndiannessContext_t));
- if(ctx == 0) {
- #ifdef TEST_STAGE
- printf(":c!: ctx = NULL\n");
- #endif
- }
- // create global reference for ByteBuffer
- // TODO delete global reference
- byte_buf = (*env)->NewGlobalRef(env, obj_bb);
- ctx->obj_buf = byte_buf;
- // get jvm
- b = (*env)->GetJavaVM(env,&jvm);
- if (b < 0)
- {
- printf(":!c: getJavaVM() failed! \n");
- return 0;
- }
- ctx->jvm = jvm;
- ctx->cur_endian = FLAG_ENDIANNESS;
-
// get type name from JAVA env
- name = (*env)->GetStringUTFChars(env,jname,0);
+ name = (*env)->GetStringUTFChars(env, jname, 0);
// call ORTE function
- b = ORTETypeRegisterAdd((ORTEDomain *) handle,
- name,
- NULL,
- NULL,
- NULL,
- (unsigned int) jlength,
- (ORTETypeProcessEndianness) set_order,
- (void*) ctx);
+ b = ORTETypeRegisterAdd((ORTEDomain *)handle,
+ name,
+ NULL,
+ NULL,
+ NULL,
+ (unsigned int)jlength);
// free memmory space
- (*env)->ReleaseStringUTFChars(env,jname,name);
-
+ (*env)->ReleaseStringUTFChars(env, jname, name);
#ifdef TEST_STAGE
printf(":c: jORTETypeRegisterAdd vraci %d [%d = ORTE_OK, %d = ORTE_BAD_HANDLE] \n",
- b,ORTE_OK,ORTE_BAD_HANDLE);
+ b, ORTE_OK, ORTE_BAD_HANDLE);
#endif
return b;