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" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define LOG_TAG "NfcAdaptation" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern "C" void GKI_shutdown(); 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void resetConfig(); 32edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chuextern "C" void verify_stack_non_volatile_store (); 33edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chuextern "C" void delete_stack_non_volatile_store (BOOLEAN forceDelete); 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNfcAdaptation* NfcAdaptation::mpInstance = NULL; 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadMutex NfcAdaptation::sLock; 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectnfc_nci_device_t* NfcAdaptation::mHalDeviceContext = NULL; 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttHAL_NFC_CBACK* NfcAdaptation::mHalCallback = NULL; 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttHAL_NFC_DATA_CBACK* NfcAdaptation::mHalDataCallback = NULL; 405c65c3a0f42e174e47fecd4e569606003217ff4eMartijn CoenenThreadCondVar NfcAdaptation::mHalOpenCompletedEvent; 415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn CoenenThreadCondVar NfcAdaptation::mHalCloseCompletedEvent; 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00; 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 appl_trace_level = 0xff; 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar bcm_nfc_location[120]; 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 475c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenstatic UINT8 nfa_dm_cfg[sizeof ( tNFA_DM_CFG ) ]; 485c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenextern tNFA_DM_CFG *p_nfa_dm_cfg; 495c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenextern UINT8 nfa_ee_max_ee_cfg; 500976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chuextern const UINT8 nfca_version_string []; 510976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chuextern const UINT8 nfa_version_string []; 525c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::NfcAdaptation() 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNfcAdaptation::NfcAdaptation() 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::~NfcAdaptation() 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNfcAdaptation::~NfcAdaptation() 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mpInstance = NULL; 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::GetInstance() 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: access class singleton 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: pointer to the singleton object 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNfcAdaptation& NfcAdaptation::GetInstance() 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex a(sLock); 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!mpInstance) 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mpInstance = new NfcAdaptation; 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return *mpInstance; 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::Initialize() 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class initializer 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::Initialize () 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::Initialize"; 1100976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chu ALOGD("%s: enter", func); 1110976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chu ALOGE("%s: ver=%s nfa=%s", func, nfca_version_string, nfa_version_string); 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long num; 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( !GetStrValue ( NAME_NFA_STORAGE, bcm_nfc_location, sizeof ( bcm_nfc_location ) ) ) 115d8f9332bd02e621ee8c38254844f80ea147c46deEvan Chu { 116d8f9332bd02e621ee8c38254844f80ea147c46deEvan Chu memset (bcm_nfc_location, 0, sizeof(bcm_nfc_location)); 117d8f9332bd02e621ee8c38254844f80ea147c46deEvan Chu strncpy (bcm_nfc_location, "/data/nfc", 9); 118d8f9332bd02e621ee8c38254844f80ea147c46deEvan Chu } 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) ) 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ScrProtocolTraceFlag = num; 1215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetStrValue ( NAME_NFA_DM_CFG, (char*)nfa_dm_cfg, sizeof ( nfa_dm_cfg ) ) ) 1235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen p_nfa_dm_cfg = ( tNFA_DM_CFG * ) &nfa_dm_cfg[0]; 1245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof ( num ) ) ) 1265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen nfa_ee_max_ee_cfg = num; 1285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func, nfa_ee_max_ee_cfg); 1295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project initializeGlobalAppLogLevel (); 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1335a7e857aee2ebba4e369936aa5acdc7bcecf83e7Evan Chu verify_stack_non_volatile_store (); 1345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) && 1355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen (num == 1) ) 1365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: preserve stack NV store", __FUNCTION__); 1375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 138edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu { 139edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu delete_stack_non_volatile_store (FALSE); 140edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu } 1415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_init (); 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_enable (); 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_create_task ((TASKPTR)NFCA_TASK, BTU_TASK, (INT8*)"NFCA_TASK", 0, 0, (pthread_cond_t*)NULL, NULL); 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex guard(mCondVar); 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_create_task ((TASKPTR)Thread, MMI_TASK, (INT8*)"NFCA_THREAD", 0, 0, (pthread_cond_t*)NULL, NULL); 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mCondVar.wait(); 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext = NULL; 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalCallback = NULL; 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs)); 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project InitializeHalDeviceContext (); 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::Finalize() 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class finalizer 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::Finalize() 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::Finalize"; 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex a(sLock); 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", func); 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_shutdown (); 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project resetConfig(); 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_nci_close(mHalDeviceContext); //close the HAL's device context 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext = NULL; 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalCallback = NULL; 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs)); 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project delete this; 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::signal() 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: signal the CondVar to release the thread that is waiting 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::signal () 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mCondVar.signal(); 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::NFCA_TASK() 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: NFCA_TASK runs the GKI main task 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 NfcAdaptation::NFCA_TASK (UINT32 arg) 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::NFCA_TASK"; 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", func); 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_run (0); 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NULL; 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::Thread() 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Creates work threads 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 NfcAdaptation::Thread (UINT32 arg) 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::Thread"; 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", func); 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ThreadCondVar CondVar; 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex guard(CondVar); 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The 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); 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CondVar.wait(); 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NfcAdaptation::GetInstance().signal(); 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_exit_task (GKI_get_taskid ()); 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NULL; 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::GetHalEntryFuncs() 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Get the set of HAL entry points. 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: Functions pointers for HAL entry points. 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttHAL_NFC_ENTRY* NfcAdaptation::GetHalEntryFuncs () 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return &mHalEntryFuncs; 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::InitializeHalDeviceContext 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Ask the generic Android HAL to find the Broadcom-specific HAL. 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::InitializeHalDeviceContext () 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::InitializeHalDeviceContext"; 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", func); 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int ret = 0; //0 means success 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const hw_module_t* hw_module = NULL; 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.initialize = HalInitialize; 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.terminate = HalTerminate; 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.open = HalOpen; 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.close = HalClose; 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.core_initialized = HalCoreInitialized; 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.write = HalWrite; 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.prediscover = HalPrediscover; 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.control_granted = HalControlGranted; 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalEntryFuncs.power_cycle = HalPowerCycle; 285b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson mHalEntryFuncs.get_max_ee = HalGetMaxNfcee; 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ret = hw_get_module (NFC_NCI_HARDWARE_MODULE_ID, &hw_module); 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (ret == 0) 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ret = nfc_nci_open (hw_module, &mHalDeviceContext); 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (ret != 0) 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGE ("%s: nfc_nci_open fail", func); 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGE ("%s: fail hw_get_module", func); 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit", func); 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalInitialize 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Not implemented because this function is only needed 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** within the HAL. 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalInitialize () 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalInitialize"; 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalTerminate 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Not implemented because this function is only needed 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** within the HAL. 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalTerminate () 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalTerminate"; 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalOpen 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Turn on controller, download firmware. 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK* p_data_cback) 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalOpen"; 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalCallback = p_hal_cback; 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDataCallback = p_data_cback; 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->open (mHalDeviceContext, HalDeviceContextCallback, HalDeviceContextDataCallback); 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalClose 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Turn off controller. 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalClose () 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalClose"; 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->close (mHalDeviceContext); 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalDeviceContextCallback 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Translate generic Android HAL's callback into Broadcom-specific 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback function. 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalDeviceContextCallback (nfc_event_t event, nfc_status_t event_status) 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalDeviceContextCallback"; 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: event=%u", func, event); 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalCallback) 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalCallback (event, (tHAL_NFC_STATUS) event_status); 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalDeviceContextDataCallback 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Translate generic Android HAL's callback into Broadcom-specific 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback function. 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalDeviceContextDataCallback (uint16_t data_len, uint8_t* p_data) 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalDeviceContextDataCallback"; 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: len=%u", func, data_len); 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDataCallback) 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDataCallback (data_len, p_data); 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalWrite 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Write NCI message to the controller. 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalWrite (UINT16 data_len, UINT8* p_data) 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalWrite"; 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->write (mHalDeviceContext, data_len, p_data); 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalCoreInitialized 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Adjust the configurable parameters in the controller. 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalCoreInitialized (UINT8* p_core_init_rsp_params) 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalCoreInitialized"; 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->core_initialized (mHalDeviceContext, p_core_init_rsp_params); 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalPrediscover 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Perform any vendor-specific pre-discovery actions (if needed) 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If any actions were performed TRUE will be returned, and 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** HAL_PRE_DISCOVER_CPLT_EVT will notify when actions are 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** completed. 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: TRUE if vendor-specific pre-discovery actions initialized 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** FALSE if no vendor-specific pre-discovery actions are needed. 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN NfcAdaptation::HalPrediscover () 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalPrediscover"; 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN retval = FALSE; 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 46645e68232b8524aca5165dca28b994ec8c11593b1Evan Chu retval = mHalDeviceContext->pre_discover (mHalDeviceContext); 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: HAL_NfcControlGranted 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Grant control to HAL control for sending NCI commands. 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Call in response to HAL_REQUEST_CONTROL_EVT. 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Must only be called when there are no NCI commands pending. 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** HAL_RELEASE_CONTROL_EVT will notify when HAL no longer 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** needs control of NCI. 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: void 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalControlGranted () 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalControlGranted"; 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->control_granted (mHalDeviceContext); 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: NfcAdaptation::HalPowerCycle 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Turn off and turn on the controller. 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: None. 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid NfcAdaptation::HalPowerCycle () 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* func = "NfcAdaptation::HalPowerCycle"; 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s", func); 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (mHalDeviceContext) 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mHalDeviceContext->power_cycle (mHalDeviceContext); 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 513b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson/******************************************************************************* 514b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** 515b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** Function: NfcAdaptation::HalGetMaxNfcee 516b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** 517b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** Description: Turn off and turn on the controller. 518b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** 519b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** Returns: None. 520b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson** 521b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson*******************************************************************************/ 522b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul ChaissonUINT8 NfcAdaptation::HalGetMaxNfcee() 523b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson{ 524b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson const char* func = "NfcAdaptation::HalPowerCycle"; 525b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson UINT8 maxNfcee = 0; 526b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson if (mHalDeviceContext) 527b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson { 528b4b1c46fa5346651a3554c83eb5005f942f1af0fMartijn Coenen // TODO maco call into HAL when we figure out binary compatibility. 529b4b1c46fa5346651a3554c83eb5005f942f1af0fMartijn Coenen return nfa_ee_max_ee_cfg; 530b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson } 531b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson 532b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson return maxNfcee; 533b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson} 5345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 5365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function: NfcAdaptation::DownloadFirmware 5385c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description: Download firmware patch files. 5405c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns: None. 5425c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5435c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 5445c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenvoid NfcAdaptation::DownloadFirmware () 5455c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 5465c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen const char* func = "NfcAdaptation::DownloadFirmware"; 5475c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: enter", func); 5485c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HalInitialize (); 5495c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5505c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalOpenCompletedEvent.lock (); 5515c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: try open HAL", func); 5525c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HalOpen (HalDownloadFirmwareCallback, HalDownloadFirmwareDataCallback); 5535c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalOpenCompletedEvent.wait (); 5545c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5555c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalCloseCompletedEvent.lock (); 5565c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: try close HAL", func); 5575c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HalClose (); 5585c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalCloseCompletedEvent.wait (); 5595c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HalTerminate (); 5615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: exit", func); 5625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 5635c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 5655c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5665c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function: NfcAdaptation::HalDownloadFirmwareCallback 5675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description: Receive events from the HAL. 5695c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns: None. 5715c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 5735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenvoid NfcAdaptation::HalDownloadFirmwareCallback (nfc_event_t event, nfc_status_t event_status) 5745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 5755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen const char* func = "NfcAdaptation::HalDownloadFirmwareCallback"; 5765c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: event=0x%X", func, event); 5775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen switch (event) 5785c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 5795c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case HAL_NFC_OPEN_CPLT_EVT: 5805c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 5815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: HAL_NFC_OPEN_CPLT_EVT", func); 5825c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalOpenCompletedEvent.signal (); 5835c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 5845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 5855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen case HAL_NFC_CLOSE_CPLT_EVT: 5865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 5875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: HAL_NFC_CLOSE_CPLT_EVT", func); 5885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen mHalCloseCompletedEvent.signal (); 5895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen break; 5905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 5915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 5925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 5935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 5945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/******************************************************************************* 5955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Function: NfcAdaptation::HalDownloadFirmwareDataCallback 5975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 5985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Description: Receive data events from the HAL. 5995c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6005c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Returns: None. 6015c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 6025c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen*******************************************************************************/ 6035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenvoid NfcAdaptation::HalDownloadFirmwareDataCallback (uint16_t data_len, uint8_t* p_data) 6045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 6055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 6065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 6075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadMutex::ThreadMutex() 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadMutex::ThreadMutex() 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutexattr_t mutexAttr; 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutexattr_init(&mutexAttr); 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_init(&mMutex, &mutexAttr); 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutexattr_destroy(&mutexAttr); 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadMutex::~ThreadMutex() 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadMutex::~ThreadMutex() 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_destroy(&mMutex); 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadMutex::lock() 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: lock kthe mutex 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ThreadMutex::lock() 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_lock(&mMutex); 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadMutex::unblock() 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: unlock the mutex 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ThreadMutex::unlock() 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_unlock(&mMutex); 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadCondVar::ThreadCondVar() 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadCondVar::ThreadCondVar() 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_condattr_t CondAttr; 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_condattr_init(&CondAttr); 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_cond_init(&mCondVar, &CondAttr); 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_condattr_destroy(&CondAttr); 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadCondVar::~ThreadCondVar() 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectThreadCondVar::~ThreadCondVar() 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_cond_destroy(&mCondVar); 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadCondVar::wait() 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: wait on the mCondVar 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ThreadCondVar::wait() 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_cond_wait(&mCondVar, *this); 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_mutex_unlock(*this); 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: ThreadCondVar::signal() 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: signal the mCondVar 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ThreadCondVar::signal() 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project AutoThreadMutex a(*this); 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pthread_cond_signal(&mCondVar); 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: AutoThreadMutex::AutoThreadMutex() 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor, automatically lock the mutex 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectAutoThreadMutex::AutoThreadMutex(ThreadMutex &m) 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project : mm(m) 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mm.lock(); 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: AutoThreadMutex::~AutoThreadMutex() 749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor, automatically unlock the mutex 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectAutoThreadMutex::~AutoThreadMutex() 756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mm.unlock(); 758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 759