1b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu/****************************************************************************** 2b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 3b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Copyright (C) 1999-2012 Broadcom Corporation 4b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 5b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Licensed under the Apache License, Version 2.0 (the "License"); 6b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * you may not use this file except in compliance with the License. 7b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * You may obtain a copy of the License at: 8b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 9b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * http://www.apache.org/licenses/LICENSE-2.0 10b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 11b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Unless required by applicable law or agreed to in writing, software 12b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * distributed under the License is distributed on an "AS IS" BASIS, 13b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * See the License for the specific language governing permissions and 15b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * limitations under the License. 16b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 17b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/ 18e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu#include "OverrideLog.h" 1945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "NfcAdaptation.h" 2045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuextern "C" 2145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 2245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu #include "gki.h" 2345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu #include "nfa_api.h" 2445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu #include "nfc_int.h" 2545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 2645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "config.h" 2745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 2845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#define LOG_TAG "NfcAdaptation" 2945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuextern "C" void GKI_shutdown(); 3145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuextern void resetConfig(); 3245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3345faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNfcAdaptation* NfcAdaptation::mpInstance = NULL; 3445faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuThreadMutex NfcAdaptation::sLock; 35eb190654c5fbaea2f396bb5523f57062f291879aEvan Chunfc_nci_device_t* NfcAdaptation::mHalDeviceContext = NULL; 36eb190654c5fbaea2f396bb5523f57062f291879aEvan ChutHAL_NFC_CBACK* NfcAdaptation::mHalCallback = NULL; 37ba4c17ee1d31e1b9f396292711f1414d449dd361Evan ChutHAL_NFC_DATA_CBACK* NfcAdaptation::mHalDataCallback = NULL; 3845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3963f80ce896f0f8c203191b4e44e038fecb6be02aMartijn CoenenUINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00; 4063f80ce896f0f8c203191b4e44e038fecb6be02aMartijn CoenenUINT8 appl_trace_level = 0xff; 4163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenenchar bcm_nfc_location[120]; 4263f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen 4345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 4445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: NfcAdaptation::NfcAdaptation() 4645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class constructor 4845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 5045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 5145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 5245faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNfcAdaptation::NfcAdaptation() 5345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 5445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 5545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 5645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 5745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 5845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: NfcAdaptation::~NfcAdaptation() 5945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class destructor 6145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 6345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 6545faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNfcAdaptation::~NfcAdaptation() 6645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 6745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu mpInstance = NULL; 6845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 6945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 7045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 7145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: NfcAdaptation::GetInstance() 7345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: access class singleton 7545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: pointer to the singleton object 7745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 7945faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNfcAdaptation& NfcAdaptation::GetInstance() 8045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 8145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu AutoThreadMutex a(sLock); 8245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 8345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (!mpInstance) 8445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu mpInstance = new NfcAdaptation; 8545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return *mpInstance; 8645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 8745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 8845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 8945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: NfcAdaptation::Initialize() 9145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class initializer 9345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 9545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 9745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid NfcAdaptation::Initialize () 9845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 9945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu const char* func = "NfcAdaptation::Initialize"; 10045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD("%s: enter\n", func); 10163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen unsigned long num; 10245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 10363f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen if ( !GetStrValue ( NAME_NFA_STORAGE, bcm_nfc_location, sizeof ( bcm_nfc_location ) ) ) 104ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu strcpy ( bcm_nfc_location, "/data/nfc" ); 105e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) ) 10663f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen ScrProtocolTraceFlag = num; 107e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu initializeGlobalAppLogLevel (); 10845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 10945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu GKI_init (); 11045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu GKI_enable (); 11145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu GKI_create_task ((TASKPTR)NFCA_TASK, BTU_TASK, (INT8*)"NFCA_TASK", 0, 0, (pthread_cond_t*)NULL, NULL); 11245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 11345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu AutoThreadMutex guard(mCondVar); 11445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu GKI_create_task ((TASKPTR)Thread, MMI_TASK, (INT8*)"NFCA_THREAD", 0, 0, (pthread_cond_t*)NULL, NULL); 11545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu mCondVar.wait(); 11645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 117eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 118eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalDeviceContext = NULL; 119eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalCallback = NULL; 120eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu memset (&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs)); 121eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu InitializeHalDeviceContext (); 12245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ALOGD ("%s: exit", func); 12345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 12445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 12545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 12645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 12745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: NfcAdaptation::Finalize() 12845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 12945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class finalizer 13045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 13245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 13445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid NfcAdaptation::Finalize() 13545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 136eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::Finalize"; 13745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu AutoThreadMutex a(sLock); 13845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 139eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: enter", func); 14045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu GKI_shutdown (); 14145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 14245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu resetConfig(); 143eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 144eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu nfc_nci_close(mHalDeviceContext); //close the HAL's device context 145eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalDeviceContext = NULL; 146eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalCallback = NULL; 147eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu memset (&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs)); 148eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 149eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: exit", func); 15045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu delete this; 15145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 15245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 15345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 15445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 15545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: NfcAdaptation::signal() 15645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 15745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: signal the CondVar to release the thread that is waiting 15845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 15945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 16045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 16145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 16245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid NfcAdaptation::signal () 16345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 16445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu mCondVar.signal(); 16545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 16645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 16745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 16845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 16945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: NfcAdaptation::NFCA_TASK() 17045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 17145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: NFCA_TASK runs the GKI main task 17245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 17345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 17445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 17545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 17645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT32 NfcAdaptation::NFCA_TASK (UINT32 arg) 17745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 178eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::NFCA_TASK"; 179eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: enter", func); 18045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu GKI_run (0); 181eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: exit", func); 18245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return NULL; 18345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 18445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 18545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 18645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: NfcAdaptation::Thread() 18845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: Creates work threads 19045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 19145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 19245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 19345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 19445faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT32 NfcAdaptation::Thread (UINT32 arg) 19545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 196eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::Thread"; 19763f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen unsigned long num; 19863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen char temp[120]; 199eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: enter", func); 20063f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen 20163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen { 202eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ThreadCondVar CondVar; 203eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu AutoThreadMutex guard(CondVar); 204eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu GKI_create_task ((TASKPTR)nfc_task, NFC_TASK, (INT8*)"NFC_TASK", 0, 0, (pthread_cond_t*)CondVar, (pthread_mutex_t*)CondVar); 205eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu CondVar.wait(); 20663f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen } 20763f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen 208eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu NfcAdaptation::GetInstance().signal(); 209eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 210eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu GKI_exit_task (GKI_get_taskid ()); 211eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: exit", func); 212eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu return NULL; 213eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 214eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 215eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 216eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 217eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::GetHalEntryFuncs() 218eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 219eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Get the set of HAL entry points. 220eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 221eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: Functions pointers for HAL entry points. 222eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 223eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 224eb190654c5fbaea2f396bb5523f57062f291879aEvan ChutHAL_NFC_ENTRY* NfcAdaptation::GetHalEntryFuncs () 225eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 226eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu return &mHalEntryFuncs; 227eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 228eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 229eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 230eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 231eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::InitializeHalDeviceContext 232eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 233eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Ask the generic Android HAL to find the Broadcom-specific HAL. 234eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 235eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 236eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 237eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 238eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NfcAdaptation::InitializeHalDeviceContext () 239eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 240eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::InitializeHalDeviceContext"; 241eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: enter", func); 242eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu int ret = 0; //0 means success 243eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const hw_module_t* hw_module = NULL; 244eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 245eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.initialize = HalInitialize; 246eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.terminate = HalTerminate; 247eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.open = HalOpen; 248eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.close = HalClose; 249eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.core_initialized = HalCoreInitialized; 250eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.write = HalWrite; 251eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.prediscover = HalPrediscover; 252eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.control_granted = HalControlGranted; 253eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalEntryFuncs.power_cycle = HalPowerCycle; 254eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 255eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ret = hw_get_module (NFC_NCI_HARDWARE_MODULE_ID, &hw_module); 256eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (ret == 0) 25763f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen { 258eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ret = nfc_nci_open (hw_module, &mHalDeviceContext); 259eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (ret != 0) 260eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGE ("%s: nfc_nci_open fail", func); 26163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen } 262eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu else 263eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGE ("%s: fail hw_get_module", func); 264eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: exit", func); 265eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 266eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 267eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 268eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 269eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalInitialize 270eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 271eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Not implemented because this function is only needed 272eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** within the HAL. 273eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 274eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 275eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 276eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 277eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NfcAdaptation::HalInitialize () 278eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 279eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalInitialize"; 280eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 281eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 282eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 283eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 284eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 285eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalTerminate 286eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 287eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Not implemented because this function is only needed 288eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** within the HAL. 289eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 290eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 291eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 292eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 293eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NfcAdaptation::HalTerminate () 294eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 295eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalTerminate"; 296eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 297eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 298eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 299eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 300eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 301eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalOpen 302eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 303eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Turn on controller, download firmware. 304eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 305eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 306eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 307eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 308ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chuvoid NfcAdaptation::HalOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK* p_data_cback) 309eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 310eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalOpen"; 311eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 312eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (mHalDeviceContext) 31363f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen { 314eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalCallback = p_hal_cback; 315ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu mHalDataCallback = p_data_cback; 316ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu mHalDeviceContext->open (mHalDeviceContext, HalDeviceContextCallback, HalDeviceContextDataCallback); 31763f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen } 318eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 31963f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen 320eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 321eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 322eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalClose 323eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 324eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Turn off controller. 325eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 326eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 327eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 328eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 329eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NfcAdaptation::HalClose () 330eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 331eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalClose"; 332eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 333eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (mHalDeviceContext) 33463f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen { 335eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalDeviceContext->close (mHalDeviceContext); 33663f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen } 337eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 33863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen 339eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 340eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 341eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalDeviceContextCallback 342eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 343eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Translate generic Android HAL's callback into Broadcom-specific 344eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** callback function. 345eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 346eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 347eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 348eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 349ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chuvoid NfcAdaptation::HalDeviceContextCallback (nfc_event_t event, nfc_status_t event_status) 350eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 351eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalDeviceContextCallback"; 352eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s: event=%u", func, event); 353eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (mHalCallback) 354ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu mHalCallback (event, (tHAL_NFC_STATUS) event_status); 355ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu} 356ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu 357ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu/******************************************************************************* 358ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu** 359ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu** Function: NfcAdaptation::HalDeviceContextDataCallback 360ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu** 361ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu** Description: Translate generic Android HAL's callback into Broadcom-specific 362ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu** callback function. 363ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu** 364ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu** Returns: None. 365ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu** 366ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu*******************************************************************************/ 367ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chuvoid NfcAdaptation::HalDeviceContextDataCallback (uint16_t data_len, uint8_t* p_data) 368ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu{ 369ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu const char* func = "NfcAdaptation::HalDeviceContextDataCallback"; 370ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu ALOGD ("%s: len=%u", func, data_len); 371ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu if (mHalDataCallback) 372ba4c17ee1d31e1b9f396292711f1414d449dd361Evan Chu mHalDataCallback (data_len, p_data); 373eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 374eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 375eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 376eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 377eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalWrite 378eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 379eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Write NCI message to the controller. 380eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 381eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 382eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 383eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 384eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NfcAdaptation::HalWrite (UINT16 data_len, UINT8* p_data) 385eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 386eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalWrite"; 387eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 388eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (mHalDeviceContext) 38963f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen { 390eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalDeviceContext->write (mHalDeviceContext, data_len, p_data); 39163f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen } 392eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 393eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 394eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 395eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 396eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalCoreInitialized 397eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 398eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Adjust the configurable parameters in the controller. 399eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 400eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 401eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 402eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 403eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NfcAdaptation::HalCoreInitialized (UINT8* p_core_init_rsp_params) 404eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 405eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalCoreInitialized"; 406eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 407eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (mHalDeviceContext) 40863f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen { 409eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalDeviceContext->core_initialized (mHalDeviceContext, p_core_init_rsp_params); 41063f80ce896f0f8c203191b4e44e038fecb6be02aMartijn Coenen } 411eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 41245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 413eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 414eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 415eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalPrediscover 416eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 417eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Perform any vendor-specific pre-discovery actions (if needed) 418eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** If any actions were performed TRUE will be returned, and 419eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** HAL_PRE_DISCOVER_CPLT_EVT will notify when actions are 420eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** completed. 421eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 422eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: TRUE if vendor-specific pre-discovery actions initialized 423eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** FALSE if no vendor-specific pre-discovery actions are needed. 424eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 425eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 426eb190654c5fbaea2f396bb5523f57062f291879aEvan ChuBOOLEAN NfcAdaptation::HalPrediscover () 427eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 428eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalPrediscover"; 429eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 430eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu BOOLEAN retval = FALSE; 43145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 432eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (mHalDeviceContext) 43345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 434eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalDeviceContext->pre_discover (mHalDeviceContext); 43545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 436eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu return retval; 437eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 438eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu 439eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 440eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 441eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: HAL_NfcControlGranted 442eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 443eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Grant control to HAL control for sending NCI commands. 444eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Call in response to HAL_REQUEST_CONTROL_EVT. 445eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Must only be called when there are no NCI commands pending. 446eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** HAL_RELEASE_CONTROL_EVT will notify when HAL no longer 447eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** needs control of NCI. 448eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 449eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: void 450eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 451eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 452eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NfcAdaptation::HalControlGranted () 453eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 454eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalControlGranted"; 455eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 456eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (mHalDeviceContext) 45745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 458eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalDeviceContext->control_granted (mHalDeviceContext); 45945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 460eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu} 46145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 462eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu/******************************************************************************* 463eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 464eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Function: NfcAdaptation::HalPowerCycle 465eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 466eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Description: Turn off and turn on the controller. 467eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 468eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** Returns: None. 469eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu** 470eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu*******************************************************************************/ 471eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NfcAdaptation::HalPowerCycle () 472eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu{ 473eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu const char* func = "NfcAdaptation::HalPowerCycle"; 474eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu ALOGD ("%s", func); 475eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu if (mHalDeviceContext) 476eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu { 477eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu mHalDeviceContext->power_cycle (mHalDeviceContext); 478eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu } 47945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 48045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 48145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 48245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 48345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: ThreadMutex::ThreadMutex() 48445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 48545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class constructor 48645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 48745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 48845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 48945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 49045faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuThreadMutex::ThreadMutex() 49145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 49245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_mutexattr_t mutexAttr; 49345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 49445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_mutexattr_init(&mutexAttr); 49545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_mutex_init(&mMutex, &mutexAttr); 49645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_mutexattr_destroy(&mutexAttr); 49745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 49845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 49945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 50045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 50145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: ThreadMutex::~ThreadMutex() 50245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 50345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class destructor 50445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 50545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 50645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 50745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 50845faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuThreadMutex::~ThreadMutex() 50945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 51045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_mutex_destroy(&mMutex); 51145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 51245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 51345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 51445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 51545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: ThreadMutex::lock() 51645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 51745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: lock kthe mutex 51845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 51945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 52045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 52145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 52245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid ThreadMutex::lock() 52345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 52445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_mutex_lock(&mMutex); 52545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 52645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 52745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 52845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 52945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: ThreadMutex::unblock() 53045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 53145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: unlock the mutex 53245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 53345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 53445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 53545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 53645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid ThreadMutex::unlock() 53745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 53845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_mutex_unlock(&mMutex); 53945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 54045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 54145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 54245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 54345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: ThreadCondVar::ThreadCondVar() 54445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 54545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class constructor 54645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 54745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 54845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 54945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 55045faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuThreadCondVar::ThreadCondVar() 55145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 55245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_condattr_t CondAttr; 55345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 55445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_condattr_init(&CondAttr); 55545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_cond_init(&mCondVar, &CondAttr); 55645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 55745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_condattr_destroy(&CondAttr); 55845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 55945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 56045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 56145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 56245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: ThreadCondVar::~ThreadCondVar() 56345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 56445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class destructor 56545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 56645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 56745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 56845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 56945faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuThreadCondVar::~ThreadCondVar() 57045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 57145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_cond_destroy(&mCondVar); 57245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 57345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 57445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 57545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 57645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: ThreadCondVar::wait() 57745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 57845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: wait on the mCondVar 57945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 58045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 58145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 58245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 58345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid ThreadCondVar::wait() 58445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 58545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_cond_wait(&mCondVar, *this); 58645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_mutex_unlock(*this); 58745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 58845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 58945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 59045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 59145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: ThreadCondVar::signal() 59245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 59345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: signal the mCondVar 59445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 59545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 59645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 59745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 59845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid ThreadCondVar::signal() 59945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 60045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu AutoThreadMutex a(*this); 60145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pthread_cond_signal(&mCondVar); 60245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 60345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 60445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 60545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 60645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: AutoThreadMutex::AutoThreadMutex() 60745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 60845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class constructor, automatically lock the mutex 60945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 61045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 61145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 61245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 61345faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuAutoThreadMutex::AutoThreadMutex(ThreadMutex &m) 61445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu : mm(m) 61545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 61645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu mm.lock(); 61745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 61845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 61945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 62045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 62145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function: AutoThreadMutex::~AutoThreadMutex() 62245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 62345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description: class destructor, automatically unlock the mutex 62445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 62545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns: none 62645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 62745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 62845faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuAutoThreadMutex::~AutoThreadMutex() 62945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 63045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu mm.unlock(); 63145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 632