NativeNfcManager.cpp revision 97a71fe90493efd5947bb6f18c7b58a7e795c1dd
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> 19525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#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" 24525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "SecureElement.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> 32525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern "C" 34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 35525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_api.h" 36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_p2p_api.h" 37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "rw_api.h" 38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_ee_api.h" 39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfc_brcm_defs.h" 40525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_cho_api.h" 41525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "ce_api.h" 42525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern UINT8 *p_nfa_dm_lptd_cfg; 45525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern UINT8 *p_nfa_dm_start_up_cfg; 46525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern const UINT8 nfca_version_string []; 47525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 48525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 49525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern bool gIsTagDeactivating; 50525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern bool gIsSelectingRfInterface; 51525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doTransceiveStatus (uint8_t * buf, uint32_t buflen); 52525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doConnectStatus (jboolean is_connect_ok); 53525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doDeactivateStatus (int status); 54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doWriteStatus (jboolean is_write_ok); 55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doCheckNdefResult (tNFA_STATUS status, uint32_t max_size, uint32_t current_size, uint8_t flags); 56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doMakeReadonlyResult (tNFA_STATUS status); 57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doPresenceCheckResult (tNFA_STATUS status); 58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_formatStatus (bool is_ok); 59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_resetPresenceCheck (); 60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doReadCompleted (tNFA_STATUS status); 61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_abortWaits (); 62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeLlcpConnectionlessSocket_abortWait (); 63525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_registerNdefTypeHandler (); 64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeLlcpConnectionlessSocket_receiveData (uint8_t* data, uint32_t len, uint32_t remote_sap); 65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 66525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 67525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 68525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 69525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 70525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** public variables and functions 71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 74525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 75525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int gGeneralTransceiveTimeout = 1000; 77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyNdefMessageListeners; 78525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyTransactionListeners; 79525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyLlcpLinkActivation; 80525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyLlcpLinkDeactivated; 81525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifySeFieldActivated; 82525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifySeFieldDeactivated; 83525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifySeListenActivated; 84525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifySeListenDeactivated; 85525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeP2pDeviceClassName = "com/android/nfc/dhimpl/NativeP2pDevice"; 86525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpServiceSocketClassName = "com/android/nfc/dhimpl/NativeLlcpServiceSocket"; 87525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpConnectionlessSocketClassName = "com/android/nfc/dhimpl/NativeLlcpConnectionlessSocket"; 88525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpSocketClassName = "com/android/nfc/dhimpl/NativeLlcpSocket"; 89525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeNfcTagClassName = "com/android/nfc/dhimpl/NativeNfcTag"; 90525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeNfcManagerClassName = "com/android/nfc/dhimpl/NativeNfcManager"; 91525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeNfcSecureElementClassName = "com/android/nfc/dhimpl/NativeNfcSecureElement"; 92525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void doStartupConfig (); 93525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void startStopPolling (bool isStartPolling); 94525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void startRfDiscovery (bool isStart); 95525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 96525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 97525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 98525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 99525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** private variables and functions 101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 103525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 105525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jint sLastError = ERROR_BUFFER_TOO_SMALL; 106525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jmethodID sCachedNfcManagerNotifySeApduReceived; 107525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jmethodID sCachedNfcManagerNotifySeMifareAccess; 108525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jmethodID sCachedNfcManagerNotifySeEmvCardRemoval; 109525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jmethodID sCachedNfcManagerNotifyTargetDeselected; 110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaEnableEvent; //event for NFA_Enable() 111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaDisableEvent; //event for NFA_Disable() 112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaEnableDisablePollingEvent; //event for NFA_EnablePolling(), NFA_DisablePolling() 113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaSetConfigEvent; // event for Set_Config.... 114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sIsNfaEnabled = false; 115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sDiscoveryEnabled = false; //is polling for tag? 116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sIsDisabling = false; 117525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sRfEnabled = false; // whether RF discovery is enabled 118525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sSeRfActive = false; // whether RF with SE is likely active 119525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sP2pActive = false; // whether p2p was last active 120525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sAbortConnlessWait = false; 121525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sIsSecElemSelected = false; //has NFC service selected a sec elem 122525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic UINT8 * sOriginalLptdCfg = NULL; 123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define CONFIG_UPDATE_LPTD (1 << 0) 124525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define CONFIG_UPDATE_TECH_MASK (1 << 1) 125525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DEFAULT_TECH_MASK (NFA_TECHNOLOGY_MASK_A \ 126525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_B \ 127525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_F \ 128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_ISO15693 \ 129525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_B_PRIME \ 130525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_A_ACTIVE \ 13197a71fe90493efd5947bb6f18c7b58a7e795c1ddEvan Chu | NFA_TECHNOLOGY_MASK_F_ACTIVE \ 13297a71fe90493efd5947bb6f18c7b58a7e795c1ddEvan Chu | NFA_TECHNOLOGY_MASK_KOVIO) 133525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 134525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 135525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfaConnectionCallback (UINT8 event, tNFA_CONN_EVT_DATA *eventData); 136525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfaDeviceManagementCallback (UINT8 event, tNFA_DM_CBACK_DATA *eventData); 137525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isPeerToPeer (tNFA_ACTIVATED& activated); 138525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isListenMode(tNFA_ACTIVATED& activated); 139525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 140525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project///////////////////////////////////////////////////////////// 141525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project///////////////////////////////////////////////////////////// 142525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 143525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 144525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 145525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 146525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: getNative 147525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 148525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get native data 149525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 150525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Native data structure. 151525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 152525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 153525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnfc_jni_native_data *getNative (JNIEnv* e, jobject o) 154525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 155525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project static struct nfc_jni_native_data *sCachedNat = NULL; 156525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e) 157525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 158525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sCachedNat = nfc_jni_get_nat(e, o); 159525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 160525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sCachedNat; 161525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 162525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 165525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 166525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: handleRfDiscoveryEvent 167525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Handle RF-discovery events from the stack. 169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** discoveredDevice: Discovered device. 170525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 171525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 172525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 173525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 174525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void handleRfDiscoveryEvent (tNFC_RESULT_DEVT* discoveredDevice) 175525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 176525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (discoveredDevice->more) 177525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 178525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //there is more discovery notification coming 179525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return; 180525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 181525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 182525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project bool isP2p = NfcTag::getInstance ().isP2pDiscovered (); 183525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (isP2p) 184525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 185525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //select the peer that supports P2P 186525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance ().selectP2p(); 187525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 188525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 189525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 190525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //select the first of multiple tags that is discovered 191525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance ().selectFirstTag(); 192525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 193525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 194525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 195525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 196525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 197525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 198525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfaConnectionCallback 199525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 200525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Receive connection-related events from stack. 201525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** connEvent: Event code. 202525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** eventData: Event data. 203525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 204525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 205525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 206525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 207525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfaConnectionCallback (UINT8 connEvent, tNFA_CONN_EVT_DATA* eventData) 208525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 209525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_FAILED; 210525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: event= %u", __FUNCTION__, connEvent); 211525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 212525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (gIsTagDeactivating && connEvent != NFA_DEACTIVATED_EVT && connEvent != NFA_PRESENCE_CHECK_EVT && connEvent != NFA_DATA_EVT) 213525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 214525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // special case to switching frame interface for ISO_DEP tags 215525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project gIsTagDeactivating = false; 216525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: deactivating, should get NFA_DEACTIVATED_EVT", __FUNCTION__); 217525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doDeactivateStatus(1); 218525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 219525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 220525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project switch (connEvent) 221525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 222525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_POLL_ENABLED_EVT: // whether polling successfully started 223525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 224525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_POLL_ENABLED_EVT: status = %u", __FUNCTION__, eventData->status); 225525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 226525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 227525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 228525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 229525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 230525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 231525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_POLL_DISABLED_EVT: // Listening/Polling stopped 232525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 233525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_POLL_DISABLED_EVT: status = %u", __FUNCTION__, eventData->status); 234525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 235525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 236525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 237525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 238525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 239525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 240525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_RF_DISCOVERY_STARTED_EVT: // RF Discovery started 241525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 242525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_RF_DISCOVERY_STARTED_EVT: status = %u", __FUNCTION__, eventData->status); 243525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 244525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 245525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 246525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 247525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 248525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 249525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_RF_DISCOVERY_STOPPED_EVT: // RF Discovery stopped event 250525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 251525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_RF_DISCOVERY_STOPPED_EVT: status = %u", __FUNCTION__, eventData->status); 252525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 253525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 254525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 255525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 256525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 257525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 258525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DISC_RESULT_EVT: // NFC link/protocol discovery notificaiton 259525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->disc_result.status; 260525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_DISC_RESULT_EVT: status = %d", __FUNCTION__, status); 261525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 262525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 263525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_DISC_RESULT_EVT error: status = %d", __FUNCTION__, status); 264525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 265525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 266525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 267525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler(connEvent, eventData); 268525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project handleRfDiscoveryEvent(&eventData->disc_result.discovery_ntf); 269525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 270525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 271525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 272525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SELECT_RESULT_EVT: // NFC link/protocol discovery select response 273525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_SELECT_RESULT_EVT: status = %d, gIsSelectingRfInterface = %d, sIsDisabling=%d", __FUNCTION__, eventData->status, gIsSelectingRfInterface, sIsDisabling); 274525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 275525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsDisabling) 276525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 277525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 278525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->status != NFA_STATUS_OK) 279525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 280525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (gIsSelectingRfInterface) 281525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 282525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doConnectStatus(false); 283525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 284525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 285525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_SELECT_RESULT_EVT error: status = %d", __FUNCTION__, eventData->status); 286525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Deactivate (FALSE); 287525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 288525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 289525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 290525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DEACTIVATE_FAIL_EVT: 291525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_DEACTIVATE_FAIL_EVT: status = %d", __FUNCTION__, eventData->status); 292525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 293525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 294525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_ACTIVATED_EVT: // NFC link/protocol activated 295525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_ACTIVATED_EVT: gIsSelectingRfInterface=%d, sIsDisabling=%d", __FUNCTION__, gIsSelectingRfInterface, sIsDisabling); 296525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsDisabling) 297525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 298525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 299525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().setActivationState (); 300525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (gIsSelectingRfInterface) 301525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 302525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doConnectStatus(true); 303525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 304525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 305525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 306525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_resetPresenceCheck(); 307525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (isPeerToPeer(eventData->activated)) 308525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 309525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sP2pActive = true; 310525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_ACTIVATED_EVT; is p2p", __FUNCTION__); 311525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Disable RF field events in case of p2p 312525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 nfa_disable_rf_events[] = { 0x00 }; 313525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Disabling RF field events", __FUNCTION__); 314525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = NFA_SetConfig(NCI_PARAM_ID_RF_FIELD_INFO, sizeof(nfa_disable_rf_events), 315525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project &nfa_disable_rf_events[0]); 316525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status == NFA_STATUS_OK) { 317525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Disabled RF field events", __FUNCTION__); 318525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } else { 319525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: Failed to disable RF field events", __FUNCTION__); 320525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 321525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 322525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else if (pn544InteropIsBusy() == false) 323525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 324525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 325525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 326525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // We know it is not activating for P2P. If it activated in 327525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // listen mode then it is likely for and SE transaction. 328525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Send the RF Event. 329525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (isListenMode(eventData->activated)) 330525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 331525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sSeRfActive = true; 332525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SecureElement::getInstance().notifyListenModeState (true); 333525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 334525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 335525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 336525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 337525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 338525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DEACTIVATED_EVT: // NFC link/protocol deactivated 339525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_DEACTIVATED_EVT Type: %u, gIsTagDeactivating: %d", __FUNCTION__, eventData->deactivated.type,gIsTagDeactivating); 340525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().setDeactivationState (eventData->deactivated); 341525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->deactivated.type != NFA_DEACTIVATE_TYPE_SLEEP) 342525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 343525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_resetPresenceCheck(); 344525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 345525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 346525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 347525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 348525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else if (gIsTagDeactivating) 349525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 350525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doDeactivateStatus(0); 351525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 352525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 353525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // If RF is activated for what we think is a Secure Element transaction 354525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // and it is deactivated to either IDLE or DISCOVERY mode, notify w/event. 355525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if ((eventData->deactivated.type == NFA_DEACTIVATE_TYPE_IDLE) 356525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (eventData->deactivated.type == NFA_DEACTIVATE_TYPE_DISCOVERY)) 357525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 358525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sSeRfActive) { 359525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sSeRfActive = false; 360525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SecureElement::getInstance().notifyListenModeState (false); 361525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } else if (sP2pActive) { 362525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sP2pActive = false; 363525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Make sure RF field events are re-enabled 364525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_ACTIVATED_EVT; is p2p", __FUNCTION__); 365525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Disable RF field events in case of p2p 366525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 nfa_enable_rf_events[] = { 0x01 }; 367525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 368525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Enabling RF field events", __FUNCTION__); 369525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = NFA_SetConfig(NCI_PARAM_ID_RF_FIELD_INFO, sizeof(nfa_enable_rf_events), 370525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project &nfa_enable_rf_events[0]); 371525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status == NFA_STATUS_OK) { 372525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Enabled RF field events", __FUNCTION__); 373525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } else { 374525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: Failed to enable RF field events", __FUNCTION__); 375525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 376525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 377525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 378525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 379525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 380525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 381525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_TLV_DETECT_EVT: // TLV Detection complete 382525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->tlv_detect.status; 383525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_TLV_DETECT_EVT: status = %d, protocol = %d, num_tlvs = %d, num_bytes = %d", 384525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project __FUNCTION__, status, eventData->tlv_detect.protocol, 385525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->tlv_detect.num_tlvs, eventData->tlv_detect.num_bytes); 386525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 387525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 388525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_TLV_DETECT_EVT error: status = %d", __FUNCTION__, status); 389525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 390525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 391525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 392525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_NDEF_DETECT_EVT: // NDEF Detection complete; 393525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if status is failure, it means the tag does not contain any or valid NDEF data; 394525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //pass the failure status to the NFC Service; 395525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->ndef_detect.status; 396525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_NDEF_DETECT_EVT: status = 0x%X, protocol = %u, " 397525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "max_size = %lu, cur_size = %lu, flags = 0x%X", __FUNCTION__, 398525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status, 399525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.protocol, eventData->ndef_detect.max_size, 400525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.cur_size, eventData->ndef_detect.flags); 401525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 402525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doCheckNdefResult(status, 403525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.max_size, eventData->ndef_detect.cur_size, 404525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.flags); 405525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 406525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 407525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DATA_EVT: // Data message received (for non-NDEF reads) 408525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_DATA_EVT: len = %d", __FUNCTION__, eventData->data.len); 409525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doTransceiveStatus(eventData->data.p_data,eventData->data.len); 410525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 411525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 412525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SELECT_CPLT_EVT: // Select completed 413525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->status; 414525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_SELECT_CPLT_EVT: status = %d", __FUNCTION__, status); 415525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 416525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 417525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_SELECT_CPLT_EVT error: status = %d", __FUNCTION__, status); 418525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 419525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 420525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 421525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_READ_CPLT_EVT: // NDEF-read or tag-specific-read completed 422525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_READ_CPLT_EVT: status = 0x%X", __FUNCTION__, eventData->status); 423525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doReadCompleted (eventData->status); 424525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 425525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 426525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 427525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_WRITE_CPLT_EVT: // Write completed 428525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_WRITE_CPLT_EVT: status = %d", __FUNCTION__, eventData->status); 429525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doWriteStatus (eventData->status == NFA_STATUS_OK); 430525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 431525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 432525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SET_TAG_RO_EVT: // Tag set as Read only 433525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_SET_TAG_RO_EVT: status = %d", __FUNCTION__, eventData->status); 434525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doMakeReadonlyResult(eventData->status); 435525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 436525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 437525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_NDEF_WRITE_START_EVT: // NDEF write started 438525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_CE_NDEF_WRITE_START_EVT: status: %d", __FUNCTION__, eventData->status); 439525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 440525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->status != NFA_STATUS_OK) 441525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_CE_NDEF_WRITE_START_EVT error: status = %d", __FUNCTION__, eventData->status); 442525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 443525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 444525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_NDEF_WRITE_CPLT_EVT: // NDEF write completed 445525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: FA_CE_NDEF_WRITE_CPLT_EVT: len = %lu", __FUNCTION__, eventData->ndef_write_cplt.len); 446525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 447525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 448525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_LLCP_ACTIVATED_EVT: // LLCP link is activated 449525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_LLCP_ACTIVATED_EVT: is_initiator: %d remote_wks: %d, remote_lsc: %d, remote_link_miu: %d, local_link_miu: %d", 450525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project __FUNCTION__, 451525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.is_initiator, 452525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_wks, 453525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_lsc, 454525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_link_miu, 455525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.local_link_miu); 456525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 457525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().llcpActivatedHandler (getNative(0, 0), eventData->llcp_activated); 458525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 459525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 460525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_LLCP_DEACTIVATED_EVT: // LLCP link is deactivated 461525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_LLCP_DEACTIVATED_EVT", __FUNCTION__); 462525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().llcpDeactivatedHandler (getNative(0, 0), eventData->llcp_deactivated); 463525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 464525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 465525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_PRESENCE_CHECK_EVT: 466525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_PRESENCE_CHECK_EVT", __FUNCTION__); 467525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doPresenceCheckResult (eventData->status); 468525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 469525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 470525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_FORMAT_CPLT_EVT: 471525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_FORMAT_CPLT_EVT: status=0x%X", __FUNCTION__, eventData->status); 472525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_formatStatus (eventData->status == NFA_STATUS_OK); 473525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 474525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 475525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_I93_CMD_CPLT_EVT: 476525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_I93_CMD_CPLT_EVT: status=0x%X", __FUNCTION__, eventData->status); 477525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 478525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 479525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_UICC_LISTEN_CONFIGURED_EVT : 480525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_CE_UICC_LISTEN_CONFIGURED_EVT : status=0x%X", __FUNCTION__, eventData->status); 481525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SecureElement::getInstance().connectionEventHandler (connEvent, eventData); 482525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 483525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 484525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SET_P2P_LISTEN_TECH_EVT: 485525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_SET_P2P_LISTEN_TECH_EVT", __FUNCTION__); 486525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().connectionEventHandler (connEvent, eventData); 487525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 488525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 489525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project default: 490525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: unknown event ????", __FUNCTION__); 491525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 492525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 493525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 494525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 495525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 496525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 497525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 498525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_initNativeStruc 499525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 500525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Initialize variables. 501525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 502525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 503525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 504525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 505525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 506525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 507525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jboolean nfcManager_initNativeStruc (JNIEnv* e, jobject o) 508525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 509525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 510525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5112534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nfc_jni_native_data* nat = (nfc_jni_native_data*)malloc(sizeof(struct nfc_jni_native_data)); 512525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nat == NULL) 513525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 514525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail allocate native data", __FUNCTION__); 515525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 516525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 517525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 518525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project memset (nat, 0, sizeof(*nat)); 5192534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->GetJavaVM(&(nat->vm)); 5202534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nat->env_version = e->GetVersion(); 5212534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nat->manager = e->NewGlobalRef(o); 522525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5232534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> cls(e, e->GetObjectClass(o)); 5242534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f = e->GetFieldID(cls.get(), "mNative", "I"); 5252534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(o, f, (jint)nat); 526525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 527525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Initialize native cached references */ 5282534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyNdefMessageListeners = e->GetMethodID(cls.get(), 529525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyNdefMessageListeners", "(Lcom/android/nfc/dhimpl/NativeNfcTag;)V"); 5302534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyTransactionListeners = e->GetMethodID(cls.get(), 531525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyTransactionListeners", "([B)V"); 5322534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyLlcpLinkActivation = e->GetMethodID(cls.get(), 533525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyLlcpLinkActivation", "(Lcom/android/nfc/dhimpl/NativeP2pDevice;)V"); 5342534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyLlcpLinkDeactivated = e->GetMethodID(cls.get(), 535525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyLlcpLinkDeactivated", "(Lcom/android/nfc/dhimpl/NativeP2pDevice;)V"); 5362534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes sCachedNfcManagerNotifyTargetDeselected = e->GetMethodID(cls.get(), 537525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyTargetDeselected","()V"); 5382534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifySeFieldActivated = e->GetMethodID(cls.get(), 539525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifySeFieldActivated", "()V"); 5402534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifySeFieldDeactivated = e->GetMethodID(cls.get(), 541525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifySeFieldDeactivated", "()V"); 5422534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifySeListenActivated = e->GetMethodID(cls.get(), 543525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifySeListenActivated", "()V"); 5442534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifySeListenDeactivated = e->GetMethodID(cls.get(), 545525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifySeListenDeactivated", "()V"); 546525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5472534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes sCachedNfcManagerNotifySeApduReceived = e->GetMethodID(cls.get(), 548525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifySeApduReceived", "([B)V"); 549525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5502534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes sCachedNfcManagerNotifySeMifareAccess = e->GetMethodID(cls.get(), 551525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifySeMifareAccess", "([B)V"); 552525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5532534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes sCachedNfcManagerNotifySeEmvCardRemoval = e->GetMethodID(cls.get(), 554525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifySeEmvCardRemoval", "()V"); 555525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5562534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (nfc_jni_cache_object(e, gNativeNfcTagClassName, &(nat->cached_NfcTag)) == -1) 557525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 558525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail cache NativeNfcTag", __FUNCTION__); 559525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 560525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 561525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5622534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (nfc_jni_cache_object(e, gNativeP2pDeviceClassName, &(nat->cached_P2pDevice)) == -1) 563525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 564525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail cache NativeP2pDevice", __FUNCTION__); 565525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 566525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 567525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 568525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 569525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 570525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 571525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 572525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 573525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 574525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 575525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfaDeviceManagementCallback 576525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 577525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Receive device management events from stack. 578525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** dmEvent: Device-management event ID. 579525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** eventData: Data associated with event ID. 580525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 581525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 582525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 583525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 584525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid nfaDeviceManagementCallback (UINT8 dmEvent, tNFA_DM_CBACK_DATA* eventData) 585525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 586525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; event=0x%X", __FUNCTION__, dmEvent); 587525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 588525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project switch (dmEvent) 589525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 590525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_ENABLE_EVT: /* Result of NFA_Enable */ 591525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 592525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 593525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_ENABLE_EVT; status=0x%X", 594525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project __FUNCTION__, eventData->status); 595525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = eventData->status == NFA_STATUS_OK; 596525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 597525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.notifyOne (); 598525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 599525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 600525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 601525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_DISABLE_EVT: /* Result of NFA_Disable */ 602525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 603525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 604525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_DISABLE_EVT", __FUNCTION__); 605525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 606525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 607525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.notifyOne (); 608525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 609525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 610525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 611525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_SET_CONFIG_EVT: //result of NFA_SetConfig 612525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_SET_CONFIG_EVT", __FUNCTION__); 613525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 614525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 615525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.notifyOne(); 616525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 617525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 618525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 619525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_GET_CONFIG_EVT: /* Result of NFA_GetConfig */ 620525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_GET_CONFIG_EVT", __FUNCTION__); 621525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 622525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 623525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_RF_FIELD_EVT: 624525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_RF_FIELD_EVT; status=0x%X; field status=%u", __FUNCTION__, 625525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->rf_field.status, eventData->rf_field.rf_field_status); 626525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 627525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!sIsDisabling && eventData->rf_field.status == NFA_STATUS_OK) 628525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SecureElement::getInstance().notifyRfFieldEvent (eventData->rf_field.rf_field_status == NFA_DM_RF_FIELD_ON); 629525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 630525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 631525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_NFCC_TRANSPORT_ERR_EVT: 632525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_NFCC_TIMEOUT_EVT: 633525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 634525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (dmEvent == NFA_DM_NFCC_TIMEOUT_EVT) 635525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_NFCC_TIMEOUT_EVT; abort all outstanding operations", __FUNCTION__); 636525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 637525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_NFCC_TRANSPORT_ERR_EVT; abort all outstanding operations", __FUNCTION__); 638525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 639525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 640525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 641525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sAbortConnlessWait = true; 642525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeLlcpConnectionlessSocket_abortWait(); 643525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 644525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: aborting sNfaEnableDisablePollingEvent", __FUNCTION__); 645525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 646525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne(); 647525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 648525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 649525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: aborting sNfaEnableEvent", __FUNCTION__); 650525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 651525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.notifyOne(); 652525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 653525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 654525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: aborting sNfaDisableEvent", __FUNCTION__); 655525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 656525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.notifyOne(); 657525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 658525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sDiscoveryEnabled = false; 659525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().abort (); 660525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 661525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!sIsDisabling && sIsNfaEnabled) 662525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 663525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Disable(FALSE); 664525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = true; 665525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 666525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 667525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 668525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 669525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 670525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 671525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().initialize (PowerSwitch::UNKNOWN_LEVEL); 672525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: aborted all waiting events", __FUNCTION__); 673525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 674525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 675525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 676525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_PWR_MODE_CHANGE_EVT: 677525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().deviceManagementCallback (dmEvent, eventData); 678525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 679525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 680525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project default: 681525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: unhandled event", __FUNCTION__); 682525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 683525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 684525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 685525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 686525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 687525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 688525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 689525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doInitialize 690525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 691525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Turn on NFC. 692525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 693525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 694525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 695525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 696525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 697525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 698525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jboolean nfcManager_doInitialize (JNIEnv* e, jobject o) 699525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 700525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; NCI_VERSION=0x%02X", __FUNCTION__, NCI_VERSION); 701525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_OK; 702525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 703525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 704525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 705525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: already enabled", __FUNCTION__); 706525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 707525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 708525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 709525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().initialize (PowerSwitch::FULL_POWER); 710525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 711525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 712525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project unsigned long num = 0; 713525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 714525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 715525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Initialize(); //start GKI, NCI task, NFC task 716525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 717525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 718525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 719525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tHAL_NFC_ENTRY* halFuncEntries = theInstance.GetHalEntryFuncs (); 720525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 721525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Init (halFuncEntries); 722525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 723525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_Enable (nfaDeviceManagementCallback, nfaConnectionCallback); 724525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 725525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 726525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project num = initializeGlobalAppLogLevel (); 727525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project CE_SetTraceLevel (num); 728525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project LLCP_SetTraceLevel (num); 729525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFC_SetTraceLevel (num); 730525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project RW_SetTraceLevel (num); 731525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_SetTraceLevel (num); 732525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_ChoSetTraceLevel (num); 733525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_P2pSetTraceLevel (num); 734525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_SnepSetTraceLevel (num); 735525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.wait(); //wait for NFA command to finish 736525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 737525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 738525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 739525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 740525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 741525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //sIsNfaEnabled indicates whether stack started successfully 742525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 743525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 744525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SecureElement::getInstance().initialize (getNative(e, o)); 745525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_registerNdefTypeHandler (); 746525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().initialize (getNative(e, o)); 747525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().initialize (); 748525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().handleNfcOnOff (true); 749525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 750525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ///////////////////////////////////////////////////////////////////////////////// 751525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Add extra configuration here (work-arounds, etc.) 752525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 753525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 754525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 755525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if ( nat ) 756525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 757525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_POLLING_TECH_MASK, &num, sizeof(num))) 758525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = num; 759525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 760525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = DEFAULT_TECH_MASK; 761525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 762525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: tag polling tech mask=0x%X", __FUNCTION__, nat->tech_mask); 763525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 764525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 765525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Always restore LPTD Configuration to the stack default. 766525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sOriginalLptdCfg != NULL) 767525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project p_nfa_dm_lptd_cfg = sOriginalLptdCfg; 768525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 769525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // if this value exists, set polling interval. 770525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_NFA_DM_DISC_DURATION_POLL, &num, sizeof(num))) 771525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_SetRfDiscoveryDuration(num); 772525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 773525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Do custom NFCA startup configuration. 774525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project doStartupConfig(); 775525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 776525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 777525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 778525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 779525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail nfa enable; error=0x%X", __FUNCTION__, stat); 780525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 781525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 782525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_Disable (FALSE /* ungraceful */); 783525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 784525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Finalize(); 785525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 786525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 787525c260303268a83da4c3413b953d13c9084e834The Android Open Source ProjectTheEnd: 788525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 789525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::LOW_POWER); 790525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 791525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sIsNfaEnabled ? JNI_TRUE : JNI_FALSE; 792525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 793525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 794525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 795525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 796525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 797525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_enableDiscovery 798525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 799525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Start polling and listening for devices. 800525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 801525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 802525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** mode: Not used. 803525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 804525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 805525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 806525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 807525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfcManager_enableDiscovery (JNIEnv* e, jobject o) 808525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 809525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK tech_mask = DEFAULT_TECH_MASK; 810525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 811525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 812525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nat) 813525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tech_mask = (tNFA_TECHNOLOGY_MASK)nat->tech_mask; 814525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 815525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; tech_mask = %02x", __FUNCTION__, tech_mask); 816525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 817525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sDiscoveryEnabled) 818525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 819525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: already polling", __FUNCTION__); 820525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return; 821525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 822525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 823525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_OK; 824525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 825525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: sIsSecElemSelected=%u", __FUNCTION__, sIsSecElemSelected); 826525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 827525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::FULL_POWER); 828525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 829525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sRfEnabled) { 830525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Stop RF discovery to reconfigure 831525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery(false); 832525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 833525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 834525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 835525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 836525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_EnablePolling (tech_mask); 837525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 838525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 839525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: wait for enable event", __FUNCTION__); 840525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sDiscoveryEnabled = true; 841525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_ENABLED_EVT 842525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: got enabled event", __FUNCTION__); 843525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 844525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 845525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 846525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail enable discovery; error=0x%X", __FUNCTION__, stat); 847525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 848525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 849525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 850525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Start P2P listening if tag polling was enabled or the mask was 0. 851525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sDiscoveryEnabled || (tech_mask == 0)) 852525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 853525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Enable p2pListening", __FUNCTION__); 854525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().enableP2pListening (true); 855525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 856525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if NFC service has deselected the sec elem, then apply default routes 857525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!sIsSecElemSelected) 858525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = SecureElement::getInstance().routeToDefault (); 859525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 860525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 861525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Actually start discovery. 862525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (true); 863525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 864525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setModeOn (PowerSwitch::DISCOVERY); 865525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 866525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 867525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 868525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 869525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 870525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 871525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 872525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_disableDiscovery 873525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 874525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Stop polling and listening for devices. 875525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 876525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 877525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 878525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 879525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 880525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 8812534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesvoid nfcManager_disableDiscovery (JNIEnv*, jobject) 882525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 883525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_OK; 884525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter;", __FUNCTION__); 885525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 886525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project pn544InteropAbortNow (); 887525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sDiscoveryEnabled == false) 888525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 889525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: already disabled", __FUNCTION__); 890525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 891525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 892525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 893525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Stop RF Discovery. 894525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (false); 895525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 896525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sDiscoveryEnabled) 897525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 898525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 899525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = NFA_DisablePolling (); 900525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status == NFA_STATUS_OK) 901525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 902525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sDiscoveryEnabled = false; 903525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_DISABLED_EVT 904525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 905525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 906525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: Failed to disable polling; error=0x%X", __FUNCTION__, status); 907525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 908525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 909525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().enableP2pListening (false); 910525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 911525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if nothing is active after this, then tell the controller to power down 912525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (! PowerSwitch::getInstance ().setModeOff (PowerSwitch::DISCOVERY)) 913525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::LOW_POWER); 914525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 915525c260303268a83da4c3413b953d13c9084e834The Android Open Source ProjectTheEnd: 916525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 917525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 918525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 919525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 920525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 921525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function nfc_jni_cache_object_local 922525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 923525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description Allocates a java object and calls it's constructor 924525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 925525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns -1 on failure, 0 on success 926525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 927525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 9282534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic int nfc_jni_cache_object_local (JNIEnv *e, const char *className, jobject *cachedObj) 929525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 9302534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> cls(e, e->FindClass(className)); 9312534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if(cls.get() == NULL) { 932525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: find class error", __FUNCTION__); 933525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return -1; 934525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 935525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 9362534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jmethodID ctor = e->GetMethodID(cls.get(), "<init>", "()V"); 9372534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jobject obj = e->NewObject(cls.get(), ctor); 9382534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (obj == NULL) { 939525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: create object error", __FUNCTION__); 940525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return -1; 941525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 942525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 9432534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes *cachedObj = obj; 9442534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (*cachedObj == NULL) { 945525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: global ref error", __FUNCTION__); 946525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return -1; 947525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 948525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return 0; 949525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 950525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 951525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 952525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 953525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 954525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpServiceSocket 955525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 956525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a new LLCP server socket. 957525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 958525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 959525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 960525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** sn: Service name 961525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** miu: Maximum information unit. 962525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** rw: Receive window size. 963525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** linearBufferLength: Max buffer size. 964525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 965525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpServiceSocket Java object. 966525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 967525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 9682534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpServiceSocket (JNIEnv* e, jobject, jint nSap, jstring sn, jint miu, jint rw, jint linearBufferLength) 969525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 970525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::tJNI_HANDLE jniHandle = PeerToPeer::getInstance().getNewJniHandle (); 971525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 9722534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedUtfChars serviceName(e, sn); 9732534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 9742534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ALOGD ("%s: enter: sap=%i; name=%s; miu=%i; rw=%i; buffLen=%i", __FUNCTION__, nSap, serviceName.c_str(), miu, rw, linearBufferLength); 975525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 976525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Create new NativeLlcpServiceSocket object */ 9772534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jobject serviceSocket = NULL; 978525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nfc_jni_cache_object(e, gNativeLlcpServiceSocketClassName, &(serviceSocket)) == -1) 979525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 980525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: Llcp socket object creation error", __FUNCTION__); 981525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 982525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 983525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 984525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Get NativeLlcpServiceSocket class object */ 9852534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> clsNativeLlcpServiceSocket(e, e->GetObjectClass(serviceSocket)); 986525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e->ExceptionCheck()) 987525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 988525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->ExceptionClear(); 989525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: Llcp Socket get object class error", __FUNCTION__); 990525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 991525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 992525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 9932534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (!PeerToPeer::getInstance().registerServer (jniHandle, serviceName.c_str())) 994525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 995525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: RegisterServer error", __FUNCTION__); 996525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 997525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 998525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 9992534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f; 10002534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 1001525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket handle to be the same as the NfaHandle*/ 10022534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mHandle", "I"); 10032534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f, (jint) jniHandle); 1004525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: socket Handle = 0x%X", __FUNCTION__, jniHandle); 1005525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1006525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket linear buffer length */ 10072534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalLinearBufferLength", "I"); 10082534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)linearBufferLength); 1009525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: buffer length = %d", __FUNCTION__, linearBufferLength); 1010525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1011525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket MIU */ 10122534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalMiu", "I"); 10132534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)miu); 1014525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: MIU = %d", __FUNCTION__, miu); 1015525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1016525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket RW */ 10172534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalRw", "I"); 10182534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)rw); 1019525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: RW = %d", __FUNCTION__, rw); 1020525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1021525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sLastError = 0; 1022525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1023525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return serviceSocket; 1024525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1025525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1026525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1027525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1028525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1029525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doGetLastError 1030525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1031525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get the last error code. 1032525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1033525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1034525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1035525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Last error code. 1036525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1037525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 10382534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jint nfcManager_doGetLastError(JNIEnv*, jobject) 1039525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1040525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: last error=%i", __FUNCTION__, sLastError); 1041525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sLastError; 1042525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1043525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1044525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1045525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1046525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1047525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDeinitialize 1048525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1049525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Turn off NFC. 1050525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1051525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1052525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1053525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 1054525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1055525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 10562534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doDeinitialize (JNIEnv*, jobject) 1057525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1058525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 1059525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1060525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = true; 1061525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project pn544InteropAbortNow (); 1062525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SecureElement::getInstance().finalize (); 1063525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1064525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 1065525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1066525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 1067525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_Disable (TRUE /* graceful */); 1068525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1069525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1070525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: wait for completion", __FUNCTION__); 1071525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.wait (); //wait for NFA command to finish 1072525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance ().handleNfcOnOff (false); 1073525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1074525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1075525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1076525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail disable; error=0x%X", __FUNCTION__, stat); 1077525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1078525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1079525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 1080525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 1081525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sAbortConnlessWait = true; 1082525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeLlcpConnectionlessSocket_abortWait(); 1083525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 1084525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sDiscoveryEnabled = false; 1085525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 1086525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsSecElemSelected = false; 1087525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1088525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1089525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //unblock NFA_EnablePolling() and NFA_DisablePolling() 1090525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 1091525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 1092525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1093525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1094525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 1095525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Finalize(); 1096525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1097525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1098525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1099525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1103525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpSocket 1105525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1106525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a LLCP connection-oriented socket. 1107525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1108525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1109525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 1110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** miu: Maximum information unit. 1111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** rw: Receive window size. 1112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** linearBufferLength: Max buffer size. 1113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpSocket Java object. 1115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 11172534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpSocket (JNIEnv* e, jobject, jint nSap, jint miu, jint rw, jint linearBufferLength) 1118525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1119525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; sap=%d; miu=%d; rw=%d; buffer len=%d", __FUNCTION__, nSap, miu, rw, linearBufferLength); 1120525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11212534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes PeerToPeer::tJNI_HANDLE jniHandle = PeerToPeer::getInstance().getNewJniHandle (); 11222534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes bool stat = PeerToPeer::getInstance().createClient (jniHandle, miu, rw); 1123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1124525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Create new NativeLlcpSocket object */ 11252534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jobject clientSocket = NULL; 1126525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nfc_jni_cache_object_local(e, gNativeLlcpSocketClassName, &(clientSocket)) == -1) 1127525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail Llcp socket creation", __FUNCTION__); 11292534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes return clientSocket; 1130525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1131525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1132525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Get NativeConnectionless class object */ 11332534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> clsNativeLlcpSocket(e, e->GetObjectClass(clientSocket)); 1134525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e->ExceptionCheck()) 1135525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1136525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->ExceptionClear(); 1137525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail get class object", __FUNCTION__); 11382534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes return clientSocket; 1139525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1140525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11412534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f; 11422534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 1143525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket SAP */ 11442534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mSap", "I"); 1145525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) nSap); 1146525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1147525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket handle */ 11482534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mHandle", "I"); 1149525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) jniHandle); 1150525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1151525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket MIU */ 11522534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mLocalMiu", "I"); 1153525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) miu); 1154525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1155525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket RW */ 11562534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mLocalRw", "I"); 1157525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) rw); 1158525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1159525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1160525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return clientSocket; 1161525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1162525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1165525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1166525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpConnectionlessSocket 1167525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a connection-less socket. 1169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1170525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1171525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 1172525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** sn: Service name. 1173525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1174525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpConnectionlessSocket Java object. 1175525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1176525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 11772534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpConnectionlessSocket (JNIEnv *, jobject, jint nSap, jstring /*sn*/) 1178525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1179525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: nSap=0x%X", __FUNCTION__, nSap); 1180525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1181525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1182525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1183525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1184525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1185525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1186525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doGetSecureElementList 1187525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1188525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get a list of secure element handles. 1189525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1190525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1191525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1192525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: List of secure element handles. 1193525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1194525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 11952534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jintArray nfcManager_doGetSecureElementList(JNIEnv* e, jobject) 1196525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1197525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s", __FUNCTION__); 1198525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return SecureElement::getInstance().getListOfEeHandles (e); 1199525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1200525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1201525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1202525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1203525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1204525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSelectSecureElement 1205525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1206525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: NFC controller starts routing data in listen mode. 1207525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1208525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1209525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1210525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1211525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1212525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 12132534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doSelectSecureElement(JNIEnv*, jobject) 1214525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1215525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 1216525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project bool stat = true; 1217525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1218525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::FULL_POWER); 1219525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1220525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sRfEnabled) { 1221525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Stop RF Discovery if we were polling 1222525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (false); 1223525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1224525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1225525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsSecElemSelected) 1226525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1227525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: already selected", __FUNCTION__); 1228525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 1229525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1230525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1231525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = SecureElement::getInstance().activate (0xABCDEF); 1232525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat) 1233525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SecureElement::getInstance().routeToSecureElement (); 1234525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsSecElemSelected = true; 1235525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1236525c260303268a83da4c3413b953d13c9084e834The Android Open Source ProjectTheEnd: 1237525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (true); 1238525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1239525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setModeOn (PowerSwitch::SE_ROUTING); 1240525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1241525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1242525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1243525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1244525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1245525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1246525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1247525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDeselectSecureElement 1248525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1249525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: NFC controller stops routing data in listen mode. 1250525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1251525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1252525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1253525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1254525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1255525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 12562534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doDeselectSecureElement(JNIEnv*, jobject) 1257525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1258525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 1259525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project bool stat = false; 1260be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project bool bRestartDiscovery = false; 1261525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1262525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (! sIsSecElemSelected) 1263525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1264525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: already deselected", __FUNCTION__); 1265525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 1266525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1267525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1268525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (PowerSwitch::getInstance ().getLevel() == PowerSwitch::LOW_POWER) 1269525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1270525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: do not deselect while power is OFF", __FUNCTION__); 1271525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsSecElemSelected = false; 1272525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 1273525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1274525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1275be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project if (sRfEnabled) { 1276be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project // Stop RF Discovery if we were polling 1277be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project startRfDiscovery (false); 1278be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project bRestartDiscovery = true; 1279be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project } 1280be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project 1281525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = SecureElement::getInstance().routeToDefault (); 1282525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsSecElemSelected = false; 1283525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1284525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if controller is not routing to sec elems AND there is no pipe connected, 1285525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //then turn off the sec elems 1286525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (SecureElement::getInstance().isBusy() == false) 1287525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SecureElement::getInstance().deactivate (0xABCDEF); 1288525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1289525c260303268a83da4c3413b953d13c9084e834The Android Open Source ProjectTheEnd: 1290be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project if (bRestartDiscovery) 1291be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project startRfDiscovery (true); 1292be1939b4b6003ac7a65fcb95a3912f5e1ce8e75fThe Android Open Source Project 1293525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if nothing is active after this, then tell the controller to power down 1294525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (! PowerSwitch::getInstance ().setModeOff (PowerSwitch::SE_ROUTING)) 1295525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::LOW_POWER); 1296525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1297525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1298525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1299525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1300525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1301525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1302525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1303525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: isPeerToPeer 1304525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1305525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Whether the activation data indicates the peer supports NFC-DEP. 1306525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** activated: Activation data. 1307525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1308525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if the peer supports NFC-DEP. 1309525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1310525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1311525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isPeerToPeer (tNFA_ACTIVATED& activated) 1312525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1313525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return activated.activate_ntf.protocol == NFA_PROTOCOL_NFC_DEP; 1314525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1315525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1316525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1317525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1318525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: isListenMode 1319525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1320525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Indicates whether the activation data indicates it is 1321525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** listen mode. 1322525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1323525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if this listen mode. 1324525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1325525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1326525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isListenMode(tNFA_ACTIVATED& activated) 1327525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1328525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return ((NFC_DISCOVERY_TYPE_LISTEN_A == activated.activate_ntf.rf_tech_param.mode) 1329525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_B == activated.activate_ntf.rf_tech_param.mode) 1330525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_F == activated.activate_ntf.rf_tech_param.mode) 1331525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE == activated.activate_ntf.rf_tech_param.mode) 1332525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE == activated.activate_ntf.rf_tech_param.mode) 1333525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_ISO15693 == activated.activate_ntf.rf_tech_param.mode) 1334525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_B_PRIME == activated.activate_ntf.rf_tech_param.mode)); 1335525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1336525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1337525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1338525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1339525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCheckLlcp 1340525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1341525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1342525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1343525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True 1344525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1345525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 13462534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doCheckLlcp(JNIEnv*, jobject) 1347525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1348525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s", __FUNCTION__); 1349525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1350525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1351525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1352525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1353525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1354525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1355525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doActivateLlcp 1356525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1357525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1358525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1359525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True 1360525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1361525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 13622534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doActivateLlcp(JNIEnv*, jobject) 1363525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1364525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s", __FUNCTION__); 1365525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1366525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1367525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1368525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1369525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1370525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1371525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doAbort 1372525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1373525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1374525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1375525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1376525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1377525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 13782534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doAbort(JNIEnv*, jobject) 1379525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1380525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: abort()", __FUNCTION__); 1381525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project abort(); 1382525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1383525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1384525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1385525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1386525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1387525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDownload 1388525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1389525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1390525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1391525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True 1392525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1393525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 13942534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doDownload(JNIEnv*, jobject) 1395525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1396525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s", __FUNCTION__); 1397525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1398525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1399525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1400525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1401525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1402525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1403525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doResetTimeouts 1404525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1405525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1406525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1407525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1408525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1409525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14102534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doResetTimeouts(JNIEnv*, jobject) 1411525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1412525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: %d millisec", __FUNCTION__, DEFAULT_GENERAL_TRANS_TIMEOUT); 1413525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project gGeneralTransceiveTimeout = DEFAULT_GENERAL_TRANS_TIMEOUT; 1414525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1415525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1416525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1417525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1418525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1419525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetTimeout 1420525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1421525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set timeout value. 1422525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1423525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1424525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** timeout: Timeout value. 1425525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1426525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 1427525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1428525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14292534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic bool nfcManager_doSetTimeout(JNIEnv*, jobject, jint /*tech*/, jint timeout) 1430525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1431525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (timeout <= 0) 1432525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1433525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: Timeout must be positive.",__FUNCTION__); 1434525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return false; 1435525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1436525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1437525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: timeout=%d", __FUNCTION__, timeout); 1438525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project gGeneralTransceiveTimeout = timeout; 1439525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return true; 1440525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1441525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1442525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1443525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1444525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1445525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doGetTimeout 1446525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1447525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get timeout value. 1448525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1449525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1450525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** tech: Not used. 1451525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1452525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Timeout value. 1453525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1454525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14552534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jint nfcManager_doGetTimeout(JNIEnv*, jobject, jint /*tech*/) 1456525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1457525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: timeout=%d", __FUNCTION__, gGeneralTransceiveTimeout); 1458525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return gGeneralTransceiveTimeout; 1459525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1460525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1461525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1462525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1463525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1464525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDump 1465525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1466525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1467525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1468525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1469525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1470525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Text dump. 1471525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1472525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14732534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jstring nfcManager_doDump(JNIEnv* e, jobject) 1474525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1475525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project char buffer[100]; 1476525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project snprintf(buffer, sizeof(buffer), "libnfc llc error_count=%u", /*libnfc_llc_error_count*/ 0); 1477525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return e->NewStringUTF(buffer); 1478525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1479525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1480525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1481525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1482525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1483525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetP2pInitiatorModes 1484525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1485525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set P2P initiator's activation modes. 1486525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1487525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1488525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** modes: Active and/or passive modes. The values are specified 1489525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** in external/libnfc-nxp/inc/phNfcTypes.h. See 1490525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** enum phNfc_eP2PMode_t. 1491525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1492525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 1493525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1494525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1495525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfcManager_doSetP2pInitiatorModes (JNIEnv *e, jobject o, jint modes) 1496525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1497525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: modes=0x%X", __FUNCTION__, modes); 1498525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 1499525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1500525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK mask = 0; 1501525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x01) mask |= NFA_TECHNOLOGY_MASK_A; 1502525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x02) mask |= NFA_TECHNOLOGY_MASK_F; 1503525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x04) mask |= NFA_TECHNOLOGY_MASK_F; 1504525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x08) mask |= NFA_TECHNOLOGY_MASK_A_ACTIVE; 1505525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x10) mask |= NFA_TECHNOLOGY_MASK_F_ACTIVE; 1506525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x20) mask |= NFA_TECHNOLOGY_MASK_F_ACTIVE; 1507525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = mask; 1508525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1509525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //this function is not called by the NFC service nor exposed by public API. 1510525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1511525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1512525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1513525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1514525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1515525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetP2pTargetModes 1516525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1517525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set P2P target's activation modes. 1518525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1519525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1520525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** modes: Active and/or passive modes. 1521525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1522525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 1523525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1524525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 15252534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doSetP2pTargetModes (JNIEnv*, jobject, jint modes) 1526525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1527525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: modes=0x%X", __FUNCTION__, modes); 1528525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Map in the right modes 1529525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK mask = 0; 1530525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x01) mask |= NFA_TECHNOLOGY_MASK_A; 1531525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x02) mask |= NFA_TECHNOLOGY_MASK_F; 1532525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x04) mask |= NFA_TECHNOLOGY_MASK_F; 1533525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x08) mask |= NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE; 1534525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1535525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().setP2pListenMask(mask); 1536525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //this function is not called by the NFC service nor exposed by public API. 1537525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1538525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1539525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 1540525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1541525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** JNI functions for android-4.0.1_r1 1542525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1543525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 1544525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic JNINativeMethod gMethods[] = 1545525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1546525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDownload", "()Z", 1547525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doDownload}, 1548525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1549525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"initializeNativeStructure", "()Z", 1550525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_initNativeStruc}, 1551525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1552525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doInitialize", "()Z", 1553525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doInitialize}, 1554525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1555525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDeinitialize", "()Z", 1556525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doDeinitialize}, 1557525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1558525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"enableDiscovery", "()V", 1559525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_enableDiscovery}, 1560525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1561525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doGetSecureElementList", "()[I", 1562525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doGetSecureElementList}, 1563525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1564525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSelectSecureElement", "()V", 1565525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSelectSecureElement}, 1566525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1567525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDeselectSecureElement", "()V", 1568525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doDeselectSecureElement}, 1569525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1570525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCheckLlcp", "()Z", 1571525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doCheckLlcp}, 1572525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1573525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doActivateLlcp", "()Z", 1574525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doActivateLlcp}, 1575525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1576525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpConnectionlessSocket", "(ILjava/lang/String;)Lcom/android/nfc/dhimpl/NativeLlcpConnectionlessSocket;", 1577525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doCreateLlcpConnectionlessSocket}, 1578525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1579525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpServiceSocket", "(ILjava/lang/String;III)Lcom/android/nfc/dhimpl/NativeLlcpServiceSocket;", 1580525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doCreateLlcpServiceSocket}, 1581525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1582525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpSocket", "(IIII)Lcom/android/nfc/dhimpl/NativeLlcpSocket;", 1583525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doCreateLlcpSocket}, 1584525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1585525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doGetLastError", "()I", 1586525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doGetLastError}, 1587525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1588525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"disableDiscovery", "()V", 1589525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_disableDiscovery}, 1590525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1591525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetTimeout", "(II)Z", 1592525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetTimeout}, 1593525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1594525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doGetTimeout", "(I)I", 1595525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doGetTimeout}, 1596525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1597525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doResetTimeouts", "()V", 1598525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doResetTimeouts}, 1599525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1600525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doAbort", "()V", 1601525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doAbort}, 1602525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1603525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetP2pInitiatorModes", "(I)V", 1604525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetP2pInitiatorModes}, 1605525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1606525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetP2pTargetModes", "(I)V", 1607525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetP2pTargetModes}, 1608525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1609525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDump", "()Ljava/lang/String;", 1610525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doDump}, 1611525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project}; 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** Function: register_com_android_nfc_NativeNfcManager 1617525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1618525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Regisgter JNI functions with Java Virtual Machine. 1619525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: Environment of JVM. 1620525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1621525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Status of registration. 1622525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1623525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1624525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectint register_com_android_nfc_NativeNfcManager (JNIEnv *e) 1625525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1626525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 1627525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().initialize (PowerSwitch::UNKNOWN_LEVEL); 1628525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1629525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return jniRegisterNativeMethods (e, gNativeNfcManagerClassName, gMethods, NELEM (gMethods)); 1630525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1631525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1632525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1633525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1634525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1635525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: startRfDiscovery 1636525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1637525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Ask stack to start polling and listening for devices. 1638525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** isStart: Whether to start. 1639525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1640525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1641525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1642525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1643525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid startRfDiscovery(bool isStart) 1644525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1645525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_FAILED; 1646525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1647525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: is start=%d", __FUNCTION__, isStart); 1648525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 1649525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = isStart ? NFA_StartRfDiscovery () : NFA_StopRfDiscovery (); 1650525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status == NFA_STATUS_OK) 1651525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1652525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.wait (); //wait for NFA_RF_DISCOVERY_xxxx_EVT 1653525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sRfEnabled = isStart; 1654525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1655525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1656525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1657525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: Failed to start/stop RF discovery; error=0x%X", __FUNCTION__, status); 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** 1664525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: doStartupConfig 1665525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1666525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Configure the NFC controller. 1667525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1668525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1669525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1670525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1671525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid doStartupConfig() 1672525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1673525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project unsigned long num = 0; 1674525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(0, 0); 1675525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_FAILED; 1676525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1677525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Enable the "RC workaround" to allow our stack/firmware to work with a retail 1678525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Nexus S that causes IOP issues. Only enable if value exists and set to 1. 1679525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_USE_NXP_P2P_RC_WORKAROUND, &num, sizeof(num)) && (num == 1)) 1680525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1681525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#if (NCI_VERSION > NCI_VERSION_20791B0) 1682525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 nfa_dm_rc_workaround[] = { 0x03, 0x0f, 0xab }; 1683525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#else 1684525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 nfa_dm_rc_workaround[] = { 0x01, 0x0f, 0xab, 0x01 }; 1685525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#endif 1686525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1687525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Configure RC work-around", __FUNCTION__); 1688525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 1689525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_SetConfig(NCI_PARAM_ID_FW_WORKAROUND, sizeof(nfa_dm_rc_workaround), &nfa_dm_rc_workaround[0]); 1690525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1691525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.wait (); 1692525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1693525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1694525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // If polling for Active mode, set the ordering so that we choose Active over Passive mode first. 1695525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nat && (nat->tech_mask & (NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE))) 1696525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1697525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 act_mode_order_param[] = { 0x01 }; 1698525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 1699525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_SetConfig(NCI_PARAM_ID_ACT_ORDER, sizeof(act_mode_order_param), &act_mode_order_param[0]); 1700525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1701525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.wait (); 1702525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1703525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1704525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Set configuration to allow UICC to Power off if there is no traffic. 1705525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_UICC_IDLE_TIMEOUT, &num, sizeof(num)) && (num != 0)) 1706525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1707525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // 61 => The least significant bit of this byte enables the power off when Idle mode. 1708525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // 00 87 93 03 == > These 4 bytes form a 4 byte value which decides the idle timeout(in us) 1709525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // value to trigger the uicc deactivation. 1710525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // e.g. in current example its value is 0x3938700 i.e. 60000000 is 60 seconds. 1711525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 swpcfg_param[] = { 0x61, 0x00, 0x82, 0x04, 0x20, 0xA1, 0x07, 0x00, 1712525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 0x90, 0xD0, 0x03, 0x00, 0x00, 0x87, 0x93, 0x03 }; 1713525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1714525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Configure UICC idle-timeout to %lu ms", __FUNCTION__, num); 1715525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1716525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Set the timeout from the .conf file value. 1717525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project num *= 1000; 1718525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 * p = &swpcfg_param[12]; 1719525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT32_TO_STREAM(p, num) 1720525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1721525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 1722525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_SetConfig(NCI_PARAM_ID_SWPCFG, sizeof(swpcfg_param), &swpcfg_param[0]); 1723525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1724525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.wait (); 1725525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1726525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1727525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Set antenna tuning configuration if configured. 1728525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PREINIT_DSP_CFG_SIZE 30 1729525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 preinit_dsp_param[PREINIT_DSP_CFG_SIZE]; 1730525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1731525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetStrValue(NAME_PREINIT_DSP_CFG, (char*)&preinit_dsp_param[0], sizeof(preinit_dsp_param))) 1732525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1733525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 1734525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_SetConfig(NCI_PARAM_ID_PREINIT_DSP_CFG, sizeof(preinit_dsp_param), &preinit_dsp_param[0]); 1735525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1736525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.wait (); 1737525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1738525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1739525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1740525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1741525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1742525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1743525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_isNfcActive 1744525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1745525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Used externaly to determine if NFC is active or not. 1746525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1747525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: 'true' if the NFC stack is running, else 'false'. 1748525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1749525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1750525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectbool nfcManager_isNfcActive() 1751525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1752525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sIsNfaEnabled; 1753525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1754525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1755525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1756525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1757525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1758525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: startStopPolling 1759525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1760525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Start or stop polling. 1761525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** isStartPolling: true to start polling; false to stop polling. 1762525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1763525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 1764525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1765525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1766525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid startStopPolling (bool isStartPolling) 1767525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1768525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; isStart=%u", __FUNCTION__, isStartPolling); 1769525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_FAILED; 1770525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1771525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (false); 1772525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (isStartPolling) 1773525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1774525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK tech_mask = DEFAULT_TECH_MASK; 1775525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project unsigned long num = 0; 1776525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_POLLING_TECH_MASK, &num, sizeof(num))) 1777525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tech_mask = num; 1778525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1779525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 1780525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enable polling", __FUNCTION__); 1781525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_EnablePolling (tech_mask); 1782525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1783525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1784525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: wait for enable event", __FUNCTION__); 1785525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_ENABLED_EVT 1786525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1787525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1788525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail enable polling; error=0x%X", __FUNCTION__, stat); 1789525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1790525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1791525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1792525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 1793525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: disable polling", __FUNCTION__); 1794525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_DisablePolling (); 1795525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1796525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1797525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_DISABLED_EVT 1798525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1799525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1800525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail disable polling; error=0x%X", __FUNCTION__, stat); 1801525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1802525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (true); 1803525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1804525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1805525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1806525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1807525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} /* namespace android */ 1808