HalAdaptation.cpp revision 5c65c3a0f42e174e47fecd4e569606003217ff4e
11ae29591efbb29492ce05378909ccf4028d7c1eeBehdad Esfahbod/******************************************************************************
230e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbod *
38413c108d21e8cf0e9059bbfffde8d13f2616340Behdad Esfahbod *  Copyright (C) 2012 Broadcom Corporation
4c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *
52b06aaa2a6bcd363c25fb0c43f6bb906906594bdBehdad Esfahbod *  Licensed under the Apache License, Version 2.0 (the "License");
630e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbod *  you may not use this file except in compliance with the License.
730e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbod *  You may obtain a copy of the License at:
830e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbod *
930e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbod *  http://www.apache.org/licenses/LICENSE-2.0
10c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *
11c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *  Unless required by applicable law or agreed to in writing, software
12c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *  distributed under the License is distributed on an "AS IS" BASIS,
13c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *  See the License for the specific language governing permissions and
15c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *  limitations under the License.
16c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *
17c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine ******************************************************************************/
18c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
19c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine/******************************************************************************
20c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *
21c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *  HAL Adaptation Interface (HAI). This interface regulates the interaction
22c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *  between standard Android HAL and Broadcom-specific HAL.  It adapts
23c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *  Broadcom-specific features to the Android framework.
24c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine *
25c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine ******************************************************************************/
26c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#define LOG_TAG "NfcNciHal"
27c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include "OverrideLog.h"
28c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include "HalAdaptation.h"
29c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include "SyncEvent.h"
30c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include "config.h"
31c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include "nfc_hal_int.h"
32c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include "nfc_hal_post_reset.h"
33c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include <errno.h>
34c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include <pthread.h>
35c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include "buildcfg.h"
36c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineextern void delete_hal_non_volatile_store ();
37c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineextern "C"
38c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
39c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine#include "userial.h"
40c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine}
41c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
42c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
43c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine///////////////////////////////////////
44c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine// private declaration, definition
45c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
46c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
47c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontainestatic nfc_stack_callback_t* gAndroidHalCallback = NULL;
48c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontainestatic nfc_stack_data_callback_t* gAndroidHalDataCallback = NULL;
49c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontainestatic SyncEvent gOpenCompletedEvent;
50c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontainestatic SyncEvent gPostInitCompletedEvent;
51c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontainestatic SyncEvent gCloseCompletedEvent;
52c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
53c33b0a22ef0046c392275e3dba974dfbadee24faMatt FontaineUINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00;
544b775ee5f16b7feef22dd796f2faefb366f535f3Behdad Esfahbod
55c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontainestatic void BroadcomHalCallback (UINT8 event, tHAL_NFC_STATUS status);
56c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontainestatic void BroadcomHalDataCallback (UINT16 data_len, UINT8* p_data);
57c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
58c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
59c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine///////////////////////////////////////
60c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
61c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
62c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineint HaiInitializeLibrary (const bcm2079x_dev_t* device)
63c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
64c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter", __FUNCTION__);
65c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    int retval = EACCES;
66c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    unsigned long freq = 0;
67c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    unsigned long num = 0;
68c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    char temp[120];
69c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    UINT8 logLevel = 0;
70c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
71c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    logLevel = InitializeGlobalAppLogLevel ();
72c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
73c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) &&
74c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            (num == 1) )
75c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        ALOGD ("%s: preserve HAL NV store", __FUNCTION__);
76c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    else
77c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        delete_hal_non_volatile_store ();
78c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
79c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    // Initialize protocol logging level
80c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) )
81c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        ScrProtocolTraceFlag = num;
82c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
83c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    tUSERIAL_OPEN_CFG cfg;
844b775ee5f16b7feef22dd796f2faefb366f535f3Behdad Esfahbod    struct tUART_CONFIG  uart;
85c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
86c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    if ( GetStrValue ( NAME_UART_PARITY, temp, sizeof ( temp ) ) )
87c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    {
88c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        if ( strcmp ( temp, "even" ) == 0 )
89c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iParity = USERIAL_PARITY_EVEN;
90c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( strcmp ( temp, "odd" ) == 0 )
91c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iParity = USERIAL_PARITY_ODD;
92c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( strcmp ( temp, "none" ) == 0 )
93c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iParity = USERIAL_PARITY_NONE;
94c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    }
95c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    else
96c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        uart.m_iParity = USERIAL_PARITY_NONE;
97c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
98c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    if ( GetStrValue ( NAME_UART_STOPBITS, temp, sizeof ( temp ) ) )
99c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    {
100c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        if ( strcmp ( temp, "1" ) == 0 )
101c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iStopbits = USERIAL_STOPBITS_1;
102c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( strcmp ( temp, "2" ) == 0 )
103c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iStopbits = USERIAL_STOPBITS_2;
104c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( strcmp ( temp, "1.5" ) == 0 )
105c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iStopbits = USERIAL_STOPBITS_1_5;
106c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    }
107c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    else if ( GetNumValue ( NAME_UART_STOPBITS, &num, sizeof ( num ) ) )
108c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    {
109c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        if ( num == 1 )
110c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iStopbits = USERIAL_STOPBITS_1;
111c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 2 )
112c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iStopbits = USERIAL_STOPBITS_2;
113c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    }
114c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    else
115c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        uart.m_iStopbits = USERIAL_STOPBITS_1;
11618316aa769566eeb6f3f4a6ed2685fa8f8e861c2Behdad Esfahbod
117c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    if ( GetNumValue ( NAME_UART_DATABITS, &num, sizeof ( num ) ) )
118c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    {
119c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        if ( 5 <= num && num <= 8 )
120c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iDatabits = ( 1 << ( num + 1 ) );
121c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    }
122c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    else
123c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        uart.m_iDatabits = USERIAL_DATABITS_8;
1244b775ee5f16b7feef22dd796f2faefb366f535f3Behdad Esfahbod
125c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    if ( GetNumValue ( NAME_UART_BAUD, &num, sizeof ( num ) ) )
126c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    {
127c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        if ( num == 300 ) uart.m_iBaudrate = USERIAL_BAUD_300;
128c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 600 ) uart.m_iBaudrate = USERIAL_BAUD_600;
129c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 1200 ) uart.m_iBaudrate = USERIAL_BAUD_1200;
130c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 2400 ) uart.m_iBaudrate = USERIAL_BAUD_2400;
131c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 9600 ) uart.m_iBaudrate = USERIAL_BAUD_9600;
132c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 19200 ) uart.m_iBaudrate = USERIAL_BAUD_19200;
133c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 57600 ) uart.m_iBaudrate = USERIAL_BAUD_57600;
134c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 115200 ) uart.m_iBaudrate = USERIAL_BAUD_115200;
135c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 230400 ) uart.m_iBaudrate = USERIAL_BAUD_230400;
136c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 460800 ) uart.m_iBaudrate = USERIAL_BAUD_460800;
137c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        else if ( num == 921600 ) uart.m_iBaudrate = USERIAL_BAUD_921600;
138c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    }
139c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    else if ( GetStrValue ( NAME_UART_BAUD, temp, sizeof ( temp ) ) )
140c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    {
141c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        if ( strcmp ( temp, "auto" ) == 0 )
142c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            uart.m_iBaudrate = USERIAL_BAUD_AUTO;
143c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    }
144c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    else
145c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        uart.m_iBaudrate = USERIAL_BAUD_115200;
146c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
1473a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod    memset (&cfg, 0, sizeof(tUSERIAL_OPEN_CFG));
148c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    cfg.fmt = uart.m_iDatabits | uart.m_iParity | uart.m_iStopbits;
149c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    cfg.baud = uart.m_iBaudrate;
150c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
151c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: uart config=0x%04x, %d\n", __func__, cfg.fmt, cfg.baud);
152c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    USERIAL_Init(&cfg);
153c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
154c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcInitialize ();
155c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcSetTraceLevel (logLevel); // Initialize HAL's logging level
156c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
157b774f9f684c5a0f91f5fa177c9a461968789123fBehdad Esfahbod    retval = 0;
158c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
159c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
160c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine}
161c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
162c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
163c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineint HaiTerminateLibrary ()
164c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
1653a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod    int retval = EACCES;
166c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter", __FUNCTION__);
167c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
168c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcTerminate ();
1693ec6a258238b6068e4eef3fe579f1f5c0a06bbbaBehdad Esfahbod    gAndroidHalCallback = NULL;
170c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    gAndroidHalDataCallback = NULL;
171c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    GKI_shutdown ();
172c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    retval = 0;
173c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
174c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
1759e6ef94b5554c5b7dda2de9c863c11ed4b996b7aBehdad Esfahbod}
176c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
177c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
178e388db566b9ba42669c7e353db4293cf27bc2a5bBehdad Esfahbodint HaiOpen (const bcm2079x_dev_t* device, nfc_stack_callback_t* halCallbackFunc, nfc_stack_data_callback_t* halDataCallbackFunc)
179c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
180c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter", __FUNCTION__);
181c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    int retval = EACCES;
182c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
183c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    gAndroidHalCallback = halCallbackFunc;
184c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    gAndroidHalDataCallback = halDataCallbackFunc;
185c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
186c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    SyncEventGuard guard (gOpenCompletedEvent);
187c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcOpen (BroadcomHalCallback, BroadcomHalDataCallback);
188c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    gOpenCompletedEvent.wait ();
1893a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod
190c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    retval = 0;
191c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
192c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
193b774f9f684c5a0f91f5fa177c9a461968789123fBehdad Esfahbod}
194c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
195c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
196c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontainevoid BroadcomHalCallback (UINT8 event, tHAL_NFC_STATUS status)
197c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
198c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter; event=0x%X", __FUNCTION__, event);
1993ec6a258238b6068e4eef3fe579f1f5c0a06bbbaBehdad Esfahbod    switch (event)
200c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    {
201c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    case HAL_NFC_OPEN_CPLT_EVT:
202c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        {
203c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            ALOGD ("%s: HAL_NFC_OPEN_CPLT_EVT; status=0x%X", __FUNCTION__, status);
204c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            SyncEventGuard guard (gOpenCompletedEvent);
205c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            gOpenCompletedEvent.notifyOne ();
206319c5fd10e2ea84304bd299b7483e05b5b0d5480Behdad Esfahbod            break;
207c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        }
20897dea0a5d02ba1655d27a06fe91540e3495b8ef9Behdad Esfahbod
209c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    case HAL_NFC_POST_INIT_CPLT_EVT:
210c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        {
211c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            ALOGD ("%s: HAL_NFC_POST_INIT_CPLT_EVT", __FUNCTION__);
212c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            SyncEventGuard guard (gPostInitCompletedEvent);
213c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            gPostInitCompletedEvent.notifyOne ();
214c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            break;
21518316aa769566eeb6f3f4a6ed2685fa8f8e861c2Behdad Esfahbod        }
216c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
217c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    case HAL_NFC_CLOSE_CPLT_EVT:
218c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        {
21997dea0a5d02ba1655d27a06fe91540e3495b8ef9Behdad Esfahbod            ALOGD ("%s: HAL_NFC_CLOSE_CPLT_EVT", __FUNCTION__);
220c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            SyncEventGuard guard (gCloseCompletedEvent);
221c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            gCloseCompletedEvent.notifyOne ();
222c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            break;
223c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        }
224c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
225c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    case HAL_NFC_ERROR_EVT:
226b7a2d797a40fb658d1e6dca6c08c9d2e1d83e78aBehdad Esfahbod        {
22718316aa769566eeb6f3f4a6ed2685fa8f8e861c2Behdad Esfahbod            ALOGD ("%s: HAL_NFC_ERROR_EVT", __FUNCTION__);
228c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            {
229c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine                SyncEventGuard guard (gOpenCompletedEvent);
230c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine                gOpenCompletedEvent.notifyOne ();
231c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            }
232c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            {
233c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine                SyncEventGuard guard (gPostInitCompletedEvent);
234c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine                gPostInitCompletedEvent.notifyOne ();
235c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            }
236c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            {
237c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine                SyncEventGuard guard (gCloseCompletedEvent);
238c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine                gCloseCompletedEvent.notifyOne ();
239c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            }
240c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine            break;
241c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine        }
242c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    }
243c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    gAndroidHalCallback (event, status);
244c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit; event=0x%X", __FUNCTION__, event);
24518316aa769566eeb6f3f4a6ed2685fa8f8e861c2Behdad Esfahbod}
246319c5fd10e2ea84304bd299b7483e05b5b0d5480Behdad Esfahbod
247c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
24897dea0a5d02ba1655d27a06fe91540e3495b8ef9Behdad Esfahbodvoid BroadcomHalDataCallback (UINT16 data_len, UINT8* p_data)
249c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
250c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter; len=%u", __FUNCTION__, data_len);
251c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    gAndroidHalDataCallback (data_len, p_data);
252b7a2d797a40fb658d1e6dca6c08c9d2e1d83e78aBehdad Esfahbod}
253c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
254c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
255c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineint HaiClose (const bcm2079x_dev_t* device)
256c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
257c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter", __FUNCTION__);
258c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    int retval = EACCES;
259c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
260c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    SyncEventGuard guard (gCloseCompletedEvent);
261c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcClose ();
262c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    gCloseCompletedEvent.wait ();
2633a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod    retval = 0;
264c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
265c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
266c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine}
267c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
268c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
269c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineint HaiCoreInitialized (const bcm2079x_dev_t* device, uint8_t* coreInitResponseParams)
270c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
271c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter", __FUNCTION__);
272c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    int retval = EACCES;
273c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
27497dea0a5d02ba1655d27a06fe91540e3495b8ef9Behdad Esfahbod    SyncEventGuard guard (gPostInitCompletedEvent);
275c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcCoreInitialized (coreInitResponseParams);
276c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    gPostInitCompletedEvent.wait ();
277c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    retval = 0;
278c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
279c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
280c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine}
2813a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod
282c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
283c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineint HaiWrite (const bcm2079x_dev_t* dev, uint16_t dataLen, const uint8_t* data)
284c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
285c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter; len=%u", __FUNCTION__, dataLen);
286c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    int retval = EACCES;
287c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
288c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcWrite (dataLen, const_cast<UINT8*> (data));
289b774f9f684c5a0f91f5fa177c9a461968789123fBehdad Esfahbod    retval = 0;
290c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
291c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
292c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine}
293c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
294c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
295c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineint HaiPreDiscover (const bcm2079x_dev_t* device)
296c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
297c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter", __FUNCTION__);
298c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    int retval = EACCES;
299c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
300c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcPreDiscover ();
301c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    retval = 0;
302c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
303c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
304c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine}
305c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
306c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
307c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineint HaiControlGranted (const bcm2079x_dev_t* device)
30897dea0a5d02ba1655d27a06fe91540e3495b8ef9Behdad Esfahbod{
309c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter", __FUNCTION__);
310c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    int retval = EACCES;
311c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
31218316aa769566eeb6f3f4a6ed2685fa8f8e861c2Behdad Esfahbod    HAL_NfcControlGranted ();
313c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    retval = 0;
314c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
315c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
316c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine}
317c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
3183a9fd301808f5a8991ca9ac44028d1ecb22d307fBehdad Esfahbod
319c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaineint HaiPowerCycle (const bcm2079x_dev_t* device)
320c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine{
321c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: enter", __FUNCTION__);
322c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    int retval = EACCES;
323c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
324c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    HAL_NfcPowerCycle ();
325c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    retval = 0;
326c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    ALOGD ("%s: exit %d", __FUNCTION__, retval);
327c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine    return retval;
328c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine}
329c33b0a22ef0046c392275e3dba974dfbadee24faMatt Fontaine
330b774f9f684c5a0f91f5fa177c9a461968789123fBehdad Esfahbod