HalAdaptation.cpp revision 0976d37081fae8bcd4fc4dcf7996e1ce194fb4b1
1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/******************************************************************************
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  Copyright (C) 2012 Broadcom Corporation
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  Licensed under the Apache License, Version 2.0 (the "License");
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  you may not use this file except in compliance with the License.
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  You may obtain a copy of the License at:
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  http://www.apache.org/licenses/LICENSE-2.0
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  See the License for the specific language governing permissions and
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  limitations under the License.
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ******************************************************************************/
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/******************************************************************************
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  HAL Adaptation Interface (HAI). This interface regulates the interaction
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  between standard Android HAL and Broadcom-specific HAL.  It adapts
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *  Broadcom-specific features to the Android framework.
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath *
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ******************************************************************************/
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define LOG_TAG "NfcNciHal"
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "OverrideLog.h"
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "HalAdaptation.h"
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "SyncEvent.h"
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "config.h"
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "nfc_hal_int.h"
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "nfc_hal_post_reset.h"
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <errno.h>
34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <pthread.h>
35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "buildcfg.h"
36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathextern void delete_hal_non_volatile_store (bool forceDelete);
37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathextern void verify_hal_non_volatile_store ();
38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathextern "C"
39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "userial.h"
41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath///////////////////////////////////////
45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// private declaration, definition
46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic nfc_stack_callback_t* gAndroidHalCallback = NULL;
49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic nfc_stack_data_callback_t* gAndroidHalDataCallback = NULL;
50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic SyncEvent gOpenCompletedEvent;
51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic SyncEvent gPostInitCompletedEvent;
52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic SyncEvent gCloseCompletedEvent;
53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathUINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00;
55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstatic void BroadcomHalCallback (UINT8 event, tHAL_NFC_STATUS status);
577faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezstatic void BroadcomHalDataCallback (UINT16 data_len, UINT8* p_data);
587faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathextern tNFC_HAL_CFG *p_nfc_hal_cfg;
607faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezextern const UINT8  nfca_version_string [];
617faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezextern const UINT8  nfa_version_string [];
627faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
637faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez///////////////////////////////////////
64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiInitializeLibrary (const bcm2079x_dev_t* device)
67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter", __FUNCTION__);
697faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    ALOGE ("%s: ver=%s nfa=%s", __FUNCTION__, nfca_version_string, nfa_version_string);
70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    int retval = EACCES;
717faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    unsigned long freq = 0;
72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    unsigned long num = 0;
73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    char temp[120];
74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    UINT8 logLevel = 0;
757faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    logLevel = InitializeGlobalAppLogLevel ();
777faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) &&
79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            (num == 1) )
80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        ALOGD ("%s: preserve HAL NV store", __FUNCTION__);
81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    else
82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        verify_hal_non_volatile_store ();
84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        delete_hal_non_volatile_store (false);
85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    // Initialize protocol logging level
88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) )
89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        ScrProtocolTraceFlag = num;
90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    tUSERIAL_OPEN_CFG cfg;
92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    struct tUART_CONFIG  uart;
93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    if ( GetStrValue ( NAME_UART_PARITY, temp, sizeof ( temp ) ) )
95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        if ( strcmp ( temp, "even" ) == 0 )
97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iParity = USERIAL_PARITY_EVEN;
98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( strcmp ( temp, "odd" ) == 0 )
99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iParity = USERIAL_PARITY_ODD;
100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( strcmp ( temp, "none" ) == 0 )
101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iParity = USERIAL_PARITY_NONE;
102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    else
104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        uart.m_iParity = USERIAL_PARITY_NONE;
105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    if ( GetStrValue ( NAME_UART_STOPBITS, temp, sizeof ( temp ) ) )
107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        if ( strcmp ( temp, "1" ) == 0 )
109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iStopbits = USERIAL_STOPBITS_1;
110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( strcmp ( temp, "2" ) == 0 )
111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iStopbits = USERIAL_STOPBITS_2;
112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( strcmp ( temp, "1.5" ) == 0 )
113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iStopbits = USERIAL_STOPBITS_1_5;
114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    else if ( GetNumValue ( NAME_UART_STOPBITS, &num, sizeof ( num ) ) )
116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        if ( num == 1 )
118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iStopbits = USERIAL_STOPBITS_1;
119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 2 )
120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iStopbits = USERIAL_STOPBITS_2;
121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    else
123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        uart.m_iStopbits = USERIAL_STOPBITS_1;
124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    if ( GetNumValue ( NAME_UART_DATABITS, &num, sizeof ( num ) ) )
126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        if ( 5 <= num && num <= 8 )
128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iDatabits = ( 1 << ( num + 1 ) );
129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    else
131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        uart.m_iDatabits = USERIAL_DATABITS_8;
132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    if ( GetNumValue ( NAME_UART_BAUD, &num, sizeof ( num ) ) )
134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        if ( num == 300 ) uart.m_iBaudrate = USERIAL_BAUD_300;
136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 600 ) uart.m_iBaudrate = USERIAL_BAUD_600;
137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 1200 ) uart.m_iBaudrate = USERIAL_BAUD_1200;
138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 2400 ) uart.m_iBaudrate = USERIAL_BAUD_2400;
139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 9600 ) uart.m_iBaudrate = USERIAL_BAUD_9600;
140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 19200 ) uart.m_iBaudrate = USERIAL_BAUD_19200;
141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 57600 ) uart.m_iBaudrate = USERIAL_BAUD_57600;
142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 115200 ) uart.m_iBaudrate = USERIAL_BAUD_115200;
143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 230400 ) uart.m_iBaudrate = USERIAL_BAUD_230400;
144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 460800 ) uart.m_iBaudrate = USERIAL_BAUD_460800;
145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        else if ( num == 921600 ) uart.m_iBaudrate = USERIAL_BAUD_921600;
146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    else if ( GetStrValue ( NAME_UART_BAUD, temp, sizeof ( temp ) ) )
148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        if ( strcmp ( temp, "auto" ) == 0 )
150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            uart.m_iBaudrate = USERIAL_BAUD_AUTO;
151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    else
153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        uart.m_iBaudrate = USERIAL_BAUD_115200;
154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    memset (&cfg, 0, sizeof(tUSERIAL_OPEN_CFG));
156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    cfg.fmt = uart.m_iDatabits | uart.m_iParity | uart.m_iStopbits;
157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    cfg.baud = uart.m_iBaudrate;
158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: uart config=0x%04x, %d\n", __func__, cfg.fmt, cfg.baud);
160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    USERIAL_Init(&cfg);
161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    if ( GetNumValue ( NAME_NFCC_ENABLE_TIMEOUT, &num, sizeof ( num ) ) )
163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout = num;
165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
1667faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    HAL_NfcInitialize ();
168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    HAL_NfcSetTraceLevel (logLevel); // Initialize HAL's logging level
169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
1707faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    retval = 0;
171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit %d", __FUNCTION__, retval);
172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiTerminateLibrary ()
177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    int retval = EACCES;
1797faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    ALOGD ("%s: enter", __FUNCTION__);
180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
1817faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    HAL_NfcTerminate ();
182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gAndroidHalCallback = NULL;
183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gAndroidHalDataCallback = NULL;
184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    GKI_shutdown ();
185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    retval = 0;
186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit %d", __FUNCTION__, retval);
187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiOpen (const bcm2079x_dev_t* device, nfc_stack_callback_t* halCallbackFunc, nfc_stack_data_callback_t* halDataCallbackFunc)
192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter", __FUNCTION__);
194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    int retval = EACCES;
195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gAndroidHalCallback = halCallbackFunc;
197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gAndroidHalDataCallback = halDataCallbackFunc;
198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    SyncEventGuard guard (gOpenCompletedEvent);
200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    HAL_NfcOpen (BroadcomHalCallback, BroadcomHalDataCallback);
201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gOpenCompletedEvent.wait ();
202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    retval = 0;
204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit %d", __FUNCTION__, retval);
205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid BroadcomHalCallback (UINT8 event, tHAL_NFC_STATUS status)
210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter; event=0x%X", __FUNCTION__, event);
212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    switch (event)
213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    {
214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    case HAL_NFC_OPEN_CPLT_EVT:
215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        {
216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            ALOGD ("%s: HAL_NFC_OPEN_CPLT_EVT; status=0x%X", __FUNCTION__, status);
217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            SyncEventGuard guard (gOpenCompletedEvent);
218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            gOpenCompletedEvent.notifyOne ();
219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            break;
220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        }
221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    case HAL_NFC_POST_INIT_CPLT_EVT:
223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        {
224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            ALOGD ("%s: HAL_NFC_POST_INIT_CPLT_EVT", __FUNCTION__);
225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            SyncEventGuard guard (gPostInitCompletedEvent);
226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            gPostInitCompletedEvent.notifyOne ();
227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            break;
228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        }
229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    case HAL_NFC_CLOSE_CPLT_EVT:
231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        {
232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            ALOGD ("%s: HAL_NFC_CLOSE_CPLT_EVT", __FUNCTION__);
233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            SyncEventGuard guard (gCloseCompletedEvent);
234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            gCloseCompletedEvent.notifyOne ();
235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            break;
236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        }
237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    case HAL_NFC_ERROR_EVT:
239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        {
240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            ALOGD ("%s: HAL_NFC_ERROR_EVT", __FUNCTION__);
241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            {
242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                SyncEventGuard guard (gOpenCompletedEvent);
243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                gOpenCompletedEvent.notifyOne ();
244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            }
245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            {
246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                SyncEventGuard guard (gPostInitCompletedEvent);
247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                gPostInitCompletedEvent.notifyOne ();
248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            }
249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            {
250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                SyncEventGuard guard (gCloseCompletedEvent);
251c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                gCloseCompletedEvent.notifyOne ();
252c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            }
253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath            break;
254c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        }
255c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    }
256c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gAndroidHalCallback (event, status);
257c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit; event=0x%X", __FUNCTION__, event);
258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
259c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
260c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
261c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid BroadcomHalDataCallback (UINT16 data_len, UINT8* p_data)
262c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
263c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter; len=%u", __FUNCTION__, data_len);
264c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gAndroidHalDataCallback (data_len, p_data);
265c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
266c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
267c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
268c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiClose (const bcm2079x_dev_t* device)
269c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
270c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter", __FUNCTION__);
271c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    int retval = EACCES;
272c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
273c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    SyncEventGuard guard (gCloseCompletedEvent);
274c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    HAL_NfcClose ();
275c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gCloseCompletedEvent.wait ();
276c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    retval = 0;
277c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit %d", __FUNCTION__, retval);
278c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
279c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
280c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
281c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
282c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiCoreInitialized (const bcm2079x_dev_t* device, uint8_t* coreInitResponseParams)
283c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
284c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter", __FUNCTION__);
285c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    int retval = EACCES;
286c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
287c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    SyncEventGuard guard (gPostInitCompletedEvent);
288c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    HAL_NfcCoreInitialized (coreInitResponseParams);
289c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    gPostInitCompletedEvent.wait ();
290c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    retval = 0;
291c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit %d", __FUNCTION__, retval);
292c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
293c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
294c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
2957faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
296c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiWrite (const bcm2079x_dev_t* dev, uint16_t dataLen, const uint8_t* data)
297c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
2987faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    ALOGD ("%s: enter; len=%u", __FUNCTION__, dataLen);
299c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    int retval = EACCES;
300c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
301c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    HAL_NfcWrite (dataLen, const_cast<UINT8*> (data));
3027faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    retval = 0;
303c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit %d", __FUNCTION__, retval);
304c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
305c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
306c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
307c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
308c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiPreDiscover (const bcm2079x_dev_t* device)
309c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
310c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter", __FUNCTION__);
311c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    int retval = EACCES;
3127faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
313c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    retval = HAL_NfcPreDiscover () ? 1 : 0;
3147faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    ALOGD ("%s: exit %d", __FUNCTION__, retval);
315c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
316c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
3177faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
318c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
319c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiControlGranted (const bcm2079x_dev_t* device)
320c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
321c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter", __FUNCTION__);
3227faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    int retval = EACCES;
323c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
3247faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    HAL_NfcControlGranted ();
325c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    retval = 0;
326c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit %d", __FUNCTION__, retval);
327c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
328c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
329c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
330c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
331c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint HaiPowerCycle (const bcm2079x_dev_t* device)
3327faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
333c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: enter", __FUNCTION__);
3347faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez    int retval = EACCES;
335c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
336c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    HAL_NfcPowerCycle ();
337c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    retval = 0;
338c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ALOGD ("%s: exit %d", __FUNCTION__, retval);
339c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    return retval;
340c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
341c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
342c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath