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 20fd2cdbf1da3729bfcfb0418ee1a56ab622a9c578mike wakerly#define LOG_TAG "NFCJNI" 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)); 11447791cf2a079b3eb2e96eadec65a1c316ea97ceeNick Pelly #define TRACE(...) ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__) 115abee6672efdff2214c85aba332dd73895296e52bChih-Wei Huang #define TRACE_ENABLED 1 116ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#else 117ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton #define LOG_CALLBACK(...) 118ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton #define TRACE(...) 119abee6672efdff2214c85aba332dd73895296e52bChih-Wei Huang #define TRACE_ENABLED 0 120ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#endif 121ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton 122c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data 123f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly{ 124f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Thread handle */ 125f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly pthread_t thread; 126f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int running; 127f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 128f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Our VM */ 129f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly JavaVM *vm; 130f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int env_version; 131f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 132f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Reference to the NFCManager instance */ 133f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject manager; 134f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 135f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Cached objects */ 136f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject cached_NfcTag; 137f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject cached_P2pDevice; 138f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 139f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Target discovery configuration */ 140f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int discovery_modes_state[DISCOVERY_MODE_TABLE_SIZE]; 141f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly phLibNfc_sADD_Cfg_t discovery_cfg; 142f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly phLibNfc_Registry_Info_t registry_info; 143f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 144f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Secure Element selected */ 145f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int seId; 146f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 147f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* LLCP params */ 148f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int lto; 149f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int miu; 150f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int wks; 151f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly int opt; 152f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 153f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Tag detected */ 154f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject tag; 155f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 156f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Lib Status */ 157f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly NFCSTATUS status; 1580c39284106d29e8852197d163dcc95c01da29f0dMartijn Coenen 1590c39284106d29e8852197d163dcc95c01da29f0dMartijn Coenen /* p2p modes */ 1600c39284106d29e8852197d163dcc95c01da29f0dMartijn Coenen int p2p_initiator_modes; 1610c39284106d29e8852197d163dcc95c01da29f0dMartijn Coenen int p2p_target_modes; 162f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 163f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly}; 164f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 165c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellytypedef struct nfc_jni_native_monitor 166f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly{ 167f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Mutex protecting native library against reentrance */ 168f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly pthread_mutex_t reentrance_mutex; 169f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 170f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly /* Mutex protecting native library against concurrency */ 171f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly pthread_mutex_t concurrency_mutex; 172f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 173b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau /* List used to track pending semaphores waiting for callback */ 174b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau struct listHead sem_list; 175b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 17652e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau /* List used to track incoming socket requests (and associated sync variables) */ 17752e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau LIST_HEAD(, nfc_jni_listen_data) incoming_socket_head; 17852e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau pthread_mutex_t incoming_socket_mutex; 17952e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau pthread_cond_t incoming_socket_cond; 18052e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 181c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly} nfc_jni_native_monitor_t; 182f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 183b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneautypedef struct nfc_jni_callback_data 184b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau{ 185b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau /* Semaphore used to wait for callback */ 186b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau sem_t sem; 187b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 188b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau /* Used to store the status sent by the callback */ 189b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau NFCSTATUS status; 190b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 191b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau /* Used to provide a local context to the callback */ 192b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau void* pContext; 193b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 194b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau} nfc_jni_callback_data_t; 195b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 19652e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneautypedef struct nfc_jni_listen_data 19752e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau{ 19852e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau /* LLCP server socket receiving the connection request */ 19952e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau phLibNfc_Handle pServerSocket; 20052e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 20152e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau /* LLCP socket created from the connection request */ 20252e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau phLibNfc_Handle pIncomingSocket; 20352e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 20452e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau /* List entries */ 20552e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau LIST_ENTRY(nfc_jni_listen_data) entries; 20652e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 20752e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau} nfc_jni_listen_data_t; 20852e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau 209f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* TODO: treat errors and add traces */ 210c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define REENTRANCE_LOCK() pthread_mutex_lock(&nfc_jni_get_monitor()->reentrance_mutex) 211c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define REENTRANCE_UNLOCK() pthread_mutex_unlock(&nfc_jni_get_monitor()->reentrance_mutex) 212c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define CONCURRENCY_LOCK() pthread_mutex_lock(&nfc_jni_get_monitor()->concurrency_mutex) 213c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define CONCURRENCY_UNLOCK() pthread_mutex_unlock(&nfc_jni_get_monitor()->concurrency_mutex) 214f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 215f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pellynamespace android { 216f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 2170412f53e664083dc5307bbcf18c0002b26180203Nick Pellyextern JavaVM *vm; 2180412f53e664083dc5307bbcf18c0002b26180203Nick Pelly 2190412f53e664083dc5307bbcf18c0002b26180203Nick PellyJNIEnv *nfc_get_env(); 220b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 221b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneaubool nfc_cb_data_init(nfc_jni_callback_data* pCallbackData, void* pContext); 222b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneauvoid nfc_cb_data_deinit(nfc_jni_callback_data* pCallbackData); 223b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneauvoid nfc_cb_data_releaseAll(); 224b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau 225c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyconst char* nfc_jni_get_status_name(NFCSTATUS status); 226c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyint nfc_jni_cache_object(JNIEnv *e, const char *clsname, 227f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly jobject *cached_obj); 228c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data* nfc_jni_get_nat(JNIEnv *e, jobject o); 229c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data* nfc_jni_get_nat_ext(JNIEnv *e); 230c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellynfc_jni_native_monitor_t* nfc_jni_init_monitor(void); 231c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellynfc_jni_native_monitor_t* nfc_jni_get_monitor(void); 232f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 2330bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomasint get_technology_type(phNfc_eRemDevType_t type, uint8_t sak); 2344f2715ade09afdd18463eb92f15215a43af41d63Martijn Coenenvoid nfc_jni_get_technology_tree(JNIEnv* e, phLibNfc_RemoteDevList_t* devList, 2350a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenen uint8_t count, jintArray* techList, jintArray* handleList, 2360a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenen jintArray* typeList); 2370bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomas 23813d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pelly/* P2P */ 239c2fdb614879c601b5162d5d93d705b05c7b1e072Nick PellyphLibNfc_Handle nfc_jni_get_p2p_device_handle(JNIEnv *e, jobject o); 240c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyjshort nfc_jni_get_p2p_device_mode(JNIEnv *e, jobject o); 241f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 242f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* TAG */ 243bb78d3749bd0cc3801fdd9d5df06b0f6ee7a400fMartijn Coenenjint nfc_jni_get_connected_technology(JNIEnv *e, jobject o); 2440a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenenjint nfc_jni_get_connected_technology_libnfc_type(JNIEnv *e, jobject o); 245bb78d3749bd0cc3801fdd9d5df06b0f6ee7a400fMartijn CoenenphLibNfc_Handle nfc_jni_get_connected_handle(JNIEnv *e, jobject o); 2466d11530887a3e6f30fa21d01bc0de5cdbd0218eaMartijn CoenenjintArray nfc_jni_get_nfc_tag_type(JNIEnv *e, jobject o); 247f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 248f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* LLCP */ 249c2fdb614879c601b5162d5d93d705b05c7b1e072Nick PellyphLibNfc_Handle nfc_jni_get_nfc_socket_handle(JNIEnv *e, jobject o); 250f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 25113d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeNfcManager(JNIEnv *e); 25213d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeNfcTag(JNIEnv *e); 25313d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeP2pDevice(JNIEnv *e); 25413d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpConnectionlessSocket(JNIEnv *e); 25513d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpServiceSocket(JNIEnv *e); 25613d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpSocket(JNIEnv *e); 2570bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomasint register_com_android_nfc_NativeNfcSecureElement(JNIEnv *e); 258f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 259f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly} // namespace android 260f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 261f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#endif 262