1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Copyright (C) 1999-2012 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "OverrideLog.h" 19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "NfcAdaptation.h" 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern "C" 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project #include "gki.h" 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project #include "nfa_api.h" 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project #include "nfc_int.h" 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "config.h" 27a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include "android_logmsg.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define LOG_TAG "NfcAdaptation" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern "C" void GKI_shutdown(); 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void resetConfig(); 33edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chuextern "C" void verify_stack_non_volatile_store (); 34edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chuextern "C" void delete_stack_non_volatile_store (BOOLEAN forceDelete); 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNfcAdaptation* NfcAdaptation::mpInstance = NULL; 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadMutex NfcAdaptation::sLock; 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectnfc_nci_device_t* NfcAdaptation::mHalDeviceContext = NULL; 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttHAL_NFC_CBACK* NfcAdaptation::mHalCallback = NULL; 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttHAL_NFC_DATA_CBACK* NfcAdaptation::mHalDataCallback = NULL; 415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn CoenenThreadCondVar NfcAdaptation::mHalOpenCompletedEvent; 425c65c3a0f42e174e47fecd4e569606003217ff4eMartijn CoenenThreadCondVar NfcAdaptation::mHalCloseCompletedEvent; 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00; 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 appl_trace_level = 0xff; 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar bcm_nfc_location[120]; 47077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenenchar nci_hal_module[64]; 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 495c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenstatic UINT8 nfa_dm_cfg[sizeof ( tNFA_DM_CFG ) ]; 505c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenextern tNFA_DM_CFG *p_nfa_dm_cfg; 515c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenextern UINT8 nfa_ee_max_ee_cfg; 520976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chuextern const UINT8 nfca_version_string []; 530976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chuextern const UINT8 nfa_version_string []; 54b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chustatic UINT8 deviceHostWhiteList [NFA_HCI_MAX_HOST_IN_NETWORK]; 55b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chustatic tNFA_HCI_CFG jni_nfa_hci_cfg; 56b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chuextern tNFA_HCI_CFG *p_nfa_hci_cfg; 575c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::NfcAdaptation() 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNfcAdaptation::NfcAdaptation() 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 691569641423dac0a41af7596fdef972126e698f46Evan Chu memset (&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs)); 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::~NfcAdaptation() 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNfcAdaptation::~NfcAdaptation() 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mpInstance = NULL; 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::GetInstance() 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: access class singleton 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: pointer to the singleton object 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNfcAdaptation& NfcAdaptation::GetInstance() 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex a(sLock); 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!mpInstance) 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mpInstance = new NfcAdaptation; 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return *mpInstance; 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::Initialize() 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class initializer 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::Initialize () 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::Initialize"; 1160976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chu ALOGD("%s: enter", func); 1170976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chu ALOGE("%s: ver=%s nfa=%s", func, nfca_version_string, nfa_version_string); 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long num; 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 120a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if ( GetNumValue ( NAME_USE_RAW_NCI_TRACE, &num, sizeof ( num ) ) ) 121a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 122a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (num == 1) 123a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 124a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu // display protocol traces in raw format 125a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ProtoDispAdapterUseRawOutput (TRUE); 126a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ALOGD("%s: logging protocol in raw format", func); 127a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 128a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( !GetStrValue ( NAME_NFA_STORAGE, bcm_nfc_location, sizeof ( bcm_nfc_location ) ) ) 130d8f9332bd02e621ee8c38254844f80ea147c46deEvan Chu { 131077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenen strlcpy (bcm_nfc_location, "/data/nfc", sizeof(bcm_nfc_location)); 132d8f9332bd02e621ee8c38254844f80ea147c46deEvan Chu } 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) ) 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ScrProtocolTraceFlag = num; 1355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetStrValue ( NAME_NFA_DM_CFG, (char*)nfa_dm_cfg, sizeof ( nfa_dm_cfg ) ) ) 1375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen p_nfa_dm_cfg = ( tNFA_DM_CFG * ) &nfa_dm_cfg[0]; 1385c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof ( num ) ) ) 1405c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_ee_max_ee_cfg = num; 1425c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func, nfa_ee_max_ee_cfg); 1435c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1445c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 145b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu //configure device host whitelist of HCI host ID's; see specification ETSI TS 102 622 V11.1.10 146b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu //(2012-10), section 6.1.3.1 147b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu num = GetStrValue ( NAME_DEVICE_HOST_WHITE_LIST, (char*) deviceHostWhiteList, sizeof ( deviceHostWhiteList ) ); 148b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu if (num) 149b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu { 150b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu memmove (&jni_nfa_hci_cfg, p_nfa_hci_cfg, sizeof(jni_nfa_hci_cfg)); 151b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu jni_nfa_hci_cfg.num_whitelist_host = (UINT8) num; //number of HCI host ID's in the whitelist 152b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu jni_nfa_hci_cfg.p_whitelist = deviceHostWhiteList; //array of HCI host ID's 153b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu p_nfa_hci_cfg = &jni_nfa_hci_cfg; 154b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu } 155b7cb567fb2a69c4f8afbb5c5f819e2390ba6424dEvan Chu 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project initializeGlobalAppLogLevel (); 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1585a7e857aee2ebba4e369936aa5acdc7bcecf83e7Evan Chu verify_stack_non_volatile_store (); 1595c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) && 1605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen (num == 1) ) 1615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: preserve stack NV store", __FUNCTION__); 1625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 163edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu { 164edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu delete_stack_non_volatile_store (FALSE); 165edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu } 1665c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_init (); 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_enable (); 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_create_task ((TASKPTR)NFCA_TASK, BTU_TASK, (INT8*)"NFCA_TASK", 0, 0, (pthread_cond_t*)NULL, NULL); 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex guard(mCondVar); 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_create_task ((TASKPTR)Thread, MMI_TASK, (INT8*)"NFCA_THREAD", 0, 0, (pthread_cond_t*)NULL, NULL); 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mCondVar.wait(); 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext = NULL; 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalCallback = NULL; 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs)); 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project InitializeHalDeviceContext (); 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::Finalize() 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class finalizer 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::Finalize() 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::Finalize"; 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex a(sLock); 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", func); 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_shutdown (); 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project resetConfig(); 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_nci_close(mHalDeviceContext); //close the HAL's device context 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext = NULL; 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalCallback = NULL; 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs)); 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project delete this; 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::signal() 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: signal the CondVar to release the thread that is waiting 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::signal () 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mCondVar.signal(); 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::NFCA_TASK() 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: NFCA_TASK runs the GKI main task 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 NfcAdaptation::NFCA_TASK (UINT32 arg) 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::NFCA_TASK"; 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", func); 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_run (0); 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 2400a85f658ebd49b72be39fe0fb61fcca4ee0fbc82Martijn Coenen return 0; 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::Thread() 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Creates work threads 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 NfcAdaptation::Thread (UINT32 arg) 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::Thread"; 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", func); 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ThreadCondVar CondVar; 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex guard(CondVar); 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_create_task ((TASKPTR)nfc_task, NFC_TASK, (INT8*)"NFC_TASK", 0, 0, (pthread_cond_t*)CondVar, (pthread_mutex_t*)CondVar); 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CondVar.wait(); 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NfcAdaptation::GetInstance().signal(); 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_exit_task (GKI_get_taskid ()); 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 2680a85f658ebd49b72be39fe0fb61fcca4ee0fbc82Martijn Coenen return 0; 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::GetHalEntryFuncs() 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Get the set of HAL entry points. 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: Functions pointers for HAL entry points. 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttHAL_NFC_ENTRY* NfcAdaptation::GetHalEntryFuncs () 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return &mHalEntryFuncs; 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::InitializeHalDeviceContext 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Ask the generic Android HAL to find the Broadcom-specific HAL. 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::InitializeHalDeviceContext () 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::InitializeHalDeviceContext"; 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", func); 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int ret = 0; //0 means success 299077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenen if ( !GetStrValue ( NAME_NCI_HAL_MODULE, nci_hal_module, sizeof ( nci_hal_module) ) ) 300077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenen { 301077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenen ALOGE("No HAL module specified in config, falling back to BCM2079x"); 302077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenen strlcpy (nci_hal_module, "nfc_nci.bcm2079x", sizeof(nci_hal_module)); 303077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenen } 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const hw_module_t* hw_module = NULL; 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.initialize = HalInitialize; 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.terminate = HalTerminate; 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.open = HalOpen; 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.close = HalClose; 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.core_initialized = HalCoreInitialized; 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.write = HalWrite; 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.prediscover = HalPrediscover; 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.control_granted = HalControlGranted; 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.power_cycle = HalPowerCycle; 315b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson mHalEntryFuncs.get_max_ee = HalGetMaxNfcee; 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 317077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenen ret = hw_get_module (nci_hal_module, &hw_module); 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (ret == 0) 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ret = nfc_nci_open (hw_module, &mHalDeviceContext); 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (ret != 0) 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGE ("%s: nfc_nci_open fail", func); 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 325077f48fc39770c8db3cdc27ba65c2f12299199ddMartijn Coenen ALOGE ("%s: fail hw_get_module %s", func, nci_hal_module); 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalInitialize 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Not implemented because this function is only needed 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** within the HAL. 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalInitialize () 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalInitialize"; 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalTerminate 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Not implemented because this function is only needed 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** within the HAL. 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalTerminate () 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalTerminate"; 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalOpen 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Turn on controller, download firmware. 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK* p_data_cback) 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalOpen"; 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalCallback = p_hal_cback; 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDataCallback = p_data_cback; 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->open (mHalDeviceContext, HalDeviceContextCallback, HalDeviceContextDataCallback); 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalClose 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Turn off controller. 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalClose () 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalClose"; 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->close (mHalDeviceContext); 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalDeviceContextCallback 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Translate generic Android HAL's callback into Broadcom-specific 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback function. 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalDeviceContextCallback (nfc_event_t event, nfc_status_t event_status) 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalDeviceContextCallback"; 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: event=%u", func, event); 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalCallback) 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalCallback (event, (tHAL_NFC_STATUS) event_status); 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalDeviceContextDataCallback 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Translate generic Android HAL's callback into Broadcom-specific 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback function. 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalDeviceContextDataCallback (uint16_t data_len, uint8_t* p_data) 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalDeviceContextDataCallback"; 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: len=%u", func, data_len); 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDataCallback) 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDataCallback (data_len, p_data); 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalWrite 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Write NCI message to the controller. 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalWrite (UINT16 data_len, UINT8* p_data) 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalWrite"; 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->write (mHalDeviceContext, data_len, p_data); 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalCoreInitialized 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Adjust the configurable parameters in the controller. 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalCoreInitialized (UINT8* p_core_init_rsp_params) 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalCoreInitialized"; 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->core_initialized (mHalDeviceContext, p_core_init_rsp_params); 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalPrediscover 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Perform any vendor-specific pre-discovery actions (if needed) 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If any actions were performed TRUE will be returned, and 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** HAL_PRE_DISCOVER_CPLT_EVT will notify when actions are 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** completed. 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: TRUE if vendor-specific pre-discovery actions initialized 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** FALSE if no vendor-specific pre-discovery actions are needed. 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN NfcAdaptation::HalPrediscover () 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalPrediscover"; 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN retval = FALSE; 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 49645e68232b8524aca5165dca28b994ec8c11593b1Evan Chu retval = mHalDeviceContext->pre_discover (mHalDeviceContext); 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: HAL_NfcControlGranted 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Grant control to HAL control for sending NCI commands. 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Call in response to HAL_REQUEST_CONTROL_EVT. 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Must only be called when there are no NCI commands pending. 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** HAL_RELEASE_CONTROL_EVT will notify when HAL no longer 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** needs control of NCI. 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: void 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalControlGranted () 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalControlGranted"; 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->control_granted (mHalDeviceContext); 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalPowerCycle 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Turn off and turn on the controller. 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalPowerCycle () 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalPowerCycle"; 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->power_cycle (mHalDeviceContext); 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 543b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson/******************************************************************************* 544b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** 545b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** Function: NfcAdaptation::HalGetMaxNfcee 546b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** 547b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** Description: Turn off and turn on the controller. 548b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** 549b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** Returns: None. 550b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** 551b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson*******************************************************************************/ 552b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul ChaissonUINT8 NfcAdaptation::HalGetMaxNfcee() 553b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson{ 554b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson const char* func = "NfcAdaptation::HalPowerCycle"; 555b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson UINT8 maxNfcee = 0; 556a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ALOGD ("%s", func); 557b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson if (mHalDeviceContext) 558b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson { 559b4b1c46fa5346651a3554c83eb5005f942f1af0fMartijn Coenen // TODO maco call into HAL when we figure out binary compatibility. 560b4b1c46fa5346651a3554c83eb5005f942f1af0fMartijn Coenen return nfa_ee_max_ee_cfg; 561a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 562a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu //mHalDeviceContext->get_max_ee (mHalDeviceContext, &maxNfcee); 563b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson } 564b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson 565b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson return maxNfcee; 566b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson} 5675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 568a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 5695c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 5705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5715c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function: NfcAdaptation::DownloadFirmware 5725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description: Download firmware patch files. 5745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns: None. 5765c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 5785c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenvoid NfcAdaptation::DownloadFirmware () 5795c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 5805c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen const char* func = "NfcAdaptation::DownloadFirmware"; 5815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: enter", func); 5825c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HalInitialize (); 5835c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalOpenCompletedEvent.lock (); 5855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: try open HAL", func); 5865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HalOpen (HalDownloadFirmwareCallback, HalDownloadFirmwareDataCallback); 5875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalOpenCompletedEvent.wait (); 5885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalCloseCompletedEvent.lock (); 5905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: try close HAL", func); 5915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HalClose (); 5925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalCloseCompletedEvent.wait (); 5935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HalTerminate (); 5955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: exit", func); 5965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 5975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 5995c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6005c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function: NfcAdaptation::HalDownloadFirmwareCallback 6015c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6025c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description: Receive events from the HAL. 6035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns: None. 6055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 6075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenvoid NfcAdaptation::HalDownloadFirmwareCallback (nfc_event_t event, nfc_status_t event_status) 6085c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 6095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen const char* func = "NfcAdaptation::HalDownloadFirmwareCallback"; 6105c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: event=0x%X", func, event); 6115c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen switch (event) 6125c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 6135c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case HAL_NFC_OPEN_CPLT_EVT: 6145c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 6155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: HAL_NFC_OPEN_CPLT_EVT", func); 6165c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalOpenCompletedEvent.signal (); 6175c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 6185c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 6195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case HAL_NFC_CLOSE_CPLT_EVT: 6205c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 6215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: HAL_NFC_CLOSE_CPLT_EVT", func); 6225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalCloseCompletedEvent.signal (); 6235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 6245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 6255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 6265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 6275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 6285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 6295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function: NfcAdaptation::HalDownloadFirmwareDataCallback 6315c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description: Receive data events from the HAL. 6335c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns: None. 6355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 6375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenvoid NfcAdaptation::HalDownloadFirmwareDataCallback (uint16_t data_len, uint8_t* p_data) 6385c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 6395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 6405c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 6415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadMutex::ThreadMutex() 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadMutex::ThreadMutex() 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutexattr_t mutexAttr; 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutexattr_init(&mutexAttr); 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_init(&mMutex, &mutexAttr); 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutexattr_destroy(&mutexAttr); 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadMutex::~ThreadMutex() 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor 665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadMutex::~ThreadMutex() 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_destroy(&mMutex); 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadMutex::lock() 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: lock kthe mutex 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ThreadMutex::lock() 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_lock(&mMutex); 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadMutex::unblock() 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: unlock the mutex 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ThreadMutex::unlock() 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_unlock(&mMutex); 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadCondVar::ThreadCondVar() 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadCondVar::ThreadCondVar() 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_condattr_t CondAttr; 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_condattr_init(&CondAttr); 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_cond_init(&mCondVar, &CondAttr); 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_condattr_destroy(&CondAttr); 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadCondVar::~ThreadCondVar() 724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadCondVar::~ThreadCondVar() 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_cond_destroy(&mCondVar); 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadCondVar::wait() 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: wait on the mCondVar 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ThreadCondVar::wait() 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_cond_wait(&mCondVar, *this); 747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_unlock(*this); 748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadCondVar::signal() 753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: signal the mCondVar 755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ThreadCondVar::signal() 760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex a(*this); 762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_cond_signal(&mCondVar); 763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: AutoThreadMutex::AutoThreadMutex() 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor, automatically lock the mutex 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectAutoThreadMutex::AutoThreadMutex(ThreadMutex &m) 775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project : mm(m) 776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mm.lock(); 778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: AutoThreadMutex::~AutoThreadMutex() 783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor, automatically unlock the mutex 785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectAutoThreadMutex::~AutoThreadMutex() 790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mm.unlock(); 792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 793