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