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 17525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#pragma once 182534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes#undef LOG_TAG 19525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define LOG_TAG "BrcmNfcJni" 20525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <jni.h> 21525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <pthread.h> 22525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <sys/queue.h> 23525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <semaphore.h> 24525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 25525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 26525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Discovery modes -- keep in sync with NFCManager.DISCOVERY_MODE_* */ 27525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_TAG_READER 0 28525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_NFCIP1 1 29525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_CARD_EMULATION 2 30525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_TABLE_SIZE 3 31525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 32525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_DISABLED 0 33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_ENABLED 1 34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 35525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define MODE_P2P_TARGET 0 36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define MODE_P2P_INITIATOR 1 37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Properties values */ 40525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_LLCP_LTO 0 41525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_LLCP_MIU 1 42525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_LLCP_WKS 2 43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_LLCP_OPT 3 44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_A 4 45525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_B 5 46525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_F 6 47525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_15693 7 48525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_NCFIP 8 49525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 50525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 51525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Error codes */ 52525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define ERROR_BUFFER_TOO_SMALL -12 53525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define ERROR_INSUFFICIENT_RESOURCES -9 54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Pre-defined tag type values. These must match the values in 57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Ndef.java in the framework. 58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */ 59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_UNKNOWN_TYPE -1 60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_TYPE1_TAG 1 61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_TYPE2_TAG 2 62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_TYPE3_TAG 3 63525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_TYPE4_TAG 4 64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_MIFARE_CLASSIC_TAG 101 65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 66525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 67525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Pre-defined card read/write state values. These must match the values in 68525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Ndef.java in the framework. 69525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */ 70525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_MODE_READ_ONLY 1 71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_MODE_READ_WRITE 2 72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_MODE_UNKNOWN 3 73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 74525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 75525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Name strings for target types. These *must* match the values in TagTechnology.java */ 76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_UNKNOWN -1 77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_ISO14443_3A 1 78525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_ISO14443_3B 2 79525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_ISO14443_4 3 80525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_FELICA 4 81525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_ISO15693 5 82525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_NDEF 6 83525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_NDEF_FORMATABLE 7 84525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_MIFARE_CLASSIC 8 85525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_MIFARE_UL 9 8697a71fe90493efd5947bb6f18c7b58a7e795c1ddEvan Chu#define TARGET_TYPE_KOVIO_BARCODE 10 87525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 88525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 89525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project//define a few NXP error codes that NFC service expects; 90525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project//see external/libnfc-nxp/src/phLibNfcStatus.h; 91525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project//see external/libnfc-nxp/inc/phNfcStatus.h 92525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NFCSTATUS_SUCCESS (0x0000) 93525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NFCSTATUS_FAILED (0x00FF) 94525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 95525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstruct nfc_jni_native_data 96525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 97525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Thread handle */ 98525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project pthread_t thread; 99525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int running; 100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Our VM */ 102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project JavaVM *vm; 103525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int env_version; 104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 105525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Reference to the NFCManager instance */ 106525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jobject manager; 107525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 108525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Cached objects */ 109525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jobject cached_NfcTag; 110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jobject cached_P2pDevice; 111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Secure Element selected */ 113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int seId; 114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* LLCP params */ 116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int lto; 117525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int miu; 118525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int wks; 119525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int opt; 120525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 121525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int tech_mask; 122c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen int discovery_duration; 123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 124525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Tag detected */ 125525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jobject tag; 126525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 127525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int tHandle; 128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int tProtocols[16]; 129525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int handles[16]; 130525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project}; 131525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 132525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 133a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chuclass ScopedAttach 134a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu{ 135a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chupublic: 136a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ScopedAttach(JavaVM* vm, JNIEnv** env) : vm_(vm) 137a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 138a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu vm_->AttachCurrentThread(env, NULL); 139a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu } 140a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu 141a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ~ScopedAttach() 142a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 143a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu vm_->DetachCurrentThread(); 144a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu } 145a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu 146a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chuprivate: 147a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu JavaVM* vm_; 1482534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes}; 1492534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 1502534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 151525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern "C" 152525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 153525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jint JNI_OnLoad(JavaVM *jvm, void *reserved); 154525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 155525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 156525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 157525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 158525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 159525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int nfc_jni_cache_object (JNIEnv *e, const char *clsname, jobject *cached_obj); 160b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen int nfc_jni_cache_object_local (JNIEnv *e, const char *className, jobject *cachedObj); 161525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int nfc_jni_get_nfc_socket_handle (JNIEnv *e, jobject o); 162525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data* nfc_jni_get_nat (JNIEnv *e, jobject o); 163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int register_com_android_nfc_NativeNfcManager (JNIEnv *e); 164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int register_com_android_nfc_NativeNfcTag (JNIEnv *e); 165525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int register_com_android_nfc_NativeP2pDevice (JNIEnv *e); 166525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int register_com_android_nfc_NativeLlcpConnectionlessSocket (JNIEnv *e); 167525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int register_com_android_nfc_NativeLlcpServiceSocket (JNIEnv *e); 168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int register_com_android_nfc_NativeLlcpSocket (JNIEnv *e); 169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} // namespace android 170