1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Copyright (C) 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 19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * HAL Adaptation Interface (HAI). This interface regulates the interaction 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * between standard Android HAL and Broadcom-specific HAL. It adapts 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Broadcom-specific features to the Android framework. 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define LOG_TAG "NfcNciHal" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "OverrideLog.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "HalAdaptation.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "SyncEvent.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "config.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_hal_int.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_hal_post_reset.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <errno.h> 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <pthread.h> 355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#include "buildcfg.h" 365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenextern void delete_hal_non_volatile_store (); 375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenextern "C" 385c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#include "userial.h" 405c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/////////////////////////////////////// 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project// private declaration, definition 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic nfc_stack_callback_t* gAndroidHalCallback = NULL; 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic nfc_stack_data_callback_t* gAndroidHalDataCallback = NULL; 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic SyncEvent gOpenCompletedEvent; 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic SyncEvent gPostInitCompletedEvent; 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic SyncEvent gCloseCompletedEvent; 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00; 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void BroadcomHalCallback (UINT8 event, tHAL_NFC_STATUS status); 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void BroadcomHalDataCallback (UINT16 data_len, UINT8* p_data); 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 580eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaissonextern tNFC_HAL_CFG *p_nfc_hal_cfg; 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/////////////////////////////////////// 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiInitializeLibrary (const bcm2079x_dev_t* device) 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long freq = 0; 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long num = 0; 695c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen char temp[120]; 705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen UINT8 logLevel = 0; 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen logLevel = InitializeGlobalAppLogLevel (); 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) && 755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen (num == 1) ) 765c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: preserve HAL NV store", __FUNCTION__); 775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 785c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen delete_hal_non_volatile_store (); 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project // Initialize protocol logging level 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) ) 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ScrProtocolTraceFlag = num; 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen tUSERIAL_OPEN_CFG cfg; 855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen struct tUART_CONFIG uart; 865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 875c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetStrValue ( NAME_UART_PARITY, temp, sizeof ( temp ) ) ) 885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( strcmp ( temp, "even" ) == 0 ) 905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iParity = USERIAL_PARITY_EVEN; 915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( strcmp ( temp, "odd" ) == 0 ) 925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iParity = USERIAL_PARITY_ODD; 935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( strcmp ( temp, "none" ) == 0 ) 945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iParity = USERIAL_PARITY_NONE; 955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iParity = USERIAL_PARITY_NONE; 985c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 995c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetStrValue ( NAME_UART_STOPBITS, temp, sizeof ( temp ) ) ) 1005c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1015c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( strcmp ( temp, "1" ) == 0 ) 1025c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_1; 1035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( strcmp ( temp, "2" ) == 0 ) 1045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_2; 1055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( strcmp ( temp, "1.5" ) == 0 ) 1065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_1_5; 1075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1085c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( GetNumValue ( NAME_UART_STOPBITS, &num, sizeof ( num ) ) ) 1095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1105c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( num == 1 ) 1115c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_1; 1125c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 2 ) 1135c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_2; 1145c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 1165c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_1; 1175c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1185c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_UART_DATABITS, &num, sizeof ( num ) ) ) 1195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1205c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( 5 <= num && num <= 8 ) 1215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iDatabits = ( 1 << ( num + 1 ) ); 1225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 1245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iDatabits = USERIAL_DATABITS_8; 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_UART_BAUD, &num, sizeof ( num ) ) ) 1275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( num == 300 ) uart.m_iBaudrate = USERIAL_BAUD_300; 1295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 600 ) uart.m_iBaudrate = USERIAL_BAUD_600; 1305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 1200 ) uart.m_iBaudrate = USERIAL_BAUD_1200; 1315c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 2400 ) uart.m_iBaudrate = USERIAL_BAUD_2400; 1325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 9600 ) uart.m_iBaudrate = USERIAL_BAUD_9600; 1335c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 19200 ) uart.m_iBaudrate = USERIAL_BAUD_19200; 1345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 57600 ) uart.m_iBaudrate = USERIAL_BAUD_57600; 1355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 115200 ) uart.m_iBaudrate = USERIAL_BAUD_115200; 1365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 230400 ) uart.m_iBaudrate = USERIAL_BAUD_230400; 1375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 460800 ) uart.m_iBaudrate = USERIAL_BAUD_460800; 1385c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 921600 ) uart.m_iBaudrate = USERIAL_BAUD_921600; 1395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1405c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( GetStrValue ( NAME_UART_BAUD, temp, sizeof ( temp ) ) ) 1415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1425c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( strcmp ( temp, "auto" ) == 0 ) 1435c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iBaudrate = USERIAL_BAUD_AUTO; 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1455c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 1465c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iBaudrate = USERIAL_BAUD_115200; 1475c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1485c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen memset (&cfg, 0, sizeof(tUSERIAL_OPEN_CFG)); 1495c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen cfg.fmt = uart.m_iDatabits | uart.m_iParity | uart.m_iStopbits; 1505c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen cfg.baud = uart.m_iBaudrate; 1515c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1525c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: uart config=0x%04x, %d\n", __func__, cfg.fmt, cfg.baud); 1535c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen USERIAL_Init(&cfg); 1545c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1550eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson if ( GetNumValue ( NAME_NFCC_ENABLE_TIMEOUT, &num, sizeof ( num ) ) ) 1560eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson { 1570eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout = num; 1580eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson } 1590eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson 1605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HAL_NfcInitialize (); 1615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HAL_NfcSetTraceLevel (logLevel); // Initialize HAL's logging level 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiTerminateLibrary () 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcTerminate (); 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalCallback = NULL; 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalDataCallback = NULL; 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_shutdown (); 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiOpen (const bcm2079x_dev_t* device, nfc_stack_callback_t* halCallbackFunc, nfc_stack_data_callback_t* halDataCallbackFunc) 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalCallback = halCallbackFunc; 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalDataCallback = halDataCallbackFunc; 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gOpenCompletedEvent); 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcOpen (BroadcomHalCallback, BroadcomHalDataCallback); 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gOpenCompletedEvent.wait (); 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid BroadcomHalCallback (UINT8 event, tHAL_NFC_STATUS status) 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter; event=0x%X", __FUNCTION__, event); 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case HAL_NFC_OPEN_CPLT_EVT: 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: HAL_NFC_OPEN_CPLT_EVT; status=0x%X", __FUNCTION__, status); 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gOpenCompletedEvent); 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gOpenCompletedEvent.notifyOne (); 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case HAL_NFC_POST_INIT_CPLT_EVT: 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: HAL_NFC_POST_INIT_CPLT_EVT", __FUNCTION__); 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gPostInitCompletedEvent); 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gPostInitCompletedEvent.notifyOne (); 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case HAL_NFC_CLOSE_CPLT_EVT: 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: HAL_NFC_CLOSE_CPLT_EVT", __FUNCTION__); 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gCloseCompletedEvent); 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gCloseCompletedEvent.notifyOne (); 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case HAL_NFC_ERROR_EVT: 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: HAL_NFC_ERROR_EVT", __FUNCTION__); 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gOpenCompletedEvent); 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gOpenCompletedEvent.notifyOne (); 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gPostInitCompletedEvent); 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gPostInitCompletedEvent.notifyOne (); 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gCloseCompletedEvent); 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gCloseCompletedEvent.notifyOne (); 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalCallback (event, status); 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit; event=0x%X", __FUNCTION__, event); 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid BroadcomHalDataCallback (UINT16 data_len, UINT8* p_data) 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter; len=%u", __FUNCTION__, data_len); 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalDataCallback (data_len, p_data); 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiClose (const bcm2079x_dev_t* device) 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gCloseCompletedEvent); 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcClose (); 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gCloseCompletedEvent.wait (); 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiCoreInitialized (const bcm2079x_dev_t* device, uint8_t* coreInitResponseParams) 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gPostInitCompletedEvent); 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcCoreInitialized (coreInitResponseParams); 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gPostInitCompletedEvent.wait (); 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiWrite (const bcm2079x_dev_t* dev, uint16_t dataLen, const uint8_t* data) 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter; len=%u", __FUNCTION__, dataLen); 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcWrite (dataLen, const_cast<UINT8*> (data)); 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiPreDiscover (const bcm2079x_dev_t* device) 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 30645e68232b8524aca5165dca28b994ec8c11593b1Evan Chu retval = HAL_NfcPreDiscover () ? 1 : 0; 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiControlGranted (const bcm2079x_dev_t* device) 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcControlGranted (); 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiPowerCycle (const bcm2079x_dev_t* device) 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcPowerCycle (); 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 3345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 335