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#include <semaphore.h> 18525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <errno.h> 19c5956ce2009414eef843b413eeb822b529ddb85cRuchi Kandoi#include "_OverrideLog.h" 20525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "NfcJniUtil.h" 21525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "NfcAdaptation.h" 22525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "SyncEvent.h" 23525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "PeerToPeer.h" 249f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen#include "RoutingManager.h" 25525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "NfcTag.h" 26525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "config.h" 27525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "PowerSwitch.h" 28525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "JavaClassConstants.h" 29525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "Pn544Interop.h" 302534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes#include <ScopedLocalRef.h> 312534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes#include <ScopedUtfChars.h> 329f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen#include <ScopedPrimitiveArray.h> 33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern "C" 35525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_api.h" 37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_p2p_api.h" 38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "rw_api.h" 39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_ee_api.h" 40525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfc_brcm_defs.h" 41525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "ce_api.h" 428605731e8f17d1fde003084811f13f52539eb20cJizhou Liao #include "phNxpExtns.h" 43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 452dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoiextern const uint8_t nfca_version_string []; 462dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoiextern const uint8_t nfa_version_string []; 47a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chuextern tNFA_DM_DISC_FREQ_CFG* p_nfa_dm_rf_disc_freq_cfg; //defined in stack 48525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 49525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 50525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern bool gIsTagDeactivating; 51525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern bool gIsSelectingRfInterface; 52b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen extern void nativeNfcTag_doTransceiveStatus (tNFA_STATUS status, uint8_t * buf, uint32_t buflen); 53a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu extern void nativeNfcTag_notifyRfTimeout (); 54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doConnectStatus (jboolean is_connect_ok); 55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doDeactivateStatus (int status); 56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doWriteStatus (jboolean is_write_ok); 57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doCheckNdefResult (tNFA_STATUS status, uint32_t max_size, uint32_t current_size, uint8_t flags); 58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doMakeReadonlyResult (tNFA_STATUS status); 59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doPresenceCheckResult (tNFA_STATUS status); 60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_formatStatus (bool is_ok); 61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_resetPresenceCheck (); 62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doReadCompleted (tNFA_STATUS status); 638605731e8f17d1fde003084811f13f52539eb20cJizhou Liao extern void nativeNfcTag_setRfInterface (tNFA_INTF_TYPE rfInterface); 64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_abortWaits (); 65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeLlcpConnectionlessSocket_abortWait (); 66525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_registerNdefTypeHandler (); 6734d6116d82975f558378e2b16fdad04ac70d4130Jizhou Liao extern void nativeNfcTag_acquireRfInterfaceMutexLock(); 6834d6116d82975f558378e2b16fdad04ac70d4130Jizhou Liao extern void nativeNfcTag_releaseRfInterfaceMutexLock(); 69525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeLlcpConnectionlessSocket_receiveData (uint8_t* data, uint32_t len, uint32_t remote_sap); 70525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 74525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 75525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** public variables and functions 76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 78a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chubool gActivated = false; 79a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan ChuSyncEvent gDeactivatedEvent; 803a894dda035a331860f0f23e93528527493a07a3Love KhannaSyncEvent sNfaSetPowerSubState; 81525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 82525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 83525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 84525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyNdefMessageListeners; 85525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyTransactionListeners; 86525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyLlcpLinkActivation; 87525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyLlcpLinkDeactivated; 8857a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen jmethodID gCachedNfcManagerNotifyLlcpFirstPacketReceived; 899f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen jmethodID gCachedNfcManagerNotifyHostEmuActivated; 909f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen jmethodID gCachedNfcManagerNotifyHostEmuData; 919f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen jmethodID gCachedNfcManagerNotifyHostEmuDeactivated; 92c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen jmethodID gCachedNfcManagerNotifyRfFieldActivated; 93c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen jmethodID gCachedNfcManagerNotifyRfFieldDeactivated; 94525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeP2pDeviceClassName = "com/android/nfc/dhimpl/NativeP2pDevice"; 95525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpServiceSocketClassName = "com/android/nfc/dhimpl/NativeLlcpServiceSocket"; 96525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpConnectionlessSocketClassName = "com/android/nfc/dhimpl/NativeLlcpConnectionlessSocket"; 97525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpSocketClassName = "com/android/nfc/dhimpl/NativeLlcpSocket"; 98525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeNfcTagClassName = "com/android/nfc/dhimpl/NativeNfcTag"; 99525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeNfcManagerClassName = "com/android/nfc/dhimpl/NativeNfcManager"; 100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void doStartupConfig (); 101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void startStopPolling (bool isStartPolling); 102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void startRfDiscovery (bool isStart); 103c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao bool isDiscoveryStarted (); 104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 105525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 106525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 107525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 108525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 109525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** private variables and functions 110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jint sLastError = ERROR_BUFFER_TOO_SMALL; 115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaEnableEvent; //event for NFA_Enable() 116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaDisableEvent; //event for NFA_Disable() 117525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaEnableDisablePollingEvent; //event for NFA_EnablePolling(), NFA_DisablePolling() 118525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaSetConfigEvent; // event for Set_Config.... 119f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenenstatic SyncEvent sNfaGetConfigEvent; // event for Get_Config.... 120525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sIsNfaEnabled = false; 1210799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic bool sDiscoveryEnabled = false; //is polling or listening 1220799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic bool sPollingEnabled = false; //is polling for tag? 123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sIsDisabling = false; 124525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sRfEnabled = false; // whether RF discovery is enabled 125525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sSeRfActive = false; // whether RF with SE is likely active 126c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenenstatic bool sReaderModeEnabled = false; // whether we're only reading tags, not allowing P2p/card emu 12731b0f4653686119d74876cae5d637c5baf52b935Andres Moralesstatic bool sP2pEnabled = false; 128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sP2pActive = false; // whether p2p was last active 129525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sAbortConnlessWait = false; 130ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Itostatic jint sLfT3tMax = 0; 131ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 132525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define CONFIG_UPDATE_TECH_MASK (1 << 1) 133525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DEFAULT_TECH_MASK (NFA_TECHNOLOGY_MASK_A \ 134525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_B \ 135525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_F \ 1362aff4f645910cdc16a91c4670ee26e4d00045470Love Khanna | NFA_TECHNOLOGY_MASK_V \ 137525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_B_PRIME \ 138525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_A_ACTIVE \ 13997a71fe90493efd5947bb6f18c7b58a7e795c1ddEvan Chu | NFA_TECHNOLOGY_MASK_F_ACTIVE \ 14097a71fe90493efd5947bb6f18c7b58a7e795c1ddEvan Chu | NFA_TECHNOLOGY_MASK_KOVIO) 141c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen#define DEFAULT_DISCOVERY_DURATION 500 1428d154680537afa5242edeb98c8f414d6186558cfMartijn Coenen#define READER_MODE_DISCOVERY_DURATION 200 143525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1442dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoistatic void nfaConnectionCallback (uint8_t event, tNFA_CONN_EVT_DATA *eventData); 1452dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoistatic void nfaDeviceManagementCallback (uint8_t event, tNFA_DM_CBACK_DATA *eventData); 146525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isPeerToPeer (tNFA_ACTIVATED& activated); 147525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isListenMode(tNFA_ACTIVATED& activated); 148d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Moralesstatic void enableDisableLptd (bool enable); 1490799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic tNFA_STATUS stopPolling_rfDiscoveryDisabled(); 1500799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic tNFA_STATUS startPolling_rfDiscoveryDisabled(tNFA_TECHNOLOGY_MASK tech_mask); 1513a894dda035a331860f0f23e93528527493a07a3Love Khannastatic void nfcManager_doSetScreenState(JNIEnv* e, jobject o, jint screen_state_mask); 152525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1532dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoistatic uint16_t sCurrentConfigLen; 1542dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoistatic uint8_t sConfig[256]; 1553a894dda035a331860f0f23e93528527493a07a3Love Khannastatic int prevScreenState = NFA_SCREEN_STATE_OFF_LOCKED; 1563a894dda035a331860f0f23e93528527493a07a3Love Khannastatic int NFA_SCREEN_POLLING_TAG_MASK = 0x10; 157f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoistatic bool gIsDtaEnabled = false; 158525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project///////////////////////////////////////////////////////////// 159525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project///////////////////////////////////////////////////////////// 160525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 161525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 162525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: getNative 165525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 166525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get native data 167525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Native data structure. 169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 170525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 171525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnfc_jni_native_data *getNative (JNIEnv* e, jobject o) 172525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 173525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project static struct nfc_jni_native_data *sCachedNat = NULL; 174525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e) 175525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 176525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sCachedNat = nfc_jni_get_nat(e, o); 177525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 178525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sCachedNat; 179525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 180525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 181525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 182525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 183525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 184525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: handleRfDiscoveryEvent 185525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 186525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Handle RF-discovery events from the stack. 187525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** discoveredDevice: Discovered device. 188525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 189525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 190525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 191525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 192525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void handleRfDiscoveryEvent (tNFC_RESULT_DEVT* discoveredDevice) 193525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 194a0190709be02f0064bbc7d509c0d71690803e6b5Martijn Coenen if (discoveredDevice->more == NCI_DISCOVER_NTF_MORE) 195525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 196525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //there is more discovery notification coming 197525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return; 198525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 199525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 200525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project bool isP2p = NfcTag::getInstance ().isP2pDiscovered (); 201c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen if (!sReaderModeEnabled && isP2p) 202525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 203525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //select the peer that supports P2P 204525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance ().selectP2p(); 205525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 206525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 207525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 208525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //select the first of multiple tags that is discovered 209525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance ().selectFirstTag(); 210525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 211525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 212525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 213525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 214525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 215525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 216525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfaConnectionCallback 217525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 218525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Receive connection-related events from stack. 219525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** connEvent: Event code. 220525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** eventData: Event data. 221525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 222525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 223525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 224525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 2252dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoistatic void nfaConnectionCallback (uint8_t connEvent, tNFA_CONN_EVT_DATA* eventData) 226525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 227525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_FAILED; 2285f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: event= %u", __func__, connEvent); 229525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 230525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project switch (connEvent) 231525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 232525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_POLL_ENABLED_EVT: // whether polling successfully started 233525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 2345f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_POLL_ENABLED_EVT: status = %u", __func__, eventData->status); 235525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 236525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 237525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 238525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 239525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 240525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 241525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_POLL_DISABLED_EVT: // Listening/Polling stopped 242525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 2435f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_POLL_DISABLED_EVT: status = %u", __func__, eventData->status); 244525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 245525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 246525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 247525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 248525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 249525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 250525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_RF_DISCOVERY_STARTED_EVT: // RF Discovery started 251525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 2525f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_RF_DISCOVERY_STARTED_EVT: status = %u", __func__, eventData->status); 253525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 254525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 255525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 256525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 257525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 258525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 259525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_RF_DISCOVERY_STOPPED_EVT: // RF Discovery stopped event 260525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 2615f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_RF_DISCOVERY_STOPPED_EVT: status = %u", __func__, eventData->status); 262525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 263525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 264525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 265525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 266525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 267525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 268525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DISC_RESULT_EVT: // NFC link/protocol discovery notificaiton 269525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->disc_result.status; 2705f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DISC_RESULT_EVT: status = %d", __func__, status); 271525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 272525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 2732dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: NFA_DISC_RESULT_EVT error: status = %d", __func__, status); 274525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 275525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 276525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 277525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler(connEvent, eventData); 278525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project handleRfDiscoveryEvent(&eventData->disc_result.discovery_ntf); 279525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 280525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 281525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 282525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SELECT_RESULT_EVT: // NFC link/protocol discovery select response 2835f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_SELECT_RESULT_EVT: status = %d, gIsSelectingRfInterface = %d, sIsDisabling=%d", __func__, eventData->status, gIsSelectingRfInterface, sIsDisabling); 284525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 285525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsDisabling) 286525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 287525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 288525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->status != NFA_STATUS_OK) 289525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 290525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (gIsSelectingRfInterface) 291525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 292525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doConnectStatus(false); 293525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 294525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 2952dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: NFA_SELECT_RESULT_EVT error: status = %d", __func__, eventData->status); 296525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Deactivate (FALSE); 297525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 298525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 299525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 300525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DEACTIVATE_FAIL_EVT: 3015f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DEACTIVATE_FAIL_EVT: status = %d", __func__, eventData->status); 302525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 303525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 304525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_ACTIVATED_EVT: // NFC link/protocol activated 3055f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_ACTIVATED_EVT: gIsSelectingRfInterface=%d, sIsDisabling=%d", __func__, gIsSelectingRfInterface, sIsDisabling); 3068605731e8f17d1fde003084811f13f52539eb20cJizhou Liao if((eventData->activated.activate_ntf.protocol != NFA_PROTOCOL_NFC_DEP) && (!isListenMode (eventData->activated))) 3078605731e8f17d1fde003084811f13f52539eb20cJizhou Liao { 3088605731e8f17d1fde003084811f13f52539eb20cJizhou Liao nativeNfcTag_setRfInterface ((tNFA_INTF_TYPE) eventData->activated.activate_ntf.intf_param.type); 3098605731e8f17d1fde003084811f13f52539eb20cJizhou Liao } 3108605731e8f17d1fde003084811f13f52539eb20cJizhou Liao if (EXTNS_GetConnectFlag () == TRUE) 3118605731e8f17d1fde003084811f13f52539eb20cJizhou Liao { 3128605731e8f17d1fde003084811f13f52539eb20cJizhou Liao NfcTag::getInstance().setActivationState (); 3138605731e8f17d1fde003084811f13f52539eb20cJizhou Liao nativeNfcTag_doConnectStatus (true); 3148605731e8f17d1fde003084811f13f52539eb20cJizhou Liao break; 3158605731e8f17d1fde003084811f13f52539eb20cJizhou Liao } 316a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcTag::getInstance().setActive(true); 317b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen if (sIsDisabling || !sIsNfaEnabled) 318525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 319a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu gActivated = true; 320525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 321525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().setActivationState (); 322525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (gIsSelectingRfInterface) 323525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 324525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doConnectStatus(true); 325525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 326525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 327525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 328525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_resetPresenceCheck(); 329525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (isPeerToPeer(eventData->activated)) 330525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 331f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen if (sReaderModeEnabled) 332f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen { 3335f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: ignoring peer target in reader mode.", __func__); 334f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen NFA_Deactivate (FALSE); 335f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen break; 336f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen } 337525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sP2pActive = true; 33809922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna ALOGD("%s: NFA_ACTIVATED_EVT; is p2p", __func__); 33909922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna if (NFC_GetNCIVersion() == NCI_VERSION_1_0) 34009922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna { 34109922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna // Disable RF field events in case of p2p 34209922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna uint8_t nfa_disable_rf_events[] = { 0x00 }; 34309922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna ALOGD ("%s: Disabling RF field events", __func__); 34409922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna status = NFA_SetConfig(NCI_PARAM_ID_RF_FIELD_INFO, sizeof(nfa_disable_rf_events), 34509922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna &nfa_disable_rf_events[0]); 34609922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna if (status == NFA_STATUS_OK) { 34709922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna ALOGD ("%s: Disabled RF field events", __func__); 34809922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna } else { 34909922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna ALOGE ("%s: Failed to disable RF field events", __func__); 35009922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna } 351525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 352525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 353525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else if (pn544InteropIsBusy() == false) 354525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 355525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 356525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 357525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // We know it is not activating for P2P. If it activated in 35857a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen // listen mode then it is likely for an SE transaction. 359525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Send the RF Event. 360525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (isListenMode(eventData->activated)) 361525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 362525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sSeRfActive = true; 363525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 364525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 365525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 366525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 367525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DEACTIVATED_EVT: // NFC link/protocol deactivated 3685f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DEACTIVATED_EVT Type: %u, gIsTagDeactivating: %d", __func__, eventData->deactivated.type,gIsTagDeactivating); 369525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().setDeactivationState (eventData->deactivated); 370525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->deactivated.type != NFA_DEACTIVATE_TYPE_SLEEP) 371525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 372a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 373a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu SyncEventGuard g (gDeactivatedEvent); 374a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu gActivated = false; //guard this variable from multi-threaded access 375a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu gDeactivatedEvent.notifyOne (); 376a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu } 377525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_resetPresenceCheck(); 378525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 379525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 380525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 381525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 382525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else if (gIsTagDeactivating) 383525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 3848605731e8f17d1fde003084811f13f52539eb20cJizhou Liao NfcTag::getInstance ().setActive (false); 3858605731e8f17d1fde003084811f13f52539eb20cJizhou Liao nativeNfcTag_doDeactivateStatus (0); 3868605731e8f17d1fde003084811f13f52539eb20cJizhou Liao } 3878605731e8f17d1fde003084811f13f52539eb20cJizhou Liao else if (EXTNS_GetDeactivateFlag () == TRUE) 3888605731e8f17d1fde003084811f13f52539eb20cJizhou Liao { 3898605731e8f17d1fde003084811f13f52539eb20cJizhou Liao NfcTag::getInstance().setActive (false); 3908605731e8f17d1fde003084811f13f52539eb20cJizhou Liao nativeNfcTag_doDeactivateStatus (0); 391525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 392525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 393525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // If RF is activated for what we think is a Secure Element transaction 394525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // and it is deactivated to either IDLE or DISCOVERY mode, notify w/event. 395525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if ((eventData->deactivated.type == NFA_DEACTIVATE_TYPE_IDLE) 396525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (eventData->deactivated.type == NFA_DEACTIVATE_TYPE_DISCOVERY)) 397525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 398525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sSeRfActive) { 399525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sSeRfActive = false; 400525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } else if (sP2pActive) { 401525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sP2pActive = false; 402525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Make sure RF field events are re-enabled 40309922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna ALOGD("%s: NFA_DEACTIVATED_EVT; is p2p", __func__); 40409922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna if (NFC_GetNCIVersion() == NCI_VERSION_1_0) 405b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen { 40609922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna // Disable RF field events in case of p2p 40709922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna uint8_t nfa_enable_rf_events[] = { 0x01 }; 40809922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna 40909922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna if (!sIsDisabling && sIsNfaEnabled) 41009922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna { 41109922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna ALOGD ("%s: Enabling RF field events", __func__); 41209922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna status = NFA_SetConfig(NCI_PARAM_ID_RF_FIELD_INFO, sizeof(nfa_enable_rf_events), 41309922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna &nfa_enable_rf_events[0]); 41409922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna if (status == NFA_STATUS_OK) { 41509922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna ALOGD ("%s: Enabled RF field events", __func__); 41609922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna } else { 41709922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna ALOGE ("%s: Failed to enable RF field events", __func__); 41809922d2d1dcb21cf7b0bf830efe577381f855c4bLove Khanna } 419b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen } 420525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 421525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 422525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 423525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 424525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 425525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 426525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_TLV_DETECT_EVT: // TLV Detection complete 427525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->tlv_detect.status; 4285f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_TLV_DETECT_EVT: status = %d, protocol = %d, num_tlvs = %d, num_bytes = %d", 4292dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi __func__, status, eventData->tlv_detect.protocol, 430525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->tlv_detect.num_tlvs, eventData->tlv_detect.num_bytes); 431525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 432525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 4332dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: NFA_TLV_DETECT_EVT error: status = %d", __func__, status); 434525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 435525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 436525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 437525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_NDEF_DETECT_EVT: // NDEF Detection complete; 438525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if status is failure, it means the tag does not contain any or valid NDEF data; 439525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //pass the failure status to the NFC Service; 440525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->ndef_detect.status; 4415f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_NDEF_DETECT_EVT: status = 0x%X, protocol = %u, " 44244a6057818840847033a795da9546a3ac4bae76bRuchi Kandoi "max_size = %u, cur_size = %u, flags = 0x%X", __func__, 443525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status, 444525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.protocol, eventData->ndef_detect.max_size, 445525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.cur_size, eventData->ndef_detect.flags); 446525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 447525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doCheckNdefResult(status, 448525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.max_size, eventData->ndef_detect.cur_size, 449525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.flags); 450525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 451525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 452525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DATA_EVT: // Data message received (for non-NDEF reads) 4535f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DATA_EVT: status = 0x%X, len = %d", __func__, eventData->status, eventData->data.len); 454b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen nativeNfcTag_doTransceiveStatus(eventData->status, eventData->data.p_data, eventData->data.len); 455525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 456a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu case NFA_RW_INTF_ERROR_EVT: 4575f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFC_RW_INTF_ERROR_EVT", __func__); 458a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nativeNfcTag_notifyRfTimeout(); 459b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen nativeNfcTag_doReadCompleted (NFA_STATUS_TIMEOUT); 460a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu break; 461525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SELECT_CPLT_EVT: // Select completed 462525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->status; 4635f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_SELECT_CPLT_EVT: status = %d", __func__, status); 464525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 465525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 4662dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: NFA_SELECT_CPLT_EVT error: status = %d", __func__, status); 467525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 468525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 469525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 470525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_READ_CPLT_EVT: // NDEF-read or tag-specific-read completed 4715f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_READ_CPLT_EVT: status = 0x%X", __func__, eventData->status); 472525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doReadCompleted (eventData->status); 473525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 474525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 475525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 476525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_WRITE_CPLT_EVT: // Write completed 4775f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_WRITE_CPLT_EVT: status = %d", __func__, eventData->status); 478525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doWriteStatus (eventData->status == NFA_STATUS_OK); 479525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 480525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 481525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SET_TAG_RO_EVT: // Tag set as Read only 4825f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_SET_TAG_RO_EVT: status = %d", __func__, eventData->status); 483525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doMakeReadonlyResult(eventData->status); 484525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 485525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 486525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_NDEF_WRITE_START_EVT: // NDEF write started 4875f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_CE_NDEF_WRITE_START_EVT: status: %d", __func__, eventData->status); 488525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 489525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->status != NFA_STATUS_OK) 4902dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: NFA_CE_NDEF_WRITE_START_EVT error: status = %d", __func__, eventData->status); 491525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 492525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 493525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_NDEF_WRITE_CPLT_EVT: // NDEF write completed 4945f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: FA_CE_NDEF_WRITE_CPLT_EVT: len = %u", __func__, eventData->ndef_write_cplt.len); 495525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 496525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 497525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_LLCP_ACTIVATED_EVT: // LLCP link is activated 4985f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_LLCP_ACTIVATED_EVT: is_initiator: %d remote_wks: %d, remote_lsc: %d, remote_link_miu: %d, local_link_miu: %d", 4992dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi __func__, 500525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.is_initiator, 501525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_wks, 502525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_lsc, 503525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_link_miu, 504525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.local_link_miu); 505525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 506525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().llcpActivatedHandler (getNative(0, 0), eventData->llcp_activated); 507525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 508525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 509525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_LLCP_DEACTIVATED_EVT: // LLCP link is deactivated 5105f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_LLCP_DEACTIVATED_EVT", __func__); 511525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().llcpDeactivatedHandler (getNative(0, 0), eventData->llcp_deactivated); 512525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 51357a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen case NFA_LLCP_FIRST_PACKET_RECEIVED_EVT: // Received first packet over llcp 5145f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_LLCP_FIRST_PACKET_RECEIVED_EVT", __func__); 51557a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen PeerToPeer::getInstance().llcpFirstPacketHandler (getNative(0, 0)); 51657a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen break; 517525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_PRESENCE_CHECK_EVT: 5185f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_PRESENCE_CHECK_EVT", __func__); 519525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doPresenceCheckResult (eventData->status); 520525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 521525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_FORMAT_CPLT_EVT: 5225f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_FORMAT_CPLT_EVT: status=0x%X", __func__, eventData->status); 523525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_formatStatus (eventData->status == NFA_STATUS_OK); 524525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 525525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 526525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_I93_CMD_CPLT_EVT: 5275f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_I93_CMD_CPLT_EVT: status=0x%X", __func__, eventData->status); 528525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 529525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 530525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_UICC_LISTEN_CONFIGURED_EVT : 5315f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_CE_UICC_LISTEN_CONFIGURED_EVT : status=0x%X", __func__, eventData->status); 532525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 533525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 534525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SET_P2P_LISTEN_TECH_EVT: 5355f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_SET_P2P_LISTEN_TECH_EVT", __func__); 536525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().connectionEventHandler (connEvent, eventData); 537525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 538525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 539525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project default: 5405f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: unknown event ????", __func__); 541525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 542525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 543525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 544525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 545525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 546525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 547525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 548525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_initNativeStruc 549525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 550525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Initialize variables. 551525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 552525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 553525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 554525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 555525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 556525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 557525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jboolean nfcManager_initNativeStruc (JNIEnv* e, jobject o) 558525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 5595f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter", __func__); 560525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5612534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nfc_jni_native_data* nat = (nfc_jni_native_data*)malloc(sizeof(struct nfc_jni_native_data)); 562525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nat == NULL) 563525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 5645f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail allocate native data", __func__); 565525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 566525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 567525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 568525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project memset (nat, 0, sizeof(*nat)); 5692534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->GetJavaVM(&(nat->vm)); 5702534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nat->env_version = e->GetVersion(); 5712534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nat->manager = e->NewGlobalRef(o); 572525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5732534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> cls(e, e->GetObjectClass(o)); 574fb18ffb259fe8f40e81516842497735a7c0b6a8cAndres Morales jfieldID f = e->GetFieldID(cls.get(), "mNative", "J"); 575fb18ffb259fe8f40e81516842497735a7c0b6a8cAndres Morales e->SetLongField(o, f, (jlong)nat); 576525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 577525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Initialize native cached references */ 5782534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyNdefMessageListeners = e->GetMethodID(cls.get(), 579525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyNdefMessageListeners", "(Lcom/android/nfc/dhimpl/NativeNfcTag;)V"); 5802534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyLlcpLinkActivation = e->GetMethodID(cls.get(), 581525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyLlcpLinkActivation", "(Lcom/android/nfc/dhimpl/NativeP2pDevice;)V"); 5822534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyLlcpLinkDeactivated = e->GetMethodID(cls.get(), 583525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyLlcpLinkDeactivated", "(Lcom/android/nfc/dhimpl/NativeP2pDevice;)V"); 58457a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen gCachedNfcManagerNotifyLlcpFirstPacketReceived = e->GetMethodID(cls.get(), 58557a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen "notifyLlcpLinkFirstPacketReceived", "(Lcom/android/nfc/dhimpl/NativeP2pDevice;)V"); 586525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5879f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen gCachedNfcManagerNotifyHostEmuActivated = e->GetMethodID(cls.get(), 588ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito "notifyHostEmuActivated", "(I)V"); 5899f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 5909f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen gCachedNfcManagerNotifyHostEmuData = e->GetMethodID(cls.get(), 591ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito "notifyHostEmuData", "(I[B)V"); 5929f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 5939f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen gCachedNfcManagerNotifyHostEmuDeactivated = e->GetMethodID(cls.get(), 594ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito "notifyHostEmuDeactivated", "(I)V"); 5959f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 596c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen gCachedNfcManagerNotifyRfFieldActivated = e->GetMethodID(cls.get(), 597c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen "notifyRfFieldActivated", "()V"); 598c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen gCachedNfcManagerNotifyRfFieldDeactivated = e->GetMethodID(cls.get(), 599c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen "notifyRfFieldDeactivated", "()V"); 600c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen 6012534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (nfc_jni_cache_object(e, gNativeNfcTagClassName, &(nat->cached_NfcTag)) == -1) 602525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 6035f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail cache NativeNfcTag", __func__); 604525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 605525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 606525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 6072534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (nfc_jni_cache_object(e, gNativeP2pDeviceClassName, &(nat->cached_P2pDevice)) == -1) 608525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 6095f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail cache NativeP2pDevice", __func__); 610525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 611525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 612525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 6135f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 614525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 615525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 616525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 617525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 618525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 619525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 620525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfaDeviceManagementCallback 621525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 622525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Receive device management events from stack. 623525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** dmEvent: Device-management event ID. 624525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** eventData: Data associated with event ID. 625525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 626525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 627525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 628525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 6292dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoivoid nfaDeviceManagementCallback (uint8_t dmEvent, tNFA_DM_CBACK_DATA* eventData) 630525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 6315f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter; event=0x%X", __func__, dmEvent); 632525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 633525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project switch (dmEvent) 634525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 635525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_ENABLE_EVT: /* Result of NFA_Enable */ 636525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 637525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 6385f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DM_ENABLE_EVT; status=0x%X", 6392dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi __func__, eventData->status); 640525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = eventData->status == NFA_STATUS_OK; 641525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 642525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.notifyOne (); 643525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 644525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 645525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 646525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_DISABLE_EVT: /* Result of NFA_Disable */ 647525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 648525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 6495f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DM_DISABLE_EVT", __func__); 650525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 651525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 652525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.notifyOne (); 653525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 654525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 655525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 656525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_SET_CONFIG_EVT: //result of NFA_SetConfig 6575f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DM_SET_CONFIG_EVT", __func__); 658525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 659525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 660525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.notifyOne(); 661525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 662525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 663525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 664525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_GET_CONFIG_EVT: /* Result of NFA_GetConfig */ 6655f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DM_GET_CONFIG_EVT", __func__); 666f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen { 667f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen SyncEventGuard guard (sNfaGetConfigEvent); 668f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen if (eventData->status == NFA_STATUS_OK && 669f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen eventData->get_config.tlv_size <= sizeof(sConfig)) 670f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen { 671f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen sCurrentConfigLen = eventData->get_config.tlv_size; 672f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen memcpy(sConfig, eventData->get_config.param_tlvs, eventData->get_config.tlv_size); 673f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen } 674f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen else 675f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen { 6762dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: NFA_DM_GET_CONFIG failed", __func__); 677f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen sCurrentConfigLen = 0; 678f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen } 679f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen sNfaGetConfigEvent.notifyOne(); 680f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen } 681525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 682525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 683525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_RF_FIELD_EVT: 6845f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: NFA_DM_RF_FIELD_EVT; status=0x%X; field status=%u", __func__, 685525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->rf_field.status, eventData->rf_field.rf_field_status); 686c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen if (!sP2pActive && eventData->rf_field.status == NFA_STATUS_OK) 687c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen { 688c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen struct nfc_jni_native_data *nat = getNative(NULL, NULL); 689c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen JNIEnv* e = NULL; 690c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen ScopedAttach attach(nat->vm, &e); 691c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen if (e == NULL) 692c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen { 6935f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("jni env is null"); 694c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen return; 695c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen } 696c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen if (eventData->rf_field.rf_field_status == NFA_DM_RF_FIELD_ON) 697c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen e->CallVoidMethod (nat->manager, android::gCachedNfcManagerNotifyRfFieldActivated); 698c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen else 699c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen e->CallVoidMethod (nat->manager, android::gCachedNfcManagerNotifyRfFieldDeactivated); 700c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen } 701525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 702525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 703525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_NFCC_TRANSPORT_ERR_EVT: 704525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_NFCC_TIMEOUT_EVT: 705525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 706525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (dmEvent == NFA_DM_NFCC_TIMEOUT_EVT) 7075f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: NFA_DM_NFCC_TIMEOUT_EVT; abort", __func__); 708a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu else if (dmEvent == NFA_DM_NFCC_TRANSPORT_ERR_EVT) 7095f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: NFA_DM_NFCC_TRANSPORT_ERR_EVT; abort", __func__); 710525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 711525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 712525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 713525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sAbortConnlessWait = true; 714525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeLlcpConnectionlessSocket_abortWait(); 715525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 7165f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: aborting sNfaEnableDisablePollingEvent", __func__); 717525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 718525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne(); 719525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 720525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 7215f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: aborting sNfaEnableEvent", __func__); 722525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 723525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.notifyOne(); 724525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 725525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 7265f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: aborting sNfaDisableEvent", __func__); 727525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 728525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.notifyOne(); 729525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 730525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sDiscoveryEnabled = false; 7310799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sPollingEnabled = false; 732525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().abort (); 733525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 734525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!sIsDisabling && sIsNfaEnabled) 735525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 7368605731e8f17d1fde003084811f13f52539eb20cJizhou Liao EXTNS_Close (); 737525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Disable(FALSE); 738525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = true; 739525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 740525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 741525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 742525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 743525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 744525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 745525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().initialize (PowerSwitch::UNKNOWN_LEVEL); 7465f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: crash NFC service", __func__); 747a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ////////////////////////////////////////////// 748a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu //crash the NFC service process so it can restart automatically 749a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu abort (); 750a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ////////////////////////////////////////////// 751525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 752525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 753525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 754525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_PWR_MODE_CHANGE_EVT: 755525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().deviceManagementCallback (dmEvent, eventData); 756525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 757525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 7583a894dda035a331860f0f23e93528527493a07a3Love Khanna case NFA_DM_SET_POWER_SUB_STATE_EVT: 7593a894dda035a331860f0f23e93528527493a07a3Love Khanna { 7603a894dda035a331860f0f23e93528527493a07a3Love Khanna ALOGD("%s: NFA_DM_SET_POWER_SUB_STATE_EVT; status=0x%X", 7613a894dda035a331860f0f23e93528527493a07a3Love Khanna __FUNCTION__, eventData->power_sub_state.status); 7623a894dda035a331860f0f23e93528527493a07a3Love Khanna SyncEventGuard guard (sNfaSetPowerSubState); 7633a894dda035a331860f0f23e93528527493a07a3Love Khanna sNfaSetPowerSubState.notifyOne(); 7643a894dda035a331860f0f23e93528527493a07a3Love Khanna } 7653a894dda035a331860f0f23e93528527493a07a3Love Khanna break; 766525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project default: 7675f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: unhandled event", __func__); 768525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 769525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 770525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 771525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 7729f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen/******************************************************************************* 7739f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7749f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Function: nfcManager_sendRawFrame 7759f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7769f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Description: Send a raw frame. 7779f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** e: JVM environment. 7789f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** o: Java object. 7799f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7809f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Returns: True if ok. 7819f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7829f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen*******************************************************************************/ 783c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenenstatic jboolean nfcManager_sendRawFrame (JNIEnv* e, jobject, jbyteArray data) 7849f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen{ 7859f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen ScopedByteArrayRO bytes(e, data); 7869f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen uint8_t* buf = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(&bytes[0])); 7879f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen size_t bufLen = bytes.size(); 7889f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen tNFA_STATUS status = NFA_SendRawFrame (buf, bufLen, 0); 7899f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 7909f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen return (status == NFA_STATUS_OK); 7919f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen} 7929f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 7939f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen/******************************************************************************* 7949f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7959f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Function: nfcManager_routeAid 7969f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7979f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Description: Route an AID to an EE 7989f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** e: JVM environment. 7998ee2015a9c4639d465a390af93df3fdcd983cac8Love Khanna** aid: aid to be added to routing table. 8008ee2015a9c4639d465a390af93df3fdcd983cac8Love Khanna** route: aid route location. i.e. DH/eSE/UICC 8018ee2015a9c4639d465a390af93df3fdcd983cac8Love Khanna** aidInfo: prefix or suffix aid. 8029f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 8038ee2015a9c4639d465a390af93df3fdcd983cac8Love Khanna** Returns: True if aid is accpted by NFA Layer. 8049f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 8059f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen*******************************************************************************/ 8068ee2015a9c4639d465a390af93df3fdcd983cac8Love Khannastatic jboolean nfcManager_routeAid (JNIEnv* e, jobject, jbyteArray aid, jint route, jint aidInfo) 8079f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen{ 8089f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen ScopedByteArrayRO bytes(e, aid); 8099f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen uint8_t* buf = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(&bytes[0])); 8109f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen size_t bufLen = bytes.size(); 8118ee2015a9c4639d465a390af93df3fdcd983cac8Love Khanna return RoutingManager::getInstance().addAidRouting(buf, bufLen, route, aidInfo); 8129f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen} 8139f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 8149f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen/******************************************************************************* 8159f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 8169f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Function: nfcManager_unrouteAid 8179f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 8189f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Description: Remove a AID routing 8199f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** e: JVM environment. 8209f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** o: Java object. 8219f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 8229f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Returns: True if ok. 8239f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 8249f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen*******************************************************************************/ 825c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenenstatic jboolean nfcManager_unrouteAid (JNIEnv* e, jobject, jbyteArray aid) 8269f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen{ 8279f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen ScopedByteArrayRO bytes(e, aid); 8289f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen uint8_t* buf = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(&bytes[0])); 8299f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen size_t bufLen = bytes.size(); 8309f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen bool result = RoutingManager::getInstance().removeAidRouting(buf, bufLen); 8319f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen return result; 8329f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen} 833525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 834525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 835525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 836f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** Function: nfcManager_commitRouting 837f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** 838f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** Description: Sends the AID routing table to the controller 839f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** e: JVM environment. 840f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** o: Java object. 841f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** 842f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** Returns: True if ok. 843f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** 844f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen*******************************************************************************/ 845f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenenstatic jboolean nfcManager_commitRouting (JNIEnv* e, jobject) 846f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen{ 847f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen return RoutingManager::getInstance().commitRouting(); 848f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen} 849f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen 850f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen/******************************************************************************* 851f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** 852ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Function: nfcManager_doRegisterT3tIdentifier 853ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 854ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Description: Registers LF_T3T_IDENTIFIER for NFC-F. 855ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** e: JVM environment. 856ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** o: Java object. 857ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** t3tIdentifier: LF_T3T_IDENTIFIER value (10 or 18 bytes) 858ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 859ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Returns: Handle retrieve from RoutingManager. 860ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 861ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito*******************************************************************************/ 862ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Itostatic jint nfcManager_doRegisterT3tIdentifier(JNIEnv* e, jobject, jbyteArray t3tIdentifier) 863ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito{ 8645f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter", __func__); 865ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 866ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito ScopedByteArrayRO bytes(e, t3tIdentifier); 867ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito uint8_t* buf = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(&bytes[0])); 868ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito size_t bufLen = bytes.size(); 869ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito int handle = RoutingManager::getInstance().registerT3tIdentifier(buf, bufLen); 870ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 8715f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: handle=%d", __func__, handle); 8725f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 873ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 874ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito return handle; 875ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito} 876ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 877ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito/******************************************************************************* 878ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 879ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Function: nfcManager_doDeregisterT3tIdentifier 880ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 881ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Description: Deregisters LF_T3T_IDENTIFIER for NFC-F. 882ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** e: JVM environment. 883ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** o: Java object. 884ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** handle: Handle retrieve from libnfc-nci. 885ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 886ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Returns: None 887ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 888ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito*******************************************************************************/ 889ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Itostatic void nfcManager_doDeregisterT3tIdentifier(JNIEnv*, jobject, jint handle) 890ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito{ 8915f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter; handle=%d", __func__, handle); 892ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 893ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito RoutingManager::getInstance().deregisterT3tIdentifier(handle); 894ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 8955f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 896ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito} 897ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 898ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito/******************************************************************************* 899ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 900ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Function: nfcManager_getLfT3tMax 901ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 902ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Description: Returns LF_T3T_MAX value. 903ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** e: JVM environment. 904ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** o: Java object. 905ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 906ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** Returns: LF_T3T_MAX value. 907ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 908ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito*******************************************************************************/ 909ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Itostatic jint nfcManager_getLfT3tMax(JNIEnv*, jobject) 910ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito{ 9115f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter", __func__); 9125f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("LF_T3T_MAX=%d", sLfT3tMax); 9135f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 914ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 915ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito return sLfT3tMax; 916ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito} 917ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 918ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito/******************************************************************************* 919ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito** 920525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doInitialize 921525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 922525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Turn on NFC. 923525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 924525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 925525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 926525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 927525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 928525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 929304a6342ee7e5620d3b50d988755c035f1686dc2Martijn Coenenstatic jboolean nfcManager_doInitialize (JNIEnv* e, jobject o) 930525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 9315f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter; ver=%s nfa=%s NCI_VERSION=0x%02X", 9322dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi __func__, nfca_version_string, nfa_version_string, NCI_VERSION); 933525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_OK; 934525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 935d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales PowerSwitch & powerSwitch = PowerSwitch::getInstance (); 936d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales 937525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 938525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 9395f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: already enabled", __func__); 940525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 941525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 942525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 943d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales powerSwitch.initialize (PowerSwitch::FULL_POWER); 944525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 945525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 946525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project unsigned long num = 0; 947525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 948525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 949525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Initialize(); //start GKI, NCI task, NFC task 950525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 951525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 952525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 953525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tHAL_NFC_ENTRY* halFuncEntries = theInstance.GetHalEntryFuncs (); 954525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 955525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Init (halFuncEntries); 956525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 957525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_Enable (nfaDeviceManagementCallback, nfaConnectionCallback); 958525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 959525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 960525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project num = initializeGlobalAppLogLevel (); 961525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project CE_SetTraceLevel (num); 962525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project LLCP_SetTraceLevel (num); 963525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFC_SetTraceLevel (num); 964525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project RW_SetTraceLevel (num); 965525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_SetTraceLevel (num); 966525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_P2pSetTraceLevel (num); 967525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.wait(); //wait for NFA command to finish 968525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 9698605731e8f17d1fde003084811f13f52539eb20cJizhou Liao EXTNS_Init (nfaDeviceManagementCallback, nfaConnectionCallback); 970525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 971525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 972525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 973525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 974525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //sIsNfaEnabled indicates whether stack started successfully 975525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 976525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 9779f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen RoutingManager::getInstance().initialize(getNative(e, o)); 978525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_registerNdefTypeHandler (); 979525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().initialize (getNative(e, o)); 980525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().initialize (); 981525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().handleNfcOnOff (true); 982525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 983525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ///////////////////////////////////////////////////////////////////////////////// 984525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Add extra configuration here (work-arounds, etc.) 985525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 986f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi if (gIsDtaEnabled == true) 987f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi { 988f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi uint8_t configData = 0; 989f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi configData = 0x01; /* Poll NFC-DEP : Highest Available Bit Rates */ 990f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi NFA_SetConfig(NFC_PMID_BITR_NFC_DEP, sizeof(uint8_t), &configData); 991f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi configData = 0x0B; /* Listen NFC-DEP : Waiting Time */ 992f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi NFA_SetConfig(NFC_PMID_WT, sizeof(uint8_t), &configData); 993f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi configData = 0x0F; /* Specific Parameters for NFC-DEP RF Interface */ 994f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi NFA_SetConfig(NFC_PMID_NFC_DEP_OP, sizeof(uint8_t), &configData); 995f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi } 996f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi 997525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 998525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 999525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if ( nat ) 1000525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1001525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_POLLING_TECH_MASK, &num, sizeof(num))) 1002525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = num; 1003525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1004525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = DEFAULT_TECH_MASK; 10055f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: tag polling tech mask=0x%X", __func__, nat->tech_mask); 1006525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1007525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1008525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // if this value exists, set polling interval. 1009525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_NFA_DM_DISC_DURATION_POLL, &num, sizeof(num))) 1010c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen nat->discovery_duration = num; 1011c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen else 1012c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen nat->discovery_duration = DEFAULT_DISCOVERY_DURATION; 1013c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen 1014c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen NFA_SetRfDiscoveryDuration(nat->discovery_duration); 1015525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1016ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito // get LF_T3T_MAX 1017ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito { 1018ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito SyncEventGuard guard (sNfaGetConfigEvent); 1019ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito tNFA_PMID configParam[1] = {NCI_PARAM_ID_LF_T3T_MAX}; 1020ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito stat = NFA_GetConfig(1, configParam); 1021ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito if (stat == NFA_STATUS_OK) 1022ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito { 1023ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito sNfaGetConfigEvent.wait (); 1024ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito if (sCurrentConfigLen >= 4 || sConfig[1] == NCI_PARAM_ID_LF_T3T_MAX) { 10255f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: lfT3tMax=%d", __func__, sConfig[3]); 1026ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito sLfT3tMax = sConfig[3]; 1027ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito } 1028ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito } 1029ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito } 1030ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 10311227736a352797f6bebe7f4e098dab6a15f3164cLove Khanna prevScreenState = NFA_SCREEN_STATE_OFF_LOCKED; 10321227736a352797f6bebe7f4e098dab6a15f3164cLove Khanna 1033525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Do custom NFCA startup configuration. 1034525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project doStartupConfig(); 1035525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 1036525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1037525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1038525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 10395f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail nfa enable; error=0x%X", __func__, stat); 1040525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1041525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 10428605731e8f17d1fde003084811f13f52539eb20cJizhou Liao { 10438605731e8f17d1fde003084811f13f52539eb20cJizhou Liao EXTNS_Close (); 1044525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_Disable (FALSE /* ungraceful */); 10458605731e8f17d1fde003084811f13f52539eb20cJizhou Liao } 1046525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1047525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Finalize(); 1048525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1049525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1050525c260303268a83da4c3413b953d13c9084e834The Android Open Source ProjectTheEnd: 1051525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 1052525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::LOW_POWER); 10535f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 1054525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sIsNfaEnabled ? JNI_TRUE : JNI_FALSE; 1055525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1056525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1057f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoistatic void nfcManager_doEnableDtaMode (JNIEnv*, jobject) 1058f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi{ 1059f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi gIsDtaEnabled = true; 1060f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi} 1061525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1062f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoistatic void nfcManager_doDisableDtaMode(JNIEnv*, jobject) 1063f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi{ 1064f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi gIsDtaEnabled = false; 1065f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi} 1066525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1067525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1068525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_enableDiscovery 1069525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1070525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Start polling and listening for devices. 1071525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1072525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1073d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales** technologies_mask: the bitmask of technologies for which to enable discovery 1074d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales** enable_lptd: whether to enable low power polling (default: false) 1075525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1076525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1077525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1078525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1079d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Moralesstatic void nfcManager_enableDiscovery (JNIEnv* e, jobject o, jint technologies_mask, \ 108031b0f4653686119d74876cae5d637c5baf52b935Andres Morales jboolean enable_lptd, jboolean reader_mode, jboolean enable_host_routing, jboolean enable_p2p, 10810799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales jboolean restart) 1082525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1083525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK tech_mask = DEFAULT_TECH_MASK; 1084525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 1085525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 10860799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (technologies_mask == -1 && nat) 1087525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tech_mask = (tNFA_TECHNOLOGY_MASK)nat->tech_mask; 10880799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else if (technologies_mask != -1) 1089d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales tech_mask = (tNFA_TECHNOLOGY_MASK) technologies_mask; 10905f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter; tech_mask = %02x", __func__, tech_mask); 1091525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 10920799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (sDiscoveryEnabled && !restart) 1093525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 10945f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: already discovering", __func__); 1095525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return; 1096525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1097525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1098525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::FULL_POWER); 1099525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sRfEnabled) { 1101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Stop RF discovery to reconfigure 1102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery(false); 1103525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11050799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales // Check polling configuration 11060799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (tech_mask != 0) 1107a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales { 11080799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales stopPolling_rfDiscoveryDisabled(); 11090799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales enableDisableLptd(enable_lptd); 11100799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales startPolling_rfDiscoveryDisabled(tech_mask); 11110799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 11120799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales // Start P2P listening if tag polling was enabled 11130799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (sPollingEnabled) 1114a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales { 11155f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: Enable p2pListening", __func__); 111631b0f4653686119d74876cae5d637c5baf52b935Andres Morales 111731b0f4653686119d74876cae5d637c5baf52b935Andres Morales if (enable_p2p && !sP2pEnabled) { 111831b0f4653686119d74876cae5d637c5baf52b935Andres Morales sP2pEnabled = true; 111931b0f4653686119d74876cae5d637c5baf52b935Andres Morales PeerToPeer::getInstance().enableP2pListening (true); 112031b0f4653686119d74876cae5d637c5baf52b935Andres Morales NFA_ResumeP2p(); 112131b0f4653686119d74876cae5d637c5baf52b935Andres Morales } else if (!enable_p2p && sP2pEnabled) { 112231b0f4653686119d74876cae5d637c5baf52b935Andres Morales sP2pEnabled = false; 112331b0f4653686119d74876cae5d637c5baf52b935Andres Morales PeerToPeer::getInstance().enableP2pListening (false); 112431b0f4653686119d74876cae5d637c5baf52b935Andres Morales NFA_PauseP2p(); 112531b0f4653686119d74876cae5d637c5baf52b935Andres Morales } 11260799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 11270799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (reader_mode && !sReaderModeEnabled) 11280799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 11290799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sReaderModeEnabled = true; 11300799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NFA_DisableListening(); 11310799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NFA_SetRfDiscoveryDuration(READER_MODE_DISCOVERY_DURATION); 11320799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 113331b0f4653686119d74876cae5d637c5baf52b935Andres Morales else if (!reader_mode && sReaderModeEnabled) 11340799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 11350799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales struct nfc_jni_native_data *nat = getNative(e, o); 11360799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sReaderModeEnabled = false; 11370799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NFA_EnableListening(); 11380799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NFA_SetRfDiscoveryDuration(nat->discovery_duration); 11390799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1140a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales } 1141a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales } 11420799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else 1143525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 11440799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales // No technologies configured, stop polling 11450799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales stopPolling_rfDiscoveryDisabled(); 1146525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1147525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11480799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales // Check listen configuration 11490799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (enable_host_routing) 11500799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 11510799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales RoutingManager::getInstance().enableRoutingToHost(); 11520799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales RoutingManager::getInstance().commitRouting(); 11530799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 11540799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else 11550799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 11560799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales RoutingManager::getInstance().disableRoutingToHost(); 11570799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales RoutingManager::getInstance().commitRouting(); 11580799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1159525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Actually start discovery. 1160525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (true); 11610799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sDiscoveryEnabled = true; 1162a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales 1163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setModeOn (PowerSwitch::DISCOVERY); 1164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11655f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 1166525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1167525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1170525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1171525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_disableDiscovery 1172525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1173525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Stop polling and listening for devices. 1174525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1175525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1176525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1177525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1178525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1179525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 11800799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesvoid nfcManager_disableDiscovery (JNIEnv* e, jobject o) 1181525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1182525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_OK; 11835f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter;", __func__); 1184525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1185525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project pn544InteropAbortNow (); 1186525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sDiscoveryEnabled == false) 1187525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 11885f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: already disabled", __func__); 1189525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 1190525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1191525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1192525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Stop RF Discovery. 1193525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (false); 1194525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11950799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (sPollingEnabled) 11960799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales status = stopPolling_rfDiscoveryDisabled(); 1197525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1198525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().enableP2pListening (false); 1199e6b10cf6f5c7bb363890428e2c52505c76b13b8dAndres Morales sP2pEnabled = false; 12000799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sDiscoveryEnabled = false; 1201525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if nothing is active after this, then tell the controller to power down 1202525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (! PowerSwitch::getInstance ().setModeOff (PowerSwitch::DISCOVERY)) 1203525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::LOW_POWER); 1204525c260303268a83da4c3413b953d13c9084e834The Android Open Source ProjectTheEnd: 12055f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 1206525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1207525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1208d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenenvoid enableDisableLptd (bool enable) 1209d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen{ 1210d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen // This method is *NOT* thread-safe. Right now 1211d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen // it is only called from the same thread so it's 1212d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen // not an issue. 1213d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen static bool sCheckedLptd = false; 1214d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen static bool sHasLptd = false; 1215d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen 1216d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen tNFA_STATUS stat = NFA_STATUS_OK; 1217d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (!sCheckedLptd) 1218d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen { 1219d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sCheckedLptd = true; 1220d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen SyncEventGuard guard (sNfaGetConfigEvent); 1221d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen tNFA_PMID configParam[1] = {NCI_PARAM_ID_TAGSNIFF_CFG}; 1222d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen stat = NFA_GetConfig(1, configParam); 1223d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (stat != NFA_STATUS_OK) 1224d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen { 12252dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: NFA_GetConfig failed", __func__); 1226d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen return; 1227d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen } 1228d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sNfaGetConfigEvent.wait (); 1229d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (sCurrentConfigLen < 4 || sConfig[1] != NCI_PARAM_ID_TAGSNIFF_CFG) { 12302dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: Config TLV length %d returned is too short", __func__, 1231d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sCurrentConfigLen); 1232d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen return; 1233d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen } 12344181521d0157554a59e32bf06f80bfbc6288f01dMartijn Coenen if (sConfig[3] == 0) { 12352dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: LPTD is disabled, not enabling in current config", __func__); 12364181521d0157554a59e32bf06f80bfbc6288f01dMartijn Coenen return; 12374181521d0157554a59e32bf06f80bfbc6288f01dMartijn Coenen } 1238d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sHasLptd = true; 1239d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen } 1240d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen // Bail if we checked and didn't find any LPTD config before 1241d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (!sHasLptd) return; 12422dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi uint8_t enable_byte = enable ? 0x01 : 0x00; 1243d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen 1244d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen SyncEventGuard guard(sNfaSetConfigEvent); 1245d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen 124633aeb7c13f8fd9d9bd301f31680836b8ec912d51Martijn Coenen stat = NFA_SetConfig(NCI_PARAM_ID_TAGSNIFF_CFG, 1, &enable_byte); 1247d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (stat == NFA_STATUS_OK) 1248d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sNfaSetConfigEvent.wait (); 1249d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen else 12502dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: Could not configure LPTD feature", __func__); 1251d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen return; 1252d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen} 1253d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen 1254525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1255525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1256525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1257525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpServiceSocket 1258525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1259525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a new LLCP server socket. 1260525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1261525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1262525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 1263525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** sn: Service name 1264525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** miu: Maximum information unit. 1265525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** rw: Receive window size. 1266525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** linearBufferLength: Max buffer size. 1267525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1268525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpServiceSocket Java object. 1269525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1270525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 12712534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpServiceSocket (JNIEnv* e, jobject, jint nSap, jstring sn, jint miu, jint rw, jint linearBufferLength) 1272525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1273525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::tJNI_HANDLE jniHandle = PeerToPeer::getInstance().getNewJniHandle (); 1274525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 12752534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedUtfChars serviceName(e, sn); 12762534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 12775f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter: sap=%i; name=%s; miu=%i; rw=%i; buffLen=%i", __func__, nSap, serviceName.c_str(), miu, rw, linearBufferLength); 1278525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1279525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Create new NativeLlcpServiceSocket object */ 12802534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jobject serviceSocket = NULL; 1281b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen if (nfc_jni_cache_object_local(e, gNativeLlcpServiceSocketClassName, &(serviceSocket)) == -1) 1282525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 12835f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: Llcp socket object creation error", __func__); 1284525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1285525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1286525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1287525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Get NativeLlcpServiceSocket class object */ 12882534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> clsNativeLlcpServiceSocket(e, e->GetObjectClass(serviceSocket)); 1289525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e->ExceptionCheck()) 1290525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1291525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->ExceptionClear(); 12922dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: Llcp Socket get object class error", __func__); 1293525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1294525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1295525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 12962534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (!PeerToPeer::getInstance().registerServer (jniHandle, serviceName.c_str())) 1297525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 12982dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: RegisterServer error", __func__); 1299525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1300525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1301525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 13022534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f; 13032534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 1304525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket handle to be the same as the NfaHandle*/ 13052534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mHandle", "I"); 13062534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f, (jint) jniHandle); 13075f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: socket Handle = 0x%X", __func__, jniHandle); 1308525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1309525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket linear buffer length */ 13102534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalLinearBufferLength", "I"); 13112534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)linearBufferLength); 13125f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: buffer length = %d", __func__, linearBufferLength); 1313525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1314525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket MIU */ 13152534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalMiu", "I"); 13162534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)miu); 13175f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: MIU = %d", __func__, miu); 1318525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1319525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket RW */ 13202534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalRw", "I"); 13212534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)rw); 13225f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: RW = %d", __func__, rw); 1323525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1324525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sLastError = 0; 13255f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 1326525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return serviceSocket; 1327525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1328525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1329525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1330525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1331525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1332525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doGetLastError 1333525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1334525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get the last error code. 1335525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1336525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1337525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1338525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Last error code. 1339525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1340525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 13412534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jint nfcManager_doGetLastError(JNIEnv*, jobject) 1342525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 13435f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: last error=%i", __func__, sLastError); 1344525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sLastError; 1345525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1346525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1347525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1348525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1349525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1350525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDeinitialize 1351525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1352525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Turn off NFC. 1353525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1354525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1355525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1356525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 1357525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1358525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 13592534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doDeinitialize (JNIEnv*, jobject) 1360525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 13615f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter", __func__); 1362525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1363525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = true; 13648605731e8f17d1fde003084811f13f52539eb20cJizhou Liao 1365525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project pn544InteropAbortNow (); 1366f3e09e66825850178879e76ccc7708509dbbc5b6Martijn Coenen RoutingManager::getInstance().onNfccShutdown(); 1367a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu PowerSwitch::getInstance ().initialize (PowerSwitch::UNKNOWN_LEVEL); 1368525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1369525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 1370525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1371525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 13728605731e8f17d1fde003084811f13f52539eb20cJizhou Liao EXTNS_Close (); 1373525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_Disable (TRUE /* graceful */); 1374525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1375525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 13765f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: wait for completion", __func__); 1377525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.wait (); //wait for NFA command to finish 1378525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance ().handleNfcOnOff (false); 1379525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1380525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1381525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 13825f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail disable; error=0x%X", __func__, stat); 1383525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1384525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1385525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 1386525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 1387525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sAbortConnlessWait = true; 1388525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeLlcpConnectionlessSocket_abortWait(); 1389525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 1390525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sDiscoveryEnabled = false; 13910799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sPollingEnabled = false; 1392525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 13932decd22cff017ed79d378356002aff83830f4919Jizhou Liao sP2pEnabled = false; 13948d154680537afa5242edeb98c8f414d6186558cfMartijn Coenen gActivated = false; 1395ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito sLfT3tMax = 0; 1396525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1397525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1398525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //unblock NFA_EnablePolling() and NFA_DisablePolling() 1399525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 1400525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 1401525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1402525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1403525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 1404525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Finalize(); 1405525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 14065f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 1407525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1408525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1409525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1410525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1411525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1412525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1413525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpSocket 1414525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1415525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a LLCP connection-oriented socket. 1416525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1417525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1418525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 1419525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** miu: Maximum information unit. 1420525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** rw: Receive window size. 1421525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** linearBufferLength: Max buffer size. 1422525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1423525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpSocket Java object. 1424525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1425525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14262534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpSocket (JNIEnv* e, jobject, jint nSap, jint miu, jint rw, jint linearBufferLength) 1427525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 14285f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter; sap=%d; miu=%d; rw=%d; buffer len=%d", __func__, nSap, miu, rw, linearBufferLength); 1429525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 14302534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes PeerToPeer::tJNI_HANDLE jniHandle = PeerToPeer::getInstance().getNewJniHandle (); 1431a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu PeerToPeer::getInstance().createClient (jniHandle, miu, rw); 1432525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1433525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Create new NativeLlcpSocket object */ 14342534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jobject clientSocket = NULL; 1435525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nfc_jni_cache_object_local(e, gNativeLlcpSocketClassName, &(clientSocket)) == -1) 1436525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 14375f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail Llcp socket creation", __func__); 14382534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes return clientSocket; 1439525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1440525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1441525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Get NativeConnectionless class object */ 14422534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> clsNativeLlcpSocket(e, e->GetObjectClass(clientSocket)); 1443525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e->ExceptionCheck()) 1444525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1445525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->ExceptionClear(); 14465f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail get class object", __func__); 14472534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes return clientSocket; 1448525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1449525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 14502534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f; 14512534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 1452525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket SAP */ 14532534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mSap", "I"); 1454525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) nSap); 1455525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1456525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket handle */ 14572534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mHandle", "I"); 1458525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) jniHandle); 1459525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1460525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket MIU */ 14612534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mLocalMiu", "I"); 1462525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) miu); 1463525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1464525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket RW */ 14652534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mLocalRw", "I"); 1466525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) rw); 1467525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 14685f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 1469525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return clientSocket; 1470525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1471525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1472525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1473525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1474525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1475525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpConnectionlessSocket 1476525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1477525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a connection-less socket. 1478525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1479525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1480525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 1481525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** sn: Service name. 1482525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1483525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpConnectionlessSocket Java object. 1484525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1485525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14862534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpConnectionlessSocket (JNIEnv *, jobject, jint nSap, jstring /*sn*/) 1487525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 14885f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: nSap=0x%X", __func__, nSap); 1489525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1490525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1491525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1492525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1493525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1494525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: isPeerToPeer 1495525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1496525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Whether the activation data indicates the peer supports NFC-DEP. 1497525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** activated: Activation data. 1498525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1499525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if the peer supports NFC-DEP. 1500525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1501525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1502525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isPeerToPeer (tNFA_ACTIVATED& activated) 1503525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1504525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return activated.activate_ntf.protocol == NFA_PROTOCOL_NFC_DEP; 1505525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1506525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1507525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1508525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1509525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: isListenMode 1510525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1511525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Indicates whether the activation data indicates it is 1512525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** listen mode. 1513525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1514525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if this listen mode. 1515525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1516525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1517525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isListenMode(tNFA_ACTIVATED& activated) 1518525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1519525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return ((NFC_DISCOVERY_TYPE_LISTEN_A == activated.activate_ntf.rf_tech_param.mode) 1520525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_B == activated.activate_ntf.rf_tech_param.mode) 1521525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_F == activated.activate_ntf.rf_tech_param.mode) 1522525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE == activated.activate_ntf.rf_tech_param.mode) 1523525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE == activated.activate_ntf.rf_tech_param.mode) 1524525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_ISO15693 == activated.activate_ntf.rf_tech_param.mode) 1525525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_B_PRIME == activated.activate_ntf.rf_tech_param.mode)); 1526525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1527525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1528525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1529525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1530525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCheckLlcp 1531525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1532525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1533525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1534525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True 1535525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1536525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 15372534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doCheckLlcp(JNIEnv*, jobject) 1538525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 15395f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s", __func__); 1540525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1541525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1542525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1543525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1544525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1545525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1546525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doActivateLlcp 1547525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1548525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1549525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1550525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True 1551525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1552525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 15532534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doActivateLlcp(JNIEnv*, jobject) 1554525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 15555f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s", __func__); 1556525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1557525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1558525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1559525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1560525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1561525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1562525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doAbort 1563525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1564525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1565525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1566525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1567525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1568525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1569729dc345dae23c1990cf5377a3948584cff2171aAndre Eisenbachstatic void nfcManager_doAbort(JNIEnv* e, jobject, jstring msg) 1570525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1571729dc345dae23c1990cf5377a3948584cff2171aAndre Eisenbach ScopedUtfChars message = {e, msg}; 1572729dc345dae23c1990cf5377a3948584cff2171aAndre Eisenbach e->FatalError(message.c_str()); 1573729dc345dae23c1990cf5377a3948584cff2171aAndre Eisenbach abort(); // <-- Unreachable 1574525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1575525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1576525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1577525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1578525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1579525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDownload 1580525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1581a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu** Description: Download firmware patch files. Do not turn on NFC. 1582525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1583a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu** Returns: True if ok. 1584525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1585525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 15862534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doDownload(JNIEnv*, jobject) 1587525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 15885f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter", __func__); 1589a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 1590a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu 1591a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu theInstance.Initialize(); //start GKI, NCI task, NFC task 1592a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu theInstance.DownloadFirmware (); 1593a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu theInstance.Finalize(); 15945f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 1595525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1596525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1597525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1598525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1599525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1600525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1601525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doResetTimeouts 1602525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1603525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1604525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1605525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1606525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1607525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 16082534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doResetTimeouts(JNIEnv*, jobject) 1609525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 16105f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s", __func__); 1611a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcTag::getInstance().resetAllTransceiveTimeouts (); 1612525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1613525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1614525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1615525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1616525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1617525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetTimeout 1618525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1619525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set timeout value. 1620525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1621525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1622a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu** tech: technology ID. 1623525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** timeout: Timeout value. 1624525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1625525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 1626525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1627525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1628a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chustatic bool nfcManager_doSetTimeout(JNIEnv*, jobject, jint tech, jint timeout) 1629525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1630525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (timeout <= 0) 1631525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 16322dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi ALOGE("%s: Timeout must be positive.",__func__); 1633525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return false; 1634525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 16355f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: tech=%d, timeout=%d", __func__, tech, timeout); 1636a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcTag::getInstance().setTransceiveTimeout (tech, timeout); 1637525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return true; 1638525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1639525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1640525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1641525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1642525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1643525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doGetTimeout 1644525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1645525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get timeout value. 1646525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1647525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1648a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu** tech: technology ID. 1649525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1650525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Timeout value. 1651525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1652525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1653a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chustatic jint nfcManager_doGetTimeout(JNIEnv*, jobject, jint tech) 1654525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1655a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu int timeout = NfcTag::getInstance().getTransceiveTimeout (tech); 16565f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: tech=%d, timeout=%d", __func__, tech, timeout); 1657a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu return timeout; 1658525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1659525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1660525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1661525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1662525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1663525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDump 1664525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1665fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi** Description: Get libnfc-nci dump 1666525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1667fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi** obj: Java object. 1668fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi** fdobj: File descriptor to be used 1669525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1670fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi** Returns: Void 1671525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1672525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1673fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoistatic void nfcManager_doDump(JNIEnv* e, jobject obj, jobject fdobj) 1674525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1675fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi int fd = jniGetFDFromFileDescriptor(e, fdobj); 1676fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi if (fd < 0) 1677fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi return; 1678fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi 1679fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 1680fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi theInstance.Dump(fd); 1681525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1682525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 16833a894dda035a331860f0f23e93528527493a07a3Love Khannastatic jint nfcManager_doGetNciVersion(JNIEnv* , jobject) 16843a894dda035a331860f0f23e93528527493a07a3Love Khanna{ 16853a894dda035a331860f0f23e93528527493a07a3Love Khanna return NFC_GetNCIVersion(); 16863a894dda035a331860f0f23e93528527493a07a3Love Khanna} 16873a894dda035a331860f0f23e93528527493a07a3Love Khanna 16883a894dda035a331860f0f23e93528527493a07a3Love Khannastatic void nfcManager_doSetScreenState (JNIEnv* e, jobject o, jint screen_state_mask) 16893a894dda035a331860f0f23e93528527493a07a3Love Khanna{ 16903a894dda035a331860f0f23e93528527493a07a3Love Khanna tNFA_STATUS status = NFA_STATUS_OK; 16913a894dda035a331860f0f23e93528527493a07a3Love Khanna uint8_t state = (screen_state_mask & NFA_SCREEN_STATE_MASK); 16923a894dda035a331860f0f23e93528527493a07a3Love Khanna uint8_t discovry_param = NFA_LISTEN_DH_NFCEE_ENABLE_MASK | NFA_POLLING_DH_ENABLE_MASK; 16933a894dda035a331860f0f23e93528527493a07a3Love Khanna 16943a894dda035a331860f0f23e93528527493a07a3Love Khanna ALOGD ("%s: state = %d discovry_param = %d", __FUNCTION__, state, discovry_param); 16953a894dda035a331860f0f23e93528527493a07a3Love Khanna 16963a894dda035a331860f0f23e93528527493a07a3Love Khanna if (sIsDisabling || !sIsNfaEnabled ||(NFC_GetNCIVersion() != NCI_VERSION_2_0)) 16973a894dda035a331860f0f23e93528527493a07a3Love Khanna return; 16981227736a352797f6bebe7f4e098dab6a15f3164cLove Khanna if (prevScreenState == NFA_SCREEN_STATE_OFF_LOCKED || prevScreenState == NFA_SCREEN_STATE_OFF_UNLOCKED || 16991227736a352797f6bebe7f4e098dab6a15f3164cLove Khanna prevScreenState == NFA_SCREEN_STATE_ON_LOCKED) 17003a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17013a894dda035a331860f0f23e93528527493a07a3Love Khanna SyncEventGuard guard (sNfaSetPowerSubState); 17023a894dda035a331860f0f23e93528527493a07a3Love Khanna status = NFA_SetPowerSubStateForScreenState(state); 17033a894dda035a331860f0f23e93528527493a07a3Love Khanna if (status != NFA_STATUS_OK) 17043a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17053a894dda035a331860f0f23e93528527493a07a3Love Khanna ALOGE ("%s: fail enable SetScreenState; error=0x%X", __FUNCTION__, status); 17063a894dda035a331860f0f23e93528527493a07a3Love Khanna return; 17073a894dda035a331860f0f23e93528527493a07a3Love Khanna } 17083a894dda035a331860f0f23e93528527493a07a3Love Khanna else 17093a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17103a894dda035a331860f0f23e93528527493a07a3Love Khanna sNfaSetPowerSubState.wait(); 17113a894dda035a331860f0f23e93528527493a07a3Love Khanna } 17123a894dda035a331860f0f23e93528527493a07a3Love Khanna } 1713525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 17143a894dda035a331860f0f23e93528527493a07a3Love Khanna if (state == NFA_SCREEN_STATE_OFF_LOCKED || state == NFA_SCREEN_STATE_OFF_UNLOCKED) 17153a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17163a894dda035a331860f0f23e93528527493a07a3Love Khanna // disable both poll and listen on DH 0x02 17173a894dda035a331860f0f23e93528527493a07a3Love Khanna discovry_param = NFA_POLLING_DH_DISABLE_MASK | NFA_LISTEN_DH_NFCEE_DISABLE_MASK; 17183a894dda035a331860f0f23e93528527493a07a3Love Khanna } 17193a894dda035a331860f0f23e93528527493a07a3Love Khanna 17203a894dda035a331860f0f23e93528527493a07a3Love Khanna if (state == NFA_SCREEN_STATE_ON_LOCKED) 17213a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17223a894dda035a331860f0f23e93528527493a07a3Love Khanna // disable poll and enable listen on DH 0x00 17233a894dda035a331860f0f23e93528527493a07a3Love Khanna discovry_param = (screen_state_mask & NFA_SCREEN_POLLING_TAG_MASK) ? 17243a894dda035a331860f0f23e93528527493a07a3Love Khanna (NFA_LISTEN_DH_NFCEE_ENABLE_MASK | NFA_POLLING_DH_ENABLE_MASK): 17253a894dda035a331860f0f23e93528527493a07a3Love Khanna (NFA_POLLING_DH_DISABLE_MASK | NFA_LISTEN_DH_NFCEE_ENABLE_MASK); 17263a894dda035a331860f0f23e93528527493a07a3Love Khanna } 17273a894dda035a331860f0f23e93528527493a07a3Love Khanna 17283a894dda035a331860f0f23e93528527493a07a3Love Khanna if (state == NFA_SCREEN_STATE_ON_UNLOCKED) 17293a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17303a894dda035a331860f0f23e93528527493a07a3Love Khanna // enable both poll and listen on DH 0x01 17313a894dda035a331860f0f23e93528527493a07a3Love Khanna discovry_param = NFA_LISTEN_DH_NFCEE_ENABLE_MASK | NFA_POLLING_DH_ENABLE_MASK; 17323a894dda035a331860f0f23e93528527493a07a3Love Khanna } 17333a894dda035a331860f0f23e93528527493a07a3Love Khanna 17343a894dda035a331860f0f23e93528527493a07a3Love Khanna SyncEventGuard guard (sNfaSetConfigEvent); 17353a894dda035a331860f0f23e93528527493a07a3Love Khanna status = NFA_SetConfig(NFC_PMID_CON_DISCOVERY_PARAM, NCI_PARAM_LEN_CON_DISCOVERY_PARAM, &discovry_param); 17363a894dda035a331860f0f23e93528527493a07a3Love Khanna if (status == NFA_STATUS_OK) 17373a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17383a894dda035a331860f0f23e93528527493a07a3Love Khanna sNfaSetConfigEvent.wait (); 17393a894dda035a331860f0f23e93528527493a07a3Love Khanna } else { 17403a894dda035a331860f0f23e93528527493a07a3Love Khanna ALOGE ("%s: Failed to update CON_DISCOVER_PARAM", __FUNCTION__); 17413a894dda035a331860f0f23e93528527493a07a3Love Khanna return; 17423a894dda035a331860f0f23e93528527493a07a3Love Khanna } 17433a894dda035a331860f0f23e93528527493a07a3Love Khanna 17441227736a352797f6bebe7f4e098dab6a15f3164cLove Khanna if (prevScreenState == NFA_SCREEN_STATE_ON_UNLOCKED) 17453a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17463a894dda035a331860f0f23e93528527493a07a3Love Khanna SyncEventGuard guard (sNfaSetPowerSubState); 17473a894dda035a331860f0f23e93528527493a07a3Love Khanna status = NFA_SetPowerSubStateForScreenState(state); 17483a894dda035a331860f0f23e93528527493a07a3Love Khanna if (status != NFA_STATUS_OK) 17493a894dda035a331860f0f23e93528527493a07a3Love Khanna { 17503a894dda035a331860f0f23e93528527493a07a3Love Khanna ALOGE ("%s: fail enable SetScreenState; error=0x%X", __FUNCTION__, status); 17513a894dda035a331860f0f23e93528527493a07a3Love Khanna } else { 17523a894dda035a331860f0f23e93528527493a07a3Love Khanna sNfaSetPowerSubState.wait(); 17533a894dda035a331860f0f23e93528527493a07a3Love Khanna } 17543a894dda035a331860f0f23e93528527493a07a3Love Khanna } 17553a894dda035a331860f0f23e93528527493a07a3Love Khanna prevScreenState = state; 17563a894dda035a331860f0f23e93528527493a07a3Love Khanna} 1757525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1758525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1759525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetP2pInitiatorModes 1760525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1761525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set P2P initiator's activation modes. 1762525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1763525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1764525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** modes: Active and/or passive modes. The values are specified 1765525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** in external/libnfc-nxp/inc/phNfcTypes.h. See 1766525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** enum phNfc_eP2PMode_t. 1767525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1768525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 1769525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1770525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1771525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfcManager_doSetP2pInitiatorModes (JNIEnv *e, jobject o, jint modes) 1772525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 17735f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: modes=0x%X", __func__, modes); 1774525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 1775525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1776525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK mask = 0; 1777525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x01) mask |= NFA_TECHNOLOGY_MASK_A; 1778525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x02) mask |= NFA_TECHNOLOGY_MASK_F; 1779525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x04) mask |= NFA_TECHNOLOGY_MASK_F; 1780525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x08) mask |= NFA_TECHNOLOGY_MASK_A_ACTIVE; 1781525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x10) mask |= NFA_TECHNOLOGY_MASK_F_ACTIVE; 1782525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x20) mask |= NFA_TECHNOLOGY_MASK_F_ACTIVE; 1783525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = mask; 1784525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1785525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1786525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1787525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1788525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1789525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetP2pTargetModes 1790525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1791525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set P2P target's activation modes. 1792525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1793525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1794525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** modes: Active and/or passive modes. 1795525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1796525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 1797525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1798525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 17992534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doSetP2pTargetModes (JNIEnv*, jobject, jint modes) 1800525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 18015f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: modes=0x%X", __func__, modes); 1802525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Map in the right modes 1803525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK mask = 0; 1804525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x01) mask |= NFA_TECHNOLOGY_MASK_A; 1805525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x02) mask |= NFA_TECHNOLOGY_MASK_F; 1806525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x04) mask |= NFA_TECHNOLOGY_MASK_F; 1807525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x08) mask |= NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE; 1808525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1809525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().setP2pListenMask(mask); 1810525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1811525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1812d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Moralesstatic void nfcManager_doEnableScreenOffSuspend(JNIEnv* e, jobject o) 1813d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales{ 1814d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales PowerSwitch::getInstance().setScreenOffPowerState(PowerSwitch::POWER_STATE_FULL); 1815d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales} 1816d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales 1817d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Moralesstatic void nfcManager_doDisableScreenOffSuspend(JNIEnv* e, jobject o) 1818d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales{ 1819d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales PowerSwitch::getInstance().setScreenOffPowerState(PowerSwitch::POWER_STATE_OFF); 1820d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales} 1821c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen 1822525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 1823525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1824525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** JNI functions for android-4.0.1_r1 1825525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1826525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 1827525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic JNINativeMethod gMethods[] = 1828525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1829525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDownload", "()Z", 1830525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doDownload}, 1831525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1832525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"initializeNativeStructure", "()Z", 1833525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_initNativeStruc}, 1834525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1835304a6342ee7e5620d3b50d988755c035f1686dc2Martijn Coenen {"doInitialize", "()Z", 1836525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doInitialize}, 1837525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1838525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDeinitialize", "()Z", 1839525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doDeinitialize}, 1840525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 18419f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen {"sendRawFrame", "([B)Z", 18429f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen (void*) nfcManager_sendRawFrame}, 18439f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 18448ee2015a9c4639d465a390af93df3fdcd983cac8Love Khanna {"routeAid", "([BII)Z", 18459f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen (void*) nfcManager_routeAid}, 18469f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 18479f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen {"unrouteAid", "([B)Z", 18489f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen (void*) nfcManager_unrouteAid}, 18499f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 1850f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen {"commitRouting", "()Z", 1851f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen (void*) nfcManager_commitRouting}, 1852f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen 1853ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito {"doRegisterT3tIdentifier", "([B)I", 1854ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito (void*) nfcManager_doRegisterT3tIdentifier}, 1855ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 1856ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito {"doDeregisterT3tIdentifier", "(I)V", 1857ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito (void*) nfcManager_doDeregisterT3tIdentifier}, 1858ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 1859ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito {"getLfT3tMax", "()I", 1860ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito (void*) nfcManager_getLfT3tMax}, 1861ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70Yoshinobu Ito 186231b0f4653686119d74876cae5d637c5baf52b935Andres Morales {"doEnableDiscovery", "(IZZZZZ)V", 1863525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_enableDiscovery}, 1864525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1865525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCheckLlcp", "()Z", 1866525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doCheckLlcp}, 1867525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1868525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doActivateLlcp", "()Z", 1869525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doActivateLlcp}, 1870525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1871525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpConnectionlessSocket", "(ILjava/lang/String;)Lcom/android/nfc/dhimpl/NativeLlcpConnectionlessSocket;", 1872525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doCreateLlcpConnectionlessSocket}, 1873525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1874525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpServiceSocket", "(ILjava/lang/String;III)Lcom/android/nfc/dhimpl/NativeLlcpServiceSocket;", 1875525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doCreateLlcpServiceSocket}, 1876525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1877525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpSocket", "(IIII)Lcom/android/nfc/dhimpl/NativeLlcpSocket;", 1878525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doCreateLlcpSocket}, 1879525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1880525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doGetLastError", "()I", 1881525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doGetLastError}, 1882525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1883a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales {"disableDiscovery", "()V", 1884525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_disableDiscovery}, 1885525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1886525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetTimeout", "(II)Z", 1887525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetTimeout}, 1888525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1889525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doGetTimeout", "(I)I", 1890525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doGetTimeout}, 1891525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1892525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doResetTimeouts", "()V", 1893525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doResetTimeouts}, 1894525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1895729dc345dae23c1990cf5377a3948584cff2171aAndre Eisenbach {"doAbort", "(Ljava/lang/String;)V", 1896525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doAbort}, 1897525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1898525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetP2pInitiatorModes", "(I)V", 1899525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetP2pInitiatorModes}, 1900525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1901525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetP2pTargetModes", "(I)V", 1902525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetP2pTargetModes}, 1903525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1904d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales {"doEnableScreenOffSuspend", "()V", 1905d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales (void *)nfcManager_doEnableScreenOffSuspend}, 1906d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales 19073a894dda035a331860f0f23e93528527493a07a3Love Khanna {"doSetScreenState", "(I)V", 19083a894dda035a331860f0f23e93528527493a07a3Love Khanna (void*)nfcManager_doSetScreenState}, 19093a894dda035a331860f0f23e93528527493a07a3Love Khanna 1910d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales {"doDisableScreenOffSuspend", "()V", 1911d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales (void *)nfcManager_doDisableScreenOffSuspend}, 1912d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales 1913fdcfcb0031a4fbf38dd828ac1b3ef8319342e2faRuchi Kandoi {"doDump", "(Ljava/io/FileDescriptor;)V", 1914525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doDump}, 19153a894dda035a331860f0f23e93528527493a07a3Love Khanna 19163a894dda035a331860f0f23e93528527493a07a3Love Khanna {"getNciVersion","()I", 19173a894dda035a331860f0f23e93528527493a07a3Love Khanna (void *)nfcManager_doGetNciVersion}, 1918f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi {"doEnableDtaMode", "()V", 1919f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi (void*) nfcManager_doEnableDtaMode}, 1920f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi {"doDisableDtaMode", "()V", 1921f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi (void*) nfcManager_doDisableDtaMode} 1922f939e8a61d3904ab30ec59e2762f5c543ebaa672Ruchi Kandoi 1923525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project}; 1924525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1925525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1926525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1927525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1928525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: register_com_android_nfc_NativeNfcManager 1929525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1930525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Regisgter JNI functions with Java Virtual Machine. 1931525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: Environment of JVM. 1932525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1933525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Status of registration. 1934525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1935525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1936525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectint register_com_android_nfc_NativeNfcManager (JNIEnv *e) 1937525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 19385f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter", __func__); 1939525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().initialize (PowerSwitch::UNKNOWN_LEVEL); 19405f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 1941525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return jniRegisterNativeMethods (e, gNativeNfcManagerClassName, gMethods, NELEM (gMethods)); 1942525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1943525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1944525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1945525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1946525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1947525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: startRfDiscovery 1948525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1949525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Ask stack to start polling and listening for devices. 1950525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** isStart: Whether to start. 1951525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1952525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1953525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1954525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1955525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid startRfDiscovery(bool isStart) 1956525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1957525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_FAILED; 1958525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 19595f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: is start=%d", __func__, isStart); 196034d6116d82975f558378e2b16fdad04ac70d4130Jizhou Liao nativeNfcTag_acquireRfInterfaceMutexLock(); 1961525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 1962525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = isStart ? NFA_StartRfDiscovery () : NFA_StopRfDiscovery (); 1963525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status == NFA_STATUS_OK) 1964525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1965525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.wait (); //wait for NFA_RF_DISCOVERY_xxxx_EVT 1966525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sRfEnabled = isStart; 1967525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1968525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1969525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 19705f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: Failed to start/stop RF discovery; error=0x%X", __func__, status); 1971525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 197234d6116d82975f558378e2b16fdad04ac70d4130Jizhou Liao nativeNfcTag_releaseRfInterfaceMutexLock(); 1973525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1974525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1975525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1976525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1977525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1978c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao** Function: isDiscoveryStarted 1979c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao** 1980c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao** Description: Indicates whether the discovery is started. 1981c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao** 1982c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao** Returns: True if discovery is started 1983c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao** 1984c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao*******************************************************************************/ 1985c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liaobool isDiscoveryStarted () 1986c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao{ 1987c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao return sRfEnabled; 1988c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao} 1989c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao 1990c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao 1991c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao/******************************************************************************* 1992c5eec3c659d60a469259340608d7403c73fd6865Jizhou Liao** 1993525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: doStartupConfig 1994525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1995525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Configure the NFC controller. 1996525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1997525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1998525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1999525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 2000525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid doStartupConfig() 2001525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 2002525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(0, 0); 2003525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_FAILED; 2004a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu int actualLen = 0; 2005525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 2006525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // If polling for Active mode, set the ordering so that we choose Active over Passive mode first. 2007525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nat && (nat->tech_mask & (NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE))) 2008525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 20092dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi uint8_t act_mode_order_param[] = { 0x01 }; 2010525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 2011525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_SetConfig(NCI_PARAM_ID_ACT_ORDER, sizeof(act_mode_order_param), &act_mode_order_param[0]); 2012525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 2013525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.wait (); 2014525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 2015a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu 2016a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu //configure RF polling frequency for each technology 2017a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu static tNFA_DM_DISC_FREQ_CFG nfa_dm_disc_freq_cfg; 2018a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu //values in the polling_frequency[] map to members of nfa_dm_disc_freq_cfg 20192dfff7620070cff76fb117aafcd06e57cceb59fbRuchi Kandoi uint8_t polling_frequency [8] = {1, 1, 1, 1, 1, 1, 1, 1}; 2020a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu actualLen = GetStrValue(NAME_POLL_FREQUENCY, (char*)polling_frequency, 8); 2021a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu if (actualLen == 8) 2022a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 20235f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: polling frequency", __func__); 2024a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu memset (&nfa_dm_disc_freq_cfg, 0, sizeof(nfa_dm_disc_freq_cfg)); 2025a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pa = polling_frequency [0]; 2026a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pb = polling_frequency [1]; 2027a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pf = polling_frequency [2]; 2028a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pi93 = polling_frequency [3]; 2029a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pbp = polling_frequency [4]; 2030a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pk = polling_frequency [5]; 2031a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.paa = polling_frequency [6]; 2032a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pfa = polling_frequency [7]; 2033a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu p_nfa_dm_rf_disc_freq_cfg = &nfa_dm_disc_freq_cfg; 2034a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu } 2035525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 2036525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 2037525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 2038525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 2039525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 2040525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_isNfcActive 2041525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 2042525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Used externaly to determine if NFC is active or not. 2043525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 2044525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: 'true' if the NFC stack is running, else 'false'. 2045525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 2046525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 2047525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectbool nfcManager_isNfcActive() 2048525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 2049525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sIsNfaEnabled; 2050525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 2051525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 2052525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 2053525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 2054525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: startStopPolling 2055525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 2056525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Start or stop polling. 2057525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** isStartPolling: true to start polling; false to stop polling. 2058525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 2059525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 2060525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 2061525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 2062525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid startStopPolling (bool isStartPolling) 2063525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 20645f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enter; isStart=%u", __func__, isStartPolling); 20650799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales startRfDiscovery (false); 20660799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 20670799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (isStartPolling) startPolling_rfDiscoveryDisabled(0); 20680799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else stopPolling_rfDiscoveryDisabled(); 20690799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 20700799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales startRfDiscovery (true); 20715f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: exit", __func__); 20720799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales} 20730799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 20740799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 20750799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic tNFA_STATUS startPolling_rfDiscoveryDisabled(tNFA_TECHNOLOGY_MASK tech_mask) { 2076525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_FAILED; 2077525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 20780799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales unsigned long num = 0; 2079a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales 20800799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (tech_mask == 0 && GetNumValue(NAME_POLLING_TECH_MASK, &num, sizeof(num))) 20810799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales tech_mask = num; 20820799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else if (tech_mask == 0) tech_mask = DEFAULT_TECH_MASK; 20830799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 208434d6116d82975f558378e2b16fdad04ac70d4130Jizhou Liao nativeNfcTag_acquireRfInterfaceMutexLock(); 20850799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales SyncEventGuard guard (sNfaEnableDisablePollingEvent); 20865f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: enable polling", __func__); 20870799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales stat = NFA_EnablePolling (tech_mask); 20880799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (stat == NFA_STATUS_OK) 20890799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 20905f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: wait for enable event", __func__); 20910799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sPollingEnabled = true; 20920799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_ENABLED_EVT 2093525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 2094525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 2095525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 20965f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail enable polling; error=0x%X", __func__, stat); 2097525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 209834d6116d82975f558378e2b16fdad04ac70d4130Jizhou Liao nativeNfcTag_releaseRfInterfaceMutexLock(); 20990799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 21000799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return stat; 21010799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales} 21020799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 21030799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic tNFA_STATUS stopPolling_rfDiscoveryDisabled() { 21040799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales tNFA_STATUS stat = NFA_STATUS_FAILED; 21050799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 210634d6116d82975f558378e2b16fdad04ac70d4130Jizhou Liao nativeNfcTag_acquireRfInterfaceMutexLock(); 21070799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales SyncEventGuard guard (sNfaEnableDisablePollingEvent); 21085f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGV("%s: disable polling", __func__); 21090799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales stat = NFA_DisablePolling (); 21100799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (stat == NFA_STATUS_OK) { 21110799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sPollingEnabled = false; 21120799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_DISABLED_EVT 21130799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } else { 21145f28e5ee8f39bd58e182f911ebb50960b2a77830Joe Onorato ALOGE("%s: fail disable polling; error=0x%X", __func__, stat); 21150799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 211634d6116d82975f558378e2b16fdad04ac70d4130Jizhou Liao nativeNfcTag_releaseRfInterfaceMutexLock(); 21170799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 21180799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return stat; 2119525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 2120525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 2121525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 2122525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} /* namespace android */ 2123