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" 249f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen#include "RoutingManager.h" 25525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "NfcTag.h" 26525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "config.h" 27525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "PowerSwitch.h" 28525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "JavaClassConstants.h" 29525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "Pn544Interop.h" 302534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes#include <ScopedLocalRef.h> 312534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes#include <ScopedUtfChars.h> 329f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen#include <ScopedPrimitiveArray.h> 33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern "C" 35525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_api.h" 37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_p2p_api.h" 38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "rw_api.h" 39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfa_ee_api.h" 40525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "nfc_brcm_defs.h" 41525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project #include "ce_api.h" 42525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern const UINT8 nfca_version_string []; 45a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chuextern const UINT8 nfa_version_string []; 46a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chuextern tNFA_DM_DISC_FREQ_CFG* p_nfa_dm_rf_disc_freq_cfg; //defined in stack 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; 51b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen extern void nativeNfcTag_doTransceiveStatus (tNFA_STATUS status, uint8_t * buf, uint32_t buflen); 52a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu extern void nativeNfcTag_notifyRfTimeout (); 53525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doConnectStatus (jboolean is_connect_ok); 54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doDeactivateStatus (int status); 55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doWriteStatus (jboolean is_write_ok); 56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doCheckNdefResult (tNFA_STATUS status, uint32_t max_size, uint32_t current_size, uint8_t flags); 57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doMakeReadonlyResult (tNFA_STATUS status); 58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doPresenceCheckResult (tNFA_STATUS status); 59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_formatStatus (bool is_ok); 60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_resetPresenceCheck (); 61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_doReadCompleted (tNFA_STATUS status); 62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_abortWaits (); 63525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeLlcpConnectionlessSocket_abortWait (); 64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeNfcTag_registerNdefTypeHandler (); 65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project extern void nativeLlcpConnectionlessSocket_receiveData (uint8_t* data, uint32_t len, uint32_t remote_sap); 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** 71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** public variables and functions 72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 74a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chubool gActivated = false; 75a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan ChuSyncEvent gDeactivatedEvent; 76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 78525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 79525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyNdefMessageListeners; 80525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyTransactionListeners; 81525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyLlcpLinkActivation; 82525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project jmethodID gCachedNfcManagerNotifyLlcpLinkDeactivated; 8357a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen jmethodID gCachedNfcManagerNotifyLlcpFirstPacketReceived; 849f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen jmethodID gCachedNfcManagerNotifyHostEmuActivated; 859f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen jmethodID gCachedNfcManagerNotifyHostEmuData; 869f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen jmethodID gCachedNfcManagerNotifyHostEmuDeactivated; 87c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen jmethodID gCachedNfcManagerNotifyRfFieldActivated; 88c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen jmethodID gCachedNfcManagerNotifyRfFieldDeactivated; 89525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeP2pDeviceClassName = "com/android/nfc/dhimpl/NativeP2pDevice"; 90525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpServiceSocketClassName = "com/android/nfc/dhimpl/NativeLlcpServiceSocket"; 91525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpConnectionlessSocketClassName = "com/android/nfc/dhimpl/NativeLlcpConnectionlessSocket"; 92525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeLlcpSocketClassName = "com/android/nfc/dhimpl/NativeLlcpSocket"; 93525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeNfcTagClassName = "com/android/nfc/dhimpl/NativeNfcTag"; 94525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project const char* gNativeNfcManagerClassName = "com/android/nfc/dhimpl/NativeNfcManager"; 95525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void doStartupConfig (); 96525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void startStopPolling (bool isStartPolling); 97525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void startRfDiscovery (bool isStart); 98525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 99525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 103525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** private variables and functions 104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 105525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 106525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android 107525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 108525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jint sLastError = ERROR_BUFFER_TOO_SMALL; 109525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jmethodID sCachedNfcManagerNotifySeApduReceived; 110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jmethodID sCachedNfcManagerNotifySeMifareAccess; 111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jmethodID sCachedNfcManagerNotifySeEmvCardRemoval; 112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jmethodID sCachedNfcManagerNotifyTargetDeselected; 113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaEnableEvent; //event for NFA_Enable() 114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaDisableEvent; //event for NFA_Disable() 115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaEnableDisablePollingEvent; //event for NFA_EnablePolling(), NFA_DisablePolling() 116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic SyncEvent sNfaSetConfigEvent; // event for Set_Config.... 117f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenenstatic SyncEvent sNfaGetConfigEvent; // event for Get_Config.... 118525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sIsNfaEnabled = false; 1190799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic bool sDiscoveryEnabled = false; //is polling or listening 1200799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic bool sPollingEnabled = false; //is polling for tag? 121525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sIsDisabling = false; 122525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sRfEnabled = false; // whether RF discovery is enabled 123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sSeRfActive = false; // whether RF with SE is likely active 124c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenenstatic bool sReaderModeEnabled = false; // whether we're only reading tags, not allowing P2p/card emu 12531b0f4653686119d74876cae5d637c5baf52b935Andres Moralesstatic bool sP2pEnabled = false; 126525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sP2pActive = false; // whether p2p was last active 127525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool sAbortConnlessWait = false; 128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define CONFIG_UPDATE_TECH_MASK (1 << 1) 129525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DEFAULT_TECH_MASK (NFA_TECHNOLOGY_MASK_A \ 130525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_B \ 131525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_F \ 132525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_ISO15693 \ 133525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_B_PRIME \ 134525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project | NFA_TECHNOLOGY_MASK_A_ACTIVE \ 13597a71fe90493efd5947bb6f18c7b58a7e795c1ddEvan Chu | NFA_TECHNOLOGY_MASK_F_ACTIVE \ 13697a71fe90493efd5947bb6f18c7b58a7e795c1ddEvan Chu | NFA_TECHNOLOGY_MASK_KOVIO) 137c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen#define DEFAULT_DISCOVERY_DURATION 500 1388d154680537afa5242edeb98c8f414d6186558cfMartijn Coenen#define READER_MODE_DISCOVERY_DURATION 200 139525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 140525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfaConnectionCallback (UINT8 event, tNFA_CONN_EVT_DATA *eventData); 141525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfaDeviceManagementCallback (UINT8 event, tNFA_DM_CBACK_DATA *eventData); 142525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isPeerToPeer (tNFA_ACTIVATED& activated); 143525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isListenMode(tNFA_ACTIVATED& activated); 144d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Moralesstatic void enableDisableLptd (bool enable); 1450799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic tNFA_STATUS stopPolling_rfDiscoveryDisabled(); 1460799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic tNFA_STATUS startPolling_rfDiscoveryDisabled(tNFA_TECHNOLOGY_MASK tech_mask); 147525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 148f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenenstatic UINT16 sCurrentConfigLen; 149f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenenstatic UINT8 sConfig[256]; 150c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen 151525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project///////////////////////////////////////////////////////////// 152525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project///////////////////////////////////////////////////////////// 153525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 154525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 155525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 156525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 157525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: getNative 158525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 159525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get native data 160525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 161525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Native data structure. 162525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnfc_jni_native_data *getNative (JNIEnv* e, jobject o) 165525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 166525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project static struct nfc_jni_native_data *sCachedNat = NULL; 167525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e) 168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sCachedNat = nfc_jni_get_nat(e, o); 170525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 171525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sCachedNat; 172525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 173525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 174525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 175525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 176525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 177525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: handleRfDiscoveryEvent 178525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 179525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Handle RF-discovery events from the stack. 180525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** discoveredDevice: Discovered device. 181525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 182525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 183525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 184525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 185525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void handleRfDiscoveryEvent (tNFC_RESULT_DEVT* discoveredDevice) 186525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 187525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (discoveredDevice->more) 188525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 189525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //there is more discovery notification coming 190525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return; 191525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 192525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 193525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project bool isP2p = NfcTag::getInstance ().isP2pDiscovered (); 194c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen if (!sReaderModeEnabled && isP2p) 195525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 196525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //select the peer that supports P2P 197525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance ().selectP2p(); 198525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 199525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 200525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 201525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //select the first of multiple tags that is discovered 202525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance ().selectFirstTag(); 203525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 204525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 205525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 206525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 207525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 208525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 209525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfaConnectionCallback 210525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 211525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Receive connection-related events from stack. 212525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** connEvent: Event code. 213525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** eventData: Event data. 214525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 215525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 216525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 217525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 218525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfaConnectionCallback (UINT8 connEvent, tNFA_CONN_EVT_DATA* eventData) 219525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 220525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_FAILED; 221525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: event= %u", __FUNCTION__, connEvent); 222525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 223525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project switch (connEvent) 224525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 225525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_POLL_ENABLED_EVT: // whether polling successfully started 226525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 227525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_POLL_ENABLED_EVT: status = %u", __FUNCTION__, eventData->status); 228525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 229525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 230525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 231525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 232525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 233525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 234525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_POLL_DISABLED_EVT: // Listening/Polling stopped 235525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 236525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_POLL_DISABLED_EVT: status = %u", __FUNCTION__, eventData->status); 237525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 238525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 239525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 240525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 241525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 242525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 243525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_RF_DISCOVERY_STARTED_EVT: // RF Discovery started 244525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 245525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_RF_DISCOVERY_STARTED_EVT: status = %u", __FUNCTION__, eventData->status); 246525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 247525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 248525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 249525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 250525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 251525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 252525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_RF_DISCOVERY_STOPPED_EVT: // RF Discovery stopped event 253525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 254525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_RF_DISCOVERY_STOPPED_EVT: status = %u", __FUNCTION__, eventData->status); 255525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 256525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 257525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 258525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 259525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 260525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 261525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DISC_RESULT_EVT: // NFC link/protocol discovery notificaiton 262525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->disc_result.status; 263525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_DISC_RESULT_EVT: status = %d", __FUNCTION__, status); 264525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 265525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 266525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_DISC_RESULT_EVT error: status = %d", __FUNCTION__, status); 267525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 268525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 269525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 270525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler(connEvent, eventData); 271525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project handleRfDiscoveryEvent(&eventData->disc_result.discovery_ntf); 272525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 273525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 274525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 275525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SELECT_RESULT_EVT: // NFC link/protocol discovery select response 276525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_SELECT_RESULT_EVT: status = %d, gIsSelectingRfInterface = %d, sIsDisabling=%d", __FUNCTION__, eventData->status, gIsSelectingRfInterface, sIsDisabling); 277525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 278525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsDisabling) 279525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 280525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 281525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->status != NFA_STATUS_OK) 282525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 283525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (gIsSelectingRfInterface) 284525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 285525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doConnectStatus(false); 286525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 287525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 288525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_SELECT_RESULT_EVT error: status = %d", __FUNCTION__, eventData->status); 289525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Deactivate (FALSE); 290525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 291525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 292525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 293525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DEACTIVATE_FAIL_EVT: 294525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_DEACTIVATE_FAIL_EVT: status = %d", __FUNCTION__, eventData->status); 295525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 296525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 297525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_ACTIVATED_EVT: // NFC link/protocol activated 298525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_ACTIVATED_EVT: gIsSelectingRfInterface=%d, sIsDisabling=%d", __FUNCTION__, gIsSelectingRfInterface, sIsDisabling); 299a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcTag::getInstance().setActive(true); 300b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen if (sIsDisabling || !sIsNfaEnabled) 301525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 302a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu gActivated = true; 303525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 304525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().setActivationState (); 305525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (gIsSelectingRfInterface) 306525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 307525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doConnectStatus(true); 308525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 309525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 310525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 311525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_resetPresenceCheck(); 312525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (isPeerToPeer(eventData->activated)) 313525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 314f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen if (sReaderModeEnabled) 315f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen { 316f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen ALOGD("%s: ignoring peer target in reader mode.", __FUNCTION__); 317f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen NFA_Deactivate (FALSE); 318f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen break; 319f5cd84c3a7ffb66196ab3c0745569da937d7533bMartijn Coenen } 320525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sP2pActive = true; 321525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_ACTIVATED_EVT; is p2p", __FUNCTION__); 322525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Disable RF field events in case of p2p 323525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 nfa_disable_rf_events[] = { 0x00 }; 324525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Disabling RF field events", __FUNCTION__); 325525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = NFA_SetConfig(NCI_PARAM_ID_RF_FIELD_INFO, sizeof(nfa_disable_rf_events), 326525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project &nfa_disable_rf_events[0]); 327525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status == NFA_STATUS_OK) { 328525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: Disabled RF field events", __FUNCTION__); 329525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } else { 330525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: Failed to disable RF field events", __FUNCTION__); 331525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 332525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 333525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else if (pn544InteropIsBusy() == false) 334525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 335525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 336525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 337525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // We know it is not activating for P2P. If it activated in 33857a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen // listen mode then it is likely for an SE transaction. 339525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Send the RF Event. 340525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (isListenMode(eventData->activated)) 341525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 342525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sSeRfActive = true; 343525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 344525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 345525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 346525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 347525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DEACTIVATED_EVT: // NFC link/protocol deactivated 348525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_DEACTIVATED_EVT Type: %u, gIsTagDeactivating: %d", __FUNCTION__, eventData->deactivated.type,gIsTagDeactivating); 349525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().setDeactivationState (eventData->deactivated); 350525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->deactivated.type != NFA_DEACTIVATE_TYPE_SLEEP) 351525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 352a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 353a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu SyncEventGuard g (gDeactivatedEvent); 354a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu gActivated = false; //guard this variable from multi-threaded access 355a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu gDeactivatedEvent.notifyOne (); 356a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu } 357525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_resetPresenceCheck(); 358525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 359525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 360525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 361525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 362525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else if (gIsTagDeactivating) 363525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 364a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcTag::getInstance().setActive(false); 365525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doDeactivateStatus(0); 366525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 367525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 368525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // If RF is activated for what we think is a Secure Element transaction 369525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // and it is deactivated to either IDLE or DISCOVERY mode, notify w/event. 370525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if ((eventData->deactivated.type == NFA_DEACTIVATE_TYPE_IDLE) 371525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (eventData->deactivated.type == NFA_DEACTIVATE_TYPE_DISCOVERY)) 372525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 373525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sSeRfActive) { 374525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sSeRfActive = false; 375525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } else if (sP2pActive) { 376525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sP2pActive = false; 377525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Make sure RF field events are re-enabled 378b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen ALOGD("%s: NFA_DEACTIVATED_EVT; is p2p", __FUNCTION__); 379525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Disable RF field events in case of p2p 380525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 nfa_enable_rf_events[] = { 0x01 }; 381525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 382b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen if (!sIsDisabling && sIsNfaEnabled) 383b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen { 384b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen ALOGD ("%s: Enabling RF field events", __FUNCTION__); 385b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen status = NFA_SetConfig(NCI_PARAM_ID_RF_FIELD_INFO, sizeof(nfa_enable_rf_events), 386b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen &nfa_enable_rf_events[0]); 387b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen if (status == NFA_STATUS_OK) { 388b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen ALOGD ("%s: Enabled RF field events", __FUNCTION__); 389b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen } else { 390b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen ALOGE ("%s: Failed to enable RF field events", __FUNCTION__); 391b408fc371821c397b47c8722c339c6b4359e062fMartijn Coenen } 392525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 393525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 394525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 395525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 396525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 397525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 398525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_TLV_DETECT_EVT: // TLV Detection complete 399525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->tlv_detect.status; 400525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_TLV_DETECT_EVT: status = %d, protocol = %d, num_tlvs = %d, num_bytes = %d", 401525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project __FUNCTION__, status, eventData->tlv_detect.protocol, 402525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->tlv_detect.num_tlvs, eventData->tlv_detect.num_bytes); 403525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 404525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 405525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_TLV_DETECT_EVT error: status = %d", __FUNCTION__, status); 406525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 407525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 408525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 409525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_NDEF_DETECT_EVT: // NDEF Detection complete; 410525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if status is failure, it means the tag does not contain any or valid NDEF data; 411525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //pass the failure status to the NFC Service; 412525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->ndef_detect.status; 413525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_NDEF_DETECT_EVT: status = 0x%X, protocol = %u, " 414525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "max_size = %lu, cur_size = %lu, flags = 0x%X", __FUNCTION__, 415525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status, 416525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.protocol, eventData->ndef_detect.max_size, 417525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.cur_size, eventData->ndef_detect.flags); 418525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 419525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doCheckNdefResult(status, 420525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.max_size, eventData->ndef_detect.cur_size, 421525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->ndef_detect.flags); 422525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 423525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 424525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DATA_EVT: // Data message received (for non-NDEF reads) 425b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen ALOGD("%s: NFA_DATA_EVT: status = 0x%X, len = %d", __FUNCTION__, eventData->status, eventData->data.len); 426b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen nativeNfcTag_doTransceiveStatus(eventData->status, eventData->data.p_data, eventData->data.len); 427525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 428a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu case NFA_RW_INTF_ERROR_EVT: 429a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGD("%s: NFC_RW_INTF_ERROR_EVT", __FUNCTION__); 430a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nativeNfcTag_notifyRfTimeout(); 431b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen nativeNfcTag_doReadCompleted (NFA_STATUS_TIMEOUT); 432a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu break; 433525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SELECT_CPLT_EVT: // Select completed 434525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = eventData->status; 435525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_SELECT_CPLT_EVT: status = %d", __FUNCTION__, status); 436525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status != NFA_STATUS_OK) 437525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 438525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_SELECT_CPLT_EVT error: status = %d", __FUNCTION__, status); 439525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 440525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 441525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 442525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_READ_CPLT_EVT: // NDEF-read or tag-specific-read completed 443525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_READ_CPLT_EVT: status = 0x%X", __FUNCTION__, eventData->status); 444525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doReadCompleted (eventData->status); 445525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().connectionEventHandler (connEvent, eventData); 446525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 447525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 448525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_WRITE_CPLT_EVT: // Write completed 449525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_WRITE_CPLT_EVT: status = %d", __FUNCTION__, eventData->status); 450525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doWriteStatus (eventData->status == NFA_STATUS_OK); 451525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 452525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 453525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SET_TAG_RO_EVT: // Tag set as Read only 454525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_SET_TAG_RO_EVT: status = %d", __FUNCTION__, eventData->status); 455525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doMakeReadonlyResult(eventData->status); 456525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 457525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 458525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_NDEF_WRITE_START_EVT: // NDEF write started 459525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_CE_NDEF_WRITE_START_EVT: status: %d", __FUNCTION__, eventData->status); 460525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 461525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (eventData->status != NFA_STATUS_OK) 462525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: NFA_CE_NDEF_WRITE_START_EVT error: status = %d", __FUNCTION__, eventData->status); 463525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 464525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 465525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_NDEF_WRITE_CPLT_EVT: // NDEF write completed 466525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: FA_CE_NDEF_WRITE_CPLT_EVT: len = %lu", __FUNCTION__, eventData->ndef_write_cplt.len); 467525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 468525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 469525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_LLCP_ACTIVATED_EVT: // LLCP link is activated 470525c260303268a83da4c3413b953d13c9084e834The 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", 471525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project __FUNCTION__, 472525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.is_initiator, 473525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_wks, 474525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_lsc, 475525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.remote_link_miu, 476525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->llcp_activated.local_link_miu); 477525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 478525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().llcpActivatedHandler (getNative(0, 0), eventData->llcp_activated); 479525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 480525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 481525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_LLCP_DEACTIVATED_EVT: // LLCP link is deactivated 482525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_LLCP_DEACTIVATED_EVT", __FUNCTION__); 483525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().llcpDeactivatedHandler (getNative(0, 0), eventData->llcp_deactivated); 484525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 48557a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen case NFA_LLCP_FIRST_PACKET_RECEIVED_EVT: // Received first packet over llcp 48657a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen ALOGD("%s: NFA_LLCP_FIRST_PACKET_RECEIVED_EVT", __FUNCTION__); 48757a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen PeerToPeer::getInstance().llcpFirstPacketHandler (getNative(0, 0)); 48857a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen break; 489525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_PRESENCE_CHECK_EVT: 490525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_PRESENCE_CHECK_EVT", __FUNCTION__); 491525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_doPresenceCheckResult (eventData->status); 492525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 493525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_FORMAT_CPLT_EVT: 494525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_FORMAT_CPLT_EVT: status=0x%X", __FUNCTION__, eventData->status); 495525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_formatStatus (eventData->status == NFA_STATUS_OK); 496525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 497525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 498525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_I93_CMD_CPLT_EVT: 499525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_I93_CMD_CPLT_EVT: status=0x%X", __FUNCTION__, eventData->status); 500525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 501525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 502525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_CE_UICC_LISTEN_CONFIGURED_EVT : 503525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_CE_UICC_LISTEN_CONFIGURED_EVT : status=0x%X", __FUNCTION__, eventData->status); 504525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 505525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 506525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_SET_P2P_LISTEN_TECH_EVT: 507525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s: NFA_SET_P2P_LISTEN_TECH_EVT", __FUNCTION__); 508525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().connectionEventHandler (connEvent, eventData); 509525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 510525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 511525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project default: 512525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: unknown event ????", __FUNCTION__); 513525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 514525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 515525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 516525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 517525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 518525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 519525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 520525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_initNativeStruc 521525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 522525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Initialize variables. 523525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 524525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 525525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 526525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 527525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 528525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 529525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic jboolean nfcManager_initNativeStruc (JNIEnv* e, jobject o) 530525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 531525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 532525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5332534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nfc_jni_native_data* nat = (nfc_jni_native_data*)malloc(sizeof(struct nfc_jni_native_data)); 534525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nat == NULL) 535525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 536525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail allocate native data", __FUNCTION__); 537525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 538525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 539525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 540525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project memset (nat, 0, sizeof(*nat)); 5412534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->GetJavaVM(&(nat->vm)); 5422534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nat->env_version = e->GetVersion(); 5432534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes nat->manager = e->NewGlobalRef(o); 544525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5452534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> cls(e, e->GetObjectClass(o)); 546fb18ffb259fe8f40e81516842497735a7c0b6a8cAndres Morales jfieldID f = e->GetFieldID(cls.get(), "mNative", "J"); 547fb18ffb259fe8f40e81516842497735a7c0b6a8cAndres Morales e->SetLongField(o, f, (jlong)nat); 548525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 549525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Initialize native cached references */ 5502534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyNdefMessageListeners = e->GetMethodID(cls.get(), 551525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyNdefMessageListeners", "(Lcom/android/nfc/dhimpl/NativeNfcTag;)V"); 5522534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyLlcpLinkActivation = e->GetMethodID(cls.get(), 553525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyLlcpLinkActivation", "(Lcom/android/nfc/dhimpl/NativeP2pDevice;)V"); 5542534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes gCachedNfcManagerNotifyLlcpLinkDeactivated = e->GetMethodID(cls.get(), 555525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project "notifyLlcpLinkDeactivated", "(Lcom/android/nfc/dhimpl/NativeP2pDevice;)V"); 55657a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen gCachedNfcManagerNotifyLlcpFirstPacketReceived = e->GetMethodID(cls.get(), 55757a44d07a3de327e8cdbbcd622118aa517313dbeMartijn Coenen "notifyLlcpLinkFirstPacketReceived", "(Lcom/android/nfc/dhimpl/NativeP2pDevice;)V"); 558525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5599f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen gCachedNfcManagerNotifyHostEmuActivated = e->GetMethodID(cls.get(), 5609f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen "notifyHostEmuActivated", "()V"); 5619f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 5629f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen gCachedNfcManagerNotifyHostEmuData = e->GetMethodID(cls.get(), 5639f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen "notifyHostEmuData", "([B)V"); 5649f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 5659f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen gCachedNfcManagerNotifyHostEmuDeactivated = e->GetMethodID(cls.get(), 5669f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen "notifyHostEmuDeactivated", "()V"); 5679f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 568c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen gCachedNfcManagerNotifyRfFieldActivated = e->GetMethodID(cls.get(), 569c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen "notifyRfFieldActivated", "()V"); 570c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen gCachedNfcManagerNotifyRfFieldDeactivated = e->GetMethodID(cls.get(), 571c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen "notifyRfFieldDeactivated", "()V"); 572c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen 5732534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (nfc_jni_cache_object(e, gNativeNfcTagClassName, &(nat->cached_NfcTag)) == -1) 574525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 575525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail cache NativeNfcTag", __FUNCTION__); 576525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 577525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 578525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 5792534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (nfc_jni_cache_object(e, gNativeP2pDeviceClassName, &(nat->cached_P2pDevice)) == -1) 580525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 581525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail cache NativeP2pDevice", __FUNCTION__); 582525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_FALSE; 583525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 584525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 585525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 586525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 587525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 588525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 589525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 590525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 591525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 592525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfaDeviceManagementCallback 593525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 594525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Receive device management events from stack. 595525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** dmEvent: Device-management event ID. 596525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** eventData: Data associated with event ID. 597525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 598525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 599525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 600525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 601525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid nfaDeviceManagementCallback (UINT8 dmEvent, tNFA_DM_CBACK_DATA* eventData) 602525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 603525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; event=0x%X", __FUNCTION__, dmEvent); 604525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 605525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project switch (dmEvent) 606525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 607525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_ENABLE_EVT: /* Result of NFA_Enable */ 608525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 609525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 610525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_ENABLE_EVT; status=0x%X", 611525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project __FUNCTION__, eventData->status); 612525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = eventData->status == NFA_STATUS_OK; 613525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 614525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.notifyOne (); 615525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 616525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 617525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 618525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_DISABLE_EVT: /* Result of NFA_Disable */ 619525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 620525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 621525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_DISABLE_EVT", __FUNCTION__); 622525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 623525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 624525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.notifyOne (); 625525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 626525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 627525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 628525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_SET_CONFIG_EVT: //result of NFA_SetConfig 629525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_SET_CONFIG_EVT", __FUNCTION__); 630525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 631525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 632525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.notifyOne(); 633525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 634525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 635525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 636525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_GET_CONFIG_EVT: /* Result of NFA_GetConfig */ 637525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_GET_CONFIG_EVT", __FUNCTION__); 638f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen { 639f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen SyncEventGuard guard (sNfaGetConfigEvent); 640f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen if (eventData->status == NFA_STATUS_OK && 641f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen eventData->get_config.tlv_size <= sizeof(sConfig)) 642f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen { 643f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen sCurrentConfigLen = eventData->get_config.tlv_size; 644f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen memcpy(sConfig, eventData->get_config.param_tlvs, eventData->get_config.tlv_size); 645f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen } 646f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen else 647f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen { 648f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen ALOGE("%s: NFA_DM_GET_CONFIG failed", __FUNCTION__); 649f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen sCurrentConfigLen = 0; 650f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen } 651f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen sNfaGetConfigEvent.notifyOne(); 652f5954743f1d8b8ace641880fd55466fff4d914cbMartijn Coenen } 653525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 654525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 655525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_RF_FIELD_EVT: 656525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: NFA_DM_RF_FIELD_EVT; status=0x%X; field status=%u", __FUNCTION__, 657525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project eventData->rf_field.status, eventData->rf_field.rf_field_status); 658c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen if (!sP2pActive && eventData->rf_field.status == NFA_STATUS_OK) 659c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen { 660c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen struct nfc_jni_native_data *nat = getNative(NULL, NULL); 661c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen JNIEnv* e = NULL; 662c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen ScopedAttach attach(nat->vm, &e); 663c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen if (e == NULL) 664c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen { 665c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen ALOGE ("jni env is null"); 666c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen return; 667c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen } 668c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen if (eventData->rf_field.rf_field_status == NFA_DM_RF_FIELD_ON) 669c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen e->CallVoidMethod (nat->manager, android::gCachedNfcManagerNotifyRfFieldActivated); 670c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen else 671c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen e->CallVoidMethod (nat->manager, android::gCachedNfcManagerNotifyRfFieldDeactivated); 672c19c065b6d0e1a088780c4dca27a1404d5926765Martijn Coenen } 673525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 674525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 675525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_NFCC_TRANSPORT_ERR_EVT: 676525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_NFCC_TIMEOUT_EVT: 677525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 678525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (dmEvent == NFA_DM_NFCC_TIMEOUT_EVT) 679a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGE ("%s: NFA_DM_NFCC_TIMEOUT_EVT; abort", __FUNCTION__); 680a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu else if (dmEvent == NFA_DM_NFCC_TRANSPORT_ERR_EVT) 681a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGE ("%s: NFA_DM_NFCC_TRANSPORT_ERR_EVT; abort", __FUNCTION__); 682525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 683525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 684525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 685525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sAbortConnlessWait = true; 686525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeLlcpConnectionlessSocket_abortWait(); 687525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 688525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: aborting sNfaEnableDisablePollingEvent", __FUNCTION__); 689525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 690525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne(); 691525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 692525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 693525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: aborting sNfaEnableEvent", __FUNCTION__); 694525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 695525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.notifyOne(); 696525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 697525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 698525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: aborting sNfaDisableEvent", __FUNCTION__); 699525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 700525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.notifyOne(); 701525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 702525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sDiscoveryEnabled = false; 7030799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sPollingEnabled = false; 704525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().abort (); 705525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 706525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!sIsDisabling && sIsNfaEnabled) 707525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 708525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Disable(FALSE); 709525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = true; 710525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 711525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 712525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 713525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 714525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 715525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 716525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().initialize (PowerSwitch::UNKNOWN_LEVEL); 717a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGE ("%s: crash NFC service", __FUNCTION__); 718a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ////////////////////////////////////////////// 719a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu //crash the NFC service process so it can restart automatically 720a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu abort (); 721a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ////////////////////////////////////////////// 722525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 723525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 724525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 725525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project case NFA_DM_PWR_MODE_CHANGE_EVT: 726525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().deviceManagementCallback (dmEvent, eventData); 727525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 728525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 729525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project default: 730525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: unhandled event", __FUNCTION__); 731525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project break; 732525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 733525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 734525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 7359f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen/******************************************************************************* 7369f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7379f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Function: nfcManager_sendRawFrame 7389f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7399f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Description: Send a raw frame. 7409f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** e: JVM environment. 7419f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** o: Java object. 7429f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7439f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Returns: True if ok. 7449f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7459f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen*******************************************************************************/ 746c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenenstatic jboolean nfcManager_sendRawFrame (JNIEnv* e, jobject, jbyteArray data) 7479f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen{ 7489f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen ScopedByteArrayRO bytes(e, data); 7499f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen uint8_t* buf = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(&bytes[0])); 7509f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen size_t bufLen = bytes.size(); 7519f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen tNFA_STATUS status = NFA_SendRawFrame (buf, bufLen, 0); 7529f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 7539f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen return (status == NFA_STATUS_OK); 7549f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen} 7559f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 7569f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen/******************************************************************************* 7579f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7589f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Function: nfcManager_routeAid 7599f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7609f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Description: Route an AID to an EE 7619f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** e: JVM environment. 7629f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** o: Java object. 7639f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7649f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Returns: True if ok. 7659f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7669f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen*******************************************************************************/ 767c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenenstatic jboolean nfcManager_routeAid (JNIEnv* e, jobject, jbyteArray aid, jint route) 7689f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen{ 7699f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen ScopedByteArrayRO bytes(e, aid); 7709f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen uint8_t* buf = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(&bytes[0])); 7719f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen size_t bufLen = bytes.size(); 7729f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen bool result = RoutingManager::getInstance().addAidRouting(buf, bufLen, route); 7739f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen return result; 7749f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen} 7759f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 7769f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen/******************************************************************************* 7779f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7789f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Function: nfcManager_unrouteAid 7799f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7809f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Description: Remove a AID routing 7819f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** e: JVM environment. 7829f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** o: Java object. 7839f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7849f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** Returns: True if ok. 7859f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen** 7869f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen*******************************************************************************/ 787c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenenstatic jboolean nfcManager_unrouteAid (JNIEnv* e, jobject, jbyteArray aid) 7889f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen{ 7899f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen ScopedByteArrayRO bytes(e, aid); 7909f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen uint8_t* buf = const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(&bytes[0])); 7919f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen size_t bufLen = bytes.size(); 7929f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen bool result = RoutingManager::getInstance().removeAidRouting(buf, bufLen); 7939f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen return result; 7949f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen} 795525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 796525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 797525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 798f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** Function: nfcManager_commitRouting 799f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** 800f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** Description: Sends the AID routing table to the controller 801f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** e: JVM environment. 802f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** o: Java object. 803f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** 804f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** Returns: True if ok. 805f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** 806f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen*******************************************************************************/ 807f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenenstatic jboolean nfcManager_commitRouting (JNIEnv* e, jobject) 808f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen{ 809f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen return RoutingManager::getInstance().commitRouting(); 810f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen} 811f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen 812f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen/******************************************************************************* 813f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen** 814525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doInitialize 815525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 816525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Turn on NFC. 817525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 818525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 819525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 820525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 821525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 822525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 823304a6342ee7e5620d3b50d988755c035f1686dc2Martijn Coenenstatic jboolean nfcManager_doInitialize (JNIEnv* e, jobject o) 824525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 825a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGD ("%s: enter; ver=%s nfa=%s NCI_VERSION=0x%02X", 826a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu __FUNCTION__, nfca_version_string, nfa_version_string, NCI_VERSION); 827525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_OK; 828525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 829d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales PowerSwitch & powerSwitch = PowerSwitch::getInstance (); 830d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales 831525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 832525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 833525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: already enabled", __FUNCTION__); 834525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 835525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 836525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 837d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales powerSwitch.initialize (PowerSwitch::FULL_POWER); 838525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 839525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 840525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project unsigned long num = 0; 841525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 842525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 843525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Initialize(); //start GKI, NCI task, NFC task 844525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 845525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 846525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableEvent); 847525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tHAL_NFC_ENTRY* halFuncEntries = theInstance.GetHalEntryFuncs (); 848525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 849525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_Init (halFuncEntries); 850525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 851525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_Enable (nfaDeviceManagementCallback, nfaConnectionCallback); 852525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 853525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 854525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project num = initializeGlobalAppLogLevel (); 855525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project CE_SetTraceLevel (num); 856525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project LLCP_SetTraceLevel (num); 857525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFC_SetTraceLevel (num); 858525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project RW_SetTraceLevel (num); 859525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_SetTraceLevel (num); 860525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NFA_P2pSetTraceLevel (num); 861525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableEvent.wait(); //wait for NFA command to finish 862525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 863525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 864525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 865525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 866525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 867525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //sIsNfaEnabled indicates whether stack started successfully 868525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 869525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 8709f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen RoutingManager::getInstance().initialize(getNative(e, o)); 871525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_registerNdefTypeHandler (); 872525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().initialize (getNative(e, o)); 873525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().initialize (); 874525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().handleNfcOnOff (true); 875525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 876525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ///////////////////////////////////////////////////////////////////////////////// 877525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Add extra configuration here (work-arounds, etc.) 878525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 879525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 880525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 881525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if ( nat ) 882525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 883525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_POLLING_TECH_MASK, &num, sizeof(num))) 884525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = num; 885525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 886525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = DEFAULT_TECH_MASK; 887525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: tag polling tech mask=0x%X", __FUNCTION__, nat->tech_mask); 888525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 889525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 890525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // if this value exists, set polling interval. 891525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (GetNumValue(NAME_NFA_DM_DISC_DURATION_POLL, &num, sizeof(num))) 892c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen nat->discovery_duration = num; 893c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen else 894c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen nat->discovery_duration = DEFAULT_DISCOVERY_DURATION; 895c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen 896c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen NFA_SetRfDiscoveryDuration(nat->discovery_duration); 897525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 898525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Do custom NFCA startup configuration. 899525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project doStartupConfig(); 900525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 901525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 902525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 903525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 904525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail nfa enable; error=0x%X", __FUNCTION__, stat); 905525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 906525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 907525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_Disable (FALSE /* ungraceful */); 908525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 909525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Finalize(); 910525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 911525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 912525c260303268a83da4c3413b953d13c9084e834The Android Open Source ProjectTheEnd: 913525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 914525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::LOW_POWER); 915525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 916525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sIsNfaEnabled ? JNI_TRUE : JNI_FALSE; 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** 922525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_enableDiscovery 923525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 924525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Start polling and listening for devices. 925525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 926525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 927d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales** technologies_mask: the bitmask of technologies for which to enable discovery 928d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales** enable_lptd: whether to enable low power polling (default: false) 929525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 930525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 931525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 932525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 933d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Moralesstatic void nfcManager_enableDiscovery (JNIEnv* e, jobject o, jint technologies_mask, \ 93431b0f4653686119d74876cae5d637c5baf52b935Andres Morales jboolean enable_lptd, jboolean reader_mode, jboolean enable_host_routing, jboolean enable_p2p, 9350799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales jboolean restart) 936525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 937525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK tech_mask = DEFAULT_TECH_MASK; 938525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 939525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 9400799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (technologies_mask == -1 && nat) 941525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tech_mask = (tNFA_TECHNOLOGY_MASK)nat->tech_mask; 9420799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else if (technologies_mask != -1) 943d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales tech_mask = (tNFA_TECHNOLOGY_MASK) technologies_mask; 944525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; tech_mask = %02x", __FUNCTION__, tech_mask); 945525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 9460799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (sDiscoveryEnabled && !restart) 947525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 9480799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales ALOGE ("%s: already discovering", __FUNCTION__); 949525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return; 950525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 951525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 952525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_OK; 953525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 954525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::FULL_POWER); 955525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 956525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sRfEnabled) { 957525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Stop RF discovery to reconfigure 958525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery(false); 959525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 960525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 9610799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales // Check polling configuration 9620799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (tech_mask != 0) 963a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales { 9640799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales stopPolling_rfDiscoveryDisabled(); 9650799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales enableDisableLptd(enable_lptd); 9660799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales startPolling_rfDiscoveryDisabled(tech_mask); 9670799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 9680799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales // Start P2P listening if tag polling was enabled 9690799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (sPollingEnabled) 970a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales { 9710799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales ALOGD ("%s: Enable p2pListening", __FUNCTION__); 97231b0f4653686119d74876cae5d637c5baf52b935Andres Morales 97331b0f4653686119d74876cae5d637c5baf52b935Andres Morales if (enable_p2p && !sP2pEnabled) { 97431b0f4653686119d74876cae5d637c5baf52b935Andres Morales sP2pEnabled = true; 97531b0f4653686119d74876cae5d637c5baf52b935Andres Morales PeerToPeer::getInstance().enableP2pListening (true); 97631b0f4653686119d74876cae5d637c5baf52b935Andres Morales NFA_ResumeP2p(); 97731b0f4653686119d74876cae5d637c5baf52b935Andres Morales } else if (!enable_p2p && sP2pEnabled) { 97831b0f4653686119d74876cae5d637c5baf52b935Andres Morales sP2pEnabled = false; 97931b0f4653686119d74876cae5d637c5baf52b935Andres Morales PeerToPeer::getInstance().enableP2pListening (false); 98031b0f4653686119d74876cae5d637c5baf52b935Andres Morales NFA_PauseP2p(); 98131b0f4653686119d74876cae5d637c5baf52b935Andres Morales } 9820799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 9830799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (reader_mode && !sReaderModeEnabled) 9840799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 9850799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sReaderModeEnabled = true; 9860799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NFA_DisableListening(); 9870799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NFA_SetRfDiscoveryDuration(READER_MODE_DISCOVERY_DURATION); 9880799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 98931b0f4653686119d74876cae5d637c5baf52b935Andres Morales else if (!reader_mode && sReaderModeEnabled) 9900799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 9910799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales struct nfc_jni_native_data *nat = getNative(e, o); 9920799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sReaderModeEnabled = false; 9930799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NFA_EnableListening(); 9940799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NFA_SetRfDiscoveryDuration(nat->discovery_duration); 9950799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 996a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales } 997a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales } 9980799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else 999525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 10000799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales // No technologies configured, stop polling 10010799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales stopPolling_rfDiscoveryDisabled(); 1002525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1003525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 10040799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales // Check listen configuration 10050799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (enable_host_routing) 10060799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 10070799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales RoutingManager::getInstance().enableRoutingToHost(); 10080799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales RoutingManager::getInstance().commitRouting(); 10090799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 10100799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else 10110799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 10120799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales RoutingManager::getInstance().disableRoutingToHost(); 10130799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales RoutingManager::getInstance().commitRouting(); 10140799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1015525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Actually start discovery. 1016525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (true); 10170799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sDiscoveryEnabled = true; 1018a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales 1019525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setModeOn (PowerSwitch::DISCOVERY); 1020525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1021525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1022525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1023525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1024525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1025525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1026525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1027525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_disableDiscovery 1028525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1029525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Stop polling and listening for devices. 1030525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1031525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1032525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1033525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1034525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1035525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 10360799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesvoid nfcManager_disableDiscovery (JNIEnv* e, jobject o) 1037525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1038525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_OK; 1039525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter;", __FUNCTION__); 1040525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1041525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project pn544InteropAbortNow (); 1042525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sDiscoveryEnabled == false) 1043525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1044525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: already disabled", __FUNCTION__); 1045525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project goto TheEnd; 1046525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1047525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1048525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Stop RF Discovery. 1049525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project startRfDiscovery (false); 1050525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 10510799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (sPollingEnabled) 10520799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales status = stopPolling_rfDiscoveryDisabled(); 1053525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1054525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().enableP2pListening (false); 1055e6b10cf6f5c7bb363890428e2c52505c76b13b8dAndres Morales sP2pEnabled = false; 10560799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sDiscoveryEnabled = false; 1057525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //if nothing is active after this, then tell the controller to power down 1058525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (! PowerSwitch::getInstance ().setModeOff (PowerSwitch::DISCOVERY)) 1059525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().setLevel (PowerSwitch::LOW_POWER); 1060525c260303268a83da4c3413b953d13c9084e834The Android Open Source ProjectTheEnd: 1061525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1062525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1063525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1064d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenenvoid enableDisableLptd (bool enable) 1065d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen{ 1066d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen // This method is *NOT* thread-safe. Right now 1067d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen // it is only called from the same thread so it's 1068d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen // not an issue. 1069d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen static bool sCheckedLptd = false; 1070d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen static bool sHasLptd = false; 1071d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen 1072d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen tNFA_STATUS stat = NFA_STATUS_OK; 1073d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (!sCheckedLptd) 1074d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen { 1075d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sCheckedLptd = true; 1076d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen SyncEventGuard guard (sNfaGetConfigEvent); 1077d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen tNFA_PMID configParam[1] = {NCI_PARAM_ID_TAGSNIFF_CFG}; 1078d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen stat = NFA_GetConfig(1, configParam); 1079d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (stat != NFA_STATUS_OK) 1080d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen { 1081d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen ALOGE("%s: NFA_GetConfig failed", __FUNCTION__); 1082d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen return; 1083d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen } 1084d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sNfaGetConfigEvent.wait (); 1085d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (sCurrentConfigLen < 4 || sConfig[1] != NCI_PARAM_ID_TAGSNIFF_CFG) { 1086d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen ALOGE("%s: Config TLV length %d returned is too short", __FUNCTION__, 1087d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sCurrentConfigLen); 1088d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen return; 1089d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen } 10904181521d0157554a59e32bf06f80bfbc6288f01dMartijn Coenen if (sConfig[3] == 0) { 10914181521d0157554a59e32bf06f80bfbc6288f01dMartijn Coenen ALOGE("%s: LPTD is disabled, not enabling in current config", __FUNCTION__); 10924181521d0157554a59e32bf06f80bfbc6288f01dMartijn Coenen return; 10934181521d0157554a59e32bf06f80bfbc6288f01dMartijn Coenen } 1094d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sHasLptd = true; 1095d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen } 1096d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen // Bail if we checked and didn't find any LPTD config before 1097d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (!sHasLptd) return; 109833aeb7c13f8fd9d9bd301f31680836b8ec912d51Martijn Coenen UINT8 enable_byte = enable ? 0x01 : 0x00; 1099d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen 1100d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen SyncEventGuard guard(sNfaSetConfigEvent); 1101d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen 110233aeb7c13f8fd9d9bd301f31680836b8ec912d51Martijn Coenen stat = NFA_SetConfig(NCI_PARAM_ID_TAGSNIFF_CFG, 1, &enable_byte); 1103d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen if (stat == NFA_STATUS_OK) 1104d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen sNfaSetConfigEvent.wait (); 1105d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen else 1106d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen ALOGE("%s: Could not configure LPTD feature", __FUNCTION__); 1107d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen return; 1108d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen} 1109d6ead4d11c56cc4b1e90a93d6d5fe7583abbbfb8Martijn Coenen 1110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpServiceSocket 1114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a new LLCP server socket. 1116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1117525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1118525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 1119525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** sn: Service name 1120525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** miu: Maximum information unit. 1121525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** rw: Receive window size. 1122525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** linearBufferLength: Max buffer size. 1123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1124525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpServiceSocket Java object. 1125525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1126525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 11272534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpServiceSocket (JNIEnv* e, jobject, jint nSap, jstring sn, jint miu, jint rw, jint linearBufferLength) 1128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1129525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::tJNI_HANDLE jniHandle = PeerToPeer::getInstance().getNewJniHandle (); 1130525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11312534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedUtfChars serviceName(e, sn); 11322534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 11332534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ALOGD ("%s: enter: sap=%i; name=%s; miu=%i; rw=%i; buffLen=%i", __FUNCTION__, nSap, serviceName.c_str(), miu, rw, linearBufferLength); 1134525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1135525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Create new NativeLlcpServiceSocket object */ 11362534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jobject serviceSocket = NULL; 1137b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen if (nfc_jni_cache_object_local(e, gNativeLlcpServiceSocketClassName, &(serviceSocket)) == -1) 1138525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1139525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: Llcp socket object creation error", __FUNCTION__); 1140525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1141525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1142525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1143525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Get NativeLlcpServiceSocket class object */ 11442534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> clsNativeLlcpServiceSocket(e, e->GetObjectClass(serviceSocket)); 1145525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e->ExceptionCheck()) 1146525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1147525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->ExceptionClear(); 1148525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: Llcp Socket get object class error", __FUNCTION__); 1149525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1150525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1151525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11522534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes if (!PeerToPeer::getInstance().registerServer (jniHandle, serviceName.c_str())) 1153525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1154525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: RegisterServer error", __FUNCTION__); 1155525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1156525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1157525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 11582534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f; 11592534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 1160525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket handle to be the same as the NfaHandle*/ 11612534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mHandle", "I"); 11622534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f, (jint) jniHandle); 1163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: socket Handle = 0x%X", __FUNCTION__, jniHandle); 1164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1165525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket linear buffer length */ 11662534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalLinearBufferLength", "I"); 11672534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)linearBufferLength); 1168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: buffer length = %d", __FUNCTION__, linearBufferLength); 1169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1170525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket MIU */ 11712534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalMiu", "I"); 11722534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)miu); 1173525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: MIU = %d", __FUNCTION__, miu); 1174525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1175525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket RW */ 11762534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID(clsNativeLlcpServiceSocket.get(), "mLocalRw", "I"); 11772534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes e->SetIntField(serviceSocket, f,(jint)rw); 1178525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: RW = %d", __FUNCTION__, rw); 1179525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1180525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sLastError = 0; 1181525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1182525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return serviceSocket; 1183525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1184525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1185525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1186525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1187525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1188525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doGetLastError 1189525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1190525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get the last error code. 1191525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1192525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1193525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1194525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Last error code. 1195525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1196525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 11972534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jint nfcManager_doGetLastError(JNIEnv*, jobject) 1198525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1199525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: last error=%i", __FUNCTION__, sLastError); 1200525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sLastError; 1201525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1202525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1203525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1204525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1205525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1206525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDeinitialize 1207525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1208525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Turn off NFC. 1209525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1210525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1211525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1212525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 1213525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1214525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 12152534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doDeinitialize (JNIEnv*, jobject) 1216525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1217525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 1218525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1219525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = true; 1220525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project pn544InteropAbortNow (); 1221f3e09e66825850178879e76ccc7708509dbbc5b6Martijn Coenen RoutingManager::getInstance().onNfccShutdown(); 1222a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu PowerSwitch::getInstance ().initialize (PowerSwitch::UNKNOWN_LEVEL); 1223525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1224525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (sIsNfaEnabled) 1225525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1226525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaDisableEvent); 1227525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_Disable (TRUE /* graceful */); 1228525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1229525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1230525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: wait for completion", __FUNCTION__); 1231525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaDisableEvent.wait (); //wait for NFA command to finish 1232525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance ().handleNfcOnOff (false); 1233525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1234525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1235525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1236525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail disable; error=0x%X", __FUNCTION__, stat); 1237525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1238525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1239525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeNfcTag_abortWaits(); 1240525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcTag::getInstance().abort (); 1241525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sAbortConnlessWait = true; 1242525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nativeLlcpConnectionlessSocket_abortWait(); 1243525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsNfaEnabled = false; 1244525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sDiscoveryEnabled = false; 12450799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sPollingEnabled = false; 1246525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sIsDisabling = false; 12478d154680537afa5242edeb98c8f414d6186558cfMartijn Coenen gActivated = false; 1248525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1249525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1250525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project //unblock NFA_EnablePolling() and NFA_DisablePolling() 1251525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 1252525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.notifyOne (); 1253525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1254525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1255525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 1256525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project theInstance.Finalize(); 1257525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1258525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1259525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1260525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1261525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1262525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1263525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1264525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1265525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpSocket 1266525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1267525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a LLCP connection-oriented socket. 1268525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1269525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1270525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 1271525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** miu: Maximum information unit. 1272525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** rw: Receive window size. 1273525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** linearBufferLength: Max buffer size. 1274525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1275525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpSocket Java object. 1276525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1277525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 12782534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpSocket (JNIEnv* e, jobject, jint nSap, jint miu, jint rw, jint linearBufferLength) 1279525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1280525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; sap=%d; miu=%d; rw=%d; buffer len=%d", __FUNCTION__, nSap, miu, rw, linearBufferLength); 1281525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 12822534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes PeerToPeer::tJNI_HANDLE jniHandle = PeerToPeer::getInstance().getNewJniHandle (); 1283a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu PeerToPeer::getInstance().createClient (jniHandle, miu, rw); 1284525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1285525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Create new NativeLlcpSocket object */ 12862534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jobject clientSocket = NULL; 1287525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nfc_jni_cache_object_local(e, gNativeLlcpSocketClassName, &(clientSocket)) == -1) 1288525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1289525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail Llcp socket creation", __FUNCTION__); 12902534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes return clientSocket; 1291525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1292525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1293525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Get NativeConnectionless class object */ 12942534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes ScopedLocalRef<jclass> clsNativeLlcpSocket(e, e->GetObjectClass(clientSocket)); 1295525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (e->ExceptionCheck()) 1296525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1297525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->ExceptionClear(); 1298525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: fail get class object", __FUNCTION__); 12992534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes return clientSocket; 1300525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1301525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 13022534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes jfieldID f; 13032534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes 1304525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket SAP */ 13052534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mSap", "I"); 1306525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) nSap); 1307525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1308525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket handle */ 13092534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mHandle", "I"); 1310525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) jniHandle); 1311525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1312525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket MIU */ 13132534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mLocalMiu", "I"); 1314525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) miu); 1315525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1316525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /* Set socket RW */ 13172534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes f = e->GetFieldID (clsNativeLlcpSocket.get(), "mLocalRw", "I"); 1318525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project e->SetIntField (clientSocket, f, (jint) rw); 1319525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1320525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1321525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return clientSocket; 1322525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1323525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1324525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1325525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1326525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1327525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCreateLlcpConnectionlessSocket 1328525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1329525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Create a connection-less socket. 1330525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1331525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1332525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** nSap: Service access point. 1333525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** sn: Service name. 1334525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1335525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: NativeLlcpConnectionlessSocket Java object. 1336525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1337525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 13382534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jobject nfcManager_doCreateLlcpConnectionlessSocket (JNIEnv *, jobject, jint nSap, jstring /*sn*/) 1339525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1340525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: nSap=0x%X", __FUNCTION__, nSap); 1341525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return NULL; 1342525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1343525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1344525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1345525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1346525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: isPeerToPeer 1347525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1348525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Whether the activation data indicates the peer supports NFC-DEP. 1349525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** activated: Activation data. 1350525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1351525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if the peer supports NFC-DEP. 1352525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1353525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1354525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isPeerToPeer (tNFA_ACTIVATED& activated) 1355525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1356525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return activated.activate_ntf.protocol == NFA_PROTOCOL_NFC_DEP; 1357525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1358525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1359525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1360525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1361525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: isListenMode 1362525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1363525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Indicates whether the activation data indicates it is 1364525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** listen mode. 1365525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1366525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if this listen mode. 1367525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1368525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1369525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic bool isListenMode(tNFA_ACTIVATED& activated) 1370525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1371525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return ((NFC_DISCOVERY_TYPE_LISTEN_A == activated.activate_ntf.rf_tech_param.mode) 1372525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_B == activated.activate_ntf.rf_tech_param.mode) 1373525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_F == activated.activate_ntf.rf_tech_param.mode) 1374525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE == activated.activate_ntf.rf_tech_param.mode) 1375525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE == activated.activate_ntf.rf_tech_param.mode) 1376525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_ISO15693 == activated.activate_ntf.rf_tech_param.mode) 1377525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project || (NFC_DISCOVERY_TYPE_LISTEN_B_PRIME == activated.activate_ntf.rf_tech_param.mode)); 1378525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1379525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1380525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1381525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1382525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doCheckLlcp 1383525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1384525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1385525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1386525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True 1387525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1388525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 13892534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doCheckLlcp(JNIEnv*, jobject) 1390525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1391525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s", __FUNCTION__); 1392525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1393525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1394525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1395525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1396525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1397525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1398525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doActivateLlcp 1399525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1400525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1401525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1402525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True 1403525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1404525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14052534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doActivateLlcp(JNIEnv*, jobject) 1406525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1407525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD("%s", __FUNCTION__); 1408525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1409525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1410525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1411525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1412525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1413525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1414525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doAbort 1415525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1416525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1417525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1418525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1419525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1420525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14212534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doAbort(JNIEnv*, jobject) 1422525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1423525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: abort()", __FUNCTION__); 1424525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project abort(); 1425525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1426525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1427525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1428525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1429525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1430525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doDownload 1431525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1432a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu** Description: Download firmware patch files. Do not turn on NFC. 1433525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1434a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu** Returns: True if ok. 1435525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1436525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14372534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jboolean nfcManager_doDownload(JNIEnv*, jobject) 1438525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1439a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGD ("%s: enter", __FUNCTION__); 1440a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); 1441a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu 1442a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu theInstance.Initialize(); //start GKI, NCI task, NFC task 1443a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu theInstance.DownloadFirmware (); 1444a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu theInstance.Finalize(); 1445a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGD ("%s: exit", __FUNCTION__); 1446525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return JNI_TRUE; 1447525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1448525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1449525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1450525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1451525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1452525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doResetTimeouts 1453525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1454525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1455525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1456525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1457525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1458525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 14592534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doResetTimeouts(JNIEnv*, jobject) 1460525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1461a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGD ("%s", __FUNCTION__); 1462a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcTag::getInstance().resetAllTransceiveTimeouts (); 1463525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1464525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1465525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1466525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1467525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1468525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetTimeout 1469525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1470525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set timeout value. 1471525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1472525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1473a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu** tech: technology ID. 1474525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** timeout: Timeout value. 1475525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1476525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: True if ok. 1477525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1478525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1479a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chustatic bool nfcManager_doSetTimeout(JNIEnv*, jobject, jint tech, jint timeout) 1480525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1481525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (timeout <= 0) 1482525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1483525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE("%s: Timeout must be positive.",__FUNCTION__); 1484525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return false; 1485525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1486a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGD ("%s: tech=%d, timeout=%d", __FUNCTION__, tech, timeout); 1487a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu NfcTag::getInstance().setTransceiveTimeout (tech, timeout); 1488525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return true; 1489525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1490525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1491525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1492525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1493525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1494525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doGetTimeout 1495525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1496525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Get timeout value. 1497525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1498525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1499a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu** tech: technology ID. 1500525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1501525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Timeout value. 1502525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1503525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1504a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chustatic jint nfcManager_doGetTimeout(JNIEnv*, jobject, jint tech) 1505525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1506a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu int timeout = NfcTag::getInstance().getTransceiveTimeout (tech); 1507a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGD ("%s: tech=%d, timeout=%d", __FUNCTION__, tech, timeout); 1508a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu return timeout; 1509525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 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** Function: nfcManager_doDump 1515525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1516525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Not used. 1517525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1518525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1519525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1520525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Text dump. 1521525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1522525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 15232534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic jstring nfcManager_doDump(JNIEnv* e, jobject) 1524525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1525525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project char buffer[100]; 1526525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project snprintf(buffer, sizeof(buffer), "libnfc llc error_count=%u", /*libnfc_llc_error_count*/ 0); 1527525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return e->NewStringUTF(buffer); 1528525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1529525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1530525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1531525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1532525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1533525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetP2pInitiatorModes 1534525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1535525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set P2P initiator's activation modes. 1536525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1537525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1538525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** modes: Active and/or passive modes. The values are specified 1539525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** in external/libnfc-nxp/inc/phNfcTypes.h. See 1540525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** enum phNfc_eP2PMode_t. 1541525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1542525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 1543525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1544525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1545525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic void nfcManager_doSetP2pInitiatorModes (JNIEnv *e, jobject o, jint modes) 1546525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1547525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: modes=0x%X", __FUNCTION__, modes); 1548525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(e, o); 1549525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1550525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK mask = 0; 1551525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x01) mask |= NFA_TECHNOLOGY_MASK_A; 1552525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x02) mask |= NFA_TECHNOLOGY_MASK_F; 1553525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x04) mask |= NFA_TECHNOLOGY_MASK_F; 1554525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x08) mask |= NFA_TECHNOLOGY_MASK_A_ACTIVE; 1555525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x10) mask |= NFA_TECHNOLOGY_MASK_F_ACTIVE; 1556525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x20) mask |= NFA_TECHNOLOGY_MASK_F_ACTIVE; 1557525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project nat->tech_mask = mask; 1558525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1559525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1560525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1561525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1562525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1563525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_doSetP2pTargetModes 1564525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1565525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Set P2P target's activation modes. 1566525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: JVM environment. 1567525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** o: Java object. 1568525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** modes: Active and/or passive modes. 1569525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1570525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 1571525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1572525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 15732534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughesstatic void nfcManager_doSetP2pTargetModes (JNIEnv*, jobject, jint modes) 1574525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1575525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: modes=0x%X", __FUNCTION__, modes); 1576525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // Map in the right modes 1577525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_TECHNOLOGY_MASK mask = 0; 1578525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x01) mask |= NFA_TECHNOLOGY_MASK_A; 1579525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x02) mask |= NFA_TECHNOLOGY_MASK_F; 1580525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x04) mask |= NFA_TECHNOLOGY_MASK_F; 1581525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (modes & 0x08) mask |= NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE; 1582525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1583525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PeerToPeer::getInstance().setP2pListenMask(mask); 1584525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1585525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1586d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Moralesstatic void nfcManager_doEnableScreenOffSuspend(JNIEnv* e, jobject o) 1587d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales{ 1588d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales PowerSwitch::getInstance().setScreenOffPowerState(PowerSwitch::POWER_STATE_FULL); 1589d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales} 1590d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales 1591d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Moralesstatic void nfcManager_doDisableScreenOffSuspend(JNIEnv* e, jobject o) 1592d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales{ 1593d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales PowerSwitch::getInstance().setScreenOffPowerState(PowerSwitch::POWER_STATE_OFF); 1594d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales} 1595c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen 1596525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 1597525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1598525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** JNI functions for android-4.0.1_r1 1599525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1600525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 1601525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstatic JNINativeMethod gMethods[] = 1602525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1603525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDownload", "()Z", 1604525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doDownload}, 1605525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1606525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"initializeNativeStructure", "()Z", 1607525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_initNativeStruc}, 1608525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1609304a6342ee7e5620d3b50d988755c035f1686dc2Martijn Coenen {"doInitialize", "()Z", 1610525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doInitialize}, 1611525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1612525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDeinitialize", "()Z", 1613525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doDeinitialize}, 1614525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 16159f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen {"sendRawFrame", "([B)Z", 16169f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen (void*) nfcManager_sendRawFrame}, 16179f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 16189f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen {"routeAid", "([BI)Z", 16199f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen (void*) nfcManager_routeAid}, 16209f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 16219f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen {"unrouteAid", "([B)Z", 16229f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen (void*) nfcManager_unrouteAid}, 16239f8f6cf9c58405ecafe2d425801e6c14088db8c7Martijn Coenen 1624f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen {"commitRouting", "()Z", 1625f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen (void*) nfcManager_commitRouting}, 1626f5c979220fadb2c3ac0bca09e16d0d281ed20eb2Martijn Coenen 162731b0f4653686119d74876cae5d637c5baf52b935Andres Morales {"doEnableDiscovery", "(IZZZZZ)V", 1628525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_enableDiscovery}, 1629525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1630525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCheckLlcp", "()Z", 1631525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doCheckLlcp}, 1632525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1633525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doActivateLlcp", "()Z", 1634525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doActivateLlcp}, 1635525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1636525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpConnectionlessSocket", "(ILjava/lang/String;)Lcom/android/nfc/dhimpl/NativeLlcpConnectionlessSocket;", 1637525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doCreateLlcpConnectionlessSocket}, 1638525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1639525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpServiceSocket", "(ILjava/lang/String;III)Lcom/android/nfc/dhimpl/NativeLlcpServiceSocket;", 1640525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doCreateLlcpServiceSocket}, 1641525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1642525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doCreateLlcpSocket", "(IIII)Lcom/android/nfc/dhimpl/NativeLlcpSocket;", 1643525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doCreateLlcpSocket}, 1644525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1645525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doGetLastError", "()I", 1646525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_doGetLastError}, 1647525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1648a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales {"disableDiscovery", "()V", 1649525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void*) nfcManager_disableDiscovery}, 1650525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1651525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetTimeout", "(II)Z", 1652525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetTimeout}, 1653525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1654525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doGetTimeout", "(I)I", 1655525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doGetTimeout}, 1656525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1657525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doResetTimeouts", "()V", 1658525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doResetTimeouts}, 1659525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1660525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doAbort", "()V", 1661525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doAbort}, 1662525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1663525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetP2pInitiatorModes", "(I)V", 1664525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetP2pInitiatorModes}, 1665525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1666525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doSetP2pTargetModes", "(I)V", 1667525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doSetP2pTargetModes}, 1668525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1669d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales {"doEnableScreenOffSuspend", "()V", 1670d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales (void *)nfcManager_doEnableScreenOffSuspend}, 1671d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales 1672d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales {"doDisableScreenOffSuspend", "()V", 1673d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales (void *)nfcManager_doDisableScreenOffSuspend}, 1674d2604c0544f7bc26e5b2407f0215cccfffedae2cAndres Morales 1675525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project {"doDump", "()Ljava/lang/String;", 1676525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project (void *)nfcManager_doDump}, 1677525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project}; 1678525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1679525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1680525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1681525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1682525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: register_com_android_nfc_NativeNfcManager 1683525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1684525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Regisgter JNI functions with Java Virtual Machine. 1685525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** e: Environment of JVM. 1686525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1687525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: Status of registration. 1688525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1689525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1690525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectint register_com_android_nfc_NativeNfcManager (JNIEnv *e) 1691525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1692525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 1693525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project PowerSwitch::getInstance ().initialize (PowerSwitch::UNKNOWN_LEVEL); 1694525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: exit", __FUNCTION__); 1695525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return jniRegisterNativeMethods (e, gNativeNfcManagerClassName, gMethods, NELEM (gMethods)); 1696525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1697525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1698525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1699525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1700525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1701525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: startRfDiscovery 1702525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1703525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Ask stack to start polling and listening for devices. 1704525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** isStart: Whether to start. 1705525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1706525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1707525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1708525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1709525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid startRfDiscovery(bool isStart) 1710525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1711525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS status = NFA_STATUS_FAILED; 1712525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1713525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: is start=%d", __FUNCTION__, isStart); 1714525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaEnableDisablePollingEvent); 1715525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project status = isStart ? NFA_StartRfDiscovery () : NFA_StopRfDiscovery (); 1716525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (status == NFA_STATUS_OK) 1717525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1718525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaEnableDisablePollingEvent.wait (); //wait for NFA_RF_DISCOVERY_xxxx_EVT 1719525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sRfEnabled = isStart; 1720525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1721525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1722525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1723525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGE ("%s: Failed to start/stop RF discovery; error=0x%X", __FUNCTION__, status); 1724525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1725525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1726525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1727525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1728525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1729525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1730525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: doStartupConfig 1731525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1732525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Configure the NFC controller. 1733525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1734525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None 1735525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1736525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1737525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid doStartupConfig() 1738525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1739525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project struct nfc_jni_native_data *nat = getNative(0, 0); 1740525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_FAILED; 1741a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu int actualLen = 0; 1742525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1743525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project // If polling for Active mode, set the ordering so that we choose Active over Passive mode first. 1744525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (nat && (nat->tech_mask & (NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE))) 1745525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 1746525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project UINT8 act_mode_order_param[] = { 0x01 }; 1747525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard guard (sNfaSetConfigEvent); 1748525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project stat = NFA_SetConfig(NCI_PARAM_ID_ACT_ORDER, sizeof(act_mode_order_param), &act_mode_order_param[0]); 1749525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (stat == NFA_STATUS_OK) 1750525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project sNfaSetConfigEvent.wait (); 1751525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1752a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu 1753a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu //configure RF polling frequency for each technology 1754a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu static tNFA_DM_DISC_FREQ_CFG nfa_dm_disc_freq_cfg; 1755a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu //values in the polling_frequency[] map to members of nfa_dm_disc_freq_cfg 1756a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu UINT8 polling_frequency [8] = {1, 1, 1, 1, 1, 1, 1, 1}; 1757a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu actualLen = GetStrValue(NAME_POLL_FREQUENCY, (char*)polling_frequency, 8); 1758a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu if (actualLen == 8) 1759a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu { 1760a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu ALOGD ("%s: polling frequency", __FUNCTION__); 1761a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu memset (&nfa_dm_disc_freq_cfg, 0, sizeof(nfa_dm_disc_freq_cfg)); 1762a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pa = polling_frequency [0]; 1763a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pb = polling_frequency [1]; 1764a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pf = polling_frequency [2]; 1765a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pi93 = polling_frequency [3]; 1766a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pbp = polling_frequency [4]; 1767a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pk = polling_frequency [5]; 1768a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.paa = polling_frequency [6]; 1769a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu nfa_dm_disc_freq_cfg.pfa = polling_frequency [7]; 1770a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu p_nfa_dm_rf_disc_freq_cfg = &nfa_dm_disc_freq_cfg; 1771a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu } 1772525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1773525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1774525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1775525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1776525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1777525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: nfcManager_isNfcActive 1778525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1779525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Used externaly to determine if NFC is active or not. 1780525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1781525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: 'true' if the NFC stack is running, else 'false'. 1782525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1783525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1784525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectbool nfcManager_isNfcActive() 1785525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1786525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return sIsNfaEnabled; 1787525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1788525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1789525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/******************************************************************************* 1790525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1791525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Function: startStopPolling 1792525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1793525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Start or stop polling. 1794525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** isStartPolling: true to start polling; false to stop polling. 1795525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1796525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Returns: None. 1797525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 1798525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*******************************************************************************/ 1799525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectvoid startStopPolling (bool isStartPolling) 1800525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 1801525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ALOGD ("%s: enter; isStart=%u", __FUNCTION__, isStartPolling); 18020799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales startRfDiscovery (false); 18030799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18040799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (isStartPolling) startPolling_rfDiscoveryDisabled(0); 18050799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else stopPolling_rfDiscoveryDisabled(); 18060799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18070799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales startRfDiscovery (true); 18080799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales ALOGD ("%s: exit", __FUNCTION__); 18090799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales} 18100799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18110799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18120799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic tNFA_STATUS startPolling_rfDiscoveryDisabled(tNFA_TECHNOLOGY_MASK tech_mask) { 1813525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project tNFA_STATUS stat = NFA_STATUS_FAILED; 1814525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 18150799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales unsigned long num = 0; 1816a1e95d30dbe8dad0a8bb333b4ca17c009fc34e2fAndres Morales 18170799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (tech_mask == 0 && GetNumValue(NAME_POLLING_TECH_MASK, &num, sizeof(num))) 18180799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales tech_mask = num; 18190799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales else if (tech_mask == 0) tech_mask = DEFAULT_TECH_MASK; 18200799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18210799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales SyncEventGuard guard (sNfaEnableDisablePollingEvent); 18220799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales ALOGD ("%s: enable polling", __FUNCTION__); 18230799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales stat = NFA_EnablePolling (tech_mask); 18240799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (stat == NFA_STATUS_OK) 18250799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales { 18260799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales ALOGD ("%s: wait for enable event", __FUNCTION__); 18270799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sPollingEnabled = true; 18280799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_ENABLED_EVT 1829525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 1830525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project else 1831525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 18320799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales ALOGE ("%s: fail enable polling; error=0x%X", __FUNCTION__, stat); 1833525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 18340799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18350799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return stat; 18360799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales} 18370799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18380799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralesstatic tNFA_STATUS stopPolling_rfDiscoveryDisabled() { 18390799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales tNFA_STATUS stat = NFA_STATUS_FAILED; 18400799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18410799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales SyncEventGuard guard (sNfaEnableDisablePollingEvent); 18420799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales ALOGD ("%s: disable polling", __FUNCTION__); 18430799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales stat = NFA_DisablePolling (); 18440799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (stat == NFA_STATUS_OK) { 18450799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sPollingEnabled = false; 18460799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_DISABLED_EVT 18470799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } else { 18480799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales ALOGE ("%s: fail disable polling; error=0x%X", __FUNCTION__, stat); 18490799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 18500799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 18510799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return stat; 1852525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 1853525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1854525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 1855525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} /* namespace android */ 1856