1525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* 2525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Copyright (C) 2012 The Android Open Source Project 3525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 4525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * you may not use this file except in compliance with the License. 6525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * You may obtain a copy of the License at 7525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 8525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 10525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * See the License for the specific language governing permissions and 14525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * limitations under the License. 15525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */ 16525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "NfcJniUtil.h" 177b223358c5564a7bc7c72a74889f61fbc5a3cc27Ruben Brunk 187b223358c5564a7bc7c72a74889f61fbc5a3cc27Ruben Brunk#include <cutils/log.h> 19525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <errno.h> 207b223358c5564a7bc7c72a74889f61fbc5a3cc27Ruben Brunk#include <JNIHelp.h> 212534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes#include <ScopedLocalRef.h> 22525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 23525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 24525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 25525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 26525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: JNI_OnLoad 27525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 28525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Register all JNI functions with Java Virtual Machine. 29525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** jvm: Java Virtual Machine. 30525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** reserved: Not used. 31525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 32525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: JNI version. 33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 352534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesjint JNI_OnLoad (JavaVM* jvm, void*) 36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project JNIEnv *e = NULL; 39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 402534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ALOGI("NFC Service: loading nci JNI"); 412534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 42525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Check JNI version 43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (jvm->GetEnv ((void **) &e, JNI_VERSION_1_6)) 44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_ERR; 45525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 46525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (android::register_com_android_nfc_NativeNfcManager (e) == -1) 47525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_ERR; 48525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (android::register_com_android_nfc_NativeLlcpServiceSocket (e) == -1) 49525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_ERR; 50525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (android::register_com_android_nfc_NativeLlcpSocket (e) == -1) 51525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_ERR; 52525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (android::register_com_android_nfc_NativeNfcTag (e) == -1) 53525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_ERR; 54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (android::register_com_android_nfc_NativeLlcpConnectionlessSocket (e) == -1) 55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_ERR; 56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (android::register_com_android_nfc_NativeP2pDevice (e) == -1) 57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_ERR; 58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (android::register_com_android_nfc_NativeNfcSecureElement (e) == -1) 59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_ERR; 60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_VERSION_1_6; 62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 63525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 66525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 67525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 68525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 69525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 70525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfc_jni_cache_object 72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: 74525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 75525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Status code. 76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 78525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectint nfc_jni_cache_object (JNIEnv *e, const char *className, jobject *cachedObj) 79525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 802534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> cls(e, e->FindClass(className)); 81a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu if (cls.get() == NULL) 82a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 832534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ALOGE("%s: find class error", __FUNCTION__); 84525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return -1; 85525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 86525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 872534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jmethodID ctor = e->GetMethodID(cls.get(), "<init>", "()V"); 882534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jobject> obj(e, e->NewObject(cls.get(), ctor)); 89a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu if (obj.get() == NULL) 90a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 912534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ALOGE("%s: create object error", __FUNCTION__); 92525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return -1; 93525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 94525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 952534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes *cachedObj = e->NewGlobalRef(obj.get()); 96a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu if (*cachedObj == NULL) 97a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 982534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ALOGE("%s: global ref error", __FUNCTION__); 99525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return -1; 100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return 0; 102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 103525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 105525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 106525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 107525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfc_jni_get_nfc_socket_handle 108525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 109525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get the value of "mHandle" member variable. 110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Value of mHandle. 114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectint nfc_jni_get_nfc_socket_handle (JNIEnv *e, jobject o) 117525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1182534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> c(e, e->GetObjectClass(o)); 1192534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f = e->GetFieldID(c.get(), "mHandle", "I"); 1202534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes return e->GetIntField(o, f); 121525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 122525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 124525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 125525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 126525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfc_jni_get_nat 127525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get the value of "mNative" member variable. 129525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 130525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 131525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 132525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Pointer to the value of mNative. 133525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 134525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 135525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstruct nfc_jni_native_data* nfc_jni_get_nat(JNIEnv *e, jobject o) 136525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1372534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> c(e, e->GetObjectClass(o)); 1382534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f = e->GetFieldID(c.get(), "mNative", "I"); 139525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Retrieve native structure address */ 1402534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes return (struct nfc_jni_native_data*) e->GetIntField(o, f); 141525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 142525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 143525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 144525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} // namespace android 145