jni_helper.cpp revision c96feb800590f43b7be76d1000ab5d949e5c6790
17f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde/* 27f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * Copyright 2008, The Android Open Source Project 37f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * 47f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * Licensed under the Apache License, Version 2.0 (the "License"); 57f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * you may not use this file except in compliance with the License. 67f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * You may obtain a copy of the License at 77f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * 87f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * http://www.apache.org/licenses/LICENSE-2.0 97f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * 107f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * Unless required by applicable law or agreed to in writing, software 117f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * distributed under the License is distributed on an "AS IS" BASIS, 127f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * See the License for the specific language governing permissions and 147f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * limitations under the License. 157f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde */ 167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 177f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#define LOG_TAG "wifi" 187f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 197f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "jni.h" 207f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <ScopedUtfChars.h> 217f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <utils/misc.h> 227f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <android_runtime/AndroidRuntime.h> 237f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <utils/Log.h> 247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <utils/String16.h> 257f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 267f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "wifi.h" 277f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "wifi_hal.h" 287f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "jni_helper.h" 297f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 307f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndenamespace android { 317f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 327f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde/* JNI Helpers for wifi_hal implementation */ 337f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 347f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndevoid throwException( JNIEnv *env, const char *message, int line ) 357f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 367f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGE("error at line %d: %s", line, message); 377f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 387f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde const char *className = "java/lang/Exception"; 397f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 407f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass exClass = (env)->FindClass(className ); 417f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if ( exClass == NULL ) { 427f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGE("Could not find exception class to throw error"); 437f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGE("error at line %d: %s", line, message); 447f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 457f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 467f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 477f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde (env)->ThrowNew(exClass, message); 487f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 497f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 50e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapndejboolean getBoolField(JNIEnv *env, jobject obj, const char *name) 51e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde{ 52e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 53e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, "Z"); 54e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (field == 0) { 55e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde THROW(env, "Error in accessing field"); 56e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return 0; 57e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 58e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 59e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jboolean value = (env)->GetBooleanField(obj, field); 60e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 61e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return value; 62e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde} 63e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 64e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapndejint getIntField(JNIEnv *env, jobject obj, const char *name) 65e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde{ 66e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 67e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, "I"); 68e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (field == 0) { 69e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde THROW(env, "Error in accessing field"); 70e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return 0; 71e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 72e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 73e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jint value = (env)->GetIntField(obj, field); 74e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 75e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return value; 76e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde} 77e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 78c96feb800590f43b7be76d1000ab5d949e5c6790xinhejbyte getByteField(JNIEnv *env, jobject obj, const char *name) 79c96feb800590f43b7be76d1000ab5d949e5c6790xinhe{ 80c96feb800590f43b7be76d1000ab5d949e5c6790xinhe jclass cls = (env)->GetObjectClass(obj); 81c96feb800590f43b7be76d1000ab5d949e5c6790xinhe jfieldID field = (env)->GetFieldID(cls, name, "B"); 82c96feb800590f43b7be76d1000ab5d949e5c6790xinhe if (field == 0) { 83c96feb800590f43b7be76d1000ab5d949e5c6790xinhe THROW(env, "Error in accessing field"); 84c96feb800590f43b7be76d1000ab5d949e5c6790xinhe return 0; 85c96feb800590f43b7be76d1000ab5d949e5c6790xinhe } 86c96feb800590f43b7be76d1000ab5d949e5c6790xinhe 87c96feb800590f43b7be76d1000ab5d949e5c6790xinhe jbyte value = (env)->GetByteField(obj, field); 88c96feb800590f43b7be76d1000ab5d949e5c6790xinhe env->DeleteLocalRef(cls); 89c96feb800590f43b7be76d1000ab5d949e5c6790xinhe return value; 90c96feb800590f43b7be76d1000ab5d949e5c6790xinhe} 91c96feb800590f43b7be76d1000ab5d949e5c6790xinhe 927f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndejlong getLongField(JNIEnv *env, jobject obj, const char *name) 937f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 947f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 957f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, "J"); 967f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (field == 0) { 977f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field"); 987f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return 0; 997f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 1007f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 1017f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jlong value = (env)->GetLongField(obj, field); 102e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 103e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return value; 104e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde} 105e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 106aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwallejlong getStaticLongField(JNIEnv *env, jobject obj, const char *name) 107aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle{ 108aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jclass cls = (env)->GetObjectClass(obj); 109b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande jlong result = getStaticLongField(env, cls, name); 110b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande env->DeleteLocalRef(cls); 111b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande return result; 112b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande} 113b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 114b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpandejlong getStaticLongField(JNIEnv *env, jclass cls, const char *name) 115b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande{ 116aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jfieldID field = (env)->GetStaticFieldID(cls, name, "J"); 117aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle if (field == 0) { 118aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle THROW(env, "Error in accessing field"); 119aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle return 0; 120aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle } 121b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande ALOGE("getStaticLongField %s %p", name, cls); 122aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 123b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande return (env)->GetStaticLongField(cls, field); 124aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle} 125aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 126e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapndejobject getObjectField(JNIEnv *env, jobject obj, const char *name, const char *type) 127e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde{ 128e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 129e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, type); 130e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (field == 0) { 131e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde THROW(env, "Error in accessing field"); 132e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return 0; 133e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 134e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 135e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jobject value = (env)->GetObjectField(obj, field); 136e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 1377f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return value; 1387f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 1397f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 1407f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndejlong getLongArrayField(JNIEnv *env, jobject obj, const char *name, int index) 1417f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 1427f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 1437f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, "[J"); 1447f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (field == 0) { 1457f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field definition"); 1467f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return 0; 1477f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 1487f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 1497f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jlongArray array = (jlongArray)(env)->GetObjectField(obj, field); 15051da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande if (array == NULL) { 15151da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande THROW(env, "Error in accessing array"); 15251da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande return 0; 15351da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande } 15451da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande 1557f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jlong *elem = (env)->GetLongArrayElements(array, 0); 1567f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (elem == NULL) { 1577f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing index element"); 1587f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return 0; 1597f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 1607f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 1617f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jlong value = elem[index]; 1627f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde (env)->ReleaseLongArrayElements(array, elem, 0); 163e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 164e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(array); 165e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 166e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 1677f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return value; 1687f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 1697f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 170aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwallejlong getStaticLongArrayField(JNIEnv *env, jobject obj, const char *name, int index) 171aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle{ 172aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jclass cls = (env)->GetObjectClass(obj); 173b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande jlong result = getStaticLongArrayField(env, cls, name, index); 174b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande env->DeleteLocalRef(cls); 175b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande return result; 176b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande} 177b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 178b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpandejlong getStaticLongArrayField(JNIEnv *env, jclass cls, const char *name, int index) 179b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande{ 180aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jfieldID field = (env)->GetStaticFieldID(cls, name, "[J"); 181aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle if (field == 0) { 182aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle THROW(env, "Error in accessing field definition"); 183aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle return 0; 184aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle } 185aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 186aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jlongArray array = (jlongArray)(env)->GetStaticObjectField(cls, field); 187aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jlong *elem = (env)->GetLongArrayElements(array, 0); 188aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle if (elem == NULL) { 189aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle THROW(env, "Error in accessing index element"); 190aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle return 0; 191aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle } 192aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 193aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jlong value = elem[index]; 194aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle (env)->ReleaseLongArrayElements(array, elem, 0); 195aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 196aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle env->DeleteLocalRef(array); 197aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle return value; 198aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle} 199aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 200e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapndejobject getObjectArrayField(JNIEnv *env, jobject obj, const char *name, const char *type, int index) 201e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde{ 202e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 203e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, type); 204e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (field == 0) { 205e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde THROW(env, "Error in accessing field definition"); 206e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return 0; 207e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 208e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 209e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jobjectArray array = (jobjectArray)(env)->GetObjectField(obj, field); 210e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde jobject elem = (env)->GetObjectArrayElement(array, index); 211e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde if (elem == NULL) { 212e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde THROW(env, "Error in accessing index element"); 213e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return 0; 214e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde } 215e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 216e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(array); 217e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 218e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde return elem; 219e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde} 220e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 2217f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndevoid setIntField(JNIEnv *env, jobject obj, const char *name, jint value) 2227f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 2237f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 2247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (cls == NULL) { 2257f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing class"); 2267f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 2277f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 2287f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 2297f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, "I"); 2307f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (field == NULL) { 2317f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field"); 2327f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 2337f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 2347f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 2357f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde (env)->SetIntField(obj, field, value); 236e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 2377f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 2387f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 239c96feb800590f43b7be76d1000ab5d949e5c6790xinhevoid setByteField(JNIEnv *env, jobject obj, const char *name, jbyte value) 240c96feb800590f43b7be76d1000ab5d949e5c6790xinhe{ 241c96feb800590f43b7be76d1000ab5d949e5c6790xinhe jclass cls = (env)->GetObjectClass(obj); 242c96feb800590f43b7be76d1000ab5d949e5c6790xinhe if (cls == NULL) { 243c96feb800590f43b7be76d1000ab5d949e5c6790xinhe THROW(env, "Error in accessing class"); 244c96feb800590f43b7be76d1000ab5d949e5c6790xinhe return; 245c96feb800590f43b7be76d1000ab5d949e5c6790xinhe } 246c96feb800590f43b7be76d1000ab5d949e5c6790xinhe 247c96feb800590f43b7be76d1000ab5d949e5c6790xinhe jfieldID field = (env)->GetFieldID(cls, name, "B"); 248c96feb800590f43b7be76d1000ab5d949e5c6790xinhe if (field == NULL) { 249c96feb800590f43b7be76d1000ab5d949e5c6790xinhe THROW(env, "Error in accessing field"); 250c96feb800590f43b7be76d1000ab5d949e5c6790xinhe return; 251c96feb800590f43b7be76d1000ab5d949e5c6790xinhe } 252c96feb800590f43b7be76d1000ab5d949e5c6790xinhe 253c96feb800590f43b7be76d1000ab5d949e5c6790xinhe (env)->SetByteField(obj, field, value); 254c96feb800590f43b7be76d1000ab5d949e5c6790xinhe env->DeleteLocalRef(cls); 255c96feb800590f43b7be76d1000ab5d949e5c6790xinhe} 256c96feb800590f43b7be76d1000ab5d949e5c6790xinhe 25712cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhevoid setBooleanField(JNIEnv *env, jobject obj, const char *name, jboolean value) 25812cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe{ 25912cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe jclass cls = (env)->GetObjectClass(obj); 26012cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe if (cls == NULL) { 26112cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe THROW(env, "Error in accessing class"); 26212cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe return; 26312cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe } 26412cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe 26512cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe jfieldID field = (env)->GetFieldID(cls, name, "Z"); 26612cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe if (field == NULL) { 26712cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe THROW(env, "Error in accessing field"); 26812cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe return; 26912cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe } 27012cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe 27112cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe (env)->SetBooleanField(obj, field, value); 27212cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe env->DeleteLocalRef(cls); 27312cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe} 27412cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe 2757f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndevoid setLongField(JNIEnv *env, jobject obj, const char *name, jlong value) 2767f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 2777f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 2787f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (cls == NULL) { 2797f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing class"); 2807f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 2817f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 2827f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 2837f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, "J"); 2847f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (field == NULL) { 2857f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field"); 2867f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 2877f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 2887f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 2897f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde (env)->SetLongField(obj, field, value); 290e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 2917f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 2927f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 293aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwallevoid setStaticLongField(JNIEnv *env, jobject obj, const char *name, jlong value) 294aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle{ 295aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jclass cls = (env)->GetObjectClass(obj); 296aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle if (cls == NULL) { 297aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle THROW(env, "Error in accessing class"); 298aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle return; 299aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle } 300aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 301b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande setStaticLongField(env, cls, name, value); 302b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande env->DeleteLocalRef(cls); 303b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande} 304b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 305b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpandevoid setStaticLongField(JNIEnv *env, jclass cls, const char *name, jlong value) 306b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande{ 307aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jfieldID field = (env)->GetStaticFieldID(cls, name, "J"); 308aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle if (field == NULL) { 309aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle THROW(env, "Error in accessing field"); 310aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle return; 311aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle } 312aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 313aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle (env)->SetStaticLongField(cls, field, value); 314aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle} 315aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 3167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndevoid setLongArrayField(JNIEnv *env, jobject obj, const char *name, jlongArray value) 3177f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 3187f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 3197f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (cls == NULL) { 3207f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field"); 3217f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 3227f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } else { 3237f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGD("cls = %p", cls); 3247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 3257f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 3267f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, "[J"); 3277f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (field == NULL) { 3287f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field"); 3297f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 3307f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 3317f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 3327f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde (env)->SetObjectField(obj, field, value); 3337f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGD("array field set"); 334e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde 335e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 3367f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 3377f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 338aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwallevoid setStaticLongArrayField(JNIEnv *env, jobject obj, const char *name, jlongArray value) 339aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle{ 340aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jclass cls = (env)->GetObjectClass(obj); 341aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle if (cls == NULL) { 342aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle THROW(env, "Error in accessing field"); 343aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle return; 344aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle } else { 345aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle ALOGD("cls = %p", cls); 346aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle } 347aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 348b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande setStaticLongArrayField(env, cls, name, value); 349b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande env->DeleteLocalRef(cls); 350b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande} 351b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande 352b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpandevoid setStaticLongArrayField(JNIEnv *env, jclass cls, const char *name, jlongArray value) 353b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande{ 354aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle jfieldID field = (env)->GetStaticFieldID(cls, name, "[J"); 355aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle if (field == NULL) { 356aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle THROW(env, "Error in accessing field"); 357aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle return; 358aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle } 359aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 360aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle (env)->SetStaticObjectField(cls, field, value); 361aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle ALOGD("array field set"); 362aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle} 363aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle 3647f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndevoid setLongArrayElement(JNIEnv *env, jobject obj, const char *name, int index, jlong value) 3657f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 3667f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 3677f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (cls == NULL) { 3687f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field"); 3697f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 3707f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } else { 3717f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGD("cls = %p", cls); 3727f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 3737f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 3747f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, "[J"); 3757f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (field == NULL) { 3767f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field"); 3777f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 3787f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } else { 3797f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGD("field = %p", field); 3807f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 3817f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 3827f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jlongArray array = (jlongArray)(env)->GetObjectField(obj, field); 3837f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (array == NULL) { 3847f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing array"); 3857f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 3867f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } else { 3877f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGD("array = %p", array); 3887f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 3897f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 3907f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jlong *elem = (env)->GetLongArrayElements(array, NULL); 3917f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (elem == NULL) { 3927f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing index element"); 3937f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 3947f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 3957f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 3967f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde elem[index] = value; 397e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->ReleaseLongArrayElements(array, elem, 0); 398e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(array); 399e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 4007f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 4017f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4027f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndevoid setObjectField(JNIEnv *env, jobject obj, const char *name, const char *type, jobject value) 4037f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 4047f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass cls = (env)->GetObjectClass(obj); 4057f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (cls == NULL) { 4067f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing class"); 4077f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 4087f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 4097f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4107f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jfieldID field = (env)->GetFieldID(cls, name, type); 4117f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (field == NULL) { 4127f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing field"); 4137f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 4147f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 4157f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde (env)->SetObjectField(obj, field, value); 417e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 4187f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 4197f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4207f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndevoid setStringField(JNIEnv *env, jobject obj, const char *name, const char *value) 4217f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 4227f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jstring str = env->NewStringUTF(value); 4237f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (str == NULL) { 4257f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde THROW(env, "Error in accessing class"); 4267f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 4277f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 4287f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4297f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde setObjectField(env, obj, name, "Ljava/lang/String;", str); 430e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(str); 4317f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 4327f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 433b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpandevoid reportEvent(JNIEnv *env, jclass cls, const char *method, const char *signature, ...) 4347f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 4357f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde va_list params; 4367f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde va_start(params, signature); 4377f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 438b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande jmethodID methodID = env->GetStaticMethodID(cls, method, signature); 4397f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (method == NULL) { 4407f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGE("Error in getting method ID"); 4417f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return; 4427f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 4437f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 444b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande env->CallStaticVoidMethodV(cls, methodID, params); 4457f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde va_end(params); 4467f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 4477f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4487f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndejobject createObject(JNIEnv *env, const char *className) 4497f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{ 4507f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jclass cls = env->FindClass(className); 4517f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (cls == NULL) { 45283a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande ALOGE("Error in finding class %s", className); 4537f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return NULL; 4547f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 4557f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4567f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jmethodID constructor = env->GetMethodID(cls, "<init>", "()V"); 4577f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (constructor == NULL) { 45883a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande ALOGE("Error in constructor ID for %s", className); 4597f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return NULL; 4607f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 4617f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde jobject obj = env->NewObject(cls, constructor); 4627f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde if (constructor == NULL) { 4637f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde ALOGE("Could not create new object of %s", className); 4647f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return NULL; 4657f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde } 4667f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 467e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde env->DeleteLocalRef(cls); 4687f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde return obj; 4697f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde} 4707f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 47183a674a18c84ff4f01377bbfd8988699dec93bc2Vinit DeshpandejobjectArray createObjectArray(JNIEnv *env, const char *className, int num) 47283a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande{ 47383a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande jclass cls = env->FindClass(className); 47483a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande if (cls == NULL) { 47583a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande ALOGE("Error in finding class %s", className); 47683a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande return NULL; 47783a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande } 47883a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande 47983a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande jobjectArray array = env->NewObjectArray(num, cls, NULL); 48083a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande if (array == NULL) { 48183a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande ALOGE("Error in creating array of class %s", className); 48283a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande return NULL; 48383a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande } 48483a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande 48583a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande env->DeleteLocalRef(cls); 48683a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande return array; 48783a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande} 48883a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande 4897f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}; // namespace android 4907f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 4917f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde 492