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