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