1f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* 2f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Copyright (C) 2010 The Android Open Source Project 3f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * 4f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Licensed under the Apache License, Version 2.0 (the "License"); 5f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * you may not use this file except in compliance with the License. 6f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * You may obtain a copy of the License at 7f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * 8f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * http://www.apache.org/licenses/LICENSE-2.0 9f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * 10f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Unless required by applicable law or agreed to in writing, software 11f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * distributed under the License is distributed on an "AS IS" BASIS, 12f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * See the License for the specific language governing permissions and 14f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * limitations under the License. 15f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly */ 16f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 17c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#ifndef __COM_ANDROID_NFC_JNI_H__ 18c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define __COM_ANDROID_NFC_JNI_H__ 19f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 20c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define LOG_TAG "NFC JNI" 21f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 22f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <JNIHelp.h> 23f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <jni.h> 24f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 25f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <pthread.h> 2652e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau#include <sys/queue.h> 27f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 28f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pellyextern "C" { 29f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phNfcStatus.h> 30f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phNfcTypes.h> 31f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phNfcIoctlCode.h> 32f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phLibNfc.h> 33f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phDal4Nfc_messageQueueLib.h> 343ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen#include <phFriNfc_NdefMap.h> 35ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#include <cutils/log.h> 36b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau#include <com_android_nfc_list.h> 37b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau#include <semaphore.h> 38b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 39f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly} 40f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <cutils/properties.h> // for property_get 41f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 42ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton 43f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* Discovery modes -- keep in sync with NFCManager.DISCOVERY_MODE_* */ 44f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_TAG_READER 0 45f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_NFCIP1 1 46f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_CARD_EMULATION 2 47f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 48f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_TABLE_SIZE 3 49f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 50f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_DISABLED 0 51f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_ENABLED 1 52f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 53f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define MODE_P2P_TARGET 0 54f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define MODE_P2P_INITIATOR 1 55f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 56f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* Properties values */ 57f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_LLCP_LTO 0 58f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_LLCP_MIU 1 59f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_LLCP_WKS 2 60f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_LLCP_OPT 3 61f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_A 4 62f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_B 5 63f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_F 6 64f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_15693 7 65f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_NCFIP 8 66f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 67f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* Error codes */ 68f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define ERROR_BUFFER_TOO_SMALL -12 69f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define ERROR_INSUFFICIENT_RESOURCES -9 70f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 713ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen/* Pre-defined card read/write state values. These must match the values in 72f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen * Ndef.java in the framework. 73f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen */ 74f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen 758d69f5205e3c4a7c2eb869bbf4983d3d9fe45ab0Nick Pelly#define NDEF_UNKNOWN_TYPE -1 76f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen#define NDEF_TYPE1_TAG 1 77f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen#define NDEF_TYPE2_TAG 2 78f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen#define NDEF_TYPE3_TAG 3 79f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen#define NDEF_TYPE4_TAG 4 808d69f5205e3c4a7c2eb869bbf4983d3d9fe45ab0Nick Pelly#define NDEF_MIFARE_CLASSIC_TAG 101 81e8848005e3c79df26d8cdc4228220205eaeffe4fMartijn Coenen#define NDEF_ICODE_SLI_TAG 102 82f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen 83f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen/* Pre-defined tag type values. These must match the values in 84f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen * Ndef.java in the framework. 853ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen */ 863ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen 873ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen#define NDEF_MODE_READ_ONLY 1 883ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen#define NDEF_MODE_READ_WRITE 2 893ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen#define NDEF_MODE_UNKNOWN 3 903ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen 91f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen 92b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton/* Name strings for target types. These *must* match the values in TagTechnology.java */ 93b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton#define TARGET_TYPE_UNKNOWN -1 94b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton#define TARGET_TYPE_ISO14443_3A 1 95b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton#define TARGET_TYPE_ISO14443_3B 2 96b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton#define TARGET_TYPE_ISO14443_4 3 973fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_FELICA 4 983fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_ISO15693 5 993fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_NDEF 6 1003fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_NDEF_FORMATABLE 7 1013fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_MIFARE_CLASSIC 8 1023fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_MIFARE_UL 9 103f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 1047efbf69a37134ccbd86a1f6b4121f16b4a80eaaeNick Pelly#define SMX_SECURE_ELEMENT_ID 11259375 1057efbf69a37134ccbd86a1f6b4121f16b4a80eaaeNick Pelly 1065e93195e37834429229350bdce670a64e536367amike wakerly/* Maximum byte length of an AID. */ 1075e93195e37834429229350bdce670a64e536367amike wakerly#define AID_MAXLEN 16 1085e93195e37834429229350bdce670a64e536367amike wakerly 109f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* Utility macros for logging */ 110f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define GET_LEVEL(status) ((status)==NFCSTATUS_SUCCESS)?ANDROID_LOG_DEBUG:ANDROID_LOG_WARN 111ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton 112ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#if 0 113ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton #define LOG_CALLBACK(funcName, status) LOG_PRI(GET_LEVEL(status), LOG_TAG, "Callback: %s() - status=0x%04x[%s]", funcName, status, nfc_jni_get_status_name(status)); 11420a7a37f5e021d576342365151a1b221a39565aeSylvain Fonteneau #define TRACE(...) LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__) 115ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#else 116ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton #define LOG_CALLBACK(...) 117ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton #define TRACE(...) 118ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#endif 119ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton 120c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data 121f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly{ 122f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Thread handle */ 123f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly pthread_t thread; 124f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int running; 125f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 126f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Our VM */ 127f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly JavaVM *vm; 128f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int env_version; 129f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 130f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Reference to the NFCManager instance */ 131f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject manager; 132f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 133f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Cached objects */ 134f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject cached_NfcTag; 135f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject cached_P2pDevice; 136f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 137f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Target discovery configuration */ 138f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int discovery_modes_state[DISCOVERY_MODE_TABLE_SIZE]; 139f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly phLibNfc_sADD_Cfg_t discovery_cfg; 140f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly phLibNfc_Registry_Info_t registry_info; 141f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 142f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Secure Element selected */ 143f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int seId; 144f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 145f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* LLCP params */ 146f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int lto; 147f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int miu; 148f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int wks; 149f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int opt; 150f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 151f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Tag detected */ 152f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject tag; 153f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 154f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Lib Status */ 155f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly NFCSTATUS status; 156f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 157f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly}; 158f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 159c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellytypedef struct nfc_jni_native_monitor 160f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly{ 161f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Mutex protecting native library against reentrance */ 162f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly pthread_mutex_t reentrance_mutex; 163f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 164f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Mutex protecting native library against concurrency */ 165f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly pthread_mutex_t concurrency_mutex; 166f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 167b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau /* List used to track pending semaphores waiting for callback */ 168b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau struct listHead sem_list; 169b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 17052e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau /* List used to track incoming socket requests (and associated sync variables) */ 17152e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau LIST_HEAD(, nfc_jni_listen_data) incoming_socket_head; 17252e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau pthread_mutex_t incoming_socket_mutex; 17352e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau pthread_cond_t incoming_socket_cond; 17452e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 175c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly} nfc_jni_native_monitor_t; 176f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 177b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneautypedef struct nfc_jni_callback_data 178b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau{ 179b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau /* Semaphore used to wait for callback */ 180b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau sem_t sem; 181b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 182b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau /* Used to store the status sent by the callback */ 183b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau NFCSTATUS status; 184b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 185b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau /* Used to provide a local context to the callback */ 186b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau void* pContext; 187b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 188b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau} nfc_jni_callback_data_t; 189b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 19052e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneautypedef struct nfc_jni_listen_data 19152e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau{ 19252e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau /* LLCP server socket receiving the connection request */ 19352e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau phLibNfc_Handle pServerSocket; 19452e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 19552e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau /* LLCP socket created from the connection request */ 19652e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau phLibNfc_Handle pIncomingSocket; 19752e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 19852e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau /* List entries */ 19952e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau LIST_ENTRY(nfc_jni_listen_data) entries; 20052e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 20152e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau} nfc_jni_listen_data_t; 20252e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 203f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* TODO: treat errors and add traces */ 204c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define REENTRANCE_LOCK() pthread_mutex_lock(&nfc_jni_get_monitor()->reentrance_mutex) 205c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define REENTRANCE_UNLOCK() pthread_mutex_unlock(&nfc_jni_get_monitor()->reentrance_mutex) 206c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define CONCURRENCY_LOCK() pthread_mutex_lock(&nfc_jni_get_monitor()->concurrency_mutex) 207c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define CONCURRENCY_UNLOCK() pthread_mutex_unlock(&nfc_jni_get_monitor()->concurrency_mutex) 208f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 209f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pellynamespace android { 210f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 2110412f53e664083dc5307bbcf18c0002b26180203Nick Pellyextern JavaVM *vm; 2120412f53e664083dc5307bbcf18c0002b26180203Nick Pelly 2130412f53e664083dc5307bbcf18c0002b26180203Nick PellyJNIEnv *nfc_get_env(); 214b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 215b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneaubool nfc_cb_data_init(nfc_jni_callback_data* pCallbackData, void* pContext); 216b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneauvoid nfc_cb_data_deinit(nfc_jni_callback_data* pCallbackData); 217b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneauvoid nfc_cb_data_releaseAll(); 218b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 219c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyconst char* nfc_jni_get_status_name(NFCSTATUS status); 220c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyint nfc_jni_cache_object(JNIEnv *e, const char *clsname, 221f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject *cached_obj); 222c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data* nfc_jni_get_nat(JNIEnv *e, jobject o); 223c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data* nfc_jni_get_nat_ext(JNIEnv *e); 224c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellynfc_jni_native_monitor_t* nfc_jni_init_monitor(void); 225c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellynfc_jni_native_monitor_t* nfc_jni_get_monitor(void); 226f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 2270bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomasint get_technology_type(phNfc_eRemDevType_t type, uint8_t sak); 2284f2715ade09afdd18463eb92f15215a43af41d63Martijn Coenenvoid nfc_jni_get_technology_tree(JNIEnv* e, phLibNfc_RemoteDevList_t* devList, 2290a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenen uint8_t count, jintArray* techList, jintArray* handleList, 2300a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenen jintArray* typeList); 2310bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomas 23213d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pelly/* P2P */ 233c2fdb614879c601b5162d5d93d705b05c7b1e072Nick PellyphLibNfc_Handle nfc_jni_get_p2p_device_handle(JNIEnv *e, jobject o); 234c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyjshort nfc_jni_get_p2p_device_mode(JNIEnv *e, jobject o); 235f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 236f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* TAG */ 237bb78d3749bd0cc3801fdd9d5df06b0f6ee7a400fMartijn Coenenjint nfc_jni_get_connected_technology(JNIEnv *e, jobject o); 2380a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenenjint nfc_jni_get_connected_technology_libnfc_type(JNIEnv *e, jobject o); 239bb78d3749bd0cc3801fdd9d5df06b0f6ee7a400fMartijn CoenenphLibNfc_Handle nfc_jni_get_connected_handle(JNIEnv *e, jobject o); 2406d11530887a3e6f30fa21d01bc0de5cdbd0218eaMartijn CoenenjintArray nfc_jni_get_nfc_tag_type(JNIEnv *e, jobject o); 241f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 242f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* LLCP */ 243c2fdb614879c601b5162d5d93d705b05c7b1e072Nick PellyphLibNfc_Handle nfc_jni_get_nfc_socket_handle(JNIEnv *e, jobject o); 244f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 24513d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeNfcManager(JNIEnv *e); 24613d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeNfcTag(JNIEnv *e); 24713d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeP2pDevice(JNIEnv *e); 24813d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpConnectionlessSocket(JNIEnv *e); 24913d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpServiceSocket(JNIEnv *e); 25013d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpSocket(JNIEnv *e); 2510bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomasint register_com_android_nfc_NativeNfcSecureElement(JNIEnv *e); 252f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 253f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly} // namespace android 254f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 255f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#endif 256